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
Hier der Code, ich hab auch mal versucht die if-schleifen durch Case-Anweisungen zu ersetzen, aber hat nichts gebracht.
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.
1 | 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:
1 | if AC_alias = 0 then |
Rick
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.
1 | signal index_a, index_b : integer := 0; |
2 | ...
|
3 | 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.
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.
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!
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:
1 | ... DC_in < "000010000" ... |
Kannst du umwandeln in
1 | -- vereinfacht: DC_in < "000010000" |
2 | ... 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.
Achja und wie schon gesagt wurde: Den "integer"-Typ ohne Range-Angabe kannst du für die Synthese vergessen.
Ich danke Jungs, eure Tipps haben gefruchtet. Ich hab das Design umgeschrieben und jetzt synthetisiert es sich. Echt super dieses Forum.
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.