我写了一个连接代码如下:
module p2;
int n[1:2][1:3] = {2{{3{1}}}};
initial
begin
$display("val:%d",n[2][1]);
end
endmodule
它显示错误。请解释?
我写了一个连接代码如下:
module p2;
int n[1:2][1:3] = {2{{3{1}}}};
initial
begin
$display("val:%d",n[2][1]);
end
endmodule
它显示错误。请解释?
未打包的数组需要'{}
格式。请参阅IEEE Std 1800-2012 § 5.11(或'{
在 LRM 中搜索许多示例)。
因此,将您的作业更新为:
int n[1:2][1:3] = '{2{'{3{1}}}};
int n[1:2][1:3] = {2{{3{1}}}};
只看{3{1}}
这是一个 96 位数字 3 个整数连接在一起。
这很可能{3{1'b1}}
是故意的。
主要问题看起来是左侧是未打包的数组,而左侧是打包的数组。
{ 2 { {3{1'b1}} } } => 6'b111_111
需要的是[[3'b111],[3'b111]],
来自 IEEE 标准 1800-2009 的数组分配部分将在此处感兴趣
10.9.1 数组赋值模式
连接大括号用于构造和解构简单的位向量。类似的语法用于支持数组的构造和解构。表达式应逐个元素匹配,大括号应与数组尺寸匹配。每个表达式项都应在分配给数组中相应元素的类型的上下文中进行评估。换句话说,以下示例不需要引起大小警告:
bit unpackedbits [1:0] = '{1,1}; // no size warning required as
// bit can be set to 1
int unpackedints [1:0] = '{1'b1, 1'b1}; // no size warning required as
// int can be set to 1’b1
类似于复制的语法(参见 11.4.12.1)也可以用于数组分配模式。每个复制应代表一个完整的单一维度。
unpackedbits = '{2 {y}} ; // same as '{y, y}
int n[1:2][1:3] = '{2{'{3{y}}}}; // same as '{'{y,y,y},'{y,y,y}}