这个模块的目的是什么?

时间:2017-07-17 10:09:41

标签: verilog bluespec

module InoutConnect(
                .X1(internal), 
                .X2(internal)
                );


   parameter width = 1;

   inout [ width - 1 : 0 ] internal;
endmodule // InoutConnect

在上面的代码中使用的格式是什么, 我知道虽然实例化模块.x1用于匹配变量名称但是模块定义如何。 这是什么意思?

2 个答案:

答案 0 :(得分:0)

它被称为explicit port declaration,意味着外部世界将通过其明确的名称知道此端口, X1 X2 在您的情况下,尽管在内部在您的情况下,相同的端口将被称为内部

因此,在您的示例中,您将两个端口连接到相同的内部变量(对我来说看起来很糟糕:))尽管如此,这是可能的用途之一,特别是如果您需要相同的输出端口。另一个例子是将内部结构或数组重新映射到多个potrts:

module m(
   output .arr1(array[2:0]),
   output .arr2(array[7:3]),
   input logic [7:0] input_array
)
   logic [7:0] array;
   ...
   always_ff @(posedge clk)
       array <= input_array;
   ...
endmodule

所以,上面你可以在内部使用你的数组作为整体,但它在外部世界中将有不同的表示。

有关详细信息,请参阅23.2.2.2 ANSI style list of port declarations

答案 1 :(得分:0)

InoutConnect模块用于在两个不同的信号名称之间创建别名。例如

wire [7:0] color;
wire [7:0] colour; 
InoutConnect #7 a1(color,colour);

现在,颜色和颜色是同一信号的两个名称。

SystemVerilog添加了alias构造来执行相同的操作,而无需创建单独的模块。