System verilog 如何从测试台访问结构
除非结构是单向的,否则将测试台和DUT端口连接在一起不会有任何困难 在您的测试台代码中,注释出结构成员的reg声明,并使用结构声明System verilog 如何从测试台访问结构,system-verilog,System Verilog,除非结构是单向的,否则将测试台和DUT端口连接在一起不会有任何困难 在您的测试台代码中,注释出结构成员的reg声明,并使用结构声明 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
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
并尝试运行您的代码,可以在
更新:
根据Dave的建议,当使用包与多个模块共享TypeDef时,建议更好的解决方案是使用、定义包内的所有TypeDef并将包导入所需的模块中,它可以是任何模块,包括testbench和DUT
例如:
当您需要模块内的软件包内容时,请使用
package my_pkg;
typedef struct packed signed{
bit valid;
bit tag;
bit signed[31:0] data;
}my_data;
endpackage
还使用package更新了上面提到的链接,我强烈建议在公共包中定义
typedef
s,并在跨多个模块共享类型时导入该包。请看@dave_59,我完全同意您的观点,因为它是一个tb,我只是直接从编译单元获取它,在阅读了本文后,我注意到它可能会导致不兼容的类型,因此更新了答案,并且非常喜欢文章中关于包的精确描述“从包中导入名称不会复制文本;它使该名称在另一个包中可见,而无需复制定义“
package my_pkg;
typedef struct packed signed{
bit valid;
bit tag;
bit signed[31:0] data;
}my_data;
endpackage
import my_pkg::*;