我有以下子模块:
module test
(
input [LENGTH : 1] array;
);
...
endmodule
我从顶级模块调用它如下:
...
wire [LENGTH-1 : 0] array_top;
test test_i
(
.array (array_top);
);
...
假设两个模块中的LENGTH相同。
谢谢,
答案 0 :(得分:4)
您的问题可以通过一个小型测试平台来解答:
module tb;
reg [3:0] atop;
initial begin
$monitor("array_top=%b, array=%b", array_top, test_i.array);
#1 atop = 4'b0000;
#1 atop = 4'b0001;
#1 atop = 4'b0010;
#1 atop = 4'b0100;
end
wire [3:0] array_top = atop;
test test_i (.array (array_top));
endmodule
module test (input [4:1] array);
endmodule
/*
Output:
array_top=xxxx, array=xxxx
array_top=0000, array=0000
array_top=0001, array=0001
array_top=0010, array=0010
array_top=0100, array=0100
*/
array[0]
信号。答案 1 :(得分:0)
连接端口时,Verilog只关心数组具有相同的大小(在SystemVerilog中称为equivalent type
)它不关心起始索引值,也不关心它是增加还是减少。它将从连接每个信号的正确范围(LSB)开始。在您的情况下,array_top[0]
会与array[1]
相关联。如果尺寸不匹配,您可能会收到错误或警告,具体取决于工具及其设置。然后在达到左范围(MSB)后连接将被填充或截断。