Ich bin ein bisschen ein Anfänger mit Verilog, und ich habe gerade angefangen, an einem Projekt zu arbeiten, und ich versuche zu überprüfen, dass der Code, mit dem ich begonnen habe, praktikabel ist. Der folgende Codeschnipsel entlädt einen FIFO in einen Vektor von 8-Bit-Registern. Bei jedem Taktzyklus entlädt es ein Byte aus dem FIFO und setzt es an das Ende der Registerkette, wobei es alle anderen Bytes entlang der Kette verschiebt.Füllen Registervektor aus FIFO mit generierten Schichten
reg [ 7:0] mac_rx_regs [0 : 1361];
generate for (ii=0; ii<1361; ii=ii+1)
begin: mac_rx_regs_inst
always @(posedge rx_clk_int, posedge tx_reset)
if (tx_reset) begin
mac_rx_regs[ii] <= 8'b0;
mac_rx_regs[1361] <= 8'b0;
end else begin
if (rx_data_valid_r) begin
mac_rx_regs[ii] <= mac_rx_regs[ii+1];
mac_rx_regs[1361] <= rx_data_r;
end
end
end
endgenerate
Ich würde gerne wissen, ob dies ein guter Weg ist, dies zu tun. Ich hätte erwartet, den Registervektor mit dem Byte-Zählwert vom Lesen des FIFO gerade zu adressieren. Ich bin besorgt, dass dies nicht deterministisch ist, da die Reihenfolge, in der die generierten Blöcke immer ausgeführt werden, nicht spezifiziert ist, und es scheint, dass dadurch eine Menge unnötiger Logik erzeugt wird, um Daten von einem Register zu einem anderen zu bewegen.
Danke für die Antwort. Wenn ich dich richtig verstehe, sollte mein ursprünglicher Code gut funktionieren, aber ich mag deine Version viel besser. Es ist viel sauberer und die Funktion ist offensichtlicher. – JMF