我試圖創建在形式的二維數組:如何定義和分配的Verilog二維數組
reg arr[5:0][0:5];
,當我嘗試分配一個值,它可以說
assign arr[1] = 22;
它給一些錯誤說:
「參考標章陣列‘改編’是不是合法的淨左值」和「連續分配的非法左側」。
所以我的意圖是在數組的索引中分配一個數字。這項任務如何工作?任何幫助,建議將不勝感激。
我試圖創建在形式的二維數組:如何定義和分配的Verilog二維數組
reg arr[5:0][0:5];
,當我嘗試分配一個值,它可以說
assign arr[1] = 22;
它給一些錯誤說:
「參考標章陣列‘改編’是不是合法的淨左值」和「連續分配的非法左側」。
所以我的意圖是在數組的索引中分配一個數字。這項任務如何工作?任何幫助,建議將不勝感激。
首先,你不能assign
到暫存器。 assigns
驅動器導線類型,而不是reg類型。要驅動一個reg類型,你需要在一個邏輯塊內的語句像always塊一樣。其次,根據你寫的內容,我認爲你正在尋找一個多位元素的數組,而不是二維數組。
reg arr[5:0][0:5];
定義一個二維數組的單個位。如果您想要一個可以保持大於一位的多位值數組,您聲明它是這樣的:
reg [M:0] arr[0:N]
- 這描述了一個(N + 1)個元素的數組,其中每個元素是M + 1位數。如果你用這種方式聲明它,那麼假設你使用always塊,你應該能夠存儲一個像22這樣的值。
您不能在reg
類型上使用連續賦值(又名assign
語句)。這與它是一個數組無關。
將arr
的聲明更改爲wire
將使您通過您發佈的錯誤消息。或者,您可以使用initial
或always
區塊中的程序性分配對其進行分配。
但是,您仍然需要在作業中提供數組的兩個維度。您正在聲明一個1位值的2d數組。
所以你需要將其指定爲:
所有的arr[0][0] = 1;
是的,這正是我正在尋找的。如何存儲值,是否必須使用always塊,我們不能手動存儲它們?還有更多的事情,我們應該使用assign嗎? – bledi
你是什麼意思'手動'?如果您只是想在開始時分配它,則可以使用初始塊。分配僅用於驅動電線,而不是註冊表。查看任何介紹性的verilog教程,瞭解有關reg和wire之間區別的更多信息。 – Tim
是的,我知道了。無論如何感謝 – bledi