2013-10-29 79 views
1

我有以下子模塊:定義數組用Verilog下降到非零常數

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

... 

endmodule 

而且我從頂層模塊如下稱之爲:

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

假設長度在兩個模塊中都是一樣的。

  1. array_top如何映射到數組,給定array_top下降到零,但數組下降1?
  2. 爲什麼有人將數組定義爲1而不是0?
  3. array [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. 從您的連接:陣列[1] = array_top [0],等等
  2. 有時候人們希望省略連接信號的LSB,就像內存地址一樣,因爲LSB沒有效果。
  3. 信號沒有array[0]信號。
+1

太棒了!非常感謝! – Arash

+0

不客氣。 – toolic

0

當連接端口時,Verilog只關心數組是否具有相同的大小(在SystemVerilog中稱爲equivalent type)。它並不關心起始索引值,或者它是增加還是減少。它將從連接每個信號的正確範圍(LSB)開始。在你的情況下,array_top[0]連接到array[1]。如果尺寸不匹配,則可能會出現錯誤或警告,具體取決於工具及其設置。然後,連接將在填充或截斷左側範圍(MSB)後被截斷。