Re: Historische Breitbandaufzeichnungen von AM-Bändern (Projekt Cohiradia)
Ich habe die Synthese für die FPGA Familien verschiedener genannter Boards durchgeführt. Am unproblematischsten war das für die Intel/Altera-Seite, da die HDL-Dateien dafür direkte Anweisungen enthalten. Typische Vertreter bei Trenz/Elektorboards sind der Cyclone IV den ich auch habe, V und 10.
Nach der Synthese war der Bitstream bereit um auf den FPGA geladen zu werden.
Beim Versuch mit dem GoWin war die Sache nicht so einfach, aber mit Hilfe der KI dennoch leicht zu meistern. Ich will meine Fallstricke aufzeigen und wie die KI das erfolgreich für mich gelöst hat.
Das Problem, das Synthesetool Yosys für GoWin war noch auf Verilog-2005 eingestellt, die Erweiterung benutzt SystemVerilog, Yosys muss man dies über -sv mitteilen.
ERROR: no valid mapping found for memory duc_top.baseband_sharpener_inst.coeff_rom_5
Die Erklärung:
Die Ursache: Altera/Intel-spezifische Attribute auf einem Gowin FPGADer Fehler no valid mapping found for memory entsteht, weil der Code in der baseband_sharpener.v stark für Intel/Altera FPGAs optimiert wurde. Dort steht bei den Koeffizienten-ROMs (und auch bei den Ringpuffern) das Attribut (* ramstyle = "M9K" *).
Die Lösung: Attribute anpassen
Öffne die Datei baseband_sharpener.v und suche nach Zeile 60 (im Abschnitt 2. DISKRETE KOEFFIZIENTEN ROMs).
Ersetze diesen Block:
(* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_0 [0:63]; (* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_1 [0:63]; (* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_2 [0:63]; (* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_3 [0:63]; (* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_4 [0:63]; (* ramstyle = "M9K" *) reg signed [15:0] coeff_rom_5 [0:63];
Durch diesen Block:
(* rom_style = "logic" *) reg signed [15:0] coeff_rom_0 [0:63]; (* rom_style = "logic" *) reg signed [15:0] coeff_rom_1 [0:63]; (* rom_style = "logic" *) reg signed [15:0] coeff_rom_2 [0:63]; (* rom_style = "logic" *) reg signed [15:0] coeff_rom_3 [0:63]; (* rom_style = "logic" *) reg signed [15:0] coeff_rom_4 [0:63]; (* rom_style = "logic" *) reg signed [15:0] coeff_rom_5 [0:63];
Damit sagst du Yosys explizit: "Vergiss die Block-RAMs, baue diese kleinen Konstanten-Tabellen einfach aus normalen Logik-Gattern zusammen."
Weiter oben in der Datei werden auch die echten Speicher (ram_i_a_0 etc.) mit (* ramstyle = "M9K" *) deklariert. Meistens ignoriert Yosys das bei echten RAMs (mit Schreib-Port) elegant und mappt sie automatisch auf die Gowin-eigenen "BSRAMs". Solltest du dort gleich den nächsten Fehler bekommen, ändere das M9K dort einfach in den Yosys-Standard (* ram_style = "block" *). also von
(* ramstyle = "M9K" *) reg signed [15:0] ram_i_a_0 [0:127]; // ... bis ... (* ramstyle = "M9K" *) reg signed [15:0] ram_q_b_5 [0:127];
nach
(* ram_style = "block" *) reg signed [15:0] ram_i_a_0 [0:127]; // ... bis ... (* ram_style = "block" *) reg signed [15:0] ram_q_b_5 [0:127];
Dadurch sagst du Yosys ganz generisch, dass es hier echtes Block-RAM verwenden soll, welches dann passend auf die Gowin-eigenen BSRAMs gemappt wird.
Proaktiver Fix: Weitere Altera-Attribute entfernen
Da wir gerade beim Beseitigen von Altera-Spezialitäten sind, ziehen wir direkt noch zwei weitere Dateien glatt, die dir andernfalls gleich im nächsten Build-Versuch um die Ohren fliegen:In shared_sine_rom.v: Hier steht für das physische ROM (* ramstyle = "M4K" *) reg signed [15:0] sine_quarter [0:1023];. Ändere das M4K (ein alter Altera-Speichertyp) in das allgemeine (* rom_style = "block" *) um.
In sync_fifo.v: Dort wird für den Speicher das Attribut (* ramstyle = "no_rw_check" *) verwendet. Dieses Attribut kannst du ersatzlos löschen, sodass dort einfach nur noch reg [DATA_WIDTH-1:0] ram [0:FIFO_DEPTH-1]; steht.
Speichere die Dateien ab und feure dein Synthesescript noch einmal ab.
!!!
Fotos, Grafiken nur über die
Upload-Option des Forums, KEINE FREMD-LINKS auf externe Fotos.
!!! Keine
Komplett-Schaltbilder, keine Fotos, keine Grafiken, auf denen
Urheberrechte Anderer (auch WEB-Seiten oder Foren) liegen! Solche Uploads werden wegen der Rechtslage kommentarlos gelöscht!
Keine Fotos, auf denen Personen erkennbar sind, ohne deren schriftliche Zustimmung.
Den Beitrag-Betreff bei Antworten auf Threads nicht verändern!
Re: Historische Breitbandaufzeichnungen von AM-Bändern (Projekt Cohiradia)
Auch die Synthese für GoWin FPGA lief dann erfolgreich ab.
Provisorisch verkabelt konnte ich runtergeladenen Mittelwellenaufzeichnungen bereits frei im Kurzwellenraum platzieren.
In der Software ist der I/Q Modus auszuwählen und der Parameter für die Shiftfrequenz anzupassen. Die Bits des DACs sind nicht mehr frei einstellbar. Der Bus vom Host zum FPGA läuft jetzt immer auf 16 Bit. Die Bitanzahl des DACs muss man jetzt im Topmodul der Erweiterung einstellen und dann die Synthese und Programmierung neu anstarten. Die DAC-Werte sind dann im FPGA und über cst, tcl Datei fest verdrahtet.