Forum: FPGA, VHDL & Co. Multiplexer der mit dem Mastertakt


von leini (Gast)


Lesenswert?

Hallo Leute ,

ich brauche einen Multiplexer der mit dem Mastertakt (100MHz )arbeitet.

so in etwa:

MUX <= chanal_1 WHEN CLK_100 = '0' ELSE chanal_1;


Beim kompilieren reduziert er mir dann hinten dran alles weg.

Weil es ein Takt ist?


Vielen Dank schon mal für Eure Antworten :)

Gruß

von Marius W. (mw1987)


Lesenswert?

Wenn du das wirklich so geschrieben hast, dann ist klar, dass er das 
wegreduziert.

MUX ist unabhängig von CLK_100 immer chanal_1.

MfG
Marius

von leini (Gast)


Lesenswert?

Haool Marius,

danke für Deine Antwort :)

Wenn ich es in einem Prozess mache
passt es dann?

Process(CLK_100)

BEGIN

IF(CLK_100='1')THEN

...

ELSE
...

END PROZESS;

Gruß

von Fump (Gast)


Lesenswert?

Sieht nach einem typischen Copy'nPaste Fehler aus.
Du willst wohl zwischen zwei Kanälen umschalten aber in:

MUX <= chanal_1 WHEN CLK_100 = '0' ELSE chanal_1;

wird, unabhängig von CLK_100 immer der selbe Kanal ausgewählt.
Da hilft auch ein Prozess nicht weiter. ;-)

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


Lesenswert?

> MUX <= chanal_1 WHEN CLK_100 = '0' ELSE chanal_1;
> Beim kompilieren reduziert er mir dann hinten dran alles weg.
> Weil es ein Takt ist?
Nein, weil es egal ist.
So wie es da steht, wird entweder oder chanal_1 an Mux zugewiesen.

Als Prozess geschrieben sieht das so aus:
1
Process(CLK_100) 
2
BEGIN
3
  IF(CLK_100='1')THEN
4
    MUX <= chanal_1;
5
  ELSE
6
    MUX <= chanal_1;
7
END PROZESS;

Das hier wäre ganz was anderes:
MUX <= chanal_1 WHEN CLK_100 = '0' ELSE chanal_2;


Es ist sehr schlechte Designpraxis, einen Takt als Selektor eines 
Multiplexers zu verwenden. Das kann hübsch ins Auge gehen.
Ich würde hier eher ein DDR-FF am Ausgang benützen.

BTW:
> chanal_1
Was ist denn das bitte für ein deunglisches Konstrukt?
Entweder hast du einen Kanal oder einen channel.

von leini (Gast)


Lesenswert?

Hallo Fump,

>Sieht nach einem typischen Copy'nPaste Fehler aus.

Du hast recht "Copy'nPaste Fehler ".

MUX <= chanal_0 WHEN CLK_100 = '0' ELSE chanal_1;
Wäre es sonst Ok?


Oder bekomme ich Probleme wenn ich die Pegel von einem Takt abfrage?

Gruß

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

leini schrieb:
> Oder bekomme ich Probleme wenn ich die Pegel von einem Takt abfrage?
Doch, prinzipiell geht das schon. Du solltest dir allerdings bewusst 
sein, dass MUX sich erst kurz nach der Änderung des Taktsignals 
ändert. Wenn du das MUX-Signal dann z.B. in ein taktflankengesteuertes 
FlipFlop übernehmen willst, übernimmt das FlipFlop immer den Pegel, den 
MUX in der Zeit kurz vor der jeweiligen Flanke hatte, und nicht den 
Wert, auf den es mit der Flanke umschaltet. Das würde allerdings auch 
nicht so recht Sinn machen, denn ein FlipFlop kann eh nur entweder mit 
der fallenden oder der steigenden Flanke schalten, nicht beides, 
sodass es im Endeffekt immer den gleichen Channel speichern würde.

von leini (Gast)


Lesenswert?

Hallo Lothar,


Danke für Deine Tips.

>Was ist denn das bitte für ein deunglisches Konstrukt?



 :0 Ich blamiere mich heute nicht schlecht:).

Zeit zum aufhören.

DANK

von leini (Gast)


Lesenswert?

Also am besten mit dem DDR-FF ?

Gruß

von leini (Gast)


Lesenswert?

Muß mich doch nochmal blamieren :(

Was ist ein DDR-FF ?

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


Lesenswert?

> DDR
Zur Geschichte: vor etwas mehr als 20 Jahren...

> DDR
Technisch: Double Data Rate Flipflop
Fang erst mal hier im Forum an mit der Suche und geh dann in die weite 
Welt.

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.