题解 | #占空比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
常见情况中一搬也不会选择取和时钟运算,可以通过另外的分频系数去错出半个周期,非下降沿的做法还有很多,大家有想法 都可以讨论。