2017-07-17 81 views
0
module InoutConnect(
       .X1(internal), 
       .X2(internal) 
       ); 


    parameter width = 1; 

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

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

+1

请删除VHDL标签 –

+0

阅读免费手册:IEEE标准1800年至2012年,第23条模块和层次 – toolic

回答

0

它被称为explicit port declaration,这意味着外部世界就会知道其明确的名称该端口,X1X2在你的情况下,虽然在内部相同的端口会被称为你的情况内部

所以,在你的榜样,你两个端口连接到同一个内部变量(看起来对我不好:))虽然,这是可能的用途之一,特别是如果你需要相同的输出端口。所以

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 

,上面可以在内部使用数组作为整体,但它会在外部世界不同的表示:另一个例子是重新映射的内部结构或阵列到多个potrts。

有关更多信息,请参阅23.2.2.2 ANSI style list of port declarations

+0

如果我想用魔杖连接输入信号但不INOUT,可以将其以类似的方式来完成或其他方式? – user2984602

+0

'inout'是港口的**方向**。 “wand”是具有用于乘法驱动状态的特定分辨率算法的网络的**类型**。所以,你不能用椅子替换苹果。默认情况下,端口的类型是** wire **(这是另一种类型)。 – Serge

0

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

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

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

SystemVerilog添加alias构造来做同样的事情,而无需创建一个单独的模块。

+0

如果我想使用魔杖连接输入信号,但不能输入,是否可以用类似的方式或其他方式完成? – user2984602

+0

不确定你的意思。可能需要一个单独的问题。 –