我一直在查看一些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]的连接中迷失了。
答案 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_out
和word_size-1
位c_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节。