这是一个简单的 SystemVerilog 问题,我很难找到答案。
在这种位数组初始化语法中,b[0] 部分是分配给 a 的最高有效位还是最低有效位?
bit a[7:0];
bit b[7:0] = 8'hff;
bit c[7:0] = 8'h00;
a = {b[0], c[6:0]};
那么 a[0] == 1 还是 a[7] == 1?
这是一个简单的 SystemVerilog 问题,我很难找到答案。
在这种位数组初始化语法中,b[0] 部分是分配给 a 的最高有效位还是最低有效位?
bit a[7:0];
bit b[7:0] = 8'hff;
bit c[7:0] = 8'h00;
a = {b[0], c[6:0]};
那么 a[0] == 1 还是 a[7] == 1?
您发现很难找到答案的原因是因为结果取决于您声明事物的方式。
你已经宣布a
为[7:0]
. 因此,其中的位a
排列如下:
a7 a6 a5 a4 a3 a2 a1 a0
然后分配{b[0], c[6:0}
给a
:
a7 a6 a5 a4 a3 a2 a1 a0 = b0 c6 c5 c4 c3 c2 c1 c0
1 0 0 0 0 0 0 0 = 1 0 0 0 0 0 0 0
A[7] == 1
如果您声明a
是[0:7]
结果将是:
a0 a1 a2 a3 a4 a5 a6 a7 = b0 c6 c5 c4 c3 c2 c1 c0
1 0 0 0 0 0 0 0 = 1 0 0 0 0 0 0 0
A[0] == 1
b[0]
分配给最高有效位,a[7]
; 即a[7] == 1
。
但是,我不确定这是错字还是您打算使用未打包的声明。bit a[7:0]
是一个unpacked array
,不代表连续存储,不能直接赋值packed或者integral值。
以下是从SystemVerilog for Design
, P.114, 5.3.1 Unpacked arrays中采用的
解包数组独立存储每个元素,但在一个通用数组名称下分组。
P.122, 5.3.5 为数组赋值
SystemVerilog 扩展了 Verilog,增加了两种为解压数组赋值的方法:
- 可以为整个数组分配一个值列表
- 可以为数组的一个切片分配一个值列表。值列表在 '{ } 大括号之间指定,与初始化解压缩数组相同。
对于打包数组,bit [7:0] a
我们确实得到了 Paul 的正确答案。