Forum: FPGA, VHDL & Co. VHDL mehrere Komponenten an gleichem Bus


von sam (Gast)


Lesenswert?

Hallo Zusammen,

möchte einen Datenbus in VHDL implementieren, der von mehreren 
Komponenten (Slaves) verwendet werden kann. Im System gibt es einen 
Master welcher die Slaves adressiert, die Slaves senden die Antwort über 
einen Bus vom type std_logic_vecor an den Master zurück. Um nicht für 
jeden Slave einzeln einen Bus an den Master verdrahten zu müssen, möchte 
ich diesen Bus gerne "sharen".

Bis jetzt habe ich den Bus im entity als inout definiert. Wurde ein 
Slave adressiert legte er die Antwort auf den Bus sonst 'Z'. Dies konnte 
mit Quartus synthetisiert werden und lieferte auch gute Ergebnisse.

Beim neuen Design möchte ich die Signale gerne mittels record bündeln, 
somit kann ich inout nicht mehr verwenden. Gib es dennoch die 
Möglichkeit die Slaves an einen Bus zu hängen oder muss ich für jeden 
Slave einen separaten implementieren?

Gruss sam

von mhm (Gast)


Lesenswert?

sam schrieb:
> Hallo Zusammen,
>
> möchte einen Datenbus in VHDL implementieren, der von mehreren
> Komponenten (Slaves) verwendet werden kann. Im System gibt es einen
> Master welcher die Slaves adressiert, die Slaves senden die Antwort über
> einen Bus vom type std_logic_vecor an den Master zurück. Um nicht für
> jeden Slave einzeln einen Bus an den Master verdrahten zu müssen, möchte
> ich diesen Bus gerne "sharen".
>
> Bis jetzt habe ich den Bus im entity als inout definiert. Wurde ein
> Slave adressiert legte er die Antwort auf den Bus sonst 'Z'. Dies konnte
> mit Quartus synthetisiert werden und lieferte auch gute Ergebnisse.
>
> Beim neuen Design möchte ich die Signale gerne mittels record bündeln,
> somit kann ich inout nicht mehr verwenden. Gib es dennoch die
> Möglichkeit die Slaves an einen Bus zu hängen oder muss ich für jeden
> Slave einen separaten implementieren?

Die Slaves entwirfst du alle selbst, bzw. hast die Möglichkeit, diese an 
deine Bedürfnisse anzupassen (d.h. sie liegen als editierbare Sourcen 
vor)?

Falls ja, würde ich die Slaves "dumm" implementieren, was den Bus 
angeht. Das bedeutet, das Interface der Slaves geht davon aus, dass eine 
Punkt-zu-Punkt Verbindung zu einem Master besteht. Die 
Adress-Intelligenz besteht dann aus einem Multiplexer, welcher je nach 
Adresse den entsprechenden Slave mit dem Master verbindet. Somit kannst 
du alle Signale als Records ausführen, benötigst keine Beschreibung mit 
High Impedance-Zuständen im FPGA (welche die Synthese vermutlich sowieso 
in einen Mux gewandelt hat) und kannst an einer zentralen Stelle (beim 
Multiplexer) die Slave-Adressen verwalten, ohne bei Änderungen jeden 
Slave einzeln anfassen zu müssen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

sam schrieb:
> Beim neuen Design möchte ich die Signale gerne mittels record bündeln,
> somit kann ich inout nicht mehr verwenden.
Warum schließt das Eine das Andere aus?

Davon abgesehen: im Inneren eines FPGAs gibt es keine Tristatetreiber 
oder -busse. Deshalb muss der Synthesizer für diese Signale jeweils 
zusätzlich zur Adressdecodierung noch einen Multiplexer für die 
Richtungsumschaltung dieses Busses einbauen. Das macht das Design 
prinzipiell und tendenziell langsamer...

Sinnvoller im Sinne von Resourcenverbrauch und Geschwindigkeit wäre es, 
nur mit unidirektionalen Signalen zu arbeiten.

von sam (Gast)


Lesenswert?

vielen Dank für die rasche Antwort. Was die Synthese aus einen inout 
Signal macht ist mir schon Klar. Es ist halt praktisch, wenn man die 
Signal von den Slaves nicht manuell an den Mux verdrahten muss.

Ich werden wie vorgeschlagen die Schnittstelle der Slaves für eine 
Punkt-zu-Punkt Verbindung auslegen. Um die Anzahl der Leitungen zu 
minimieren werde ich diese in jeder übergeordneten Komponenten mittels 
Mux zusammenfassen.

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.