Forum: FPGA, VHDL & Co. Wie mit (vorübergehend) ungenutzten Signalen umgehen


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Habe auf dem Eval-Board hier drei Toggle Switches, die ich für 
verschiedene Tests im Design benutzen möchte. Habe ich daher im Toplevel 
als Eingangssignale definiert, und in den device constraints an Pins 
zugewiesen.

Nun frage ich derzeit erst einmal nur eins dieser Signale ab. Da bekomme 
ich beim Generieren dann eine Warnung:
1
WARNING - Unable to find the instance/port 'switches[1]' in the constraint 'ldc_set_location -site {34} [get_ports {switches[1]}]'
2
3
WARNING - In the constraint 'ldc_set_location -site {34} [get_ports {switches[1]}]', the locate object is not specified
4
5
WARNING - Unable to find the instance/port 'switches[2]' in the constraint 'ldc_set_location -site {43} [get_ports {switches[2]}]'
6
7
WARNING - In the constraint 'ldc_set_location -site {43} [get_ports {switches[2]}]', the locate object is not specified

Pins 34 un 43 sind zugewiesen, aber nicht wirklich abgefragt derzeit, 
weshalb der Optimierer die entsprechenden Signale dann verwirft.

Gibt es in VHDL irgendeinen Weg, diesen Ports nun ein "don't care" oder 
so als Senke zuzuweisen, vergleichbar vielleicht mit dem "not used" ERC 
marker in einem EDA-Programm?

von Gustl B. (-gb-)


Lesenswert?

Du kannst Ausgänge hochohmig schalten:

switches[1] <= 'Z';

Aber wenn das Eingänge sind geht das nicht.

Hast du

switches: in std_logic_vector(7 downto 0);

oder so in deiner Beschreibung vom Top Modul?

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


Lesenswert?

Geht es dir nur darum dass die Warnungen verschwinden, z.B. um einen 
sauberen Report zu haben? Dann kannst du Message Filters setzen um die 
Warnungen zu ignorieren/auszublenden.

Welche Toolchain verwendest du?

Kleiner Nachtrag:

Die VHDL Ebene ist da eigentlich nicht fuer verantwortlich. Du kannst 
allerdings keep/safe/don't touch Attribute setzen um zu verhindern dass 
die Signale wegoptimert werden.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Gustl B. schrieb:

> Aber wenn das Eingänge sind geht das nicht.

Gut, dann werde ich damit leben müssen.

> Hast du
>
> switches: in std_logic_vector(7 downto 0);
>
> oder so in deiner Beschreibung vom Top Modul?

Ja, sonst hätte ich sie ja auch den Pins nicht zuweisen können.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tobias B. schrieb:
> Geht es dir nur darum dass die Warnungen verschwinden

Ja.

> Dann kannst du Message Filters setzen um die
> Warnungen zu ignorieren/auszublenden.

Gut, kann ich mir mal ansehen.

> Welche Toolchain verwendest du?

Da das ein iCE40UP ist, ist das Lattice Radiant.

> Kleiner Nachtrag:
>
> Die VHDL Ebene ist da eigentlich nicht fuer verantwortlich. Du kannst
> allerdings keep/safe/don't touch Attribute setzen um zu verhindern dass
> die Signale wegoptimert werden.

OK, aber das will ich ja eigentlich auch nicht. ;-) Ist ja völlig OK, 
dass die unbenutzten Signale wegoptimiert werden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Tobias B. schrieb:
>> Geht es dir nur darum dass die Warnungen verschwinden
> Ja.
Leider gibt es keinen Schalter -Wunused-inputs   :-/

Sieh es andersrum: ich habe noch kein halbwegs komplexes Design ohne 
Warnung hinbekommen. Du kannst diese Warnungen also einfach als "Übung 
für später" ansehen...

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


Lesenswert?

Lothar M. schrieb:
> Sieh es andersrum: ich habe noch kein halbwegs komplexes Design ohne
> Warnung hinbekommen. Du kannst diese Warnungen also einfach als "Übung
> für später" ansehen...

Deshalb gibt es die Message Filters. Damit kannt du gezielt die 
Warnungen ausblenden die du fuer ungefaehrlich eingestuft hast und ist 
daher das ideale Tool fuer Regressiontests. Oder wie willst du sonst 
einen Diff auf die Warnings machen wenn bei einem groesseren Design mal 
ein paar Tausend zusammenkommen?

Warnings einfach abzutun als "Übung für später" halte ich fuer 
hochgradig fahrlaessig und sollte gerade nicht einem Anfaenger empfohlen 
werden.

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


Lesenswert?

Jörg W. schrieb:
> OK, aber das will ich ja eigentlich auch nicht. ;-) Ist ja völlig OK,
> dass die unbenutzten Signale wegoptimiert werden.

Genau, das ist die richtige Einstellung. ;-)

Die Flags sind in der Regel da gut, wo man die Signale noch braucht nach 
dem Syntheseschritt, z.B. beim Instanzieren von Logic Analyzern.

Jörg W. schrieb:
> Da das ein iCE40UP ist, ist das Lattice Radiant.

Ok, das habe ich noch nicht benutzt und daher kein Beispiel parat. :-( 
Ich kann mir aber nicht vorstellen, dass es da keinen Filter gibt.

von berndl (Gast)


Lesenswert?

du koenntest auch die Schaltereingaenge einfach miteinander verXORen und 
auf einen unbenutzten Pin ausgeben (oder auf eine LED, oder...)

von J. S. (engineer) Benutzerseite


Lesenswert?

Tobias B. schrieb:
> Die VHDL Ebene ist da eigentlich nicht fuer verantwortlich.

Leider! Ich hatte im Zuge der Definition von VHDL2008 seinerzeit damals 
mehrfach versucht, den Groschen einzuwerfen, ein funktionelles dont care 
einzuführen. Leider ohne Erfolg. Damit hätte man denselben Effekt, wie 
bei einem Schaltplan-tool, bei dem man unterscheidet, ob man eine 
Gehäuse, das einen Pin hat, gar keine keine Funktion vorliegt, oder man 
zwar eine Funktion hat, die man nur nicht verwendet. So muss man in VHDL 
beide Fälle mit derselben Vorgehensweise erschlagen, entweder alles auf 
INPUT oder TRISTATE oder es ignorieren zu lassen.

Ich empfehle generell die Methode 1, weil der Pin ja real da ist und 
irgendeine Art der Programmierung braucht. Also auf dem oberen Layer 
alles auf Tristate und dafür eben auch alles, was angeschlossen ist, 
verdrahten.

Die anderen Thematik, in einem nicht-physischen Design Signale offen zu 
lassen, kriegt man damit halt nicht hin. Das würde mein Konzept aber 
auch ermöglichen, Signale offen lassen zu können und dies als gewollt 
deklarieren zu können. Gerade heutzutage, wo viele mit Cores arbeiten, 
bei denen X-Funktion brach liegen und viel wegsynthetisiert wird, gibt 
es Hundertausende Warnings, die man so vermeiden könnte. Im Sinne einer 
Design-Validierung hätte das IMHO große Vorteile.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jürgen S. schrieb:
> Das würde mein Konzept aber auch ermöglichen, Signale offen lassen zu
> können und dies als gewollt deklarieren zu können.

Ja, das ist das, was ich mit dem Äquivalent eines "Unused pin ERC 
markers" (wir bei den EDA-Tools in der Regel als Kreuz dargestellt) 
meinte.

OK, so weiß ich zumindest, dass ich da nichts übersehen habe. Die 
message filters werde ich mal versuchen zu finden.

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


Lesenswert?

Jürgen S. schrieb:
> Leider! Ich hatte im Zuge der Definition von VHDL2008 seinerzeit damals
> mehrfach versucht, den Groschen einzuwerfen, ein funktionelles dont care
> einzuführen. Leider ohne Erfolg.

Hast du dazu einen Link zu der Diskussion? Wuerde mich echt mal 
interessieren was da die Gegenseite argumentiert hat.

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.