题解 | #任意小数分频#

任意小数分频

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; //奇数周期
//*************code***********//
//为实现8.7倍分频,可用10个clock_out的总周期等于87个clk_in
//前3个clk_out为8分频,后7个clock_out为9分频
reg clk_out_reg;
reg [7:0]cnt;
reg [4:0]cnt_8,cnt_9;
always@(posedge clk_in  or negedge rst)begin
    if(!rst) cnt<=0;
    else begin
        if(cnt==M_N-1) cnt<=0;
        else cnt<=cnt+1;
    end
end
always@(posedge clk_in  or negedge rst)begin
    if(!rst) cnt_8<=0;
    else if( cnt > c89-1)cnt_8<=0;
    else begin
        if(cnt_8==div_e-1)cnt_8<=0;
        else cnt_8<=cnt_8+1;
    end 
end
always@(posedge clk_in  or negedge rst)begin
    if(!rst) cnt_9<=0;
    else if( cnt <= c89-1)cnt_9<=0;
    else begin
        if(cnt_9==div_o-1)cnt_9<=0;
        else cnt_9<=cnt_9+1;
    end 
end

always@(posedge clk_in or negedge rst)begin
    if(!rst)clk_out_reg<=0;
    else if(cnt<c89)begin
        if(cnt_8==0 |cnt_8==(div_e/2))clk_out_reg<=~clk_out_reg;
        else        clk_out_reg<=clk_out_reg;
    end
    else begin
        if(cnt_9==0 | cnt_9==(div_o-1)/2)clk_out_reg<=~clk_out_reg;//占空比为4/9
        else        clk_out_reg<=clk_out_reg;
    end
end
assign clk_out=clk_out_reg;
//*************code***********//
endmodule

全部评论

相关推荐

bg&nbsp;为&nbsp;985&nbsp;本应届生,方向是嵌入式软件。纠结了很久,两边都不太了解,恳请各位大佬帮选,非常感谢🙏。
ResourceUtilization:求稳海能达,趁着年轻赚它一笔就relink吧,有个疑惑,怎么睿连同岗位多这么多base原因吗
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
纸鹰:对他说:“你好,我是百度JAVA。”
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务