Forum: FPGA, VHDL & Co. Xilinx ISE Optimierung verhindern


von Paul (Gast)


Angehängte Dateien:

Lesenswert?

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:
1
Signal <c3<2:0>> is assigned but never used. This unconnected signal will be trimmed during the optimization process.

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?

von Sven P. (Gast)


Lesenswert?

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 :-)

von Paul (Gast)


Lesenswert?

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.

von Fritz J. (fritzjaeger)


Lesenswert?

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:
>
1
> Signal <c3<2:0>> is assigned but never used. This unconnected signal
2
> will be trimmed during the optimization process.
3
>


Check mal die sensetivity list, die scheint unvollständig.
MfG

von Fritz J. (fritzjaeger)


Angehängte Dateien:

Lesenswert?

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:
>
1
> Signal <c3<2:0>> is assigned but never used. This unconnected signal
2
> will be trimmed during the optimization process.
3
>

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,

von Paul (Gast)


Angehängte Dateien:

Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

Deine Liste ist immer noch unvollständig

von Paul (Gast)


Lesenswert?

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.

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


Lesenswert?

Die unteren 3 Bits von c3 werden nicht verwendet. Und deshalb 
optimiert die Synthese die Signale raus. Warum sollten diese Bits auch 
implementiert werden?

von Paul (Gast)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

Paul schrieb:
> Wie bereits gesagt, genau so wie jetzt die VHDL-Beschreibung im Buch.

Dann taugt das Buch wohl nichts

von Paul (Gast)


Lesenswert?

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...

von D. I. (Gast)


Lesenswert?

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 ;)

von Paul (Gast)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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.

von Fritz J. (fritzjaeger)


Angehängte Dateien:

Lesenswert?

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,

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.