这个Verilog初始化语法的重要性顺序是什么?

时间:2012-11-07 14:47:01

标签: verilog system-verilog

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

也是如此

3 个答案:

答案 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的正确答案。