3

这是一个简单的 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?

4

3 回答 3

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

于 2012-11-07T18:19:10.620 回答
3

b[0]分配给最高有效位,a[7]; 即a[7] == 1

于 2012-11-07T16:27:50.300 回答
2

但是,我不确定这是错字还是您打算使用未打包的声明。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 的正确答案。

于 2012-11-08T13:27:59.937 回答