如何从测试台访问结构
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
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