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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.