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

