Ich versuche seit Stunden herauszufinden, warum mein Verilog-Programm nicht funktioniert. Um es zu testen, habe ich meinem Modul nur einige Konstanten als Eingänge hinzugefügt und ich verwende den integrierten Logikanalysator, um die Ausgänge zu überprüfen. Aus irgendeinem Grund sind alle meine Zwischenwerte 0,0 (64-Bit-Float). Ich habe dann den ILA verwendet, um die u- und d-Eingänge zu überprüfen, und ihre Werte sind Null. Im Moment verwende ich $realtobits, um Konstanten aus Float-Werten zu erstellen. Ist das synthetisierbar?
binomial_controller bc(.u($realtobits(1.0025031276057951857)),
.d($realtobits(0.99750312239745997367)),
.u_v($realtobits(1.0026284483291278971)),
.d_v($realtobits(0.99737844229982886013)),
.p_up($realtobits(0.49968750024413099986)),
.p_up_v($realtobits(99.500999000666340066)),
.p_dn($realtobits(0.50031249975586900014)),
.p_dn_v($realtobits(0.50035863068484875971)),
.int_exp($realtobits(0.99999843750122074937)),
.price($realtobits(100.0)),
.strike($realtobits(100.0)),
.start(start),
.clk(cclk),
.last_nine_tree_elements(r),
.ready(ready));
Einfache Antwort. Nein, ich glaube nicht.
Es gibt ein sehr nützliches Online-Referenz-/Hilfedokument, das Seiten enthält, die Verilog-Konstrukte und -Syntax beschreiben. Es hat eine Seite über die $realtobits
Funktion, die besagt
Konvertierungsfunktionen sind nicht synthetisierbar.
Ich kann nicht für die Genauigkeit der Quelle bürgen, aber es macht Sinn. Die Verilog- $...
Funktionen sind eher Hilfsfunktionen für Dinge wie Speicherinitialisierung, Anzeige in Simulationen usw. im Gegensatz zu tatsächlich synthetisierbaren Konstrukten. Dies ist nicht immer der Fall - Dinge wie $signed
sind meines Wissens synthetisierbar.
Darüber hinaus sind die komplexen Datentypen wie real
, time
, und event
ebenfalls nicht synthetisierbar. Von diesem Standpunkt aus ist es daher sinnvoll, dass alles, was die Umwandlung zu und von ihnen beinhaltet, nicht synthetisiert werden kann.
Wie @PeterGreen in den Kommentaren betont, hängt es vor allem vom Synthesetool ab, ob ein Konstrukt synthetisierbar ist. Wie Sie Xilinx als Tag angeben, können Sie im XST-Benutzerhandbuch nachlesen .
Tabelle 7-33 auf Seite 518 dieses Dokuments – in einem Abschnitt mit dem Titel „Verilog System Tasks and Functions Supported in XST“ – gibt deutlich an, welche Systemfunktionen unterstützt und welche ignoriert werden.
$realtobits
ist in dieser Tabelle nicht speziell aufgeführt, fällt also unter den letzten Eintrag, der besagt: All others: Ignored
, was darauf hinweist, dass es vom Tool nicht unterstützt wird.
Chasep255
Peter Grün
pre_randomize