注意,最開始一定要reset一下,否則輸出時鐘沒有初始值,一直都是X。
原書寫法(修改了一下,嘗試了一下forever):
源碼:
module div2(
clk_in,
clk_out,
reset
);
input clk_in,reset;
output clk_out;
reg clk_out;
always @(posedge clk_in or posedge reset)
begin
if(reset == 1) clk_out = 1'b0;
else
clk_out = ~clk_out;
end
endmodule
仿真代碼:
`timescale 1ns/1ns
module div2tb;
reg clk_in,reset;
wire clk_out;
initial
begin
clk_in = 1'h0;
reset = 1'h1;
#20
reset = 1'h0;
forever
begin
#10
clk_in = ~clk_in;
end
end
div2 mydiv2(
.clk_in(clk_in),
.clk_out(clk_out),
.reset(reset)
);
endmodule
現象:
按照題意修改後源碼:
module div2(
clk_in,
clk_out,
reset
);
input clk_in,reset;
output clk_out;
reg clk_out2;
assign clk_out = ~clk_out2;
always @(posedge clk_in or posedge reset)
begin
if(reset == 1) clk_out2 = 1'b0;
else
clk_out2 = ~clk_out2;
end
endmodule
現象: