我在为我的加法器创建一个测试台时遇到了问题。当我启动testbench时,它将指定初始启动时间为t1、输入a和b,而当cout为1时,它将将最后时间设置为t2。最后,延迟是t2和t1的减法。
问题主要是语法错误。
到目前为止,这是我的代码:
parameter N = 16;
parameter A = 0;
reg[N-1:0] a, b;
wire[N-1:0] sum;
reg cin;
wire cout;
arith_unit #(.ADDER_TYPE(A), .WIDTH(N)) tb (.a(a),.b(b),.cin(cin),.sum(sum),.cout(cout));
initial begin
a = 0;
b = 0;
cin = 0;
#50;
$time(t1);
a = 16'b0010110110100010;
b = 16'b1011111101100111;
cin = 1'b0;
wait (if (cout == 1)) $time(t2); <-------sytax error here
int delay = t2 - t1; <-------sytax error here
$display ("%d", delay);
end
endmodule谢谢你的帮助。
发布于 2018-02-14 17:42:53
wait (if (cout == 1))应该是wait (cout == 1)。int在Verilog中不作为变量类型存在(它在SystemVerilog中存在)。我想你想要integer或time。还请注意,变量不能简单地在任何地方创建。在Verilog中,它需要使用reg和wire声明来声明。$time不接受争论。使用t1 = $time;t1和t2。也许是integer或者time。除非arith_unit内部有一些延迟,否则延迟将为0。如果有延迟,您可能需要再次检查cout是否没有故障,因为wait无法区分故障和稳定信号。
https://stackoverflow.com/questions/48792812
复制相似问题