Forum: FPGA, VHDL & Co. grosses MUX mit loop erzeugen


von Juergen (Gast)


Lesenswert?

Hallo,

ich brauche ein 256 zu 1 MUX. Wie kann ich das am besten erzeugen ohne 
jeden Moeglichkeit explizit angeben zu muessen?

Ausgeschrieben ware es so etwas:

process(Select, Data)
begin
 case Select is

    when (255 => '1' , others => '0') => data_out <= Data(255);

    when (254 => '1' , others => '0') => data_out <= Data(254);

    when (253 => '1' , others => '0') => data_out <= Data(253);
     .
     .
     .

    when ( 0 => '1' , others => '0') => data_out <= Data(0);

    when others => data_out <= (others => '0');

 end case;
end process;

Kann man das irgendwie mit einer loop machen?

Danke schon mal...

Juergen

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


Lesenswert?

Juergen schrieb:
> case Select is
>     when (255 => '1' , others => '0') => data_out <= Data(255);
Was ist denn hier Select?
Normalerweise hat ein 256-zu-1 Mux einen 8-Bit Select-Eigang (naja, 
evtl. 9 Bit). Denn mit 8 Bit lassen sich alle 256 Eingägne adressieren. 
Warum hast/willst du 256 Steuereingänge? Welche Datentypen haben deine 
Signale? Wie soll die Priorisierung aussehen? Was ist, wenn 2 deiner 
256 Steuereingänge gleichzeitig aktiv sind?

Sonst sieh dir das mal an:
1
process(Sel, Data)
2
begin
3
    data_out <= (others => '0');
4
    for i in 255 downto 0 loop    -- abhängig von Priorisierung
5
--    for i in 0 to 255 loop      -- abhängig von Priorisierung
6
        if sel(i)='1' then 
7
           data_out <= Data(i);
8
--           exit;                -- abhängig von Priorisierung
9
        end if;
10
    end loop
11
end process;

von Juergen (Gast)


Lesenswert?

Hallo Lothar,

danke mal wieder.

Im Moment kommt das Select Signal von einem Johnson Zähler. Alle Signale 
sind std_logic bzw. std_logic_vector.

Vermutlich werde ich das Select Signal später noch ändern wie von dir 
vorgeschlagen, aber
deine Lösung funktioniert soweit erst mal!

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.