VHDL Cachebus

Gast #1980107
Lesenswert?

Ich habe mehrere Speicherblöcke (Xilinx FPGA: Block-RAM), die ich als 
Cache verwende. Die Blöcke sollen alle auf der selben Adress- und 
Datenleitung arbeiten. Die Blöcke werden dann per Enable eingeschaltet, 
wenn man sie braucht. Wie implementiert man sowas am besten im FPGA? 
std_logic und die nicht benötigten Busteilnehmer gehen auf 'Z'? Oder 
gibt es da bessere Techniken? Was passiert bei einem Kurzschluss, wenn 
versehentlich zwei Blöcke gleichzeitig auf die Datenleitung schreiben? 
Erkennt die Synthese sowas, oder brauch ich dann ein neues FPGA? ;-)
Gast #1980244
Lesenswert?

sollte ein Denkanstoss sein. Schau dir mal die Architektur eines FPGAs 
an - suche nach Tristate und du wirst feststellen, dass diese nur für 
IOBs zur Verfügung stehen.

Folglich braucht man einen Multiplexer.

Klar kann man auch Tristate in VHDL beschreiben. Aber warum etwas 
beschreiben, dass genau so nicht realisierbar ist.
#1980274
Lesenswert?

Wieso nicht einen größeren RAM-Bereich per VDHL oder Coregen erzeugen 
und die Synthesesoftware 'machen' lassen? Zumal diese zumindest bei 
Altera (Xilinx evtl. auch) die einzelnen RAM-Blöcke nicht 
'hintereinander' anordnet sondern 'nebeneinander'. Dadurch benötigt man 
dann auch weniger (keine) Multiplexer wenn jeder Block nur ein paar Bits 
der Wortbreite abdeckt.
Moderator (Firma: Titel) Persönliche Seite #1980290
Lesenswert?

AooA schrieb:
> Wie implementiert man sowas am besten im FPGA? std_logic und die nicht
> benötigten Busteilnehmer gehen auf 'Z'?
Früher gab es noch wirklich Tristatebusse quer über das FPGA. Aber weil 
die so langsam waren, wurden sie wegpensioniert...

> Was passiert bei einem Kurzschluss, wenn
> versehentlich zwei Blöcke gleichzeitig auf die Datenleitung schreiben?
Das FPGAS wurde heiß...

> Oder gibt es da bessere Techniken?
Es gibt nur eine: den erwähnten Multiplexer.
Auch wenn du heute einen Tristatebus ins FPGA baust,
dann wird er entweder
1) als Multiplexer ausgeführt
oder
2) gar nicht synthetisiert (Fehlermeldung: Multiple Source/Drivers)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren