module InoutConnect(
.X1(internal),
.X2(internal)
);
parameter width = 1;
inout [ width - 1 : 0 ] internal;
endmodule // InoutConnect
在上面的代码中使用的格式是什么, 我知道虽然实例化模块.x1用于匹配变量名称但是模块定义如何。 这是什么意思?
答案 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
构造来执行相同的操作,而无需创建单独的模块。