module rff_try_1(q,inp,clk);
input clk,inp;
output q;
reg q;
DFF dff0(q,inp,clk);
endmodule
module DFF(q,inp,clk);
input inp,clk;
output q;
reg q;
always @ (posedge clk)begin
if(clk)begin
q=inp;
end
end
endmodule
在这里我使用了两个模块,但输出没有出现
module rff_try_1(q,inp,clk);
input clk,inp;
output q;
reg q;
DFF dff0(q,inp,clk);
endmodule
module DFF(q,inp,clk);
input inp,clk;
output q;
reg q;
always @ (posedge clk)begin
if(clk)begin
q=inp;
end
end
endmodule
在这里我使用了两个模块,但输出没有出现
代码中有几个错误。
1)应该去掉线if(clk)begin
和相关,已经描述了触发器的触发条件。end
posedge clk
2)<=
时序逻辑需要非阻塞赋值 ( )。
该always
块应如下所示:
always @ (posedge clk) begin
q <= inp;
end
3)一些模拟器不会抱怨,但信号q
应该wire
在模块中rff_try_1
。
wire q;
模拟
我使用下面的测试平台在EDA Playground上模拟了代码(修改后) 。使用Icarus Verilog 0.9.7作为模拟器。
module tb();
reg clk = 1;
always clk = #5 ~clk;
reg inp;
wire q;
rff_try_1 dut(q, inp, clk);
initial begin
inp = 0;
#12;
inp = 1;
#27;
inp = 0;
#24;
inp = 1;
end
initial begin
$dumpfile("dump.vcd"); $dumpvars;
#200;
$finish;
end
endmodule
信号q
与波形上所见的一样。