Hallo,
ich habe hier ein kleines VHDL-Programm, das mir wirklich Rätsel
aufgibt. Es ist aus einem Lehrbuch. Die Synthese beklagt sich mit einem
Warning:
Innerhalb des Prozesses werden zwei Cases behandelt. Nach der Operation
von c3 wird nur ein bit von dem vector benötigt. Dies hat zur Folge,
dass der Synthesizer die komplette Operation von c3 wegoptimiert. Die
auskommentierten Anweisungen verhindern dieses zwar, aber ich kann für
solche Operationen doch nicht immer leere Port-Elemente verschwenden.
Gibt es eine andere Möglichkeit, z.B. einen bessereren Programmierstil
um das zu verhindern? Oder ein Pragma?
Zuerst schmeiß die STD_LOGIC_UNSIGNED weg. Hatte schon seinen Grund, als
die NUMERIC_STD eingeführt wurde.
Informiere dich doch mal darüber, wann in VHDL-Prozessen Signale
zugewiesen werden. Dann wird dir sicherlich gleich ein Denkfehler
auffallen :-)
Sven P. schrieb:> Zuerst schmeiß die STD_LOGIC_UNSIGNED weg. Hatte schon seinen Grund, als> die NUMERIC_STD eingeführt wurde.
Das weiß ich bereits. Das Programm ist aus einem Lehrbuch und nicht von
mir.
Sven P. schrieb:> Informiere dich doch mal darüber, wann in VHDL-Prozessen Signale> zugewiesen werden. Dann wird dir sicherlich gleich ein Denkfehler> auffallen :-)
Danke für das Orakel. Vielleicht komme ich ja dann drauf.
Paul schrieb:> Hallo,>> ich habe hier ein kleines VHDL-Programm, das mir wirklich Rätsel> aufgibt. Es ist aus einem Lehrbuch. Die Synthese beklagt sich mit einem> Warning:>
Paul schrieb:> Hallo,>> ich habe hier ein kleines VHDL-Programm, das mir wirklich Rätsel> aufgibt. Es ist aus einem Lehrbuch. Die Synthese beklagt sich mit einem> Warning:>
Bei der Summenbildung f. c3 scheint dir beim 2. Op. ein typo unterlaufen
zu sein. Korregiert man die sensetivity list oder zieht die
if-unabhängigen Zuweisung aus dem process (siehe Anhang) läuft die
Implementierung Warnungsfrei durch.
MfG,
Fritz Jaeger schrieb:> if-unabhängigen Zuweisung aus dem process (siehe Anhang) läuft die> Implementierung Warnungsfrei durch.
Strange. Bei mir kommt auch bei Deiner Version die selbe Warnung wie
eingangs beschrieben. Einen Cleanup habe ich gemacht.
Fritz Jaeger schrieb:> Bei der Summenbildung f. c3 scheint dir beim 2. Op. ein typo unterlaufen
Ja. Schande. Nicht nur einer. Beim unsigned overflow war auch was
falsch. Ich habe das Original nochmal angehängt.
Ich frage mich aber, warum bei Dir die Synthese warnungsfrei durchläuft
und bei mir weder mit der ISE 12.1 noch mit der ISE14.3. Als
Synthesetool ist XST eingestellt. Synthetisieren lassen habe ich auf
einen Spartan 3E und einem Coolrunner II. Ich werde es mal auf einem
anderen Computer ausprobieren.
D. I. schrieb:> Deine Liste ist immer noch unvollständig
Wie bereits gesagt, genau so wie jetzt die VHDL-Beschreibung im Buch.
Jetzt ohne Fehler. Außerdem dachte ich immer die Sensitivity-List
beeinflusst die Synthese nicht, sondern ist für die Simulation relevant.
Ich kann ja mal alles in die Sensitivity-List hängen...
... moment ...
Alle Permutationen ausprobiert.
nö, leider immer noch :
Signal <c3<2:0>> is assigned but never used. This unconnected signal
will be trimmed during the optimization process.
Die unteren 3 Bits von c3 werden nicht verwendet. Und deshalb
optimiert die Synthese die Signale raus. Warum sollten diese Bits auch
implementiert werden?
Lothar Miller schrieb:> Die unteren 3 Bits von c3 werden nicht verwendet. Und deshalb> optimiert die Synthese die Signale raus. Warum sollten diese Bits auch> implementiert werden?>
Dann habe ich die Warnung falsch verstanden. Ich dachte mir wird
komplett die Operation von c3 wegoptimiert, also die Berechnung
c3 <= ('0' & a(n-2 downto 0)) + ('0' & b(n-2 downto 0));
erst gar nicht "zwischengespeichert" und dann nur das MSB c3(n-1)
genommen. Nun gut. Wieder was dazu gelernt. Ich wundere mich nur, wie
Fritz die Warnung mit seinem Code heraus bekommen hat. Bei mir wird sie
stets angezeigt auch mit seinem Code.
D. I. schrieb:>> Wie bereits gesagt, genau so wie jetzt die VHDL-Beschreibung im Buch.>> Dann taugt das Buch wohl nichts
Das kann sein. Vielleicht zu theoretisch.
Ich habe es trotzdem mit S-List probiert. Wenn ich entweder a oder b
oder s aus der Liste entferne, dann gibt es Warnings.
Ich glaube, dass auch nur a,b und s in die Liste des Prozesses gehören,
damit der Simulator auf Ereignisse von a,b,s triggered. c3 und result
erhalten ja eine Zuweissung innerhalb des Prozesses und müssen deshalb
nicht in die Liste. Auch für die signed, unsigned std_logics findet ja
erst im Prozesse eine Zuweisung veränderung statt. Auch diese können
nicht in die Liste. Oder sehe ich das falsch?
Auch die Synthese klappt ohne Sensitivity-List aber mit ordentlich
Warnings. Vielleicht könnte ich mal die Bit-Files vergleiches...
Der Synthese ist die Liste egal, dabei geht es um Übereinstimmung
zwischen Synthese und Simulation.
In die List gehört bei einem komb. Prozess alles was gelesen wird,
fertig.
Und für den Rest: Siehe Loddar ;)
D. I. schrieb:> Prozess alles was gelesen wird,> fertig.
Ok. Es werden doch nur a,b und s gelesen. C3 und result werden ja erst
geschrieben und dann gelesen. Deshalb kann kein Zustand von C3 und
result "falsch gelesen" bzw. sich außerhalb des Prozesses einen
ungewollten Zustand annehmen, noch eine Veränderung verpasst werden.
Deshalb denke ich müssen die beiden da gar nicht rein.
Paul schrieb:> D. I. schrieb:>> Prozess alles was gelesen wird,>> fertig.>> Ok. Es werden doch nur a,b und s gelesen. C3 und result werden ja erst> geschrieben und dann gelesen. Deshalb kann kein Zustand von C3 und> result "falsch gelesen" bzw. sich außerhalb des Prozesses einen> ungewollten Zustand annehmen, noch eine Veränderung verpasst werden.> Deshalb denke ich müssen die beiden da gar nicht rein.
Denken heißt nicht wissen und eine Annahme ist der erste Schritt ins
Chaos. Natürlich müssen auch die in die Liste.
D. I. schrieb:> Denken heißt nicht wissen und eine Annahme ist der erste Schritt ins> Chaos. Natürlich müssen auch die in die Liste.
Wissen entsteht durch Versuche basierend auf Annahmen.
Aber wie gesagt es gibt nur Warnings wenn a,b oder s in der Sense-List
fehlen. Ich werde mal eine Testbench schreiben, wenn die Simulation
klappt, dann wird meine Annahme vorerst für mich bestehen bleiben, bis
sie widerlegt wird.
Paul schrieb:> Fritz Jaeger schrieb:>> if-unabhängigen Zuweisung aus dem process (siehe Anhang) läuft die>> Implementierung Warnungsfrei durch.>> Strange. Bei mir kommt auch bei Deiner Version die selbe Warnung wie> eingangs beschrieben. Einen Cleanup habe ich gemacht.
Mglw ist das kein Syntheseproblem sondern eines vom mapper, mglw. ist es
auch ein Problem mit den Tool-optionen. Im Anhang synthese und
map-report.
MfG,