在verilog中调用具有不同Array元素的模块

时间:2018-02-25 13:17:33

标签: verilog system-verilog

我有这样的输入

a1 = 4'b 1001;
a2 = 4'b 1000;
a3 = 4'b 1111;

说我有一个模块fulladder需要三个输入。 我需要使用类似

的所有输入LSB来调用此模块
fulladder fa (a1[3] , a2[3] , a2[4] )  

    module full adder (a,b,c, carry , sum);
    body -----
    endmodule

它对我很好!!

但是如果fulladder将输入值作为数组 像贝娄那样我怎么称呼模块;

module fulladder2 (a , sum, carry)
 input [2:0] a;
 output sum;
 output carry; 
 body-----
endmoduole

示例 fulladder2 f2 (3'b.a(a1[3]a2[3]a2[4]) ??它显示错误无法在二进制文件中声明ASCII

fulladder2 f2 (.a(a1[3],a2[3],a2[4]) ??它也显示错误。

我不能像fulladder那样转换模块fulladder.2。

1 个答案:

答案 0 :(得分:0)

使用连接运算符{...}。

fulladder2 f2( {a1[3],a2[3],a3[3]}, ...
better:
fulladder2 f2 (
      .a     ( {a1[3],a2[3],a3[3]} ),
      .sum   (sum),
      .carry (carry)
      );

此外,我注意到两个不同的定义,你已经交换了进位和总和。

module full adder (a,b,c, carry , sum);
and:
module fulladder2 (a , sum, carry)

如果您使用.name(...)端口分配,这不是问题,但如果您不使用它,则存在潜在危险。

至于你的命名法:你使用的是'矢量'而不是'数组'。在Verilog中,一维实体称为向量。阵列通常是二维的。单个位是电线或寄存器。