如何从测试台访问结构

How to access the structures from testbench

typedef struct packed signed{
    bit valid;
    bit tag;
    bit signed[31:0] data;
}my_data;

module structure_example5(input clk,input my_data a);

always@(posedge clk) begin
    if(a.tag>a.valid)begin
      $display("G");
    end
    else begin
      $display("L");
    end
  end

endmodule:structure_example5

//TEST BENCH

module structure_example5_tb;

reg clk;
  reg a.tag,a.valid;  

  structure_example5 uut (clk,a);

  initial begin
   #5 
   clk=0;
   forever
     #5clk=!clk;
  end

  initial begin
    a.tag=1'b1;
    a.valid=1'b0;
    #50
    $finish();
  end 
endmodule:structure_example5_tb

除非结构是单向的,否则将测试台和 DUT 端口连接在一起不会有任何困难

在您的测试平台代码中注释掉结构成员的 reg 声明并使用结构声明

//reg a.tag,a.valid;  
my_data a;

并尝试运行你的代码,corrected/working代码可以在link

中找到

更新:

根据 Dave 的建议,建议当使用一个包与多个模块共享 typedef 是更好的解决方案,使用、定义包内的所有 typedef 并将包导入所需的模块,它可以是任何模块,包括测试平台和 DUT。

例如:

package my_pkg;    
typedef struct packed signed{
          bit valid;
          bit tag;
          bit signed[31:0] data;
      }my_data;
endpackage

并且每当您需要模块中的包内容时使用

import my_pkg::*;  

也用包

更新了上面提到的 link