Parsing 我们可以在指定端口声明时给出范围,而不是在verilog中的标识符声明时给出范围吗

Parsing 我们可以在指定端口声明时给出范围,而不是在verilog中的标识符声明时给出范围吗,parsing,syntax,verilog,Parsing,Syntax,Verilog,上述声明是否有效,或者我们必须在输入[2:0]i处给出范围还有。我认为您混淆了语法,在示例中,您.a引用了代码中不存在的名为a的端口。我想澄清一下: 声明模块 module some ( .a( i [2:0] ), .b( j [0:5] ) ) input i; output j; endmodule 实例化模块: module some ( input [2:0] i, output [5:0] j ); endmodule 您必须使用合适的范围分别声

上述声明是否有效,或者我们必须在
输入[2:0]i处给出范围
还有。

我认为您混淆了语法,在示例中,您
.a
引用了代码中不存在的名为a的端口。我想澄清一下:

声明模块

module some ( .a( i [2:0] ), .b( j [0:5] ) )
    input i;
    output j;
endmodule
实例化模块:

module some (
    input  [2:0] i,
    output [5:0] j
);
endmodule

您必须使用合适的范围分别声明
i
j

在端口列表中使用
.name(expression)
语法时,您是:

  • 将端口的外部名称设置为
    name
    ,以及
  • 解释如何将其连接到模块的声明端口

例如,考虑这样的模块:

reg  [2:0] a;
wire [5:0] b;
module_name instance_name (
 .i( a [2:0] ),
 .j( b [5:0] )
);
在这里,模块
某些
将有两个外部可见的端口:

  • 一个名为
    a
    的3位端口,以及
  • 一个名为
    b
    的5位端口
因此,此模块的有效实例可能如下所示:

module some (.a(i[2:0]), .b(i[7:3]))
  input [7:0] i;
endmodule
在内部,这些位将混合在一起创建
i==8'b 11001_110


有关更多信息,请参阅Verilog-2005标准的第12.3.1节或该标准的第23.2.2.1节(两者非常相似,都有示例)。

这是不正确的。
.name(expr)
语法明确允许外部名称(例如
a
b
)不同于内部端口名称(例如
i
j
)。通常,
expr
可以对(稍后)声明的端口的部分/位选择进行任意连接。(不过,这样做肯定很少见!)
some mysome (.a(3'b110), .b(5'b11001));