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
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; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.