Sie haben eine Chance vertan zu verstehen, wie verpackten und unverpackten Arrays arbeiten. Ich empfehle Ihnen, den Abschnitt IEEE1800-2012 7.4.1, 7.4.2, 7.4.4, & 7.4.5 zu lesen. Technisch ist IEEE1800 für SystemVerilog, das ein Super-Satz von Verilog ist. Die beiden sind die gleichen für Arrays mit statischen Größen und ich finde, IEEE1800 hat eine bessere Erklärung und Beispiele als die IEEE1364.
Wenn Sie nicht bereits über eine Kopie des LRM haben, dann können Sie es kostenlos auf der ieee.org Website herunterladen: IEEE Std 1800-2012
Für den Code zur Verfügung gestellt, können Sie nicht jedes Element in einem entpackten Array zuweisen auf diese Weise. Sie haben zwei Möglichkeiten: Verwenden Sie eine for-Schleife, um den entpackten Teil des Arrays zuzuordnen, oder machen Sie Ihr Array doppelt gepackt.
/* Using for-loop */
reg [7:0] FIFO [0:8];
integer i;
[email protected](posedge clk) begin
if(wr & !rd & !full) begin
for(i = 8; i > 0; i=i-i) begin
FIFO[i] <= FIFO[i-1];
end
FIFO[0] <= data_in;
end
end
/* Using double packed array */
reg [0:8] [7:0] FIFO; // NOTE: format and usage explained in IEEE1800-2012 7.4.5
[email protected](posedge clk) begin
if(wr & !rd & !full) begin
FIFO[0:8] <= {data_in,FIFO[0:7]};
end
end
Vielen Dank, Sie haben meinen Tag gerettet :). Ich kannte den Unterschied zwischen gepackten und nicht gepackten Arrays wirklich nicht. Ich habe auch versucht, es formell mit for-Schleife zu implementieren, aber ich habe Genvar verwendet. Danke auch für den Downloadlink. Ich werde jetzt das LRM nachschlagen, bevor ich frage :). – zsidanyi