Forum: FPGA, VHDL & Co. Mainboard mit PPC und FPGA als Multiplexer


von Max_F (Gast)


Lesenswert?

Hallo zusammen!
Ich hätte da mal eine Frage, ob ich auf dem richtigen Weg oder ob ihr 
das anders machen würdet.
Ich hab nen PPC bzw. ein kleines Platinchen mit PPC und dem ganzen 
Speicher-Schnickschnack, was man halt so braucht. Nun möchte ich 
möglichst viele Funktionen, die der PPC zur Verfügung stellt auf einer 
Art Eval-Board nutzen können. Da die Portpins teilweise 4-fach belegt 
sind dachte ich, dass ich zwischen dem PPC und der restlichen Hardware 
(Pegelwandler für die jeweilige Schnittstelle usw.) ein FPGA als 
Multiplexer verwenden könnte.
Beispielsweise liegen die Signale für Ethernet und CAN auf den selben 
Pins. Will ich nun Ethernet verwenden, teil ich das nem Microblaze im 
FPGA mit über die serielle Schnittstelle. Dieser gibt meinetwegen die 
gewählte Konfiguration z.B. per GPIO an eine darunter liegende 
VHDL-Ebene weiter, in welcher der Multiplexer realisiert ist. Dieser 
besteht aus einer ganzen Reihe von Prozessen in deren sensivity list 
eben alle Signale einer Shcnittstelle stehen. Im Prozess steht dann noch 
ne if-Abfrage, die überprüft, ob diese Schnittstelle auch wirklich 
"durchgereicht" werden soll an die jeweiligen Pegelwandler usw. Bei 
Beispiel Ethernet und CAN gäbe es dann z.B. einen Process für CAN mit 
CAN_RX und CAN_TX in der sensivity list und einen Process für Ethernet 
mit den Signalen vom Ethernet-PHY in der sensivitiy list.
Also z.B.:

can_bus : process (eingang_1, eingang_2)
begin
   if gewaehlte_schnittstelle(7 downto 0) = x"01" then
      ausgang_can_rx <= eingang_1;
      ausgang_can_tx <= eingang_2;
   end if;
end process can_bus;

ethernet : process (eingang_1, eingang_2, eingang_3, eingang_4, ...)
begin
   if gewaehlte_schnittstelle(7 downto 0) = x"02" then
      ausgang_eth_tx1 <= eingang_1;
      ausgang_eth_rx1 <= eingang_2;
      ausgang_eth_tx2 <= eingang_3;
      ausgang_eth_rx2 <= eingang_4;
      ...
   end if;
end process ethernet;

Würdet ihr das genau so machen oder bin ich da auf dem Holzweg. Arbeite 
zwar ab und zu mit VHDL aber hab halt noch nicht so die Erfahrung!
Danke schon mal für die Antworten!
MfG Max

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


Lesenswert?

Du kannst mit VHDL (und speziell mit FPGAs) nicht einfach so einen Pin 
auf einen anderen "Durchschalten".

Du mußt dir auch Gedanken machen, wie sich die nicht verwendeten Pins 
des FPGAs verhalten sollen. Und du mußt dir Gedanken machen, wie du die 
Datenrichtung umschalten willst:
[vhdl]
      ausgang_can_rx <= eingang_1;
      ausgang_can_tx <= eingang_2;
[vhdl]
Diese Zuweisungen funktionieren nur in eine Richtung! Nämlich vom 
eingang zum ausgang. Das wird so nichts mit einem Durchschalten von 
can_tx auf eingang_2.
Und recht problematisch wird das Ganze dann z.B. bei einer 
I2C-Schittstelle. Deren Bidirektionalität kannst du nicht so einfach 
abbilden.

Und letztendlich stellt sich die Frage, ob du die zusätzliche Laufzeit 
durch das FPGA in jedem Fall ignorieren kannst.

> Würdet ihr das genau so machen
Nein.
Ich würde einfach die Bausteine deselektieren, von denen ich nichts 
will. Und wenn das nicht möglich ist, dann wäre (ähnlich wie du es 
machen willst) ein getrenntes Multiplexen des Hin- und Rückpfades 
denkbar.

BTW:
Du solltest das Signal gewaehlte_schnittstelle für eine korrekte 
Simulation auch (und zuallererst) in die Sensitivliste aufnehmen...

von Max_F (Gast)


Lesenswert?

Oha....da hast du recht. Da war ich wohl ein bisschen zu vorschnell. An 
die Bidirektionalität hab ich ja garned gedacht! Schande über mich!
Mit dem Deselektieren der Bausteine meinst du dann, dass ich mich vorher 
entscheiden sollte, welche Schnittstellen ich verwenden will vom PPC?
Ich denke die Laufzeiten kann ich ignorieren durch das FPGA! Zumindest 
bei den meisten Schnittstellen.
Wie würdet ihr denn an die Sache rangehen. Wenn ihr auch ein FPGA 
verwendet würdet, wie würdet ihr die Sache mit der Bidirektionalität 
angehen. Bin gerade ein bisschen Ratlos :-(
Danke schon mal für die Antworten!
MfG Max

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.