Forum: FPGA, VHDL & Co. Xilinx ISE: Synthese hängt bei T51-Core


von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo,

ich versuche gerade den T51-Core 
(http://www.opencores.org/projects.cgi/web/t51/overview) in Xilinx ISE 
9.1i zu synthetisieren. Nur leider hängt die Synthese an einem Punkt und 
scheint nicht weiterzugehen (habe 15 min gewartet). Die letzten 
Meldungen:
1
Loading device for application Rf_Device from file '3s1000.nph' in environment C:\Xilinx91i.
2
INFO:Xst:2691 - Unit <SSRAM> : The RAM <Mram_RAM> will be implemented \
3
as a BLOCK RAM, absorbing the following register(s): <DOut>.
4
    -----------------------------------------------------------------------
5
    | ram_type           | Block                               |          |
6
    -----------------------------------------------------------------------
7
    | Port A                                                              |
8
    |     aspect ratio   | 2048-word x 8-bit                   |          |
9
    |     mode           | read-first                          |          |
10
    |     clkA           | connected to signal <Clk>           | rise     |
11
    |     weA            | connected to signal <_and0000>      | high     |
12
    |     addrA          | connected to signal <A>             |          |
13
    |     diA            | connected to signal <DIn>           |          |
14
    |     doA            | connected to signal <DOut>          |          |
15
    -----------------------------------------------------------------------
16
INFO:Xst:2664 - HDL ADVISOR - Unit <T51_RAM> : The RAM <Mram_IRAMA> will be \
17
implemented on LUTs either because you have described an asynchronous read \
18
or because of currently unsupported block RAM features. If you have \
19
described an asynchronous read, making it synchronous would allow you to \
20
take advantage of available block RAM resources, for optimized device usage \
21
and improved timings. Please refer to your documentation for coding \
22
guidelines.
23
    -----------------------------------------------------------------------
24
    | ram_type           | Distributed                         |          |
25
    -----------------------------------------------------------------------
26
    | Port A                                                              |
27
    |     aspect ratio   | 256-word x 8-bit                    |          |
28
    |     clkA           | connected to signal <Clk>           | rise     |
29
    |     weA            | connected to signal <Wr>            | high     |
30
    |     addrA          | connected to signal <Int_AddrA_r>   |          |
31
    |     diA            | connected to signal <DIn>           |          |
32
    -----------------------------------------------------------------------
33
    | Port B                                                              |
34
    |     aspect ratio   | 256-word x 8-bit                    |          |
35
    |     addrB          | connected to signal <Int_AddrA>     |          |
36
    |     doB            | connected to internal node          |          |
37
    -----------------------------------------------------------------------
38
INFO:Xst:2664 - HDL ADVISOR - Unit <T51_RAM> : The RAM <Mram_IRAMB> will \
39
be implemented on LUTs either because you have described an asynchronous \
40
read or because of currently unsupported block RAM features. If you have \
41
described an asynchronous read, making it synchronous would allow you to \
42
take advantage of available block RAM resources, for optimized device usage \
43
and improved timings. Please refer to your documentation for coding \
44
guidelines.
45
    -----------------------------------------------------------------------
46
    | ram_type           | Distributed                         |          |
47
    -----------------------------------------------------------------------
48
    | Port A                                                              |
49
    |     aspect ratio   | 256-word x 8-bit                    |          |
50
    |     clkA           | connected to signal <Clk>           | rise     |
51
    |     weA            | connected to signal <Wr>            | high     |
52
    |     addrA          | connected to signal <Int_AddrA_r>   |          |
53
    |     diA            | connected to signal <DIn>           |          |
54
    -----------------------------------------------------------------------
55
    | Port B                                                              |
56
    |     aspect ratio   | 256-word x 8-bit                    |          |
57
    |     addrB          | connected to signal <Int_AddrB>     |          |
58
    |     doB            | connected to internal node          |          |
59
    -----------------------------------------------------------------------

Ist das einfach normal dass das so lange dauert? Oder ist es ein Fehler 
dass die IRAMs als Distributed RAM realisiert werden, und ist es das was 
so bremst?

Kann ich irgendwie herausfinden woran die Synthese da gerade knabbert?

Danke
Andreas

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Jetzt ist er tatsächlich noch fertig geworden (nur um mir dann eine 
Multi-source Fehlermeldung anzuzeigen...), nach ganzen 45 Minuten. Das 
kann doch nicht normal sein?
1
Advanced HDL Synthesis Report
2
3
Macro Statistics
4
# FSMs                                                 : 2
5
# RAMs                                                 : 3
6
 2048x8-bit single-port block RAM                      : 1
7
 256x8-bit dual-port distributed RAM                   : 2
8
# ROMs                                                 : 1
9
 256x4-bit ROM                                         : 1
10
# Multipliers                                          : 1
11
 8x8-bit multiplier                                    : 1
12
# Adders/Subtractors                                   : 33
13
 13-bit adder                                          : 2
14
 16-bit adder                                          : 10
15
 16-bit addsub                                         : 2
16
 2-bit adder carry in                                  : 1
17
 4-bit adder                                           : 3
18
 4-bit adder carry in                                  : 1
19
 5-bit adder carry in                                  : 1
20
 8-bit adder                                           : 6
21
 8-bit addsub                                          : 1
22
 8-bit subtractor                                      : 3
23
 9-bit adder                                           : 2
24
 9-bit subtractor                                      : 1
25
# Counters                                             : 15
26
 15-bit up counter                                     : 1
27
 16-bit up counter                                     : 1
28
 17-bit up counter                                     : 1
29
 2-bit up counter                                      : 2
30
 3-bit up counter                                      : 1
31
 4-bit up counter                                      : 8
32
 6-bit down counter                                    : 1
33
# Registers                                            : 774
34
 Flip-Flops                                            : 774
35
# Comparators                                          : 12
36
 2-bit comparator equal                                : 1
37
 4-bit comparator greater                              : 2
38
 8-bit comparator equal                                : 4
39
 8-bit comparator less                                 : 1
40
 8-bit comparator not equal                            : 4
41
# Multiplexers                                         : 3
42
 1-bit 4-to-1 multiplexer                              : 2
43
 8-bit 4-to-1 multiplexer                              : 1
44
# Decoders                                             : 1
45
 1-of-4 decoder                                        : 1
46
# Xors                                                 : 7
47
 1-bit xor2                                            : 3
48
 1-bit xor8                                            : 1
49
 8-bit xor2                                            : 3

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Den nächsten Hänger gibt's bei der Low Level Synthesis (nach > 1 Stunde 
abgebrochen):
1
Optimizing unit <ROM52> ...

An das Place & Route will ich gar nicht erst denken.

von pumpkin (Gast)


Lesenswert?

Hallo Andreas,

es ist nicht unüblich dass ISE lange für die Synthese braucht. Ich 
selbst habe zwar noch nicht so lange wie du warten müssen, aber ich habe 
auch noch nicht ein solch umfangreiches Projekt durchgezogen. Da hilft 
nur massig Arbeitsspeicher der zudem auch noch von der extrem fixen 
Sorte sein sollte. Zudem sollte das Projekt keinesfalls auf einem 
Netzlaufwerk liegen. Was soll's, dann bleibt halt mehr Zeit Kaffee zu 
kochen  ; )

pumpkin

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Speicher ist nicht das Problem, der Prozess belegt gerade mal 200 MB, 
bei der Festplatte tut sich auch nichts. Ich kann das nicht so richtig 
glauben dass er mehrere Stunden an einem einfachen Block RAM herum 
optimiert. Vielleicht muss ich doch mal Quartus ausprobieren.

von Kim (Gast)


Lesenswert?

Hoi
also ich hatte das slebe prob auch schon lag bei mir daran das mein 
Programm zu gross für den FPGA war. Denke könnte bei dir auch das 
Problem sein...

gruss

Kim

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich synthetisiere für einen Spartan 3 1000, der Core sollte eigentlich 
schon in den 400er reinpassen. Kann es sein dass es am Distributed RAM 
liegt, und das eigentlich Block-RAM sein sollte?

von Kest (Gast)


Lesenswert?

Mhh, ich vermute auch mal, dass es an <Mram_IRAMB> liegen könnte, 
welches als LUT implementiert wird.

Habe ähnliches bei Quartus gehabt, allerdings habe ich da halbe Stunde 
gewartet und dann gings.

Kest

von Rick Dangerus (Gast)


Lesenswert?

@Andreas:

Deine Vermutung ist richtig.
Schau im XST-Guide nach, wie der Speicher beschrieben werden muss. Xst 
versucht aus dem ROM eine Funktion zu machen. Zum einen dauert das und 
zum anderen lief es bei mir auch nicht. Nach der Umstellung ging es. Der 
T51 sollte in einen S3 400 reinpassen, zur Not auch in den 200er.

Rick

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Beim ROM dürfte er das eigentlich nicht machen, er erkennt das schon als 
Block RAM (siehe "2048x8-bit single-port block RAM" oben in der Tabelle, 
steht auch noch explizit im Report). Deshalb verstehe ich die 
Verzögerung beim "Optimieren" dieses Block-RAMs auch nicht. Das 
Distributed RAM will er nur beim IRAM machen, und da geht es m.E. auch 
nicht anders, weil die Adresse nicht in einem Register 
zwischengespeichert wird, sondern direkt ohne Taktverzögerung einen 
Ausgangswert erzeugt.

Weißt du noch was genau du geändert hast um es zum Laufen zu bringen?

von Rick Dangerus (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab einiges geändert, aber was?!
Ich häng hier mal das Projekt dran. board.sch ist das top-Modul. Das UCF 
muss entsprechend der Hardware angepasst werden. Das Design wird mit 50 
MHz Clkin getaktet. Die serielle Schnittstelle läuft von 300 (sehr 
nostalgisch) bis 115200 bps. Man muß als erstes ein Leerzeichen 
schicken, damit die Baudratenerkennung läuft.

Der T51 braucht ca. 25% vom S31000. Die Synthese dauert ca. 25 Minuten 
(@500MHz, ISE8.2.04i).

Viel Spass und frag ruhig
Rick

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Danke. Ich habe erst am Wochenende wieder Zugriff auf einen Rechner mit 
ISE, dann werde ich deinen Code ausprobieren. Auf den ersten Blick sehe 
ich aber keine Unterschiede an den Stellen die ich für kritisch halte. 
T51_RAM sieht z.B. genauso aus; ich nehme an der wird bei dir auch als 
Distributed RAM synthetisiert?

Vielleicht taugt die ISE 9.1 einfach nichts? Soll ja schon vorgekommen 
sein dass sich ISE von einer Version auf die andere verschlechtert.

von Falk (Gast)


Lesenswert?

@   Andreas Schwarz

>Vielleicht taugt die ISE 9.1 einfach nichts? Soll ja schon vorgekommen
>sein dass sich ISE von einer Version auf die andere verschlechtert.

Das kommt scheinbar immer öfter vor . . . :-(
Naja, 1GB Datenwust kann schon mal aus dem Ruder laufen.

MfG
Falk


von T.M. (Gast)


Lesenswert?

"...Naja, 1GB Datenwust kann schon mal aus dem Ruder laufen..."

Und das auch noch gepackt vor der Installation. Version 8.2 hatte nach 
den ganzen Servicepacks bei mir am Ende eine stolze Größe von über 2GB 
:-/ Besser geworden ist es trotzdem kaum...

von Rick Dangerus (Gast)


Lesenswert?

@Andreas:
Ich hab es gerade nochmal unter ISE 9.1.03i durchlaufen lassen. Auf AMD 
X2 5000 dauert die Synthese 5 Minuten und benötigt ca. 50% von einem 
XC3S400 (optimiert ung getrimmt).

Hier ein Ausschnitt aus dem Log-File:
1
...
2
Synthesizing Unit <ROM52>.
3
    Related source file is ".../t51/rom52/testbench/ROM52_BASICX.vhd".
4
    Found 8192x8-bit ROM for signal <D$rom0000> created at line 2074.
5
    Found 13-bit register for signal <A_r>.
6
    Summary:
7
  inferred   1 ROM(s).
8
  inferred  13 D-type flip-flop(s).
9
Unit <ROM52> synthesized.
10
11
12
Synthesizing Unit <SSRAM>.
13
    Related source file is ".../t51/rtl/vhdl/SSRAM.vhd".
14
    Found 8192x8-bit dual-port RAM <Mram_RAM> for signal <RAM>.
15
    Found 13-bit register for signal <A_r>.
16
    Summary:
17
  inferred   1 RAM(s).
18
  inferred  13 D-type flip-flop(s).
19
Unit <SSRAM> synthesized.
20
...
21
# RAMs                                                 : 4
22
 256x8-bit dual-port distributed RAM                   : 2
23
 8192x8-bit single-port block RAM                      : 2
24
# ROMs                                                 : 3
25
 16x8-bit ROM                                          : 1
26
 256x4-bit ROM                                         : 1
27
 4x1-bit ROM                                           : 1

Der SSRAM ist nicht das Problem. Wichtig ist, das der ROM ins BlockRam 
wandert.

Ansonsten ist ISE 9 ca. 20% schneller (je nach Design) und synthetisiert 
etwas besser (auch je nach Design). Wer nicht soviel downloaden möchte 
nimmt ISE 6.3, das sollte für vieles ausreichend sein.

Rick

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

OK, dann liegt's wohl echt am ROM:
 8192x8-bit single-port block RAM                      : 2
Davon will er bei mir nur eines bauen. Komisch, wie gesagt bin ich mir 
ziemlich sicher dass er das als Block-RAM erkannt angezeigt hat. Werde 
das nochmal genauer anschauen.

Danke für die Hilfe!

von Stefan Salewski (Gast)


Lesenswert?

Rick Dangerus schrieb:
>Ich hab es gerade nochmal unter ISE 9.1.03i durchlaufen lassen. Auf AMD
>X2 5000 dauert die Synthese 5 Minuten und benötigt ca. 50% von einem
>XC3S400 (optimiert ung getrimmt).

Welches Betriebssystem?
Und werden beide Cores genutzt?

Gruß

Stefan Salewski

von Rick Dangerus (Gast)


Lesenswert?

@Stefan Salewski
Win 2003 Server, die Prozessor-Cores werden jeweils zu 50% bis 55% 
ausgelastet. Vielleicht bringt ja ISE10 da eine Verbesserung?!

Rick

von Rick Dangerus (Gast)


Lesenswert?

@Andreas:

Kein Problem. Vielleicht bekomme ich Dich ja noch dazu mit mir den 
AX8-Core aufzubohren. :-)

Rick

von Andreas (Gast)


Lesenswert?

Hast du eventuell eine Firewall laufen? Trenne ich meinen Rechner vom 
Netz und schalte die Firewall ab, läuft mein ISE 8.2i etwa zwei- bis 
dreimal schneller durch.

von Tippgeber (Gast)


Lesenswert?

Ich habe die ISE diesbezüglich mal getestet und kann keinen Unterschied 
ausmachen (?)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich habe auch schon gemerkt dass mein Antivirus-Programm ISE ausbremst, 
das war hier aber nicht der Fall.

@Rick: mir wäre ein AVR-Core eigentlich auch lieber als der 8051, u.a. 
weil da weniger Distributed RAM für die Register verschwendet wird, 
allerdings scheint mir der AX8 nicht so ausgereift sein wie der T51, und 
ich habe gehört dass der AX8 u.U. von Atmel-Patenten betroffen ist. 
Einen MSP430 gibt's leider nur in Verilog: http://bleyer.org/s430/
Die anderen Prozessoren bei Opencores sind entweder zu groß (OpenRISC, 
LEON) oder es gibt keinen passenden C-Compiler.

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Also es liegt doch am ROM, der mag aus diesem case-Konstrukt kein 
Block-RAM machen. Komisch, laut XST User Guide sollte if/case auch 
funktionieren. Ich habe das ROM zum Array umgebaut (Anhang), jetzt läuft 
die Synthese durch. Allerdings komme ich nur auf 43 MHz.

Ich habe TXD, RXD, Clk und Reset (low-aktiv) angeschlossen, und den Rest 
offen gelassen bzw. auf 0 gelegt. Wenn ich Leertaste drücke passiert 
aber nichts; da ist wohl noch ein wenig Debugging nötig.

von Rick Dangerus (Gast)


Lesenswert?

@Andreas:

Siehst Du den Unterschied?
1
type rom_type is array(8191 downto 0) of std_logic_vector(7 downto 0); -- aus ROM52_BASIC.vhd
2
3
type rom_type is array (0 to 8191) of std_logic_vector (7 downto 0); -- aus ROM52_BASICX.vhd
Hat mich auch mindestens einen Tag gekostet, das rauszufinden :(

Rick

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ah, danke. Ich habe gar nicht gesehen dass du das ROM in deinem Projekt 
auch geändert hast, habe nur ins rtl-Verzeichnis geschaut.

Jetzt gibt mein Board ca. 1-mal pro Sekunde lange 0-Pulse an TXD aus, 
reagiert aber nicht auf ein gesendetes Leerzeichen oder irgend etwas 
anderes. Muss das noch weiter untersuchen.

von Rick Dangerus (Gast)


Lesenswert?

@Andreas

> allerdings scheint mir der AX8 nicht so ausgereift sein wie der T51, und
> ich habe gehört dass der AX8 u.U. von Atmel-Patenten betroffen ist.

Naja ich verwende den AX8 und ja, es gibt ein paar kleine Macken, aber 
im großen und ganzen recht brauchbar. Außerdem funktioniert die bekannte 
Toolchain.

Kannst Du Näheres zu den Patenten sagen?

Rick

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das mit den Patenten habe ich in comp.arch.fpga gelesen, auch nur so als 
Gerücht. Kann also nichts genaueres dazu sagen.

von Andreas V. (avg)


Lesenswert?

Hallo,

damit das Basic-52 läuft musst Du zumindest noch P3.0 und RXD 
miteinander verbinden (so wie es beim Intel-Original der Fall ist).
Die Autobaud-Detektion läuft über P3.0 ab.
Weiters MUSS der Array-ROM ein array (0 to 8191) sein, da ansonsten der 
Inhalt nicht stimmt (ist genau verkehrt).

Es ist ein bekanntes Problem dass die ISE-Synthese einige Schwächen hat 
(u.a. funktioniert ein Case-Rom nicht).

Der AX8-Core hat leider noch einige offene Bugs. Darum habe ich diesen 
Core bisher noch nicht eingesetzt (obwohl er sehr interessant wäre).
Und leider gibt es keine Hoffnung dass der Author (Daniel Wallner) diese 
jemals beheben wird.

MfG.
Andreas

von Rick Dangerus (Gast)


Lesenswert?

@Andreas Voggeneder:
[AX8]
> Und leider gibt es keine Hoffnung dass der Author (Daniel Wallner) diese
> jemals beheben wird.
Warum?

Ich denke der AX8 ist ausbaufähig. Eine Erweiterung mit Watchdog, zwei 
zusätzliche Ports und auf 8k- Programmspeicher habe ich schon gemacht. 
Damit entpricht der Core dem AT90S8535.

Um einen ATMega8 draus zu machen, müssten einige Module erweitert werden 
(neuer Counter, I2C, Hardware-MUL, etc.). Sollte aber insgesammt nicht 
unlösbar sein.

Rick

von Andreas V. (avg)


Lesenswert?

Hallo,

Daniel Wallner hat seine OpenCores Tätigkeiten ohne Angabe von Gründen 
eingestellt. Die letzten Updates hat er 2002 gemacht. Seither konnte ich 
ihn nicht mehr erreichen.
Ich habe den T51 Core von ihm übernommen und fertiggestellt. Aber beim 
AX8 Core habe ich dies nicht vor (keine Zeit).
Mit dem T51 Core habe ich seither schon sehr viele Projekte realisiert 
(z.B. für Elektor FPGA Kurs). Diesen Core kann ich wirklich für ein 
Projekt empfehlen, da schon sehr gut getestet (ist auch schon in einigen 
ASICs im Einsatz).

Wenn Dir aber ein AVR lieber ist so kann den AVR_Core 
(http://www.opencores.org/projects.cgi/web/avr_core/overview) empfehlen.
Diesen habe ich schon ausgiebig verifiziert und eingesetzt, bisher ohne 
Probleme. Ist zwar nur ein Mega103, läuft aber prima.

MfG.
Andreas

von Dirk (Gast)


Lesenswert?

Nur leider kann man den avr_core nicht mehr herunterladen.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Dirk (Gast)


Lesenswert?

Ja, das funktioniert.Vielen Dank.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Danke für den Hinweis mit P3.0, das war's. Jetzt läuft das Basic.

von Dirk (Gast)


Lesenswert?

Hat zwar nichts mit P3.0 zu tun.
Hast Du die Synthese inzwischen schneller hin bekommen geworden ?
Bei mir dauert die ca 20 Minuten auf einem Athlon64 3000.
Ganz schön nervig.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Auf meinem Athlon 64 4800 dauert es ca. 5 Minuten. Allerdings habe ich 
bisher nur RXD/TXD angeschlossen, kann sein dass deshalb schon früh viel 
wegoptimiert wird.

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.