Hallo, ich habe ein Design, welches einmal einen RAM benoetigt mit 65635 Adressen und einer Datentiefe von 32 Bit und einen RAM mit 65635 Adressen und einer Datentiefe von 64 Bit. Da ich ein ZEDboard verwende, steht mir mit dem BRAM nur eine Datentiefe von 32 Bit zur verfügung, soweit ich das verstanden habe. Nun dachte ich, fuer die 64 Bit koennte ich Distributed RAM verwenden, da mein Desgin eh nicht so viele LUTs benoetigt und ich dadurch noch diese massenweise ueber habe.... (Nach der Synthesierung ohne distributed RAM habe ich gerade mal 911/13300 Slices verbraucht und 1993/53200 LUTs verbraucht. Mein erster Versuch, um das zu realisieren war, das ich erstemal nur einen RAM gewählt habe (den RAM mit einer Datentiefe von 32 Bit). Hier ich den Lesezugriff im Block RAM getakatet (Soweit ich das von lothar millers seite verstanden habe, sei das die Vorgehensweise, wie man zwischen den beiden RAM Arten wählen kann). Zusätzlich hatte ich bei den Eigenschaften der Synthese 'Auto' eingestellt. Jedoch egal, ob ich den RAM getaktet oder nicht getaktet hatte, beidesmal hatte er mir den RAM als Blockram eingestellt. Erst nach dem ich bei den Syntheseeigenschaften expliziet 'Distributed' verwendet hatte, hatte er mir versucht, den RAM als distributed RAM zu realsieren, JEDOCH bekomme ich nun die Fehlermeldung, das nun mein Design 6272 SLICEMs fuer den LUTRAM benoetige, wobei mein FPGA nur 4350 SLICEM sites haette.... Aber wie schon oben erwähnt, habe ich aus den Datenblättern ersichtet, das ich 13300 Slices eigentlich zur verügung haette... Wie kann ich Xilinx denn nun verklickern, das ich sehr wohl noch genuegend Sliches uebrig habe? Und wenn ich das geschafft habe, ist es ueberhaupt dann moeglich, Distributed RAM und Block RAM gleichzeit in einem Design zu verwenden? Danke im voraus.
:
Bearbeitet durch Moderator
NewHere84 schrieb: > Da ich ein ZEDboard verwende, steht mir mit dem BRAM nur eine Datentiefe > von 32 Bit zur verfügung, soweit ich das verstanden habe. Das hast du falsch verstanden. Natürlich kann ein einzelnes BlockRAM nur 32Bit, aber für 64 Bit schaltet der Synthesizer einfach 2 davon parallel. > Jedoch egal, ob ich den RAM getaktet oder nicht getaktet hatte, > beidesmal hatte er mir den RAM als Blockram eingestellt. Wenn du das RAM nicht getaktet hast (und auch keine der Datenleitungen vorher und nachher), dann KANN er gar kein BlockRAM nehmen. Das BRAUCHT unbedingt einen Takt. > Hier ich den Lesezugriff im Block RAM getakatet (Soweit ich das von > lothar millers seite verstanden habe, sei das die Vorgehensweise, wie > man zwischen den beiden RAM Arten wählen kann). Das kann sich auch mal ändern. Näheres dazu im Handbuch des Synthesizers: XST Users Guide Coding Styles. > Und wenn ich das geschafft habe, ist es ueberhaupt dann moeglich, > Distributed RAM und Block RAM gleichzeit in einem Design zu verwenden? Klar doch. Das sind ja komplett unabhängige Komponenten... > JEDOCH bekomme ich nun die Fehlermeldung Zeig doch mal den ganzen Synthesereport.
Hi, SLICE != SLICEM Ich empfehle das UG474. Darin wird beschrieben, dass es 2 Typen von SLICES für den Artix 7 gibt (Spartan6 hat sogar 3 Typen). Das Verhältnis ist etwa 2:1. Daher wird Xilinx recht haben, wenn nicht genügend (richtige) SLICES da sind. grüße
Lothar M. schrieb: > Zeig doch mal den ganzen Synthesereport. Das ist die Zusammenfassung, wenn ich Block Ram verwende: Device Utilization Summary:
1 | Number of BSCANs 1 out of 4 25% |
2 | Number of BUFGs 2 out of 32 6% |
3 | Number of DSP48E1s 4 out of 220 1% |
4 | Number of External IOBs 5 out of 200 2% |
5 | Number of LOCed IOBs 5 out of 5 100% |
6 | |
7 | Number of External IOB33s 18 out of 200 9% |
8 | Number of LOCed IOB33s 18 out of 18 100% |
9 | |
10 | Number of RAMB18E1s 1 out of 280 1% |
11 | Number of RAMB36E1s 131 out of 140 93% |
12 | Number of Slices 911 out of 13300 6% |
13 | Number of Slice Registers 2251 out of 106400 2% |
14 | Number used as Flip Flops 2221 |
15 | Number used as Latches 30 |
16 | Number used as LatchThrus 0 |
17 | |
18 | Number of Slice LUTS 1993 out of 53200 3% |
19 | Number of Slice LUT-Flip Flop pairs 2794 out of 53200 5% |
Drum dachte ich, zum Versuch werde ich diesen RAM nun als Distributed RAM mal verwenden... Jedoch wenn ich das mache, bekomme ich diesen Fehler:
1 | ERROR:Pack:2413 - The number of logical LUTRAM blocks exceeds the capacity for the target device. |
2 | ERROR:Pack:2744 - This design requires at least 6272 SLICEMs for LUTRAMs. The target device has only 4350 SLICEM sites. Please modify the |
3 | logical design source to reduce the number of LUTRAMs. |
4 | As an alternative, please select a device with more SLICEM sites. |
5 | ERROR:Map:237 - The design is too large to fit the device. Please check the Design Summary section to see which resource requirement for |
6 | your design exceeds the resources available in the device. Note that the number of slices reported may not be reflected accurately as |
7 | their packing might not have been completed. |
Noch eine Frage.. Woher kommt die Zahl "140" bei RAMB36E1? - Was sagt sie aus? Aus dem Datenblatt kann ich rauslesen: Extensible Block RAM (#36 Kb Blocks): XC7Z020: 560 KB (140)
NewHere84 schrieb: > Jedoch wenn ich das mache, bekomme ich diesen Fehler: Du sprengst einfach den Rahmen Deines Devices. 2^16 mal 64 Bit ist ein Riesen-Memory. Normalerweise benutze ich distributed RAM, wenn ich Speicher benötige, welcher schlecht in BRAM abbildbar ist. Ein 256-Bit breites FIFO mit maximal 4 Einträgen wäre ein Beispiel dafür (das würde glatt 8 BRAM Block belegen wegen der Breite, die Tiefe nützt mir nichts, und mit distributed RAM ist es mit 1024 Memory-Bits erschlagen).
:
Bearbeitet durch User
P. K. schrieb: > Du sprengst einfach den Rahmen Deines Devices. 2^16 mal 64 Bit ist ein > Riesen-Memory. Verstehe ich noch nicht... Das Datenblatt sagt: True 6-input LUTs Memory LUTs are configurable as 64x1 or 32x2 bit RAM Free number of Slice LUTS: 1993 / 53200 Von dieser Ausgangslage aus:
1 | # RAMs : 3 |
2 | 2048x8-bit single-port distributed Read Only RAM : 1 |
3 | 4096x8-bit dual-port distributed RAM : 1 |
4 | 65536x32-bit dual-port distributed RAM : 1 |
Ich kann also ein 6-input LUT als ein 16x1 RAM ansehen... Wenn ich nun mir ueberlege wie viel LUTs fuer diese Groesse von RAM gebraucht werden, komme ich zu dieser Rechnung: Moegliche Addressen pro LUT = 2^6 = 64 Addressen Wenn also mein RAM nur ein Bit tiefe haben muesste wuerde folgende Rechnung gelten: Benoetigte LUTS = (# von benoetigten Addressen) / (# der benoetigten Input of LUTs) = (65536 + 4096 + 2048) / 2^6 = 71680 / 64 = 1120 LUTs Nun brauche ich aber 32 Bit anstatt nur ein Bit... Also braeuchte ich: 1120 LUTs * 32 = 35840 LUTs Ergebnis: Ich braeuchte doch nur 35840 LUTs oder? Zur Verfuegung habe ich noch 51207... Also habe ich doch, selbst bei dieser RAM groesse noch 15367 LUTs uebrig.. Oder habe ich irgendwas missverstanden?
@ P. K. (pek) >Du sprengst einfach den Rahmen Deines Devices. 2^16 mal 64 Bit ist ein >Riesen-Memory. Warum kein Giant-Seicher?
@NewHere84 (Gast) >> Du sprengst einfach den Rahmen Deines Devices. 2^16 mal 64 Bit ist ein >> Riesen-Memory. >Verstehe ich noch nicht... Kannst du lesen, was dein Synthesizer dir sagt? "This design requires at least 6272 SLICEMs for LUTRAMs. The target device has only 4350 SLICEM sites. Please modify the logical design source to reduce the number of LUTRAMs. As an alternative, please select a device with more SLICEM sites." >Das Datenblatt sagt: >True 6-input LUTs >Memory LUTs are configurable as 64x1 or 32x2 bit RAM >Free number of Slice LUTS: 1993 / 53200 Aber nicht alle SLICE sind SLICEM! Nur die Hälfte kann ALLES, auch Distributed RAM darstellen. Die andere Häflte kann das nicht, aus Spargründen. >Ich kann also ein 6-input LUT als ein 16x1 RAM ansehen... 64x1 >Wenn also mein RAM nur ein Bit tiefe haben muesste wuerde folgende Du hat einen sehr eigenen Begriff von "Tiefe". Der Rest der Welt nennt das Bitbreite. Mit Tiefe beschreibt man die Anzahl der Speicherelemente zu je n Bit! >Ergebnis: Ich braeuchte doch nur 35840 LUTs oder? Zur Verfuegung habe >ich noch 51207... Also habe ich doch, selbst bei dieser RAM groesse noch >15367 LUTs uebrig.. Oder habe ich irgendwas missverstanden? Du hast nur halbs soviele LUTs, die RAM darstellen können! Ja. U.a. dass man derartig große Speicher nicht sinnvoll mit distributed RAM erstellt. Der verschwendet haufenweise Slices und ist deutlich langsamer als BRAM. 64kiB x 32 und erst recht 64KiB x 64 macht man bestenfalls mit BRAMs, wobei das fast schon ein Fall für externen Speicher (SRAM, SDRAM) ist.
Und zur Ausgangsfrage. Man kann BRAM und distributed RAM problemlos in einem FPGA-Design gemeinsam verwenden. Allerdings nicht in einer per CoreGen erzeugten RAM-Komponente. Das ist zwar prinzipiell und per Hand möglich, praktisch aber wenig sinnvoll. Das wäre so, als ob man ein Motorrad an ein Auto seitlich anschweißt, damit man mehr Leute transportieren kann.
Dein Design ist nicht umsetzbar, dein Chip hat bei weitem nicht genug Speicher. Weder BRAM noch DRAM noch zusammen...
Okay.. Mein Fehler.. sorry.. Habe Das mit Slice M und Sliche L ueberlesen... Danke fuer eure Geduld!
Falk B. schrieb: > Das wäre so, als ob man ein Motorrad an ein Auto seitlich anschweißt, > damit man mehr Leute transportieren kann. Der TO versucht hier alle Motorraeder und Autos die er in die Fingee bekommt zusammenzuschweissen, checkt aber nicht dass das was er eigentlich will ein Zug ist...
Guest schrieb: > Der TO versucht hier alle Motorraeder und Autos die er in die Fingee > bekommt zusammenzuschweissen, checkt aber nicht dass das was er > eigentlich will ein Zug ist... Das Nette ist, dass je nach Syntheseoption der so erzeugte Auto-Mischmasch mitunter wieder transformiert und ins BRAM gepackt wird :-)
Jürgen S. schrieb: > Guest schrieb: >> Der TO versucht hier alle Motorraeder und Autos die er in die Fingee >> bekommt zusammenzuschweissen, checkt aber nicht dass das was er >> eigentlich will ein Zug ist... > > Das Nette ist, dass je nach Syntheseoption der so erzeugte > Auto-Mischmasch mitunter wieder transformiert und ins BRAM gepackt wird > :-) Also das hier: http://www.miniworlds.de/Vorbild2/zug_br152_004_1.jpg (wenn BRAM der Zug wäre ;-) )
So ungefähr :D Es lohnt durchaus, die BRAMs für RAM und LUT-Ersatz zu nehmen, wenn es vom Timing her geht, weil sie Strom sparen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.