2012-11-07 23 views
1

这是一个简单的SystemVerilog问题,我很难找到答案。这个Verilog初始化语法的重要性顺序是什么?

在这种位阵列初始化语法中,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

请发表合法的Verilog代码。 0xff不能编译。 – toolic

回答

4

你找到答案的原因很难找到答案,因为结果取决于你声明的东西。您已将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

+0

谢谢保罗!一个很好的解释加上一个答案。另外,感谢编辑,我主要是一个C人,只是犯了一个错误。 – Rich

3

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

2

但是,我不确定这是打字错误还是打算使用解压声明。 bit a[7:0]unpacked array,它并不意味着连续存储,它不能直接指定打包或整数值。

以下是从SystemVerilog for Design,P.114,5.3.1压缩数组

解压缩后的数组存储通过每个元件独立地,但在一个共同的阵列名称分组。

P.122,5.3.5分配值,以阵列

SystemVerilog的延伸的Verilog与两种其他方法将值分配给压缩数组:
- 整个阵列可以被分配值的列表
- 可以为数组的一个片段分配一个值列表。

值的列表在'{}括号之间指定,与初始化解压缩数组相同。

对于包装数组,bit [7:0] a,我们的确有Paul的正确答案。

+0

我简化它从我实际上看的源文件。我正在查看一些定义为压缩结构的一部分的数组。如果一个结构被打包,那么这是否意味着它的位阵列被打包? – Rich

+1

是的。打包的结构体只能具有整数或包装类型作为其字段。 – jclin

+0

好,我错过了它是一个解压缩数组。 –