0

我在为我的加法器创建测试台时遇到问题。当我启动测试台时,它会将初始开始时间分配为t1和输入abcout为 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

感谢您的帮助。

4

1 回答 1

0
  • wait (if (cout == 1))应该是wait (cout == 1)

  • int在 Verilog 中不作为变量类型存在(在 SystemVerilog 中存在)。我想你想要integertime。另请注意,不能简单地在任何地方创建变量。在 Verilog 中,它需要用你的reg和声明来wire 声明。

  • $time不接受争论。利用t1 = $time;

  • t1并且t2没有声明。也许integertime

除非您有一些延迟,否则arith_unit延迟将为 0。如果有延迟,您可能需要仔细检查是否没有cout毛刺,因为wait无法区分毛刺和稳定信号。

于 2018-02-14T17:42:53.323 回答