Generischer MUX?

Gast #4015198
Lesenswert?

Hallo an alle,

ich möchte einen generischen Multiplexer implementieren.
Der Eingang ist ein N*32 breiter Vektor. Mittels eines Multiplexers kann 
nun das m-te 32 Bit Wort aus diesem Vektor selektiert werden.

Um das besser darzustellen habe ich ein Bild angehängt, bei dem der 
Eingangsvektor 128-bit breit ist.
Die Steuerleitung ist log2(N) breit.

Wie kann ich diese Schaltung in VHDL generisch für N>=1 
implementieren?

lg Martin
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4015256
Lesenswert?

Martin schrieb:
> Der Eingang ist ein N*32 breiter Vektor. Mittels eines Multiplexers
> kann nun das m-te 32 Bit Wort aus diesem Vektor selektiert werden.
> Um das besser darzustellen habe ich ein Bild angehängt, bei dem der
> Eingangsvektor 128-bit breit ist.
Mir kommt die Anwendung etwas eigenartig vor, aber wenns unbedingt sein 
muss...

> Die Steuerleitung ist log2(N) breit.
Das ist eine Kommazahl, das ist dir klar?
Also musst müsstest du erst mal passend runden:
http://www.lothar-miller.de/s9y/archives/72-Breite-eines-Vektors-berechnen-log2.html

> Wie kann man solche vermeiden?
Mit einer Schleife?
1
  process (m, input) begin
2
    for i in 0 to 31 loop
3
      output(i) <= input(i + m*32); 
4
    end loop;
5
  end process;
Gast #4015275
Lesenswert?

Hallo Lothar,

Danke für die Antwort.

Lothar Miller schrieb:
> Martin schrieb:
>> Der Eingang ist ein N*32 breiter Vektor. Mittels eines Multiplexers
>> kann nun das m-te 32 Bit Wort aus diesem Vektor selektiert werden.
>> Um das besser darzustellen habe ich ein Bild angehängt, bei dem der
>> Eingangsvektor 128-bit breit ist.
> Mir kommt die Anwendung etwas eigenartig vor, aber wenns unbedingt sein
> muss...

Das Anwendungsgebiet ist relativ einfach erklärt.
Ein Algorithmus arbeitet auf Blöcken (die sind N*32-bit breit). Das 
Dateninterface ist jedoch nur 32-bit breit. Irgendwie müssen die Daten 
nun serialisiert werden. Die generische Implementierung deshalb, um 
verschiedene Algorithmen einfach austauschen zu können.

Wie würdest du sowas realisiseren?

Lothar Miller schrieb:
> Das ist eine Kommazahl, das ist dir klar?

Das ist klar. Die wird schon entsprechend generiert.

Lothar Miller schrieb:
>> Wie kann man solche vermeiden?
> Mit einer Schleife?  process (m, input) begin
>     for i in 0 to 31 loop
>       output(i) <= input(i + m*32);
>     end loop;
>   end process;

Danke, funktioniert!

lg Martin

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren