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

占空比50%的奇数分频

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

`timescale 1ns/1ns

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

//*************code***********//
//上升沿和下降沿,两个非占空比50%的来做一下或,如果不使用下降沿的话就是和时钟去借半个周期,就是和时钟或
reg [3:0]cnt ;
always@(posedge clk_in or negedge rst)begin
    if(~rst)begin
        cnt <= 0;
    end
    else if(cnt == 6) begin
        cnt <= 0 ;
    end
    else begin
        cnt <= cnt + 1;
    end
end
reg clkp,clkn;
always@(posedge clk_in or negedge rst)begin
    if(~rst)begin
        clkp <= 0;
    end
    else if(cnt == 3)begin
        clkp <= 1;
    end
    else if(cnt == 6)begin
        clkp <= 0;
    end
end
always@(negedge clk_in or negedge rst)begin
    if(~rst)begin
        clkn <= 0;
    end
    else if(cnt == 3)begin
        clkn <= 1;
    end
    else if(cnt == 6)begin
        clkn <= 0;
    end
end
assign clk_out7 = clkp | clkn ;

//不使用下降沿的一种做法,当然也有很多都可以尝试一下。
/*
最简单的方法是首先产生一个3-4的时钟
---____---____这种,接着将时钟打拍
_---____---____,要注意的是他们两个错开的地方是一整个输入时钟周期,即有一半1一半0。
那么输出为1就可以是时钟与第二个时钟与(同时取1的半个周期)或上第一个时钟拥有的三个完整周期,那么1就是3.5个周期了。剩下的置0即可
*/

//*************code***********//
endmodule

常见情况中一搬也不会选择取和时钟运算,可以通过另外的分频系数去错出半个周期,非下降沿的做法还有很多,大家有想法 都可以讨论。

全部评论
也可以用计数器计数到中间,在中间去保留下来半个时钟周期
点赞 回复 分享
发布于 2023-09-06 19:03 重庆

相关推荐

07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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