题解 | #任意小数分频#

任意小数分频

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

全部评论

相关推荐

08-23 20:17
四川大学 C++
xxxzsfa:技术栈可以参考我这个给写,把知识点写出来起码能让面试官知道你是知道这个点的,不会的知识点可以不写,简历上写了但又答不上来就很尴尬了,可以给技术栈中的知识点和项目中的难点亮点加粗,学历不错,肯定会有大厂面的,刚开始可以先投中小厂练手,拿个offer保底再去面大厂,秋招可以正式和实习一起找,找工作是个需要长期坚持的过程,加油查看图片
点赞 评论 收藏
分享
08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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