www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx ISE XST Probleme


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Forumsnutzer,

ich habe ein Problem. Ich benutze das Xilinx ISE Webpack 9.2i mit dem 
Service Pack 4 auf Windows XP. Mit Hilfe dieser Software habe ich ein 
VHDL-Design erstellt. Ist ein Datencodierer. wenn ich aber die Synthese 
XST anschmeise synthetisiert der sich tot. Auch 24 Stunden reichen hier 
nicht aus. Irgendjemand in der Lage mir zu sagen, wie ich das Xilinx 
Synthese-Tool beschleinigen kann? Ich brauche dringend Hilfe.

MfG Sebastian

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da müsste man schon den Code sehen.

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Code, ich hab auch mal versucht die if-schleifen durch 
Case-Anweisungen zu ersetzen, aber hat nichts gebracht.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine Testbench dazu? Dann könnte man das ganze erstmal durch den 
Simulator schicken.

Ich denke, xst verschluckt sich an den verschachtelten if-Abfragen. 
Versuch das mal in case umzuwandeln. Siehe dazu die Beispiele im xst 
user guide.

Außerdem: Verwende möglichst ieee.numeric_std.all;
Dann kannst Du Deine Abfragen lesbar gestalten.
if AC_in(11 downto 8) = "0000" then

Für AC_in(11 downto 8) würde ich einen lesbaren alias anlegen und den in 
unsigned oder integer wandeln:
if AC_alias = 0 then

Rick

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank erstmal für eure Mühen.

Ja, eine Testbench gibt es dazu, aber da müsste ich hier noch jede Menge 
andere Designs rein stellen. Das Design ist nur Teil eines größeren 
Designs wofür ich eine TB geschrieben habe. Aber die Funktionalität ist 
nicht das Problem. Die Simulation zeigt, dass alles funktioniert, wie es 
sollte.

Das ganze ist sehr komisch. Im Prozess Register_write muss der Hemmschuh 
liegen. Denn wenn ich den ganzen Prozess kommentiere´, dann ist die 
Synthesezeit extrem kurz.

Mein zweiter Schritt war dann nur den Teil mit "elsif AC_rdy = '1' then 
..." im Prozess Register_write auszudokumentieren. Das ging auch ohne 
lange Synthesezeit. Sobald ich jedoch die If/Elesif bzw. Case-Abfragen 
reindokumentiere braucht der ewig.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
signal index_a, index_b : integer := 0;
...
out_reg_a((84 - index_a) downto (80 - index_a)) <= conv_std_logic_vector(AC_ADD_Code, 5);

Wie stellst du dir vor dass das synthetisiert wird? Da kann nur etwas 
monströses herauskommen, mich wundert dass XST das überhaupt annimmt.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das verstehe ich nicht so ganz?

Ich wandele das Intgersignal ACC_ADD_Code in ein STD_LOGIC_VECTOR der 
Länge 5 um. Diesen Vektor schreibe ich dann das spätere Ausgaberegister 
out_reg_a/b. Die Indexsignale index_a/b werden doch jeweils weiter 
gezählt.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im günstigsten Falle wäre das ein 5Bit 1-zu-81 Demultiplexer. Im 
ungünstigsten Falle einer mit 1-zu-4 Milliarden - dann nämlich, wenn xst 
nicht den begrenzten möglichen Zahlenraum für index_a erkennt. Auch im 
ersten Fall erzeugt das einen ganzen Haufen sehr langsame Logik (>300 
LUTs).

Durch die Vielzahl an cases in denen dieser Multiplexer, zumal auch noch 
mit unterschiedlichsten Wortbreiten, auftritt, potenziert sich das dann 
natuerlich noch!

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo sieht ganz so aus als würdest du viel zu viel kombinatorische 
Schritte in einem Taktzyklus erledigen wollen. Das führt dann zu einem 
riesigen Datenpfad. Das kriegst du niemals in einem FPGA unter, und die 
erlaubte Taktrate wäre winzig. Besser, du führst die Operationen nicht 
alle parallel aus, sondern nacheinander (Steuerung des ganzen über eine 
State-Machine).

Und als ob das noch nicht reicht, hast du eine Menge Anweisungen da 
stehen, die das XST erst umständlich vereinfachen muss, um die Logik 
dahinter zu erkennen. Beispiel:
... DC_in < "000010000" ...
Kannst du umwandeln in
-- vereinfacht: DC_in < "000010000"
... DC_IN (8 downto 4) = "00000" ...
dann hat das XST weniger zu tun und du kriegst einen besseren Überblick 
darüber wieviel kombinatorische Logik du da hinschreibst. (Wenn das XST 
wirklich Größenvegleicher daraus bauen würde würde es in keinen FPGA 
passen).

Ob du z.B. die < Operatoren in einfachere Logik umwandelst oder einen 
einzigen Größenvergleicher mehrfach in verschiedenen Takten benutzt 
bleibt dir überlassen, da musst du halt rausfinden was besser 
funktioniert. Das kommt vor allem drauf an ob es eine einfache 
Ersatzlogik gibt (wie oben) oder nicht.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja und wie schon gesagt wurde: Den "integer"-Typ ohne Range-Angabe 
kannst du für die Synthese vergessen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke Jungs,

eure Tipps haben gefruchtet. Ich hab das Design umgeschrieben und jetzt 
synthetisiert es sich. Echt super dieses Forum.

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.