Xilinx ISE: Synthese hängt bei T51-Core

Admin Persönliche Seite #589195
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
Admin Persönliche Seite #589222
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
Gast #589472
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
Gast #589973
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
Admin Persönliche Seite #589982
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?
Gast #590253
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
Angehängte Dateien:
Admin Persönliche Seite #590269
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.
Gast #591144
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
Admin Persönliche Seite #591967
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.
Admin Persönliche Seite #592763
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.
Angehängte Dateien:
Gast #598062
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
#601482
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
Gast #601601
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
#601627
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren