42 lines
1 KiB
Text
42 lines
1 KiB
Text
|
/*
|
||
|
* RS-trigger with assynch. reset
|
||
|
*/
|
||
|
|
||
|
library ieee;
|
||
|
use ieee.std_logic_1164.all;
|
||
|
|
||
|
entity RS_trigger is
|
||
|
generic (T: Time := 0ns);
|
||
|
port ( R, S : in std_logic;
|
||
|
Q, nQ : out std_logic;
|
||
|
reset, clock : in std_logic );
|
||
|
end RS_trigger;
|
||
|
|
||
|
architecture behaviour of RS_trigger is
|
||
|
signal QT: std_logic; -- Q(t)
|
||
|
begin
|
||
|
process(clock, reset) is
|
||
|
subtype RS is std_logic_vector (1 downto 0);
|
||
|
begin
|
||
|
if reset = '0' then
|
||
|
QT <= '0';
|
||
|
else
|
||
|
if rising_edge(C) then
|
||
|
if not (R'stable(T) and S'stable(T)) then
|
||
|
QT <= 'X';
|
||
|
else
|
||
|
case RS'(R&S) is
|
||
|
when "01" => QT <= '1';
|
||
|
when "10" => QT <= '0';
|
||
|
when "11" => QT <= 'X';
|
||
|
when others => null;
|
||
|
end case;
|
||
|
end if;
|
||
|
end if;
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
|
Q <= QT;
|
||
|
nQ <= not QT;
|
||
|
end architecture behaviour;
|