應該是除頻器 我之前寫過類似的 你參考看看 共四個模組 含testbench 我的輸出是跟你一樣 互為除頻後反相 已合成過 完全ok<br>
我是用d正反器 來做的 不知道跟您的要求符合嗎<br>
<br>
`timescale 1 us/1 ns<br>
module CLK_GEN (CLK_N, CLK_P, CLK, RESET_B);<br>
output CLK_N;<br>
output CLK_P;<br>
<br>
input CLK;<br>
input RESET_B;<br>
<br>
CLK_DIV div0(.Q_OUT(Q_OUT), .CLK(CLK), .RESET_B(RESET_B));<br>
assign CLK_N = ~Q_OUT;<br>
assign CLK_P = Q_OUT;<br>
<br>
endmodule<br>
<br>
/////////////////////////////////////////////////////////////<br>
`timescale 1 us/1 ns<br>
module D_FF(Q_OUT, CLK, d, RESET_B);<br>
<br>
output Q_OUT;<br>
<br>
input d, CLK, RESET_B;<br>
<br>
reg Q_OUT;<br>
<br>
always @(posedge CLK or negedge RESET_B)<br>
if (RESET_B==1'b0)<br>
Q_OUT<=1'b0;<br>
else <br>
Q_OUT<=d;<br>
endmodule<br>
<br>
///////////////////////////////////////////////////////////////<br>
`timescale 1 us/1 ns<br>
module CLK_DIV(Q_OUT, CLK, RESET_B);<br>
output Q_OUT;<br>
<br>
input RESET_B;<br>
input CLK;<br>
<br>
wire d;<br>
<br>
D_FF dff0(.Q_OUT(Q_OUT), .d(d), .CLK(CLK), .RESET_B(RESET_B));<br>
not n1(d, Q_OUT);<br>
<br>
endmodule<br>
<br>
////////////////////////////////////////////////////////////////<br>
`timescale 1 us/1 ns<br>
module stimulus;<br>
<br>
reg CLK;<br>
reg RESET_B;<br>
<br>
CLK_GEN top1(.CLK_N(CLK_N), .CLK_P(CLK_P), .CLK(CLK), .RESET_B(RESET_B));<br>
<br>
initial<br>
begin<br>
CLK = 1'b1; <br>
#10 RESET_B = 1'b0;<br>
#10 RESET_B = 1'b1;<br>
<br>
<br>
end<br>
<br>
always <br>
#5 CLK = ~CLK;<br>
<br>
initial <br>
#10000 $finish;<br>
<br>
endmodule |