Forum: FPGA, VHDL & Co. Problem mit Synthese von Generate-Anweisungen


von Manuel U. (muml)


Lesenswert?

Hallo zusammen,

bei der Synthese für einen Spartan-3E habe ich das Problem, dass er bei 
folgendem Code-Teil abbricht:
1
constant REFWIN: positive := 8;
2
3
type DataBus10B is array(positive range <>) of unsigned(9 downto 0);
4
signal tmpVal  : DataBus10B(1 to REFWIN/8);
5
signal maxVal  : DataBus10B(1 to 2);
6
7
[...]
8
9
genLayer16 : if REFWIN = 16 generate
10
  maxVal <= tmpVal;
11
end generate genLayer16
12
13
[...]

Wobei REFWIN und DataBus10B eigentlich in einem eingebundenden Package 
deklariert werden.
XST beschwert sich nun, dass die Breiten nicht übereinstimmen (in Zeile 
maxVal <= tmpVal):
1
Width mismatch. Expected width 2, Actual width is 1 for dimension 1 of tmpVal.
Aber genau das soll mit der if-Abfrage eigentlich ausgeschlossen werden. 
Compiliert er den Inhalt einer generate-Anweisung pauschal und lässt den 
Teil erst später weg? ModelSim hat damit übrigens keine Probleme. Die 
Simulation läuft problemlos.
Kann vielleicht jemand etwas Licht ins Dunkel bringen?

Viele Dank und Grüße.

von Gustl B. (-gb-)


Lesenswert?

Wenn REFWIN = 8
dann ist REFWIN/8 = 1 und
DataBus10B(1 to REFWIN/8); = DataBus10B(1 to 1); = DataBus10B(1);

maxVal ist aber 2 Bits breit und tmpVal nur 1.

Edit: Also das mit dem if kann ich auch nicht erklären, vielleicht 
kannst du ja das andere Bit irgendwie auffüllen, also sowas wie:


signal tmpVal  : std_logic_vector (1 to 2);

tmpVal <= DataBus10B(1)&'0' when REFWIN=8 else DataBus10B(1 to 2);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gustl Buheitel schrieb:
> maxVal ist aber 2 Bits breit und tmpVal nur 1.
Aber es sollte gehen, wenn REFWIN = 16 ist...
Manuel U. schrieb:
> genLayer16 : if REFWIN = 16 generate
Und wenn REFWIN /= 16 ist, dann sollte gar nichts erzeugt werden.

Manuel U. schrieb:
> XST beschwert sich nun, dass die Breiten nicht übereinstimmen ...
> Die Simulation läuft problemlos.
In solchen Fällen probiere ich immer erst mal den neuen Parser aus:
http://www.lothar-miller.de/s9y/archives/79-use_new_parser-YES.html

von Manuel U. (muml)


Lesenswert?

Hallo Lothar,

danke für den Tipp. Leider ist es mir nicht gelungen, diese Option zu 
setzen, da mir keine GUI zur Verfügung steht. Konfiguration und Start 
von XST erfolgt über ein Tcl-Skript. In Anlehnung an bereits gesetzte 
Optionen habe ich es dort mit
1
project set "Use New Parser" YES
probiert. Darauf sagt er:
1
WARNING:TclTasksC:2136 - Unknown property name 'Use New Parser'
Ich finde die Option auch nicht in der Dokumentation (ich arbeite mit 
Version 12.2).

Also kann ich prinzipiell davon ausgehen, dass es sich hierbei um einen 
Bug handelt? (Edit: Also das ursprüngliche Problem.)

von Christian R. (supachris)


Lesenswert?

In der 12.2 ist das eventuell noch nicht drin. Aber wenn ich ein TCL 
Script aus so einem Projekt erzeugen lasse, steht das drin:
1
project set "Other XST Command Line Options" "-use_new_parser yes" -process "Synthesize - XST"

von Nachrichtentechnikingenieur (Gast)


Lesenswert?

Kannst Du das nicht in einer GUI einbinden und Dir das tcl dazu erzeugen 
lassen?

Danke übrigens an Lother für den Tipp!
Das kannte ich noch nicht.

von Manuel U. (muml)


Lesenswert?

Vielen Dank an Christian für den Tcl-Befehl! Die Option ist tatsächlich 
bekannt und funktioniert (er warnt nur kurz, dass es zu Problemen kommen 
könnte). Und mit der Option tritt das Problem mit der Generate-Anweisung 
tatsächlich nicht mehr auf. Danke für den super Tipp, Lothar!

Leider bricht die Synthese jetzt beim Translate in einem anderen Teil 
des Designs (den ich nicht programmiert habe) ab. Aber das ist ein 
anderes Problem, das bis morgen warten kann ;-)

Viele Grüße!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manuel U. schrieb:
> project set "Use New Parser" YES
Na gut, da fehlen ja auch mindestens die Unterstriche... ;-)

Nachrichtentechnikingenieur schrieb:
> Danke übrigens an Lother für den Tipp!
Manuel U. schrieb:
> Danke für den super Tipp, Lothar!
Ich habe mich auch schon gefragt, warum Xilinx da so konservativ ist...
> Ich finde die Option auch nicht in der Dokumentation
> (ich arbeite mit Version 12.2).
Nach 3 Jahren hätten die Jungs den neuen Parser schon mal öffenlich 
vorstellen können. Mir ist auf jeden Fall noch nichts unangenehm 
aufgefallen.

von Manuel U. (muml)


Lesenswert?

Lothar Miller schrieb:
> Manuel U. schrieb:
>> project set "Use New Parser" YES
> Na gut, da fehlen ja auch mindestens die Unterstriche... ;-)

Eigeninitiative ;-)

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> Nach 3 Jahren hätten die Jungs den neuen Parser schon mal öffenlich
> vorstellen können. Mir ist auf jeden Fall noch nichts unangenehm
> aufgefallen.
Für die Spartan6 nimmt er den neuen Parser automatisch. Wahrscheinlich 
wollte bei Xilinx niemand den neuen Parser mit den 'alten' Chips 
(Spartan3, Spartan3E, Spartan 3A) testen.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Für die Spartan6 nimmt er den neuen Parser automatisch.
Richtig, ich erinnere mich: so bin ich damals drauf gekommen.
Für die 6er gings, der selbe Code für die 3er aber nicht...

von Duke Scarring (Gast)


Lesenswert?

Ich hette mich auch gewundert, warum diverse XST-Problemchen auf einmal 
weg waren...

Duke

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.