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


   parameter width = 1;

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

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

4

2 回答 2

0

它被称为explicit port declaration,这意味着外部世界将通过其显式名称(在您的情况下为X1X2 )知道该端口,但在您的情况下,内部相同的端口将被称为内部端口。

因此,在您的示例中,您将两个端口连接到相同的内部变量(对我来说看起来很糟糕:))虽然,这是可能的用途之一,特别是如果您需要相同的输出端口。另一个示例是将内部结构或数组重新映射到多个 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更多信息,请参阅。

于 2017-07-17T13:52:00.070 回答
0

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

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

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

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

于 2017-07-17T14:13:00.423 回答