Hallo miteinander, hat jemand mit eine Idee, wie ich ein universellen x to 1 Decoder in VDHL beschreiben kann? Die Parameterübergabe ist ja noch einfach mittels "generic" lösbar, aber wie kann ich die "case" Anweisung gestalten, das alle Kombinationen einen Decodier werden. Also wie kann ich die "when" Zeilen universal schreiben, so das SEL_WIDTH = 4 und SIG_WIDTH = 16 sein kann? Hier mal den Grundcode: library IEEE; use IEEE.std_logic_1164.all; entity DECODE_Xto1 is generic (SEL_WIDTH : integer :=3; SIG_WIDTH : integer :=8 ); port ( SEL : in std_logic_vector(SEL_WIDTH-1 downto 0); SIG_IN : in std_logic_vector(SIG_WIDTH-1 downto 0); SIG_OUT : out std_logic ); end DECODE_Xto1; architecture RTL of DECODE_Xto1 is begin process (SEL, SIG_IN) begin case SEL is when "000" => SIG_OUT <= SIG_IN(0); when "001" => SIG_OUT <= SIG_IN(1); when "010" => SIG_OUT <= SIG_IN(2); when "011" => SIG_OUT <= SIG_IN(3); when "100" => SIG_OUT <= SIG_IN(4); when "101" => SIG_OUT <= SIG_IN(5); when "110" => SIG_OUT <= SIG_IN(6); when "111" => SIG_OUT <= SIG_IN(7); -- For simulation only when others => SIG_OUT <= 'X'; end case; end process ; end RTL;
Eine lokale Integer Variable beginnend von 0 solange per LOOP inkrementieren bis sie mit SEL identisch ist. Der Zähler ist dann identisch mit dem Index, eg. von SIG_OUT <= SIG_IN(Zähler). Gruß Hagen
Na wenn das mal synthesefähig ist. Man kann auch die generate-Anweisung bemühen. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity ONEtoN is generic( SEL_WIDTH: natural := 3; SIG_WIDTH: natural := 8 ); port( SIG_IN: in std_logic_vector(SIG_WIDTH downto 0); SIG_OUT: out std_logic; SEL: in std_logic_vector(SEL_WIDTH downto 0) ); end entity; architecture BEHAVIOUR of ONEtoN is begin Demux_1toN: for index in SIG_WIDTH downto 0 generate begin SIG_OUT <= SIG_IN(index) when UNSIGNED(SEL) = index else 'Z'; end generate; end architecture; Das 'Z' wird von allen mir bekannten Synthesetools richtig umgesetzt. ciao, Stefan.
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.