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));