Ich bin auf viele Beiträge gestoßen, die besagen, dass der initial
Block in Verilog HDL nicht synthetisierbar ist. Gemäß diesem Anhang zu synthetisierbaren und nicht synthetisierbaren Verilog-Konstrukten (aus dem Buch Digital Logic Design Using Verilog von Taraate) initial
ist der Block nicht synthetisierbar.
Ich ziehe es vor, einen Reset zu verwenden, um Inhalte in Speicherblöcken zu initialisieren. Aber meine Freunde führen ein Spieleprojekt durch, bei dem sie die Anfangspositionen (Werte) von Blöcken mit einem Anfangsschlüsselwort festlegen (wir verwenden ein Nexys 4 DDR FPGA). Es funktionierte.
Ich weiß wirklich nicht, was ich sagen soll, weil ich dachte, es wäre nicht möglich. Kannst du mir das bitte erklären? Ich verwende Xilinx Vivado.
Xilinx Vivado kann initial
in einigen Fällen Blöcke synthetisieren. Beispielsweise zeigt Vivado Synthesis Guide (Seite 145), wie RAM-Inhalte initialisiert werden.
reg [DATA_WIDTH-1:0] ram [DEPTH-1:0];
integer i;
initial for (i=0; i<DEPTH; i=i+1) ram[i] = 0;
end
$readmemb
Kann laut Seite 147 auch zur Initialisierung eines RAM verwendet werden.
reg [31:0] ram [0:63];
initial begin
$readmemb(“rams_20c.data”, ram, 0, 63);
end
Wenn wir über ASIC sprechen, synthetisiert * Design Compiler diese Blöcke nicht.
$readmemb
.initial
Blöcke sind im Allgemeinen nicht synthetisierbar. Diese Codebeispiele sind nicht im normalen Sinne des Wortes synthetisiert. Natürlich kann das FPGA nicht direkt auf eine RAM-Datendatei zugreifen. Die gewünschten RAM-Inhalte werden in den Bitstrom zum Programmieren des FPGA eingebettet, bevor das FPGA tatsächlich konfiguriert wird.
Richard die Weltraumkatze
Eugen Sch.
Sandeep I
alex.forencich
Sandeep I
alex.forencich