Forum: Mikrocontroller und Digitale Elektronik µCTx mittels CPLD an mehrere µCRx


von Marco (Gast)


Lesenswert?

Hallo Zusammen,

ich hätte eine kurze Frage. Ich möchte gerne ein UART Datastream von 
einem µC mit 115200bauds in ein CPLD einschleifen und an mehreren Pins 
von einem CPLD ausgeben.
Also µC_Tx-->CPLD-->viele µCRx´s... Klar könnte ich auch einige RxSlaves 
an einem µCTx betreiben,aber das soll später alles etwas flexibler 
werden mittels CPLD. Eigentlich muss ich den Eingang vom CPLD ja einfach 
auf zb auf ein Port bzw Vektor ausgeben... Brauche ich da eine Clock? 
Oder kann man das kombinatorisch aufbauen? Treten da irgendwelche 
gravierenden Delays auf?

Beste Grüße
Marco

von Roland .. (rowland)


Lesenswert?

Du willst ja im Prinzip nur Puffern, also rein kombinatorische Logik. 
Klar gibts Verzögerungen, aber die sind wohl irrelevant...

von Marco (Gast)


Lesenswert?

Besten Dank für die Antwort... Was genau meinst du mit Puffern? ich 
möchte "direkt" die ankommenden high/low Pegel am Eingang des CPLDs auf 
ein Port verteilen.
Liege ich da richtig, dass bei kombinatorischer Logik auf "Events" an 
dem Eingang reagiert wird?
Wird da auf die Flanken getriggert oder auf die Pegel?

Vielen Dank nochmal
Gruß Marco

von JoergL (Gast)


Lesenswert?

Nix Trigger, nix event.
Das "läuft" einfach so durch, wie durch ein 74HC08.
Nur eben mit der CPDL-Verzögerungszeit.
Vorausgesetzt, du machst nicht irgendwas wildes im CPLD...

von Roland .. (rowland)


Lesenswert?

Das CPLD wirkt als Puffer, wenn Du die UART-Daten nur durchschleifen 
möchtest.

von Marco (Gast)


Lesenswert?

Danke nochmal an alle...
ich bin seit ca. 3 Std in dem Gebiet der CPLDs und VHDL "drin" und tue 
mich noch besonders schwer... kann mal bitte einer drüberschauen?
Wie caste ich ein Bit/Pin als Vector in VHDL?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;


entity uart is
  Port (input: in STD_LOGIC;
       uarts : out  STD_LOGIC_VECTOR (7 downto 0));
end uart;


architecture Behavioral of uart is

begin
  uarts <= std_logic_vector(input);
end Behavioral;

Danke und Gruß
Marco

von Alexander F. (alexf91)


Lesenswert?

Du musst den Eingang auf alle Ausgänge zuweisen, bei dir also auf 8.

for i in uarts'range loop
    uarts(i) <= input;
end loop;

Das ganze wird vom Synthesetool praktisch "ausgerollt" und entspricht
uarts(0) <= input;
...
uarts(7) <= input;

von Reinhard Kern (Gast)


Lesenswert?

Marco schrieb:
> Also µC_Tx-->CPLD-->viele µCRx´s

Wozu der Aufwand, das geht auch mit einem Dekoder a la 74xx138.

Gruss Reinhard

von Marco (Gast)


Lesenswert?

@Reinhard

>aber das soll später alles etwas flexibler werden mittels CPLD

aus Spaß an der Freud, weil es ein Development Board ist und ich mich 
momentan in CPLDs und VHDL einarbeite...

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


Lesenswert?

Alexander F. schrieb:
> for i in uarts'range loop
>     uarts(i) <= input;
> end loop;
Ich würde das eher so machen:
1
   uarts <= (uarts'range => input);

BTW: gehört der Thread nicht eher nach "FPGA, VHDL & Co."?

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.