Forum: FPGA, VHDL & Co. Test von generics Werten


von Hans-Georg L. (h-g-l)


Lesenswert?

Gibt es eine Möglichkeit in VHDL einen generics Wert auf bestimmte 
Eigenschaften zu testen und die Synthese abbrechen ohne dabei 
zusätzliche Hardware zu erzeugen ?.

In meinem speziellen Falle müsste der generics wert durch 2 teilbar 
sein.
Irgendwo habe ich gelesen das X mod 2 wenn teilbar synthetisiert und 
sonst nicht. Kann ich das irgendwie für meinen Zweck ausnutzen ?.

von Dummschulz (Gast)


Lesenswert?

Ich habe da einen anderen Gedanken: Eine Funktion schreiben, die den 
Wert qualifiziert.

von Hans-Georg L. (h-g-l)


Lesenswert?

Dummschulz schrieb:
> Ich habe da einen anderen Gedanken: Eine Funktion schreiben, die den
> Wert qualifiziert.

Habe gerade eine Möglichkeit gefunden
1
   modtest : process (clk) begin
2
  if (DIVIDER mod 2 = 0) then  
3
     clk_out <= clk;
4
  end if;
5
   end process;

Im Fehlerfall wird clk_out <= clk nicht synthetisiert und ergibt Abbruch 
mit Warnung : Output <clk_out> is never assigned.

clk_out <= clk when (DIVIDER mod 2 = 0); geht auch aber die 
Fehlermeldung ist kryptischer.

: Bearbeitet durch User
von Dummschulz (Gast)


Lesenswert?

Ja gut. Aber das ist halt getrickst und nicht der kanonische Weg. Kann 
man mit alten Sythesizern machen, wenn man "muss".:-)

Aber mittlerweile gibts "report" und ein "assert" gibts auch noch. Keine 
Trickserei nötig.

von Gustl (Gast)


Lesenswert?

If ... generate

end generate;

von Hans-Georg L. (h-g-l)


Lesenswert?

Dummschulz schrieb:
> Ja gut. Aber das ist halt getrickst und nicht der kanonische Weg. Kann
> man mit alten Sythesizern machen, wenn man "muss".:-)
>
> Aber mittlerweile gibts "report" und ein "assert" gibts auch noch. Keine
> Trickserei nötig.

assert (DIVIDER mod 2 = 0) report "Generic: DIVIDER must be divisible by 
2";

ist natürlich viel eleganter und man kann eine sinnvolle Fehlermeldung 
ausgeben. Gefällt mir und mit ISE 14.7 funktioniert es. Danke dir.

VHDL ist nicht mein täglich Brot, das mache ich alle Schaltjahre mal 
wieder ;-).

von M. Н. (Gast)


Lesenswert?

Dummschulz schrieb:
> Ja gut. Aber das ist halt getrickst und nicht der kanonische Weg. Kann
> man mit alten Sythesizern machen, wenn man "muss".:-)
>
> Aber mittlerweile gibts "report" und ein "assert" gibts auch noch. Keine
> Trickserei nötig.

Hängt halt immer vom Synthesizer ab. Im Asic-Bereich (keine Ahnung wie 
das bei FPGAs ist) ist das aber häufig nicht möglich. Ich arbeite 
gegenwärtig an einem digital Design, welches in einer halbwegs neuen 
Technologie bei TSMC gefertigt wird. Also keine gravierende Altlast und 
die Tool-Version ist auch "recent" (Release 2021). Und was soll ich 
sagen: Dem Synthesizer sind asserts vollkommen egal.

Da muss man immer aufpassen. Gerade im Asic-Bereich + VHDL ist meine 
Erfahrung, dass die Tool-Hersteller dir einfach die rote Karte zeigen, 
wenn was nicht geht und sagen: "Mimimi... Der VHDL Standard sagt nichts 
von Synthese. Wir machen das so, wie wir wollen"

Hatte da schon die besten Effekte:
1) ALIAS nicht synthetisierbar
2) State-machines mit enumerable types nicht als one-hot statemachine 
synthetisierbar. Eigentlich dachte ich immer, dass das eben eine 
Einstellung des Synthesizers wäre. Aber falsch gedacht. Das hat der 
Tool-Hersteller erfolgreich abgewälzt und gesagt: Wenn du one-hot FSMs 
möchtest, musst du es mit einem std_logic_vector selber bauen.
3) Teile eines std_logic_vector nicht aus verschiedenen Prozessen 
schreibbar. Da habe ich mich auch massivst aufgeregt. Vorallem, weil der 
VHDL standard definiert, dass jeder slice des Vektors einen eigenen 
Driver hat und somit vector(1) und vector(0) aus verschiedenen Prozessen 
schreibbar sind (solange man nicht in zwei Prozessen dasselbe bit 
schreibt). Antwort des Tool-Herstellers: "Juckt uns nicht. Steht im 
manual. Wer verwendet schon VHDL. Nimm Verilog. Good Luck; Have fun."
4) Default werte von variablen: Der Defaultwert von Variablen in 
procedures etc wird bsw. von unserem Synthesizer komplett ignoriert. Die 
muss man immer am Anfang der Procedure definiert zuweisen. Ansonsten 
synthetisiert der da kompletten Müll zusammen. Natürlich ohne Warnung. 
Toolhersteller sagt: "VHDL definiert nicht, dass das synthesisierbar 
ist. Lies das Handbuch. Ist uns egal. Mit Verilog wäre das nicht 
passiert."

Da kann man wirklich froh sein, wenn die rudimentärsten Teile von VHDL93 
halbwegs funktionieren.
Ich bin da mittlerweile extremst übervorsichtig, wenn einer sagt: "Das 
geht in VHDL so und so + Synthese".

von Blechbieger (Gast)


Lesenswert?

M. H. schrieb:
> Antwort des Tool-Herstellers: "Juckt uns nicht. Steht im
> manual. Wer verwendet schon VHDL. Nimm Verilog. Good Luck; Have fun."

Da zeigt sich leider dass die Toolhersteller alle in den USA sitzen denn 
da (und in Asien) wird Verilog verwendet und wahrscheinlich auch die 
meisten ASIC-Designs gemacht. Interessant wäre jetzt um welchen es hier 
konkret geht? Synopsis  Cadence  Mentor?

von Christoph Z. (christophz)


Lesenswert?

M. H. schrieb:
> Und was soll ich
> sagen: Dem Synthesizer sind asserts vollkommen egal.
>
> Da muss man immer aufpassen.

Danke für deine Erfahrungen. Habe selber noch nie mit Tools aus diesem 
Bereich gearbeitet und finde es gerade spannend, dass die viel teureren 
Tools "dümmer" sind als die FPGA Tools die ich verwendet habe bisher.

Hans-Georg L. schrieb:
> ist natürlich viel eleganter und man kann eine sinnvolle Fehlermeldung
> ausgeben. Gefällt mir und mit ISE 14.7 funktioniert es. Danke dir.

Ich kann bestätigen, dass asserts mit Synplify auch problemlos gehen und 
ich das gerade für diesen Zweck auch eingesetzt hatte.

Da man sein Design ja nicht nur durch den Synthesizer sondern auch durch 
einen Simulator jagt (hoffentlich mit den selben Generics) wird dort der 
Generic ja auch per assert geprüft.

von M. Н. (Gast)


Lesenswert?

Christoph Z. schrieb:
> Danke für deine Erfahrungen. Habe selber noch nie mit Tools aus diesem
> Bereich gearbeitet und finde es gerade spannend, dass die viel teureren
> Tools "dümmer" sind als die FPGA Tools die ich verwendet habe bisher.

Die Tools sind nicht dümmer. Nur die Politik. VHDL ist einfach immer 
naja... 20 Jahre hinter der Zeit. Ich kann den neuen VHDL Standards 
2008/2019 wirklich einige tolle Features abgewinnen. Aber sind wir 
leider an '93 gebunden.

Ich finde es auch irgendwie beeindruckend, dass beispielsweise Synplify 
beim FPGA privat viele Dinge 1a synthetisiert, während der Sysnopsys 
Design Compiler manche Sachen einfach eiskalt ignoriert. Beides aus 
demselben Hause. So richtig verstehen tut das keiner...

Trotzdem ist mir VHDL immernoch deutlich lieber als Verilog ;)

von Blechbieger (Gast)


Lesenswert?

M. H. schrieb:
> Ich finde es auch irgendwie beeindruckend, dass beispielsweise Synplify
> beim FPGA privat viele Dinge 1a synthetisiert, während der Sysnopsys
> Design Compiler manche Sachen einfach eiskalt ignoriert. Beides aus
> demselben Hause. So richtig verstehen tut das keiner...

Der Grund ist einfach, Synplify ist durch einen Firmenaufkauf im Jahre 
2008 zu Synopsis gekommen. Du erwartest doch etwa nicht das innerhalb 
von 14 Jahren der Code gemerkt wird. Wahrscheinlich reden die Teams für 
ASIC-Designtools und FPGA-Tools nichtmal miteinander.

von Blechbieger (Gast)


Lesenswert?

gemerkt soll natürlich gemerget heißen

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

M. H. schrieb:
> VHDL ist einfach immer
> naja... 20 Jahre hinter der Zeit.

Das ist doch nicht das Problem von VHDL sondern den Herstellern die es 
nicht gebacken bekommen den Standard umzusetzen? :-/

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
Noch kein Account? Hier anmelden.