Guten Tag, ich möchte gern mittels eines CPLD eine I/O - Erweiterung sowie 2 8-Kanal Mulitplexer ansteuern. Im Anhang ist eine schematische Darstellung abgebildet. Da ich micht noch nicht ausführlich mit dem Thema CPLD und deren Programmierung beschäftigt habe, würde ich gern von euch wissen, ob es grundsätzlich umsetzbar ist? Außerdem würde ich gern wissen, wie ihr den Programmieraufwand einschätzt? viele Grüße Stephan
Hallo Stefan, mit dem Cortex kenne ich mich nicht aus, aber prinzipiell sollte das so machbar sein. Für die TI 2407 Familie hatten wir schon öfters solche "Expander" im Einsatz. Der Programmieraufwand hält bei so was in Grenzen würde ich sagen. Also in einer 1 Woche läuft das hoffentlich. Wolfgang
Hallo Wolfgang, ich danke Dir für deine schnelle Antwort! Dadurch kann ich beginnen das Layout zu planen und die Programmierung später angehen. Über andere Meinungen bin ich ebenfalls dankbar! Stephan
Stephan M. schrieb: > sowie 2 8-Kanal Mulitplexer ansteuern. Was haben die Dinger denn für ein seltsames Interface? Reicht da die Adresse nicht aus? > würde ich gern von euch wissen, ob es grundsätzlich umsetzbar ist? Ja. > Außerdem würde ich gern wissen, wie ihr den Programmieraufwand > einschätzt? Für mich 1/2 Tag, für dich 1 Woche bis 1 Monat... ;-) Im Ernst: das ist nicht viel Aufwand, weil alles "nur" als Latches asynchron an den uC-Steuersignalen OE und WE hängt. Aber wenn du vorher noch nichts mit VHDL/Verilog gemacht hast, dann braucht eben der Einstieg seine Zeit... Hier mal der Funktionsrumpf in VHDL:
1 | :
|
2 | :
|
3 | process begin |
4 | wait until rising_edge(WR); -- steigende Flanke an WR --> Daten und Adressen sind stabil |
5 | if (A="000000") then PA <= D; |
6 | elsif (A="000001") then PB <= D; |
7 | elsif (A="000010") then PC <= D; |
8 | elsif (A="000011") then PD <= D; |
9 | elsif (A(5 downto 3)="001") then addr_mux1 <= D(2 downto 0); |
10 | elsif (A(5 downto 3)="010") then addr_mux2 <= D(2 downto 0); |
11 | end process; |
12 | |
13 | D <= (others => 'Z') when OE='1' else -- hochohmig, wenn nicht gelesen werden soll |
14 | PA when (A="000000") else |
15 | PB when (A="000001") else |
16 | PC when (A="000010") else |
17 | PD when (A="000011") else |
18 | (others => '0'); |
19 | :
|
EDIT: Stephan M. schrieb: > Dadurch kann ich beginnen das Layout zu planen > und die Programmierung später angehen. Leg das WR-Signal auf einen Takteingang (falls das CPLD welche hat)...
Das würde so funktionieren. Allerdings würde ich noch eine Adressleitung für die 4 Ports mehr spedieren. Das ist nötig wenn du die Ports felxiebel als Ein- oder Ausgang konfigurieren willst und du deswegen für jeden Port ein zusätzliches, internes Richtungsregister benötigst.
ich schrieb: > Allerdings würde ich noch eine Adressleitung > für die 4 Ports mehr spedieren. Die A5 ist noch vollkommen unbenutzt... Ebenso wie die A2, wenn A(5..3)="000"...
Hallo Lothar, sicher reicht jeweils die Adresse aus, aber die Multiplexer haben jeweils noch einen Enable - Eingang (CS). Somit möchte ich mit dem jeweiligen Enable und der zugehörigen Adresse den richtigen Kanal ansprechen! Danke für dein VHDL Beispiel, dass werde ich genauer studieren und ich hoffe ich kann es dann nachvollziehen :-)
Stephan M. schrieb: > sicher reicht jeweils die Adresse aus, aber die Multiplexer haben > jeweils noch einen Enable - Eingang (CS). Das hört sich für mich eher nach einer 4 Bit Adresse an, denn der Enable dient eigentlich "nur" zum Aktivieren eines Mux, wenn z.B. 2 solche Mux auf den selben Ausgang treiben. In dem hier skizzierten Fall wäre für mich klar: der CS der Multiplexer ist immer aktiv. Es ist also einfach immer ein Kanal ausgewählt. Denn die Alternative wäre ein hochohmiger ausgang (des Mux) geht auf einen hochohmigen Eingang (ADC), und sowas ist idR. nur mit Nachteilen verbunden...
Ja, es handelt sich um eine Aktivierung. Ich habe nur gedacht, dass die beiden Multiplexer nicht immer aktiv sein müssen. Das durch die 2 CS Kanäle die Möglichkeit besteht, denn jeweiligen Multiplexer einzuschalten. Deiner Meinung nach könnten auch beide immer aktiv sein? Stimmt auch wiederrum. Wenn das die übliche vorgehensweise ist, dann werde ich das auch so machen.
Stephan M. schrieb: > Deiner Meinung nach könnten auch beide immer aktiv sein? Richtig, es brächte keinesfalls einen Nachteil...
Alles klar, vielen Dank für Deine Informationen! Falls ich weitere Fragen habe, kann ich Dir doch auch mal schreiben? Stephan
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.