Ich habe Verilog und Vivado in der Schule gelernt und bin jetzt sehr verwirrt über die Verwendung von Bussen und Arrays. Kann jemand folgendes klären?
reg [9:0]data
während ein Array reg data[9:0]
. Gibt es einen subtilen (oder nicht so subtilen) Unterschied darin, wie die Sprache diese Fälle handhabt?data[3]
würde unabhängig davon funktionieren, ob data
es als Array oder Bus deklariert ist.reg [4:0]busArray[3:0]
, die 4x 5-Bit-Register erstellen würden.
reg arrayArray[4:0][3:0]
?Ich habe auch noch ein paar andere Fragen zum Thema...
reg [7:0]data[1023:0]
, ist es möglich, auf einzelne Bits und Bereiche zuzugreifen?
data[7:0][4]
zu funktionieren, führt aber zu einem Syntaxfehler. Gibt es Regeln für den Zugriff auf Elemente in Bussen und Arrays?data[0][255:0]
data[3:1][512:64]
reg [15:0][8:0]data
)Mit einem Bus können Sie Werte definieren, die breiter als ein Bit sind. Wenn Sie einen Wert zwischen 0 und 15 speichern oder (parallel) übertragen möchten, benötigen Sie einen 4-Bit-Bus. Mit einem Array können Sie mehrere Werte unter einem einzigen Namen speichern.
Der Unterschied zwischen „[7:0] data“ und „data[7:0]“ besteht darin, dass der erste ein einzelner 8-Bit-breiter Wert ist, während der zweite aus acht Einzel-Bit-Werten besteht.
Es ist völlig normal und nützlich, ein Array von Bussen zu erstellen. Sie werden manchmal als Speicher bezeichnet, weil Sie sie verwenden können, um ROM oder RAM zu modellieren. Ihre Synthesesoftware kann normalerweise erkennen, wenn Sie etwas definiert haben, das wie ROM oder RAM aussieht (z. B. reg [7:0] data[1023:0] ist im Grunde genommen 1 KB mal 8-Bit-RAM) und es als tatsächliches physisches ROM synthetisieren oder RAM auf dem Chip.
Um zu verstehen, welches Konstrukt zu verwenden ist, fragen Sie sich einfach, was Sie haben. Haben Sie einen einzelnen Multi-Bit-Wert? Das ist ein Bus. Haben Sie eine Reihe von Einzelbitwerten, auf die Sie mit einem einzigen Namen verweisen möchten? Verwenden Sie dann ein Array. Haben Sie eine Reihe von Multi-Bit-Werten? Dann verwenden Sie eine Erinnerung.
Kaleb Reister