What do curly braces mean in Verilog?

前端 未结 2 701
抹茶落季
抹茶落季 2020-12-01 11:53

I am having a hard time understanding the following syntax in Verilog:

input  [15:0] a;      // 16-bit input
output [31:0] result; // 32-bit output
assign re         


        
2条回答
  •  不思量自难忘°
    2020-12-01 12:36

    As Matt said, the curly braces are for concatenation. The extra curly braces around 16{a[15]} are the replication operator. They are described in the IEEE Standard for Verilog document (Std 1364-2005), section "5.1.14 Concatenations".

    {16{a[15]}}
    

    is the same as

    { 
       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]
    }
    

    In bit-blasted form,

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

    is the same as:

    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];
    

提交回复
热议问题