module some ( .a( i [2:0] ), .b( j [0:5] ) )
input i;
output j;
endmodule
以上声明是否有效,或者我们必须在input [2:0] i;
处给出范围。
答案 0 :(得分:2)
您必须使用合适的范围单独声明i
和j
。
在端口列表中使用.name(expression)
语法时,您是:
name
和例如,考虑一个这样的模块:
module some (.a(i[2:0]), .b(i[7:3]))
input [7:0] i;
endmodule
此处模块some
将有两个外部可见端口:
a
的3位端口,b
的5位端口,因此,此模块的有效实例可能如下所示:
some mysome (.a(3'b110), .b(5'b11001));
在内部,这些位将被混合在一起以创建i == 8'b 11001_110
。
有关更多信息,请参阅Verilog-2005标准的第12.3.1节或SystemVerilog-2012标准的第23.2.2.1节(两者都非常相似,都有示例。)
答案 1 :(得分:0)
我认为你的语法令人困惑,在你的.a
示例中,它引用了一个名为a的端口,它在你的代码中不存在。只是为了澄清:
声明模块
module some (
input [2:0] i,
output [5:0] j
);
endmodule
实例化模块:
reg [2:0] a;
wire [5:0] b;
module_name instance_name (
.i( a [2:0] ),
.j( b [5:0] )
);