Verilog 在EDA中的testbench中指定不更新结果值

Verilog 在EDA中的testbench中指定不更新结果值,verilog,system-verilog,Verilog,System Verilog,我正在使用EDA游乐场和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 =

我正在使用EDA游乐场和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 

当我运行测试台并查看生成的波形时,我没有看到
结果
正在更新。相反,它保持为
XXXX\u XXXX
。我在测试台上做错了什么?

在测试台上,您声明了
结果
信号,但它没有连接到任何东西。您可能希望它由同名的
alu
输出驱动。在这种情况下,应将其连接到实例:

更改:

  alu test_alu(a,b,alucontrol);
致:

在操场上的其他模拟器上尝试您的代码;您应该会收到有关未连接端口的警告

对于代码,如果查看
alu
实例内部,则
结果
信号将不是X


编写实例代码的另一种等效方法是按名称使用连接:

alu test_alu (
    .a           (a),
    .b           (b),
    .alucontrol  (alucontrol),
    .result      (result),
    .zero        (zero)
);
这样可以更容易地避免常见的连接错误

alu test_alu (
    .a           (a),
    .b           (b),
    .alucontrol  (alucontrol),
    .result      (result),
    .zero        (zero)
);