Distributed RAM

Y

yasser_shoukry

Guest
Wat is de Distributed RAM?Wat kan ik doen en wat niet kan doen?

Bij voorbaat dank

 
Dit is het patent van Xilinx techniek.

Alle Xilinx FPGA's hebben de "Distributed RAM-geheugen",
dat wil zeggen, elke LUT kan worden geconfigureerd als een 16 * 1-bit RAM, ROM, LUT-of 16bit shift register.

Integendeel, de FPGA's LUT kan Altera alleen worden geconfigureerd als een 16bit-rom verspreid.

 
Ik denk dat uw uitleg letterlijke is.Wil je me vertellen waarom we FPGA nodig RAM, ROM of 16bit shift register.Ik denk dat LUT kan worden beschouwd als een functie generater.Maar is het kunnen opslaan van de funcation zelf?Ik ben behoorlijk in de war over de functionaliteit van elk deel in de FPGA.

 
RAM's, ROM's en shift registers zijn gemeenschappelijke bouwstenen voor digitale systemen.Na deze beschikbaar in de FPGA maakt het voor ons gemakkelijker om het systeem te ontwerpen van een digitale in een FPGA.

De FPGA LUT (look-up table) is een kleine rom met diverse adres-ingangen en een data-uitgang.Een voorkomende maat is 16x1 beetje, het heeft vier ingangen en een uitgang.Door het instellen van de juiste bits in dat ROM, wordt elke gewenste Booleaanse logische functie met maximaal vier ingangen en een uitgang.Dat is de reden waarom het soms wordt genoemd een functie generator.

Een FPGA bevat duizenden van deze kleine LUT's mogelijk is.De LUT-rom bits worden ingesteld wanneer u bitstream laden van de configuratie in de FPGA.Ze gaan verloren als u de stroom-vaststelling van de FPGA.

 
De andere verklaring van gedistribueerde RAM-geheugen is dat het verdeeld wordt over alle FPGA.LUTS kan dus worden gebruikt als opslag dwz als RAM of ROM, afgezien van de dedicated geheugen blokken die wordt genoemd block RAM is.
Normaal gesproken wanneer u wilt kleinere herinneringen u geneigd te concluderen gedistribueerd geheugen dan BLOCK ram geheugen, want blok maten zijn vaste normaal 18K Bits en het zal worden verspild bij het afleiden van een kleiner geheugen.

 
Dank u allen, maar ik heb nog een paar vragen om dit ding duidelijk zijn.
1-ik heb begrepen uit uw verduidelijking is "Distributed RAM-geheugen" is een functionaliteit voor het optimaliseren, zodat een shift register bijvoorbeeld in plaats van het gebruik van vele LUTs zal een LUT configureren als een shift register.Heb ik gelijk?

2-functionaliteit wordt verdeeld RAM modules toegepast op of om signalen of wat?

3-Hoe kan ik de synthese van functionaliteit gebruik maken van de RAM verdeeld?of is de synthese tool maakt het automatisch?

Thanks a lot guys.

 
U maakt gebruik van Xilinx FPGA's, klopt dat?In de meeste moderne Xilinx FPGA's, 16-bits LUT kan elk onafhankelijk worden geconfigureerd om te werken in een van de drie modi:

1.Zoals een 16-bits ROM.Dit is handig voor het genereren van een boolean logische functie, of voor het houden van een kleine tabel met gegevens constanten als een gewone ROM.

2.Zoals een 16-bits Distributed RAM.Dit is handig voor het lezen / schrijven opslag van kleine hoeveelheden data.Het heet "verspreid zijn" want het is normaal verdeeld over een groot aantal LUT's mogelijk is.Bijvoorbeeld, een beetje 32x8 Distributed RAM zou consumeren 16 LUT.

3.Als een seriële-in seriële-out shift register van de lengte van 1 tot 16.Dit is handig voor het uitstellen van een signaal zonder nuttigen van een gewone flip-flops.

Sommige FPGA's bieden geen van de drie takken in alle LUT.
For example, if your HDL contains combinatorial logic or a table of constants, the synthesizer will automatically configure some LUTs as function generators or ROMs.

In de meeste projecten, hoeft u zich geen zorgen te maken over het configureren van een of meer van dat spul, omdat de synthesizer kan het voor je doen.
Bijvoorbeeld, als je HDL bevat combinatorische logica of een tabel van constanten, de synthesizer wordt automatisch configureren sommige LUTs als functie generatoren of roms.Als uw HDL bevat een kleine serie van lees / schrijf registers, synthesizer zal het automatisch configureren van een aantal LUTs als de Distributed RAM-geheugen.(Als je ROM of RAM-geheugen is relatief groot, de synthesizer zal normaal rom gebruik maken van een ruimtebesparend Blok / RAM in plaats van gedistribueerde ROM / RAM.) Als uw HDL bevat kleine shift register vertragingen, synthesizer zal het automatisch configureren van een aantal LUTs als shift registers .

Dat automatische gedrag synthesizer heet "deductie".Als je niet van de synthesizer is standaard gedrag, of als de synthesizer is niet de keuze van de modes die je verwacht, verwijzen naar hoofdstuk "HDL-codering" in uw XST User Guide.Als dat niet helpt, kun je negeren het gedrag onder vermelding van beperkingen (zie uw Beperkingen Guide), of door "het instantiëren" bibliotheek delen dat de logica van de werking op te richten op een bepaalde manier (zie uw Bibliotheken Guide).Bijvoorbeeld, de RAM_STYLE beperking laat uw kracht, hetzij Block RAM of Distributed RAM.

U hebt waarschijnlijk al gemerkt dat de gidsen toe te voegen tot duizenden pagina's.Probeer niet alles tegelijk te leren.

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Knipoogje" border="0" />
 
een gedistribueerd ram kan gemakkelijk worden begrepen als u weet een klein beetje over de architectuur van FPGA ...... het bestaat uit schijfjes (verwijzing naar Xilinx )...... en elke slice bevat LUT's en flops waar bits waarden kunnen worden opgeslagen .... dus als ur-code leidt deze opslag elementen als RAM-dan is het wel een verdeeld ram als opslag-elementen r verspreid over het silicium ruimte ........... het kan nadelig zijn af te leiden grote geheugens, omdat een veel vertraging zou kunnen worden veroorzaakt als gevolg van interconnectie en routering vertragingen ......

 
Een klein iets wat ik zou hier graag willen toevoegen is dat met Xilinx you cant eigenlijk afleiden Distributed RAM automatisch de hoop dat de synthese tool zal alles voor u doen, infact uw code moet worden in een formaat met name voor de inferentie van hen.Voor bijvoorbeeld om code te instantiëren een enkele poort Dist uw RAM-geheugen moet worden als dit

Code:

parameter RAM_WIDTH = <ram_width>;

parameter RAM_ADDR_BITS = <ram_addr_bits>;reg [RAM_WIDTH-1: 0] <ram_name> [(2 ** RAM_ADDR_BITS) -1:0];wire [RAM_WIDTH-1: 0] <output_data>;<reg_or_wire> [RAM_ADDR_BITS-1: 0] <adres>;

<reg_or_wire> [RAM_WIDTH-1: 0] <input_data>;@ altijd (posedge <clock>)

if (<write_enable>)

<ram_name> [<adres>] <= <input_data>;toewijzen <output_data> = <ram_name> [<adres>];

 
Ja, helpt het HDL-syntax synthesizer afleiden verschillende structuren.Ik stelde voor het lezen van het hoofdstuk "HDL-codering" in de XST User Guide.

Wat is "Taal construeert"?Ik kan het niet vinden in de ISE 8 handleidingen.

In uw voorbeeld,, als je <reg_or_wire> worden registers, dan zul je waarschijnlijk Block RAM-geheugen in plaats van Distributed RAM.U kunt overschrijven standaard gedrag dat door toepassing van de RAM_STYLE VERSPREID uitoefenen op de <ram_name> register array.

 
Nou ik gebruik 7.1i dus daar ga naar Edit-> Language Construeert-> VHDL/Verilog-> Construeert Synthese-> Voorbeelden codering.Ik weet zeker dat er 8.1 worden een soortgelijke zaak in

Hier krijgt u tal van voorbeelden over hoe, enz. gebruiken de verschillende bronnen, zoals ingebouwde Blok / Distributed Ram, Embedded Multipliers. Met Verilog-code die wordt toegewezen in elk.Alleen wanneer u schrijf ur code in die bijzondere manier de bijzondere constructies te krijgen afgeleid.

En wat betreft de twijfel of het synthetiseren Blok / Distributed RAM, als je gebruik kunnen toewijzen aan de gegevens lezen van de waarde buiten het blok altijd, dan zal de kaart naar het gedistribueerde ram en als anderen u gebruik maken van een deel altijd blok dat wil zeggen wanneer schrijf is laag, aan, lees het dan ram zal het synthetiseren ram te blokkeren.Ik stel voor dat je gebruik maken van de Taal constructen.Geweldige plek met veel examples.You vindt er ook soortgelijke voorbeelden en nog veel meer als je zoekt Xilinx website.For bijvoorbeeld.http://toolbox.xilinx.com/docsan/xilinx8/books/data/docs/xst/xst0017_5.html

En @ echo47, met betrekking tot de kern van het probleem DSP mailde ik u dan ook suggereren iets.

 
Ik vond het onder een andere naam in ISE Project Navigator 8.1.03i: Bewerken -> Taal Templates -> Verilog -> Synthese Construeert -> Codering Voorbeelden -> Gedistribueerde RAM.

Het voorbeeld is verkeerd (althans in 8.1.03i ISE).Ik koos resister ingangen voor het adres en de input van gegevens, toegevoegd module inputs en outputs, en de geselecteerde 4x4 geheugen.ISE 8.1.03i gegenereerd Blok RAM-geheugen in plaats van gedistribueerde RAM-geheugen.Geen verrassing, ik heb gedaan dit soort dingen voor.Ik stel met behulp van RAM_STYLE synthese beperking om er zeker van dat u krijgt wat u wilt.De subtiele HDL-codering veranderen soms tussen de compiler versies.
Code:

module top (CLK, wij, myaddr, myidata, odata);

parameter RAM_WIDTH = 4;

parameter RAM_ADDR_BITS = 4;CLK-ingang, wij;

input [RAM_ADDR_BITS-1: 0] myaddr;

input [RAM_WIDTH-1: 0] myidata;

output [RAM_WIDTH-1: 0] odata;reg [RAM_WIDTH-1: 0] ram [(2 ** RAM_ADDR_BITS) -1:0];wire [RAM_WIDTH-1: 0] odata;reg [RAM_ADDR_BITS-1: 0] addr;

reg [RAM_WIDTH-1: 0] idata;@ altijd (posedge CLK) beginnen

if (wij)

RAM [addr] <= idata;

addr <= myaddr;

idata <= myidata;

eindetoewijzen odata = ram [addr];

endmodule
 
Ja u heeft gelijk, daar heb ik in 7.1 ook gesynthetiseerd en in kaart gebracht voor het blokkeren van RAM en vervolgens veranderde ik de synthese stijl Distributed en zie, zij toegewezen aan Distributed RAM.Misschien Xilinx mensen dit moeten opmerken, en nog een ding kunt u aangeven dat deze beperking voor de individuele blokken, graag wil ik veronderstel RAM instantiëren een verdeelde grote en een kleine als blok om te sparen, kan ik dat dan doen?Is het mogelijk om aan te geven individuele synthese attributen voor elk?

 
De Xilinx docs en tools zijn doorspekt met kleine probleempjes zoals dat.Xilinx is redelijk goed over de vaststelling van de grote bugs.Ik denk dat de glitches optreden omdat de documentatie is verspreid over te veel boeken, en waarschijnlijk moeilijk te handhaven.U kunt, houd een beschrijving van uw notebook ontdekkingen en workarounds en dan is het af en toe herlezen.

Ja, kunt u zich wenden RAM_STYLE VERSPREID en RAM_STYLE BLOCK beperkingen zelfstandig op signalen of wereldwijd op hele modules.Ik heb echter nog geen manier gevonden om modules instantiëren twee dezelfde, met een set van Gedistribueerde en de andere set te blokkeren.Ik heb nooit echt nodig om dat te doen, dat wel.

In XST U kunt elke RAM zelfstandig door de toepassing van de beperking tot het register array signaal in uw HDL:
Code:

reg [RAM_WIDTH-1: 0] ram [(2 ** RAM_ADDR_BITS) -1:0]; / / synthese kenmerk RAM_STYLE ram verspreid;
 

Welcome to EDABoard.com

Sponsor

Back
Top