mikrocontroller.net

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


Autor: Max_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Max_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.