Ich kriege ein paar Warnungen mit ghdl, das Problem es ist daß es nicht sagt wo (in meinem Quelltext). Ich hab ghdl 0.35 (llvm/x64) unter Windows: ../../src/ieee2008/numeric_std-body.vhdl:3034:7:@0ms:(assertion warning): NUMERIC_STD.TO_INTEGER: metavalue detected, returning 0 ../../src/ieee2008/numeric_std-body.vhdl:3087:7:@1043us:(assertion warning): NUMERIC_STD.TO_UNSIGNED: vector truncated Gibt es irgend ein Kommando/Option was man verwenden könnte so es sagt mindesten wie den Parameter heist ?. ghdl -r --ieee=synopsys --std=08 tb --vcd=tb_11.vcd --stop-time=10ms
wo (in meinem Quelltext) Gibt es irgend ein Kommando/Option was man verwenden könnte so es sagt mindesten wie den Parameter heist ? lesen kann ich auch :/
Schau Dir mal die Stellen an, an denen Du to_integer bzw. to_unsigned verwendest. Die mögen es nicht, wenn etwas anderes als '0' oder '1' konvertiert werden soll. Bei Modelsim setze ich in solchen Fällen die 'Break Severity' hoch, um die Stelle und den Zeitpunkt zu finden. Duke
Duke Scarring schrieb: > Schau Dir mal die Stellen an, an denen Du to_integer bzw. to_unsigned > verwendest. > Die mögen es nicht, wenn etwas anderes als '0' oder '1' konvertiert > werden soll. denke ich auch, da wird wohl ein nicht initialisierter std_logic_vector oder (un)signed nach Integer gemoppelt
berndl schrieb: > Link? Dort hat jemand ein wenig Doku über den GHDL zusammengetragen: http://www.dossmatik.de/vhdl.html
Evtl. habe ich das Problem nicht genau geschieldert: ghdl hat früher es gezeigt! Ich hab auf einem anderen Rechner ghdl 0.29.1 und es zeigt wo eine Meldung kommt. 0.35 und 0.34 tuen es irgendwie nicht (mehr).
Ale schrieb: > Evtl. habe ich das Problem nicht genau geschieldert: ghdl hat früher es > gezeigt! > Ich hab auf einem anderen Rechner ghdl 0.29.1 und es zeigt wo eine > Meldung kommt. 0.35 und 0.34 tuen es irgendwie nicht (mehr). Das tut es doch? Der Fehler tritt in numeric_std-body.vhdl in Zeile 3034 auf. Dort steht ein assert mit severity warning. Mach' da (von mir aus auch temporär) ein "severity error" draus und Du bekommst einen Fehler mit backtrace. Mit dem kannst Du festestellen, wo das Problem auftritt. Das sollte aber auch ohne diese Änderung nicht allzu schwierig sein - so viele Stellen, wo Du to_integer() aufrufst, wird's ja wohl nicht geben.
Markus F. schrieb: > Ale schrieb: >> Evtl. habe ich das Problem nicht genau geschieldert: ghdl hat früher es >> gezeigt! >> Ich hab auf einem anderen Rechner ghdl 0.29.1 und es zeigt wo eine >> Meldung kommt. 0.35 und 0.34 tuen es irgendwie nicht (mehr). > > Das tut es doch? > > Der Fehler tritt in numeric_std-body.vhdl in Zeile 3034 auf. Genaugenommen tritt der Fehler nicht im Quelltext sondern während der Laufzeit auf. Und ursächlich ist nicht der Quelltext der meckert (konvertierungsroutine in Standard-lib) sondern entweder der Umstand das eine Konvertierung gemacht wird, die vermeidbar ist oder das ein mehrwertigessignal (höchstwahrscheinlich vom typ std_logic) einen Wert neben '1' oder '0' annimmt. Und es ist kein Fehler sondern eine warning, die man wennman deren Ursache kennt, getrost ignorieren kann. Vielleicht hilft es den Code für einen anderen hdl-standard bspw. 93 zu kompilieren, vielleicht sind diese standardlibs genauer. Dann könnte es auch sein, das "zuviel" optimiert wurde bei Compilieren, bspw Reduktion des Speicherbedarfs durch Entfernen der Symboltabelle. Bei manchen Compileren heisst die Option die die (hier mglw nötige) Synboltablle entfernt "-strip". Auf die schnelle fallen mir in https://ghdl.readthedocs.io/en/latest/using/InvokingGHDL.html folgende Optionen auf --ieee= ...versuch mal ne andere standard lib -v ..verbose (geschwätzig)
C. A. Rotwang schrieb: > Genaugenommen tritt der Fehler nicht im Quelltext sondern während der > Laufzeit auf. Noch genauer genommen ist der Fehler keiner, sondern eine (beabsichtigte) Warnung. > mehrwertigessignal (höchstwahrscheinlich vom typ std_logic) Unwahrscheinlich (es gibt kein to_integer für std_logic). Eher signed oder unsigned...
Markus F. schrieb: >> mehrwertigessignal (höchstwahrscheinlich vom typ std_logic) > Unwahrscheinlich (es gibt kein to_integer für std_logic). Eher signed > oder unsigned... ??? auch unsigned und signed sind vom Typ std_logic, genauer array of std_ulogic; lediglich ein paar Operatoren sind neu oder anders wie std_logic_vector definiert. Siehe package code - Auszug
1 | package NUMERIC_STD is |
2 | constant CopyRightNotice : STRING |
3 | := "Copyright © 2008 IEEE. All rights reserved."; |
4 | |
5 | attribute builtin_subprogram: string; |
6 | |
7 | --============================================================================
|
8 | -- Numeric Array Type Definitions
|
9 | --============================================================================
|
10 | |
11 | type UNRESOLVED_UNSIGNED is array (NATURAL range <>) of STD_ULOGIC; |
12 | type UNRESOLVED_SIGNED is array (NATURAL range <>) of STD_ULOGIC; |
13 | |
14 | alias U_UNSIGNED is UNRESOLVED_UNSIGNED; |
15 | alias U_SIGNED is UNRESOLVED_SIGNED; |
16 | |
17 | subtype UNSIGNED is (resolved) UNRESOLVED_UNSIGNED; |
18 | subtype SIGNED is (resolved) UNRESOLVED_SIGNED; |
Der Quelltext der lib ist beispeilsweise im Modelsim-Verzeichniss zu finden, bei Quartus -Lite unter \intelFPGA\18.0\modelsim_ase\vhdl_src\ieee Und in der std_logic_arith sollte sich sehr wohl ein to_integer für std_logic_vector finden lassen: http://soc.eurecom.fr/EDC/lectures/vhdl/1164pkg.pdf Abschnitt 9.4.. Im Quelltext findet sich auch einen ähnliche Assertion wie vom TO zitiert, die sogar genauer als der wohl weniger geläufige Begriff 'metavalue' ist:
1 | elsif tmp = 'X' then |
2 | assert false |
3 | report "CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, and it has been converted to 0." |
4 | severity WARNING; |
5 | return 0; |
C. A. Rotwang schrieb: > Und in der std_logic_arith sollte sich sehr wohl ein to_integer für > std_logic_vector finden lassen: wer redet von std_logic_arith? Die Meldung kommt doch eindeutig aus numeric_std.to_integer bzw. numeric_std.to_unsigned. Der TO hat also irgendwo solcherart Code (möglicherweise implizit, z.B. in einem report-Statement):
1 | x <= to_integer(<unsigned>... |
2 | x <= to_unsigned(<natural>, ...) |
wobei die Argumente nicht oder nicht vollständig initialisiert sind. Die erste Warnung tritt @0 auf. Die kann man mit der ghdl run option --ieee-asserts=disable-at-0 unterdrücken. Die zweite würde dann immer noch kommen - will man die auch weg haben, geht das entweder durch eine entsprechende Initialisierung im Quelltext oder mit der run option --ieee-asserts=disable (nicht empfehlenswert, wenn man sich nicht später nach echten Problemen totsuchen will).
Markus F. schrieb: > wobei die Argumente nicht oder nicht vollständig initialisiert sind. Nö, fehlendes Init kann , muss aber nicht die Ursache dafür sein, das signale die mehr Werte als '0' und '1' annehmen können einen wie im report genannt "Metavalue" annehmen. Unitialisiert wäre 'U', genauso kann es aber auch 'Z', was aber ein Initwert ist den man gerne Datenbussen zuweist. https://www.csee.umbc.edu/portal/help/VHDL/misc.html Wie bereits gestern geschrieben die Ursache liegt in der Verwendung mehrwertiger signale, ob nun unsigned, signed, std_logic ist Wurscht. >Der TO hat also irgendwo solcherart Code (möglicherweise implizit, z.B. >in einem report-Statement):
1 | --snip
|
2 | x <= to_unsigned(<natural>) |
Ich seh jetzt nicht, wo bei dieser Umwandlung von natural als subtype von integer metavalues auftreten können, 'integer' kennt kein "Unitialized" oder "Unknown".
Markus F. schrieb: > Die erste Warnung tritt @0 auf. Die kann man mit der ghdl run option > --ieee-asserts=disable-at-0 unterdrücken. Die zweite würde dann immer > noch kommen - will man die auch weg haben, geht das entweder durch eine > entsprechende Initialisierung im Quelltext oder mit der run option > --ieee-asserts=disable Oder man ergänzt den Code mit zusätzlichen to_01()-Funktionen. Duke
C. A. Rotwang schrieb: >>Der TO hat also irgendwo solcherart Code (möglicherweise implizit, z.B. >>in einem report-Statement):--snip > x <= to_unsigned(<natural>) > > Ich seh jetzt nicht, wo bei dieser Umwandlung von natural als subtype > von integer metavalues auftreten können, 'integer' kennt kein > "Unitialized" oder "Unknown". An der Stelle sagt die Warning eindeutig "Vector truncated". Ich dachte, das wäre klar ...
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.