Что фигурные скобки означают в Verilog?

Мне нелегко понимать следующий синтаксис в 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 {[15]}?

34
задан Matt J 20 January 2010 в 16:11
поделиться

2 ответа

Кемные скобки означают кончарование, от наиболее значимого бита (MSB) налево вниз до наименее значимого бита (LSB) справа. Вы создаете 32-битный автобус (результат), 16 наиболее значимых битов которых состоят из 16 копий бита 15 (MSB) шины, а чьи 16 наименее значимые биты состоят только на автобусе (это конкретное строительство известно В качестве расширение знака , которое необходимо, например, направо-сдвиг отрицательного числа в образуется два комплемента и поддерживать его отрицательным, а не вводить нули в MSBITS).

Здесь есть учебник , но он не объясняет слишком много, чем вышеприведенный абзац.

Для того, что стоит, вложенные фигурные скобки вокруг А [15: 0] являются лишним.

52
ответ дан 27 November 2019 в 16:17
поделиться

Как сказал Мэтт, кудрявые скобки предназначены для конкатенации. Дополнительные фигурные скобки вокруг 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];
35
ответ дан 27 November 2019 в 16:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: