在 Verilog 中,花括号表示什么意思?

47

我在Verilog中理解以下语法方面遇到了困难:

input  [15:0] a;      // 16-bit input
output [31:0] result; // 32-bit output
assign result = {{16{a[15]}}, {a[15:0]}};

我知道assign语句将使用电线和组合逻辑将某些内容连接到result总线上,但是花括号和16{a[15]}是什么意思?

2个回答

66
花括号表示连接符,在左侧的最高有效位(MSB)到右侧的最低有效位(LSB)之间。您正在创建一个32位总线(结果),其中16个最高有效位包含a总线的第15位(MSB)的16个副本,而其16个最低有效位仅包含a总线(这种特定构造称为符号扩展,例如需要在二进制补码形式中右移负数并保持其为负数而不是将零引入到MSBits中)。
值得一提的是,a[15:0]周围的嵌套花括号是多余的。

49

如Matt所说,花括号是用于连接字符串的。在16{a[15]}周围额外的花括号是复制运算符。它们在IEEE Verilog标准文件(Std 1364-2005)的"5.1.14 Concatenations"章节中有描述。

{16{a[15]}}

相同。
{ 
   a[15], a[15], a[15], a[15], a[15], a[15], a[15], a[15],
   a[15], a[15], a[15], a[15], a[15], a[15], a[15], a[15]
}

以位爆炸形式表示,

assign result = {{16{a[15]}}, {a[15:0]}};

就相当于:

assign result[ 0] = a[ 0];
assign result[ 1] = a[ 1];
assign result[ 2] = a[ 2];
assign result[ 3] = a[ 3];
assign result[ 4] = a[ 4];
assign result[ 5] = a[ 5];
assign result[ 6] = a[ 6];
assign result[ 7] = a[ 7];
assign result[ 8] = a[ 8];
assign result[ 9] = a[ 9];
assign result[10] = a[10];
assign result[11] = a[11];
assign result[12] = a[12];
assign result[13] = a[13];
assign result[14] = a[14];
assign result[15] = a[15];
assign result[16] = a[15];
assign result[17] = a[15];
assign result[18] = a[15];
assign result[19] = a[15];
assign result[20] = a[15];
assign result[21] = a[15];
assign result[22] = a[15];
assign result[23] = a[15];
assign result[24] = a[15];
assign result[25] = a[15];
assign result[26] = a[15];
assign result[27] = a[15];
assign result[28] = a[15];
assign result[29] = a[15];
assign result[30] = a[15];
assign result[31] = a[15];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接