我正在尝试在 Icarus Verilog 上制作 SR 触发器。
触发器模块:
module srff(sr,clk,q,qb);
input [1:0]sr;
input clk;
output reg q,qb;
always@(posedge clk) begin
case(sr)
2'b00: q=q;
2'b01: q=0;
2'b10: q=1;
2'b11: q=1'bz;
endcase
end
assign qb=~q;
endmodule
测试台:
module sr_ff_test;
reg [1:0]sr;
reg clk;
wire q,qbar;
srff sr_ff_test(sr,clk,q,qbar);
initial begin $dumpfile("dump1.vcd");
$dumpvars(0,sr_ff_test);
end
initial begin
$monitor("S=%d, R=%d, CLK=%d, Q=%d, Qbar=%d",sr[0],sr[1],clk,q,qbar);
sr[0]=1'b0;
sr[1]=1'b1;
clk=1;
#100
sr[0]=1'b0;
sr[1]=1'b1;
#100
sr[0]=1'b0;
sr[1]=1'b0;
#100
sr[0]=1'b1;
sr[1]=1'b1;
#100
sr[0]=1'b0;
sr[1]=1'b1;
#100
sr[0]=1'b0;
sr[1]=1'b1;
end
endmodule
错误如问题中给出(测试平台第 14 行 - 带监视器的行...)。出了什么问题,我该如何解决这个问题?
我是 Icarus Verilog 的新手,不知道是否不小心使用了无法使用的命令。
错误出现在
srff
模块中。 您将 qb
声明为 reg
,但随后尝试使用 assign
关键字通过连续赋值来驱动它。
解决方案是不要将其声明为
reg
。 变化:
output reg q,qb;
至:
output reg q;
output qb;