2013-04-16 818 views
2

我試圖創建在形式的二維數組:如何定義和分配的Verilog二維數組

reg arr[5:0][0:5]; 

,當我嘗試分配一個值,它可以說

assign arr[1] = 22; 

它給一些錯誤說:

「參考標章陣列‘改編’是不是合法的淨左值」和「連續分配的非法左側」。

所以我的意圖是在數組的索引中分配一個數字。這項任務如何工作?任何幫助,建議將不勝感激。

回答

14

首先,你不能assign到暫存器。 assigns驅動器導線類型,而不是reg類型。要驅動一個reg類型,你需要在一個邏輯塊內的語句像always塊一樣。其次,根據你寫的內容,我認爲你正在尋找一個多位元素的數組,而不是二維數組。

reg arr[5:0][0:5];定義一個二維數組的單個位。如果您想要一個可以保持大於一位的多位值數組,您聲明它是這樣的:

reg [M:0] arr[0:N] - 這描述了一個(N + 1)個元素的數組,其中每個元素是M + 1位數。如果你用這種方式聲明它,那麼假設你使用always塊,你應該能夠存儲一個像22這樣的值。

+0

是的,這正是我正在尋找的。如何存儲值,是否必須使用always塊,我們不能手動存儲它們?還有更多的事情,我們應該使用assign嗎? – bledi

+0

你是什麼意思'手動'?如果您只是想在開始時分配它,則可以使用初始塊。分配僅用於驅動電線,而不是註冊表。查看任何介紹性的verilog教程,瞭解有關reg和wire之間區別的更多信息。 – Tim

+0

是的,我知道了。無論如何感謝 – bledi

3

您不能在reg類型上使用連續賦值(又名assign語句)。這與它是一個數組無關。

arr的聲明更改爲wire將使您通過您發佈的錯誤消息。或者,您可以使用initialalways區塊中的程序性分配對其進行分配。

但是,您仍然需要在作業中提供數組的兩個維度。您正在聲明一個1位值的2d數組。

所以你需要將其指定爲:

所有的
arr[0][0] = 1;