在 EDA 游乐场的测试台中分配不更新结果值
assign not updating result value in testbench in EDA playground
我正在使用 EDA Playground 和 Aldec Riviera 模拟器,我这里有这个模块:
module alu(input logic [31:0] a, b,
input logic [2:0] alucontrol,
output logic [31:0] result,
output logic zero);
logic [31:0] condinvb, sum;
assign condinvb = alucontrol[2] ? ~b : b;
assign sum = a + condinvb + alucontrol[2];
always_comb
case (alucontrol[1:0])
2'b00: result = a & b;
2'b01: result = a | b;
2'b10: result = sum;
2'b11: result = sum[31];
endcase
assign zero = (result == 32'b0);
endmodule
我的测试台在这里:
module alu_testbench();
logic [31:0] a,b;
logic [2:0] alucontrol;
logic [31:0] result;
logic zero, clk;
alu test_alu(a,b,alucontrol);
initial begin
$dumpfile("dump.vcd"); $dumpvars(1);
clk = 0;
a = 'hdead0000; b = 'h0000beef; alucontrol = 'b010; #1;
a = 'hc0debabe; b = 'h0000ffff; alucontrol = 'b000; #1;
a = 'hc0de0000; b = 'h0000babe; alucontrol = 'b001; #1;
a = 'hc0debabe; b = 'h0000babe; alucontrol = 'b100; #1;
end
always begin
#1; clk = ~clk;
end
endmodule
当我 运行 测试台并查看生成的波形时,我没有看到 result
正在更新。相反,它保持为 XXXX_XXXX
。我在测试台上做错了什么?
在测试台中,您声明了 result
信号,但它没有连接到任何东西。您可能希望它由同名的 alu
输出驱动。在这种情况下,您应该将其连接到实例:
变化:
alu test_alu(a,b,alucontrol);
至:
alu test_alu(a,b,alucontrol,result,zero);
在 edaplayground 的其他模拟器上尝试您的代码;您应该收到有关未连接端口的警告。
使用您的代码,如果您查看 alu
实例内部,result
信号将不是 X。
另一种对实例进行编码的等效方法是按名称使用连接:
alu test_alu (
.a (a),
.b (b),
.alucontrol (alucontrol),
.result (result),
.zero (zero)
);
这样可以更轻松地避免常见的连接错误。
我正在使用 EDA Playground 和 Aldec Riviera 模拟器,我这里有这个模块:
module alu(input logic [31:0] a, b,
input logic [2:0] alucontrol,
output logic [31:0] result,
output logic zero);
logic [31:0] condinvb, sum;
assign condinvb = alucontrol[2] ? ~b : b;
assign sum = a + condinvb + alucontrol[2];
always_comb
case (alucontrol[1:0])
2'b00: result = a & b;
2'b01: result = a | b;
2'b10: result = sum;
2'b11: result = sum[31];
endcase
assign zero = (result == 32'b0);
endmodule
我的测试台在这里:
module alu_testbench();
logic [31:0] a,b;
logic [2:0] alucontrol;
logic [31:0] result;
logic zero, clk;
alu test_alu(a,b,alucontrol);
initial begin
$dumpfile("dump.vcd"); $dumpvars(1);
clk = 0;
a = 'hdead0000; b = 'h0000beef; alucontrol = 'b010; #1;
a = 'hc0debabe; b = 'h0000ffff; alucontrol = 'b000; #1;
a = 'hc0de0000; b = 'h0000babe; alucontrol = 'b001; #1;
a = 'hc0debabe; b = 'h0000babe; alucontrol = 'b100; #1;
end
always begin
#1; clk = ~clk;
end
endmodule
当我 运行 测试台并查看生成的波形时,我没有看到 result
正在更新。相反,它保持为 XXXX_XXXX
。我在测试台上做错了什么?
在测试台中,您声明了 result
信号,但它没有连接到任何东西。您可能希望它由同名的 alu
输出驱动。在这种情况下,您应该将其连接到实例:
变化:
alu test_alu(a,b,alucontrol);
至:
alu test_alu(a,b,alucontrol,result,zero);
在 edaplayground 的其他模拟器上尝试您的代码;您应该收到有关未连接端口的警告。
使用您的代码,如果您查看 alu
实例内部,result
信号将不是 X。
另一种对实例进行编码的等效方法是按名称使用连接:
alu test_alu (
.a (a),
.b (b),
.alucontrol (alucontrol),
.result (result),
.zero (zero)
);
这样可以更轻松地避免常见的连接错误。