题解 | #任意小数分频#

任意小数分频

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

全部评论

相关推荐

12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
11-03 12:40
中山大学 Java
勇敢的突尼斯海怪选钝...:楼主这拒意向话术好得体呀 !求问HR回复态度咋样呀
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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