Hallo, ich verwende Lattice Diamond mit dem integrierten Synplify als Synthesetool. Für ein universell nutzbares Modul habe ich verschiedene Konfigurationseinstellungen im GENERIC-Bereich untergebracht - das funktioniert auch seit Jahren einwandfrei. Je nach übergebener Konfiguration werden im universell nutzbaren Modul über "GENERATE" verschiedene Module instanziiert. Sofern ich jedoch eine "ungültige" oder "nicht unterstützte" Konfiguration übergebe, wird entsprechend auch kein "GENERATE" durchgeführt und in Lattice Diamond erhalte ich keinerlei Fehlermeldung und die Synthese läuft komplett durch - was auch verständlich ist. Nur im Simulationstool sehe ich über eine ASSERT-Anweisung mit REPORT im Code eine Warnung. Wie kann ich die Synthese in Lattice Diamond "automatisch stoppen" lassen, sofern dem universell nutzbaren Modul eine "ungültige" oder "nicht unterstützte" Konfiguration übergeben wird? Was für Möglichkeiten gibt es direkt im VHDL-Code die Synthese zu stoppen, sofern im Code / Konfiguration eines Moduls nicht unterstützte Zustände auftreten? Bin auf eure Tipps gespannt :-)
Michi schrieb: > ASSERT-Anweisung mit REPORT im > Code eine Warnung. Einfach die severity auf "Failure" setzen. Dann sollte auch Synplify stoppen. Hatte schon das selbe Bedürfnis und habe es so gelöst und mag mich daran erinnern, dass dies auch für die Synthese funktioniert hat.
Im Simulationstool funktioniert dies, Lattice Diamond mit Synplify als Synthesetool lässt sich zumindest bei mir davon nicht beeindrucken... Lattice Diamond baut das Programm weiterhin ganz normal durch...
Also ich kann das nicht nachvollziehen. Synplify macht mit den Assertions genau das was es soll. Ein sinnloses aber funktionsfaehiges Beispiel habe ich mal angehaengt. Ist das Generic auf false laeuft die Synthese durch, ist es auf true wirft es einen Fehler. Sogar mit entsprechender Meldung im report Statement.
1 | Starting: "prj_run Synthesis -impl impl1" |
2 | |
3 | ************************************************************ |
4 | ** Synplify Pro ** |
5 | ************************************************************ |
6 | |
7 | ... |
8 | |
9 | Post processing for work.toplevel.rtl |
10 | Running optimization stage 1 on toplevel ....... |
11 | Running optimization stage 2 on toplevel ....... |
12 | ERROR - Z100 :"Lattice/Assertion_Test/toplevel.vhd":22:9:22:35|"SIM_FAST is not Supported" |
13 | Process took 0h:00m:01s realtime, 0h:00m:01s cputime |
14 | # Wed Jul 22 14:51:13 2020 |
15 | |
16 | ###########################################################] |
17 | @END |
18 | Process took 0h:00m:01s realtime, 0h:00m:01s cputime |
19 | # Wed Jul 22 14:51:13 2020 |
20 | |
21 | ###########################################################] |
22 | |
23 | |
24 | Synthesis exit by 9. |
25 | Done: error code 9 |
Synplify macht's richtig, aber die Diamond 'IDE' kriegt den Fehler nicht mit, zumindest wurde seit Jahren der Fehlercode nicht ausgewertet und der Bug-Report dazu nie bearbeitet. Wenn man 100% sichergehen will, dass Source und Bitfile in Sync sind, hilft nur, die Synthese-Verarbeitungskette per Makefile aufzurufen.
Martin S. schrieb: > Synplify macht's richtig, aber die Diamond 'IDE' kriegt den Fehler nicht > mit, zumindest wurde seit Jahren der Fehlercode nicht ausgewertet und > der Bug-Report dazu nie bearbeitet. > Wenn man 100% sichergehen will, dass Source und Bitfile in Sync sind, > hilft nur, die Synthese-Verarbeitungskette per Makefile aufzurufen. Das stimmt allerdings und ist auch echt nervig (koennte mir vorstellen dass Lattice langsam aber sicher sich von Synplify losloesen will und an solchen Krankheiten schon garnicht mehr arbeit). Aber dass wie oben beschrieben die Synthese einfach durchlaeuft kann ich definitiv nicht bestaetigen. Da muss ein Fehler in der Assertion vorliegen.
@ von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite 22.07.2020 14:55 Herzlichen Dank für deine Rückmeldung mit Beispiel, nun funktioniert es auch bei mir :-) Mein Fehler war, dass ich die Überprüfungen mit den ASSERTs gesammelt in einem separaten Modul ausgelagert habe und die Werte normal per "PORT MAP" übergeben habe. In der Simulation funktioniert dies einwandfrei. -> Mit "PORT MAP" erfolgt bei Diamond bei mir keinerlei Abbruch der Synthese :-( -> Mit "GENERIC MAP" erfolgt bei Diamond wie gewünscht der Abbruch mit der entsprechenden Fehlermeldung :-) Kleine Änderung mit großer Wirkung... Herzlichen Dank!
Ahh, ja das ist klar. Assertions koennen nur statisch ausgewertet werden. Da du bei Ports Signale weiter gibst, kann Synplify nicht auswerten was mit diesen zur Laufzeit passiert. Lesson learned. :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.