题解 | #任意小数分频#

任意小数分频

https://www.nowcoder.com/practice/24c56c17ebb0472caf2693d5d965eabb

`timescale 1ns/1ns


module div_M_N(
 input  wire clk_in,
 input  wire rst,
 output wire clk_out
);
parameter M_N = 8'd87; 
parameter c89 = 8'd24; // 8/9时钟切换点
parameter div_e = 5'd8; //偶数周期
parameter div_o = 5'd9; //奇数周期

reg [6:0] cnt;
reg [3:0] cnt_8;
reg [3:0] cnt_9;
reg clk_87;
always@(posedge clk_in or negedge rst)begin
    if(!rst)begin
        cnt <= 0;
    end
    else begin
        cnt <= (cnt == M_N -1 ) ? 0 : cnt + 1;
    end
end
always@(posedge clk_in or negedge rst)begin
    if(!rst)begin
        cnt_8 <= 0;
        cnt_9 <= 0;
    end
    else if(cnt <= c89-1)begin
        cnt_8 <= (cnt_8 == div_e - 1) ? 0 : cnt_8 + 1;
    end
    else if(cnt > c89-1)begin
        cnt_9 <= (cnt_9 == div_o - 1) ? 0 : cnt_9 + 1;
    end
end
always@(posedge clk_in or negedge rst)begin
    if(!rst)begin
        clk_87 <= 0;
    end
    else if(cnt <= c89-1)begin
        clk_87 <= (cnt_8 == 4'd0 || cnt_8 == div_e/2) ? ~clk_87 : clk_87;
    end
    else if(cnt > c89-1)begin
        clk_87 <= (cnt_9 == 4'd0 || cnt_9 == (div_o-1)/2) ? ~clk_87 : clk_87;
    end
end
assign clk_out = clk_87;
endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:15
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务