Forum: FPGA, VHDL & Co. Xilinx ISE BRAM overmapped


von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Bei mir sind die RAM16 ausgegangen aber noch genügend RAM8 vorhanden.
Wie kann ich aus zwei RAM8 ein RAM16 machen?
Da gibt es doch sicher eine versteckte Einstellung?!


Specific Feature Utilization:
  Number of RAMB16BWERs:                        39 out of      32  121% 
(OVERMAPPED)

  Number of RAMB8BWERs:                          1 out of      64    1%
  Number of BUFIO2/BUFIO2_2CLKs:                 0 out of      32    0%
  Number of BUFIO2FB/BUFIO2FB_2CLKs:             0 out of      32    0%

von Gustl B. (-gb-)


Lesenswert?

Welches FPGA ist das denn?

Ich vermute mal, dass das insgesammt 32 ram16 sind die aber auch als 64 
ram8 verwendet werden können. Die 39 sind dann 38 ram16 und ein ram8 - 
belegen aber zusammen 39 ram16.

von Thosch (Gast)


Lesenswert?

Wie wär's denn, wenn du mal ein paar elementare Infos mitliefern 
würdest:
Welches FPGA von welchem Hersteller?

Tippe beim Namen RAMBxBWER mal auf Xilinx, aber welche Familie?
Spartan 6 oder was anderes?

wenn ich jetzt weiterrate, komme ich bei 32 Blockrams auf 2 mögliche
Teile, XC6SLX9 oder XC6SLX16

In diesem Falle wirst du dein Design wohl umstellen müssen oder ein 
größeres FPGA benutzen, denn es gibt nur einen Typ Blockrams im FPGA.

Der "Utilization Report" ist da mißverständlich.
Du hast 32 RAMB16BWERs -oder-  64 RAMB8BWERs.
Oder jede andere Kombination daraus, wobei du jedes der vorhandenen
32 RAMB16BWERs entweder als solches (im Ganzen) nutzen kannst,
oder aufgeteilt auf zwei RAMB8BWERs.

Schau mal ins zugehörige User-Guide, bei Spartan 6 wäre das
UG383 BlockRAM Resources User Guide

von Uwe2 (Gast)


Lesenswert?

Ist schon komisch, daß da genau Doppelt soviel 8-Bit RAMs drinne sein 
sollen wie 16-Bit RAMs ;-)
Ich glaube der macht das automatisch bzw. hat es schon gemacht.
Warum sich jedoch die Anzeige nicht aktualisiert und er automatisch 2 
8-Bit RAMs von den abzieht, wenn er ein 16-Bit RAM verbraten hat ...
Kann ja sein das deine FPGA Architektur getrennte 8 und 16 Bit RAMs hat, 
habe ich jedoch so noch nicht gesehen.
Welches FPGA benutzt du denn ?

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

ISE ist Xilinx

und konkret geht es um den Spartan6-16 auf dem Entwicklungsboard SP601.

>Ich vermute mal, dass das insgesammt 32 ram16 sind die aber auch als 64
>ram8 verwendet werden können.

genau das suche ich.


Der RAM wird von Chipscope gefressen.

von Gustl B. (-gb-)


Lesenswert?

Wie was suchst du?
Egal von was der RAM gefressen wird, du hast nur 32 ram16.
Klar du kannst das auch alles in ram8 ausdrücken, also du benötigst ja 
39 ram16 von denen einer nur halb gebraucht wird, daher der eine ram8. 
In ram8 sind das (39 -1)*2 +1 =76+1=77 ram8. Ist aber auch zuviel da du 
nur 64 ram8 hast wenn du auch die 32 ram16 als ram8 ausdrückst.

von Thosch (Gast)


Lesenswert?

Wie ich bereits schrieb:
> Du hast 32 RAMB16BWERs -oder-  64 RAMB8BWERs.

oder, nicht und.

Ergo: Zu viele genutzte Blockram-Ressourcen bleiben zu viele genutzte 
Blockram-Ressourcen, ganz egal wie man sie aufteilt.

von Christian R. (supachris)


Lesenswert?

Es gab auch mal einen Bug in einer Xilinx Version, da hat ChipScope zu 
viel RAM gefressen, obwohl das gar nicht parametriert war. Welche 
Version nutzt du denn?

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Version nutzt du denn?

Es war die ISE14.5.


Wie ich bereits schrieb:
> Du hast 32 RAMB16BWERs -oder-  64 RAMB8BWERs.
>oder, nicht und.
Der RAM8 hat im Spartan6 beim intialisieren mit dem JTAG einen Bug und 
der RAM16 nicht. Deshalb dachte ich es wäre und.

von Christian R. (supachris)


Lesenswert?

Achso, in der 14 war das behoben. Nee, das ist Xilinx-Marketing. Ent 
oder weder. Verwirrend, aber passt zum teilweise schrottigen Spartan 6.

von Thosch (Gast)


Lesenswert?

Christian R. schrieb:
> Verwirrend, aber passt zum teilweise schrottigen Spartan 6.

Also schrottig oder auch teilweise schrottig find ich die Spartan 6 nun 
gerade nicht...

Habe im Laufe der Zeit mit einigen Xilinx-Familien gearbeitet:
XC4000, Virtex, Virtex 2, Virtex 4,
Spartan (5V), Spartan 2, 2E, Spartan 3A, 3AN, Spartan 6

Als "teilweise schrottig" würde ich da eher andere Familien bezeichnen:
Virtex 4 hat so einige Macken (z.B. ein kumulatives Zeitlimit, wie lange 
man das FPGA unkonfiguriert unter Betriebsspannung halten darf
sowie diverse Bugs, u.a. in den DCMs, die Zusatzlogik erfordern)

Spartan 3 (nicht-A) unterstützt nur 2,5V VCCAUX, und betreibt das 
Konfigurationsinterface damit - ihbääh.


Spartan 6 hat einige Vorzüge hinsichtlich Taktverteilung, gerade wenn 
man wie ich oft viele unabhängige Takte benötigt. Spartan 6 hat feiner 
aufgeteilte Clock-Regions als z.B. die Spartan-3 Serie, die nur 4 
Quadranten bietet, in denen jeweils mit einer Auswahl von 8 aus 16 
globalen Takten gearbeitet werden kann.

von Christian R. (supachris)


Lesenswert?

Naja, jede Familie hat so ihre Schwierigkeiten. Der Spartan 6 sollte 
anscheinend eine eierlegende Wollmilchsau werden, die dazu noch nichts 
kosten darf. Da ist einiges auf der Strecke geblieben. Gerade bei der 
Taktung finde ich einige Sachen sehr seltsam, z.B. die BUFIO2 Regionen 
für die ISERDES/OSERDES, da geht nur eine halbe Bank. Der DCM braucht 
immer eine extra Einladung, wenn der Takt mal weg war, AES geht nicht 
zusamen mit Multiboot, die BRAMs haben die Init-Macke, FIFOs mit mehr 
als 64k will der Core Gen nicht generieren...im Prinzip sind die vom 
Preis-Leistungsverhältnis schon prima, aber eben ziemlich eingeschränkt 
an manchen Ecken.

von J. S. (engineer) Benutzerseite


Lesenswert?

Christian R. schrieb:
> FIFOs mit mehr
> als 64k will der Core Gen nicht generieren

Tja, liegt sicher an der Definition der generics der Counter. 16Bit 
Grenzen gibt es überall. Hatte das mal bei Altera. Man konnte ein RAM 
definieren, es aber nicht komplett belegen. Also musste ich Einzelrams 
in 4 Teilen bauen, und Einzel-images verwenden.

René D. schrieb:
> Wie kann ich aus zwei RAM8 ein RAM16 machen?
> Da gibt es doch sicher eine versteckte Einstellung?!

"BRAM-Packing" sollte aktiv sein, damit die Syn das zusammenpacken kann. 
Mehr Optionen hast Du nicht. Sicherheitshalber würde ich "pack LUTs into 
RAM" noch abschalten. Auch die DSP-Elemente nehmen BRAM weg. Daher MULs 
gfs als LUTs ausführen. Oder den ChipScope kleiner machen.

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
> Number of RAMB16BWERs:                        39 out of      32  121%
Wofür werden denn die BRAMs konkret genutzt? Wieviele BRAMS braucht 
Chipscope? Und brauchst Du Chipscope wirklich? Hast Du eine 
Systemsimulation? Funktioniert die? Zeigt Chipscope ein anderes 
Verhalten als die Simulation?

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Duke

>Hast Du eine Systemsimulation?
Ja
Funktioniert die?
Ja

>Zeigt Chipscope ein anderes Verhalten als die Simulation?
Ja

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
>>Zeigt Chipscope ein anderes Verhalten als die Simulation?
> Ja
Ok. Dann ist Chipscope offenbar wirklich mal notwendig.
Vielleicht kannst Du das Problem isolieren und einzeln mit Chipscope 
behandeln.
Wenn Du dem Problem auf den Grund gegangen bist, kannst Du ja Chipscope 
wieder rausnehmen.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Wenn Du dem Problem auf den Grund gegangen bist, kannst Du ja Chipscope
> wieder rausnehmen.
Ja da habe ich auch vor.
Ich konnte den Fehler schon lokalisieren. Da ich aber nur ein paar Daten 
parallel aufzeichnen kann und der Fehler sehr schlecht reproduzierbar 
ist, komme ich nicht ganz dahinter. Ich werde den Bereich nochmal 
herausnehmen und getrennt untersuchen.

von Thosch (Gast)


Lesenswert?

wenn Simulation und reales Verhalten im FPGA auseinanderlaufen, liegt es 
praktisch immer an fehlenden oder falschen Timing-Constraints.

Generier dir mal mit dem Timing-Analyzer der ISE einen Timing-Report mit 
"unconstrained paths" drin, dann siehst du schonmal, ob deine 
Constraints irgenswo was ausgelassen haben, was kritisch ist.

Ansonsten bleibt dir kaum was anderes übrig, als die Baugruppe 
einzukreisen, in der das Fehlverhalten auftritt und dann dort nochmals 
alles auf Korrektheit der Timing-Constraints zu überprüfen.
Wenn ein schnell getakteter Pfad langsam constrained ist, meckert der 
PAR zwar nicht im Report, aber es funzt natürlich nicht. (oder je nach 
Fitter-Durchlauf nur manchmal, wenn der Pfad zufälligerweise schnell 
genug geroutet wurde, obwohl nicht so constrained).

von Lattice User (Gast)


Lesenswert?

Thosch schrieb:
> wenn Simulation und reales Verhalten im FPGA auseinanderlaufen, liegt es
> praktisch immer an fehlenden oder falschen Timing-Constraints.
>

Vorrausgesetzt alle Sensitivitylisten sind vollständig und korrekt.

von René D. (Firma: www.dossmatik.de) (dose)


Angehängte Dateien:

Lesenswert?

Thosch schrieb:
> wenn Simulation und reales Verhalten im FPGA auseinanderlaufen, liegt es
> praktisch immer an fehlenden oder falschen Timing-Constraints.

Ich habe einen Fehler gefunden. Der konnte nur in einem Interrupt mit 
einem falschen Registerwert auftreten. War schon schwer auf die Spur zu 
kommen.


> Generier dir mal mit dem Timing-Analyzer der ISE einen Timing-Report mit
> "unconstrained paths" drin, dann siehst du schonmal, ob deine
> Constraints irgenswo was ausgelassen haben, was kritisch ist.

Das klingt interessant. Ich nutzte nur die Constraints für den 
eingehende Clock.



Bei mir geht PlanAHead auf und das Design ist eingezeichnet und in einer 
Tabelle stehen noch ein paar Zeit-Werte. Sollten vom Wert auch gut 
passen.
total delay <10ns

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Lattice User schrieb:

>
> Vorrausgesetzt alle Sensitivitylisten sind vollständig und korrekt.

Das habe ich in Griff, da ich ein getaktetes Design habe und alles vom 
Signal clk abhängig ist.

von D. S. (des)


Lesenswert?

Ich hätte noch eine Frage dazu...

Ich habe einen XC6SLX45. Im Spartan6 Family Overview steht, dass er 116 
18Kb BRAM Blöcke hat. Das ergibt dann maximal 2088Kb.

Sind das jetzt KByte oder Kbit?
Stehen mir somit jetzt ca. 2MByte zur Verfügung oder wenn es Bit sind 
dementsprechend nur 261KByte? Ich kann das im Datenblatt nicht finden. 
Wo finde ich diese Info?

von Duke Scarring (Gast)


Lesenswert?

D. S. schrieb:
> Sind das jetzt KByte oder Kbit?
Kilobit.

Duke

von Uwe (Gast)


Lesenswert?

Kleines b ist immer Bit Kb=Kilobit KB=Kilobyte

von D. S. (des)


Lesenswert?

ok, danke. So kenne ich das eigentlich auch. Nur wurde das in diesem 
Xilinx Dokument nicht einheitlich gemacht.

Schade, 2MByte wären einfach zu schön gewesen, jetzt muss ich mich mit 
261KByte begnügen ;-)

von Grendel (Gast)


Lesenswert?

D. S. schrieb:
> Schade, 2MByte wären einfach zu schön gewesen,

Da nimmste einfach einen größeren Kintex 7 oder nen mittleren Virtex 7.
Aber setzt Dich hin bevor Du Dir die Preise anschaust ;-)

von hi tec ing (Gast)


Lesenswert?

Unbedingt ISE 14 verwenden. ISE 13 hat einen ChipScope bug in Verbindung 
mit der Verwendung von BRAMS. Steht im Xilinx user Forum.

von J. S. (engineer) Benutzerseite


Lesenswert?

> Unbedingt ISE 14 verwenden. ISE 13 hat einen ChipScope bug in Verbindung
> mit der Verwendung von BRAMS. Steht im Xilinx user Forum.
Es gibt da zwei Dinge: Zum Einen war Chipscope nicht in der Lage 
grössere Speicher, als 8192 zu generieren zum anderen waren Designs 
scheinbar overmapped, wenn sie Chipsscope verwendeten. Dies scheint bei 
14.x in der Tat behoben zu sein.

Was ich immer noch sehe, ist, das Chipscope seinen RAM Bedarf falsch 
vorberechnet und es dann rechnerisch passen müsste, aus irgendeinem 
Grund aber dann doch nicht geht. Nimmt man ein-zwei Signal raus, geht 
es. Konkretes Beispiel:

Signale   angeblicher Bedarf

8         2
9         2
10        2
..
16        4
17        4
18        4
19        6
20        6

klingt plausibel, da bei >18 die bits ausgehen und ein neues RAM 
angefangen werden muss. Praktisch funktionierte es aber ab 18 nicht und 
bei 17 sehr wohl.

Ein anderes Problem ist, dass er bei Verwendung des smart guides oft 
genug nicht hinkommt und erst nach Abschaltung der Funktion, das design 
wieder mappen kann, besonders nach grösseren Änderungen.

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.