Generischer MUX?

Gast #4015198
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
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
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
Gast
VHDL hotline schrieb im Beitrag #4015297:
> Martin schrieb:
>> Wie würdest du sowas realisiseren?
>
> Schieberegister.

Funktioniert nicht. Da möglicherweise die unteren Blöcke ungültig sind.
Gast
Martin schrieb:
> Irgendwie müssen die Daten
> nun serialisiert werden. Die generische Implementierung deshalb, um
> verschiedene Algorithmen einfach austauschen zu können.
So oder so bräuchtest Du noch eine Signalisierung, die Dir angibt, wann 
die Daten gültig sind.

Duke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.