mikrocontroller.net

Forum: FPGA, VHDL & Co. Signale werden in Synthese umbenannt oder entfernt


Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein VHDL-Projekt erstellt, welches zwei Ausgänge hat, die 
jeweils 8-bit breit sind. z.B. A_OUT(0) - A_OUT(7) und B_OUT(0) - 
B_OUT(7).
Durch das einfügen eines ILA-Cores mit dem ChipScope Core Generator 
möchte ich diese Signale abfangen.
Das Problem ist nun, dass wenn ich den Core Generator starte das Projekt 
synthitisiert wird. Das ist ja ok. Doch kann ich nun im Core 
Generator--> Net Select meine Ausgangssignale nicht mehr komplett 
abfangen. Folgende Signale sind noch vorhanden:
A_OUT(0), A_OUT(1) und A_OUT(3), das selbe für B_OUT.

Was passiert hier? Werden meine Signale einfach wegsynthetisiert, weil 
das Tool der Meinung ist, sie würden nicht gebraucht? Oder werden sie 
nur umbenannt, und wie kann ich dies verhindern?

Eine Hilfe dazu wäre toll!

Gruß

Autor: soso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein Bauchgefühl würde dir zustimmen: das Synthesetool ist der Meinung 
die Signale werden nicht benötigt. Vielleicht hat es recht?

Ferndiagnosen sind natürlich schwer...
Wahrscheinlich müsstest du dein Design posten!

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Danke für die schnelle Antwort.

Das komische ist, dass die Signale ganz zusammenhangslos angezeigt oder 
nicht angezeigt werden. Wenn die Signale nicht gebraucht werden hätte 
ich erwartet, dass z.B. die 3 MSB fehlen. Das ist ja aber nicht so, da 
z.B. auch A_Out_2 fehlt! Und in der Simulation in ModelSim sieht man 
ganz deutlich, dass das Bit toggelt, also auch gebraucht wird. Würde ich 
denken...?


Ich möchte nur ungern dass gesamte Projekt posten, ist ziemlich groß....
gibts noch ne andere Möglichkeit?

Gruß

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und in der Simulation in ModelSim sieht man
> ganz deutlich, dass das Bit toggelt, also auch gebraucht wird.
Die Simulation macht genau das, was in der Beschreibung steht. Die 
Synthese schaut ein wenig über den Tellerrand raus und erkennt evtl. 
Gemeinsamkeiten mit anderen Signalen und schmeißt eins davon in die 
Tonne...
Oder sie erkennt, dass dieses Signal zwar erzeugt, aber nirgends 
verwendet wird und kommt zum selben Ergebnis...

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Die
> Synthese schaut ein wenig über den Tellerrand raus und erkennt evtl.
> Gemeinsamkeiten mit anderen Signalen und schmeißt eins davon in die
> Tonne...

Aha!
Willst du mir damit raten, auf die Synthese zu vertrauen, oder wie?
Das klingt schon logisch. Hab mir die Simulation auch nochmal 
angeschaut, und die aussortieren Signale haben alle einen 
"Doppelgänger", der noch vorhanden ist.
Doch wie kann ich mir dann erklären, dass das Ergebnis das gleiche ist. 
Der Wert eine 8-Bit langen Vectors kann doch nicht der selbe sein, wie 
den den ich jetzt heraus bekommen, mit dem 0.ten, 1.ten und 3.ten Bit?

Danke schön schonmal!

Gruß

Autor: Michael Sauron (Firma: www.das-labor.org) (laborsauron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und in der Simulation in ModelSim sieht man
> ganz deutlich, dass das Bit toggelt, also auch gebraucht wird.

Da würd ich als erstes mal die Sensitivity listen auf Fehler 
kontrollieren.

>die aussortieren Signale haben alle einen
>"Doppelgänger"
Na dann ist logisch, das da was wegoptimiert wird.

>mit dem 0.ten, 1.ten und 3.ten Bit....
Und welche bits vom Doppelgänger sind noch übrig ?

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Sauron schrieb:
>>mit dem 0.ten, 1.ten und 3.ten Bit....
> Und welche bits vom Doppelgänger sind noch übrig ?

genau diese bits (0, 1, und 3) sind noch übrig!
Also Bit 2 und 4 - 7 kann ich nicht mehr mit ChipScope analysieren oder 
auf den Logikanalyzer geben.

Die Frage ist nun, wie die Werteberechnung statt findet. Der neue 
Vektor, der ja jetzt nur noch 3 Bits hat (0, 1 und 3) kann ja nicht die 
gleiche Zahl repräsentieren, wie der ursprüngliche 8-Bit-Vektor?

Gruß

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Und welche bits vom DOPPELGÄNGER sind noch übrig ?
>genau diese bits (0, 1, und 3) sind noch übrig!
Na das liess noch mal genau und überdenke deine Antwort

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Frage ist nun, wie die Werteberechnung statt findet.
Hier an dieser Stelle wäre jetzt die Beschreibung interessant.

> Der neue Vektor, der ja jetzt nur noch 3 Bits hat (0, 1 und 3)
> kann ja nicht die gleiche Zahl repräsentieren, wie der ursprüngliche
> 8-Bit-Vektor?
Die anderen Bits gehen nicht verloren, sie werden nur anders verdrahtet.

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tips!

Ich habe das Problem jetzt so weit im Griff, dass ich die vorhandenen 
Signale mehrfach mappen kann umd somit meinen ursprünglichen Bus 
rekonstruieren.

Gruß

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe nun ein neues Projekt gestartet, mit ähnlichem Aufbau. Das 
Problem ist das selbe. Ich möchte hier zwei Ausgänge mappen, welche 
jeweils 3bit breit sind. Und diese Signale sind auf jeden Fall nicht 
identisch (siehe ModelSim).
Es sind lediglich Signale ähnlich:
A_OUT_1 und A_OUT_3 sind invertiert zueinander, A_OUT_2 ist komplett 
anders.
B_OUT_1 und B_OUT_3 sind wiederum invertier zueinander und haben mit 
A_OUT nichts gemein. B_OUT_2 ist wieder ganz anders.

Die folgenden Signale bleiben nach der Synthese noch übrig: I_OUT_0 und 
I_OUT_1.

Von B_OUT ist gar nichts mehr da!

Gibt es nicht irgend ein Attribut, oder so, welches Xilinx verbietet 
bestimmte Signale in der Synthese umzubenennen oder zu entfernen?
Was kann das überhaupt für einen Grund haben, dass Xilinx die Signale 
wegsynthetisiert?

Ich hoffe, jemand hat einen Rat für mich!

Grüße

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Von B_OUT ist gar nichts mehr da!
Ohne Code kann man nur raten...
Sind das interne Signale oder werden die auf einen IO-Pin geführt?

> Was kann das überhaupt für einen Grund haben, dass Xilinx die Signale
> wegsynthetisiert?
Sie werden nicht gebraucht.

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die schnelle Antwort.

Der Code ist ziemlich umfangreich, deshalb sehr schlecht zu posten...
Diese Signale sind Ausgangssignale. Ich habe sie auch in PlanAhead auf 
die LEDs des FPGAs führen können. Soweit alles normal.

Gebraucht werden sie meiner Meinung nach auf jeden Fall. Erstens sieht 
man in ModelSim, dass sie eindeutig toggel, zweitens möchte ich damit 
ein QAM16 Konstellationsdiagramm darstellen. Un dafür brauche ich auf 
jeden Fall 2x3Bit als Ausgang.

Grüße

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es IO-Pins sind, dann werden die Signale nicht wegoptimiert. Nur 
wird auf diese Signale wahrscheinlich irgendwo ein anderes Signal 
zugewiesen und intern dieser Name dann weiterverwendet. Probier mal das 
Attribut KEEP aus...

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip, aber KEEP hab ich auch schon ausprobiert. Geht auch 
nicht. Ich kann die Signale trotzdem nicht mappen...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss was grundlegendes falsch sein. Signale, die auf Pins des FPGA 
geführt sind, werden nicht wegoptimiert. Höchtens bei Eingängen, die 
nicht benutzt sind. Aber Ausgänge werden immer verdrahtet. Wenn sie 
konstante Werte haben, dann sagt das ja die Synthese oder Modelsim, 
hängen sie in der Luft, gibts eine Warnung in ISE "used but never 
assigned" und sie werden standardmäßig auf 0 gezogen.

Autor: worzel11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt in Xilinx ISE eine advanced-Einstellung (keep hierarchy), die 
verhindert, dass die signale wegoptimert werden. Also mappen kann ich 
sie jetzt. Das behebt jetzt zwar die Wirkung, aber nicht die Ursache.
Da werd ich mich noch einmal dahinter klemmen müssen!

Vielen Dank mal!

Grüße

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ kannst Du Chipscope auch instanziieren. Da sparst Du Dir das 
rumgehampel mit dem ILA-Core.

Man muß halt nur im Quelltext alle Signale, die man beobachten will, an 
eine Stelle bringen. Das geht am Besten über einen Debug-record im 
Toplevel.

Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.