如何从testbench访问结构

时间:2015-06-20 07:02:10

标签: system-verilog

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

1 个答案:

答案 0 :(得分:0)

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

在这里,您的测试平台代码注释掉结构成员的reg声明和使用结构声明

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

并尝试运行您的代码,可以在link

中找到更正/正常工作的代码

<强>更新

根据Dave的建议,建议使用包与多个模块共享typedef是更好的解决方案,使用时,在包内定义所有typedef并在所需模块中导入包,它可以是任何模块,包括testbench和DUT。

例如:

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

无论何时您需要使用模块中的包内容

import my_pkg::*;  

还使用包

更新了上述链接