2010-01-20 742 views
24

我有一個很難理解的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是怎麼回事{A [15]}?

回答

41

大括號表示從左邊的最高有效位(MSB)到右邊的最低有效位(LSB)的級聯。您正在創建一個32位總線(結果),其16個最高有效位由一條總線的15位(MSB)的16個副本組成,其16個最低有效位僅由一條總線組成(此特定結構是已知的作爲sign extension,這是需要,例如右移two's complement形式的負數,並保持負數,而不是將零引入MSBits)。

有一個教程here,但它沒有解釋太多比上面的段落。

對於什麼是值得的,圍繞a[15:0]的嵌套花括號是多餘的。

+1

感謝您的通過說明 – 2010-01-20 16:52:01

25

正如馬特所說,花括號是爲了連接。 16{a[15]}周圍的額外花括號是複製運營商。它們在IEEE標準的Verilog文檔(標準1364-2005)中的章節「5.1.14連接」中進行了描述。

{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]; 
+0

什麼這個verilog代碼是RTL嗎? – Pototo 2016-10-17 20:13:20

+0

@Pototo我相信這只是佈線。 – Georan 2017-07-04 03:55:08