这是一个简单的SystemVerilog问题,我很难找到答案。
在这种位数组初始化语法中,b [0]部分是分配给最高有效位还是最低有效位?
bit a[7:0];
bit b[7:0] = 8'hff;
bit c[7:0] = 8'h00;
a = {b[0], c[6:0]};
[0] == 1或[7] == 1?
也是如此答案 0 :(得分:5)
你发现很难找到答案的原因是因为结果取决于你如何申报。
您已将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
答案 1 :(得分:3)
b[0]
被分配到最重要的位a[7]
;即a[7] == 1
。
答案 2 :(得分:2)
但是,我不确定这是打字错误还是打算使用解压缩声明。 bit a[7:0]
是unpacked array
,它并不意味着连续存储,也不能直接指定打包或整数值。
从SystemVerilog for Design
,P.114,5.3.1 Unpacked arrays
Unpacked数组独立存储每个元素,但以通用数组名称分组。
P.122,5.3.5为数组赋值
SystemVerilog通过另外两种方式扩展Verilog,为解压缩的数组赋值:
- 可以为整个阵列分配值列表
- 可以为数组的一个切片分配值列表。值列表在'{}大括号之间指定,与初始化解压缩数组相同。
对于打包数组bit [7:0] a
,我们确实得到了Paul的正确答案。