Verilog Testbench无法通过wire和reg变量传递十进制值

时间:2018-03-17 20:23:46

标签: verilog

我有两个文件名为: summation.v summationtest.v

summation.v 的代码在这里:

module summation(a, b, c);
input [3:0] a;
input [3:0] b;
output reg[7:0] c;
reg[3:0] anum;
reg[3:0] bnum;
always @(a) begin
anum <=a;
bnum <=b;
c = anum + bnum;
end
endmodule

summation.v的目的是从 summationtest.v 获取两个十进制输入,处理小数值,并将结果c发送回输出,即 summationtest .v 再次。

summationtest.v 的代码如下:

module summationtest;
reg[3:0] a;
reg[3:0] b;
wire[7:0] c;
summation a1(a, b, c);
initial begin
a = 3;
b = 4;
$display("%d", c);
end
endmodule

现在程序运行时:a和b的值没有从 summationtest.v 传递到 summation.v ,因此没有赋值给{{1} }。

我是verilog的新手并且知识不足。请帮忙。 :(

1 个答案:

答案 0 :(得分:0)

这不是模拟组合逻辑的正确方法。您的敏感度列表不完整,不应使用非阻止分配(<=)。您应该使用$monitor代替display来查看所有信号更改。

这是一种更简单的加法器编码方式:

module summation(a, b, c);
    input [3:0] a;
    input [3:0] b;
    output [7:0] c;
    assign c = a + b;
endmodule

module summationtest;
    reg[3:0] a;
    reg[3:0] b;
    wire[7:0] c;
    summation a1(a, b, c);
initial begin
    $monitor("%d", c);
    a = 3;
    b = 4;
end
endmodule