将verilog中的数组定义为非零常量

时间:2013-10-29 17:28:03

标签: arrays verilog

我有以下子模块:

module test
(
input [LENGTH : 1] array;
);

...

endmodule

我从顶级模块调用它如下:

...
wire [LENGTH-1 : 0] array_top;
test test_i
(
.array (array_top);
);
...

假设两个模块中的LENGTH相同。

  1. array_top如何映射到数组,给定array_top降为零,但数组会降为1?
  2. 为什么有人会将数组定义为1而不是0?
  3. array [0]会发生什么?
  4. 谢谢,

2 个答案:

答案 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

*/
  1. 来自您的连接:array [1] = array_top [0]等
  2. 有时人们想省略连接信号的LSB,比如内存的地址,因为LSB没有效果。
  3. 没有array[0]信号。

答案 1 :(得分:0)

连接端口时,Verilog只关心数组具有相同的大小(在SystemVerilog中称为equivalent type)它不关心起始索引值,也不关心它是增加还是减少。它将从连接每个信号的正确范围(LSB)开始。在您的情况下,array_top[0]会与array[1]相关联。如果尺寸不匹配,您可能会收到错误或警告,具体取决于工具及其设置。然后在达到左范围(MSB)后连接将被填充或截断。