Verilog模块实例化语法澄清

时间:2016-02-23 04:31:21

标签: verilog

我一直在查看一些verilog代码并遇到了一些我以前从未见过的东西,但却无法找到有关在线的信息。

module FA_n_bit(c_out, Sum, A, B, c_in);

parameter    word_size = 4;      // the default size of this n bit adder

input       [word_size-1:0]      A, B;
input                            c_in;

output      [word_size-1:0]       Sum;
output                          c_out;

wire        [word_size-1:0]   c_inner;

// the c_out of the ith 1-bit full aderr is the c_in of the (i+1)th full adder 
FA_one_bit  fullAdder [word_size-1:0](
  {c_out, c_inner[word_size-1:1]},
  Sum, 
  A,
  B,
  {c_inner[word_size-1:1], c_in}
);

endmodule

我理解参数语法,但我很难理解FA_one_bit fullAdder [word_size-1:0](...)语法的作用。

任何帮助将不胜感激。 到目前为止,我认为它声明了4个fullAdders,但我在c_out和c_inner [word_size-1:1]的连接中迷失了。

1 个答案:

答案 0 :(得分:1)

FA_one_bit是在FA_n_bit模块中实例化的另一个模块。实例名称为fullAdder。此外,[word_size-1:0]表示创建了word_size个实例。

在Verilog中,当您实例化模块时,这意味着您要向电路板添加额外硬件。在这里,添加了 4 fullAdders

Concatenations 使用大括号字符{}表示,逗号分隔表达式中的表达式。参考SystemVerilog LRM IEEE 1800-2012,第11.4.12节:

  

串联是由一个或多个表达式产生的位连接在一起的结果。该   连接应使用大括号{和}表示,逗号分隔表达式   内。

// if a, b and c are 8-bit numbers, the results has 24 bits
For Example: {a, b[3:0], c, 4'b1001} 

此处,{c_out, c_inner[word_size-1:1]}表示来自MSB的1位c_outword_size-1c_inner被连接。这将产生宽度为word_size的信号。

LRM的又一个例子:

{a, b[3:0], w, 3'b101}
// equivalent to the following
{a, b[3], b[2], b[1], b[0], w, 1'b1, 1'b0, 1'b1}

串联信号的 MSB c_out MSB-1 位置为c_inner[word_size-1] LSB 为信号是c_inner[1]

有关实例数组的更多信息,请参阅Array of modules链接。有关连接运算符,请参阅IEEE 1800-2012第11.4.12节。