题解 | #占空比50%的奇数分频#

占空比50%的奇数分频

https://www.nowcoder.com/practice/ccfba5e5785f4b3f9d7ac19ab13d6b31

采用两个计数器,一个上升沿触发,一个下降沿触发,两者各自触发3个时钟,相或即可得到3.5个时钟
`timescale 1ns/1ns

module odo_div_or
   (
    input    wire  rst ,
    input    wire  clk_in,
    output   wire  clk_out7
    );

//*************code***********//
    
    reg    clk_1;
    reg    clk_2;
    reg    [2:0]    clk_cnt;
    
    //奇数分频所得到结果就是一个是在上升沿的时候,一个在下降沿的时候,这样就是一个奇数的时钟
    //此题没有要求在复位之后立马输出时钟,开始时是低位,而在之前的偶数分频的题中,要求开始就拉高
    
    always@(posedge clk_in or negedge rst)
    begin
        if(!rst)
            clk_cnt <= 3'b0;
        else if(clk_cnt == 3'd6)
            clk_cnt <= 3'b0;
        else
            clk_cnt <= clk_cnt + 1'b1;
    end
    
    
    always@(posedge clk_in or negedge rst)
    begin
        if(!rst)
            clk_1 <= 1'b0;
        else if(clk_cnt == (3'd6 - 3'd3))
            clk_1 <= 1'b1;
        else if(clk_cnt == 3'd6)    //正常所需的是3.5个,所以这里需要的就是上升沿和下降沿各拉高3个,将两者相或就得到3.5个
            clk_1 <= 1'b0;
        else
            clk_1 <= clk_1;
    end
    
    always@(negedge clk_in or negedge rst)        //注意这里是下降沿触发,只有这样才能得到奇数,因为奇数就是要有一个下降沿
    begin
        if(!rst)
            clk_2 <= 1'b0;
        else if(clk_cnt == (3'd6 - 3'd3))
            clk_2 <= 1'b1;
        else if(clk_cnt == 3'd6)
            clk_2 <= 1'b0;
        else
            clk_2 <= clk_2;
    end
        
    assign clk_out7 = clk_1 | clk_2;
    
//*************code***********//
endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 17:51
点赞 评论 收藏
分享
给我发了笔试链接,想着等晚上回去做,结果还没做流程就终止了
伟大的小黄鸭在学习:我猜就是笔试几乎没用,就是用来给用人部门拖时间复筛简历的,可能用人部门筛到你简历觉得不合适就提前挂了
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
07-08 21:30
已编辑
南昌大学 嵌入式软件开发
点赞 评论 收藏
分享
7月12日投的,咋一点反馈都没有
投递禾赛科技等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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