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?
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?
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.
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.
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.
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...
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.
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.
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.
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.
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.
Eine eigene Frage?
Dieser Thread ist über 6 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.