![](/img/trans.png)
[英]Using assignment pattern for union inside a struct in SystemVerilog
[英]Using the struct datatype in module in systemverilog
我需要在SystemVerilog中的模块中使用struct数据类型。 结构的某些成员包含一个数组。 我收到错误“不兼容的复杂类型分配”。 我在common.sv中包含以下结构:
typedef struct {
logic[1:0] num;
logic val;
} lit;
typedef lit lit_array[1:0];
typedef struct {
lit_array lits;
logic[1:0] len;
} clause;
typedef clause clause_array[2:0];
typedef struct {
clause_array clauses;
logic[2:0] len;
} formula;
typedef formula formula_array[4:0];
当我尝试如下在模块中使用“公式”数据类型时,出现“不兼容的复杂类型分配”错误。 以下是代码。
`include "common.sv"
module propagateliteral(input logic clock, reset, find,
input lit in_lit,
input formula in_formula,
output logic ended, empty_clause, empty_formula);
//my system-verilog code
测试平台代码:
`include "common.sv"
module pl_test();
logic clock, reset, find;
lit in_lit;
formula in_formula;
logic ended, empty_clause, empty_formula;
propagateliteral test1(clock, reset, find, in_lit, in_formula, ended,
empty_clause, empty_formula);
always
begin
clock=1'b1; #50; clock=1'b0; #50;
end
initial
begin
reset=1'b1; find=1'b0;
#160;
reset=1'b0; find=1'b0;
#100;
reset=1'b0; find=1'b1; in_lit='{2'b01,1'b1};
in_formula='{{{{{2'b01,1'b1},{2'b10,1'b1},{2'b00,1'b1}},2'b10}, //clause0
{{{2'b10,1'b1},{2'b11,1'b1},{2'b00,1'b1}},2'b10}, //clause1
{{{2'b01,1'b1},{2'b10,1'b1},{2'b11,1'b1}},2'b11}, //clause2
{{{2'b01,1'b0},{2'b10,1'b1},{2'b11,1'b0}},2'b11}, //clause3
{{{2'b01,1'b0},{2'b10,1'b1},{2'b11,1'b0}},2'b11}, //clause4
{{{2'b01,1'b0},{2'b10,1'b1},{2'b11,1'b0}},2'b11}, //clause5
{{{2'b01,1'b0},{2'b10,1'b1},{2'b11,1'b0}},2'b11}},3'b100}; //clause6
end
endmodule
搜索后,发现无法传递解压缩的struct数据类型。 有没有更好的方法来重新定义这些结构,以便可以在模块中使用它们。 抱歉,我是SystemVerilog的新手,在描述问题时可能未使用正确的技术术语。 任何帮助表示赞赏。
您需要确保结构定义来自相同的程序包,然后为每个模块重复导入相同的程序包。 请参阅http://go.mentor.com/package-import-versus-include
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.