我编写了这段代码来模拟使用 D 触发器的异步计数器。该程序为第一次迭代提供了正确的输出,但随后输出根本没有改变。我究竟做错了什么?
这是代码:
第一个模块:
module DFF(d,q,reset,clk);
input d,reset,clk;
output reg q;
always @(posedge reset, posedge clk) begin
if(reset) begin
q=0;
end
if(d)
q=d;
else
q=q;
end
endmodule
第二个模块:
module RippleCounter(d,clk,reset,out);
input [3:0] d;
input clk, reset;
output [3:0] out; // 4bit
DFF a(d[0],out[0],reset,clk);
DFF b(d[1],out[1],reset,out[0]);
DFF c(d[2],out[2],reset,out[1]);
DFF dx(d[3],out[3],reset,out[2]);
endmodule
第三个模块:
module RippleCounterTOP;
reg [3:0] d;
reg clk, reset;
wire [3:0] out;
RippleCounter r(d,clk,reset,out);
initial begin
d=0;clk=0;reset=1;
end
always begin
#5 d=d+1; clk=~clk;
end
endmodule