Manchmal möchte man für eine VHDL Simulation einen Schalter beschreiben, oder man braucht eine Brücke, z.B. zum Verbinden von 2 Bussen. Hier kann dann der Code für das ZeroOhmModell von Ben Cohen weiterhelfen: Zero-Ohm Modell und Schaltermodell
Allerdings erscheint mir das Schaltermodell unnötig kompliziert, denn der Typ std_logic bringt seine Auflösungstabelle ja schon mit. Deshalb habe ich für den Schalter nur das Null-Ohm-Widerstandsmodell ein klein wenig überarbeitet und: es simuliert sich tadellos...
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity swbidi is Port ( A : inout STD_LOGIC; B : inout STD_LOGIC; I : in STD_LOGIC); end swbidi; architecture Behavioral of swbidi is begin process variable thentime : time; begin wait on A, B, I until thentime /= now; -- Break thentime := now; A <= 'Z'; B <= 'Z'; wait for 0 ns; if (I='1') then -- No make if the switch is open -- Make A <= B; B <= A; end if; end process; end Behavioral;
Hier der Code für die Simulation:
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY tb_swbidi IS END tb_swbidi; ARCHITECTURE behavior OF tb_swbidi IS COMPONENT swbidi PORT(A : INOUT std_logic; B : INOUT std_logic; I : IN std_logic); END COMPONENT; signal I : std_logic := '0'; signal A : std_logic := 'Z'; signal B : std_logic := 'Z'; BEGIN uut: swbidi PORT MAP ( A => A, B => B, I => I); process begin A <= '1'; B <= 'Z'; wait for 10 ns; A <= '0'; B <= 'Z'; wait for 10 ns; A <= '0'; B <= '0'; wait for 10 ns; A <= 'Z'; B <= '0'; wait for 10 ns; A <= 'Z'; B <= '1'; wait for 10 ns; A <= '1'; B <= '1'; wait for 10 ns; A <= '0'; B <= '1'; wait for 10 ns; A <= '1'; B <= '0'; wait for 10 ns; A <= '0'; B <= '0'; wait for 10 ns; A <= 'H'; B <= '0'; wait for 10 ns; A <= 'H'; B <= '1'; wait for 10 ns; A <= '0'; B <= 'L'; wait for 10 ns; A <= '1'; B <= 'L'; wait for 10 ns; A <= '0'; B <= '0'; wait for 100 ns; end process; I <= not I after 5 ns; END;
Und so sieht das Ergebnis aus: