Forum: FPGA, VHDL & Co. CPLD - I/O Erweiterung


von Stephan M. (stmiko)


Angehängte Dateien:

Lesenswert?

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

von woko (Gast)


Lesenswert?

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

von Stephan M. (stmiko)


Lesenswert?

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

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


Lesenswert?

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)...

von ich (Gast)


Lesenswert?

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.

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


Lesenswert?

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"...

von Stephan M. (stmiko)


Lesenswert?

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 :-)

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


Lesenswert?

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...

von Stephan M. (stmiko)


Lesenswert?

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.

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


Lesenswert?

Stephan M. schrieb:
> Deiner Meinung nach könnten auch beide immer aktiv sein?
Richtig, es brächte keinesfalls einen Nachteil...

von Stephan M. (stmiko)


Lesenswert?

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