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

时间:2014-11-26 10:26:18

标签: parsing syntax verilog

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

以上声明是否有效,或者我们必须在input [2:0] i;处给出范围。

2 个答案:

答案 0 :(得分:2)

您必须使用合适的范围单独声明ij

在端口列表中使用.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] )
);