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? ;-)
lalala schrieb: > Stichwort: Multiplexer ..soll man verwenden? ...könnte man alternativ verwenden? ...ist hier zwingend angebracht? Etwas mehr Info wäre doch hilfreich ;-)
das kannst schon sowas beschreiben. das synthesetool wird daraus einen multiplexer machen
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.
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.
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)
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.