Forum: FPGA, VHDL & Co. Xilinx: LOC Constraint für BRAMs


von T.M. (Gast)


Lesenswert?

Ich hab hier ein Problem mit der Benutzung von BRAMs. Ich möchte für die
RAMs ein LOC-Constraint im UCF-File angeben. Lauf V2_user_guide ist es
möglich mit "LOC = RAMB16_X#Y#M".
Nun habe ich also folgende Zeile in mein ucf-File eingefügt:
1
INST "fifo_ram"   LOC = RAMB16_X1Y1M;

NGDBUILD meckert nun aber bei der Impl., dass er die Instanz nicht
finden würde:
1
ERROR:NgdBuild:752 - Line 55 in
2
'../../../../layout/bmt_v2.ucf': Could not find
3
   instance(s) 'fifo_ram' in the design.  To suppress this error,
4
specify the
5
   correct instance name or remove the constraint.  The 'Allow
6
Unmatched LOC
7
   Constraints' ISE property can also be set ( -aul switch for command
8
line
9
   users ).

Ich hab aber die Komponente unter dem Instanznamen eingefügt:
1
  fifo_ram : v2_dpram64x8
2
    PORT MAP (
3
      addra => wr_ptr_i,
4
      addrb => rd_ptr_i,
5
      clka  => clk,
6
      clkb  => clk,
7
      dina  => fifo_din_i,
8
      dinb  => logic_0_bus,
9
      douta => OPEN,
10
      doutb => fifo_dout_o,
11
      wea   => fifo_we_i,
12
      web   => logic_0_i
13
    );

Hat schonmal jemand ein loc-Constraint für den BRAM gesetzt und dabei
vielleicht ähnliche Erfahrungen gemacht?

von T.M. (Gast)


Lesenswert?

Ich glaube ich weiss, warum das nicht geht. Das liegt wohl (mal wieder)
am Xilinx Modular Design Flow. Die BlockRams liegen in einem
Untermodul, und das wird natürlich am Anfang gar nicht analysiert. Da
findet er natürlich auch keien Bram Instanz, da im Top-Level keine
ist...

Wiedermal eine Frage für den Xilinx Support :-/

von FPGAküchle (Gast)


Lesenswert?

Also meckert man nicht ständig auf Xilinx ...

Hoffentlich ist es kein problem aus der Kiste "dhynamische
rekonfiguration", ansonsten liegt das problem im unvollständigen
Instanzenpfad.

ngdbuild findet sehr wohl Instanzen in Untermodulen, da in dieser Phase
alle Netzlisten zusammengebunden werden. Falls du hier eine Netzliste
vergisst liegt die schuld nicht bei ngdbuild.

Dein problem ist der fehlenden Pfad, es genügt nicht den Namen der
Instanz des Submodules zu nennen, Du musst auch den Namen der Instanz
des Modules nennnen. Oder man hilft sich mit wildcards, siehe Beispiel:


 INST "*multiply_rggb_1" LOC=MULT18X18_X1Y1;

Der "*" spart mir den Namen der Instanz des Modules. Instanzenpfade
findet man ganz gut im FPGAEditor. Dort den BRAM anklicken und Du hast
einen fürs ucf passenden Namen.

von T.M. (Gast)


Lesenswert?

"...Hoffentlich ist es kein problem aus der Kiste "dhynamische
rekonfiguration"..."
Du hast es erfasst :-D

Und da wird in der ersten Phase nur das Top level analysiert,
synthetisiert und implementiert. Da wird natürlich das ganze ucf
eingelesen...aber der BRAM ist in dem 2. Modul. Das wird erst später im
2. Schritt erledigt...

Aber das mit dem Pfad probier ich trotzdem mal...du meinst mit Pfad
denke ich mal, die Entitynamen bis runter in das Modul, wo der BRAM is,
oder?

von FPGAküchle (Gast)


Lesenswert?

#Aber das mit dem Pfad probier ich trotzdem mal...du meinst mit Pfad
#denke ich mal, die Entitynamen bis runter in das Modul, wo der BRAM
is,
#oder?

Dhynamische Konfiguration, ahnte ich es doch, damit ist der T.M gerade
schwer am schaffen...


Hm vollständiger Pfad eben, das ist immer wieder überraschend wie die
entitynamen zusammengafasst werden. das ist nicht immer vorhersehbar.
Oft sagt einem der FPGA-Editor wie dar Pfad im design heisst. Aber auch
dieser stimmt nicht immer.
dann tippe ich oft auf Unterschiede in der groß/Klein schreibung. Oder
einanderer Pfadsepeartor ("/" statt "_" oder andersrum) Die
Wildcards helfen oft ("*" vorn und hinten im Pfad) aber manchmal ist
ein Wildcrad zuviel. (Es scheint das bei Xilinx "*" nicht für eine
leere zeichenkette zu stehen). Falls der FPGA Editor nicht hilft
generiere dir eine EDIF Liste aus dem *.ncd ( netgen ist das Xilinx
tool dafür).

Wenn das nicht hilft, verbaue die anderen BRAM's die xilinx nicht
verwenden soll.
Also Instanziere die nicht gewollten BRAMs in der Top entity (da sollte
der instanzpfad einfecher sein) mit einem dummy design (z.B. im reset
eine 3 an adresse 4 schreiben) und verpasse diese ein Area constraint.
dann bleibt für den kritsichen BRAM nur einer übrig ....

Für den FPGA Editor brauchst du natürlich den ouput des mappers.
Vielleicht kannst du erstmal ein design ohne dhynamischen Hokuspokus
bauen und an diesem die Instanznamen extrahieren.

Oder du allokierst deinen BRAM in der typ entity (einfacher
Instanzpfad) und schleifst die Signale in das submodule runter.

Versuche das BRAM_interface (datenbusbreite etc) für alle
Konfigurationen gleich zu halten. dann könnte man es auch aus eine
konfigurierbaren bereich rausschieben.

von T.M. (Gast)


Lesenswert?

Was is eigentlich mit deiner FPGAKueche passiert? Ist gar nicht mehr
erreichbar...

Das Problem bei der dyn. Rekonf, die nur mit dem Modular Design Flow
funzt (XMDF), ist, dass im Top Level nur die Module und etweige
benötigte Clockressourcen (DCM, Buffer) vorhanden sein dürfen.

Ich hab nun das Problem, dass am Ende beim Final Assembly (Verbinden
der Einzel-Bitstreams zu einem gesamten) ein paar Signale nicht
geroutet werden können. Und da hab ich mir gedacht, dass man vielleicht
auch den RAM genau platzieren sollte, weil man das bei anderen
Primitiven auch machen sollte.

Aber vielleicht erledigt sich das sowieso in den nächsten Tagen, es
gibt da von Xilinx ein Update für die ISE extra für die partielle dyn.
Rekonf, das spielen wir die Woche drauf.

Das Problem mit den "SplitRoutableLoadPins" liegt nämlich auch noch
in der Luft, da warten wir auch erstmal auf das Update, bevor wir den
Support "belästigen" ;-)

UPDATE: mit dem kompletten Pfad für die RAMs scheint das Constraint zu
funzen :-)

von FPGAküchle (Gast)


Lesenswert?

<Was is eigentlich mit deiner FPGAKueche passiert? Ist gar nicht mehr
<erreichbar...

Hm, meinst Du?

 http://wikihost.org/wikis/fpgakueche/

die ist immer noch online, wenn auch seit Februar nicht mehr aufgeräumt
...

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.