linreceiver-vhdl/InterfaceMicroprocesseur_lib/EnvTest_InterfaceMicroprocesseur.vhd
2023-09-25 11:12:54 +02:00

106 lines
2.3 KiB
VHDL

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY EnvTest_InterfaceMicroprocesseur IS
GENERIC(
CLOCK_PERIOD : time := 50 ns;
RESET_OFFSET : time := 500 ns;
RESET_DURATION : time := 300 ns;
ACCESS_TIME : time := 40 ns;
HOLD_TIME : time := 70 ns
);
PORT(
M_Received : IN std_logic;
CnD : OUT std_logic;
H : OUT std_logic;
RnW : OUT std_logic;
nCS : OUT std_logic;
nRST : OUT std_logic;
D07 : INOUT std_logic_vector (7 DOWNTO 0)
);
-- Declarations
END EnvTest_InterfaceMicroprocesseur ;
--
ARCHITECTURE arch OF EnvTest_InterfaceMicroprocesseur IS
TYPE DefState IS (Waiting, DataReading, StateReading, FilterWriting);
SIGNAL ProcessorState : DefState;
BEGIN
ClockGeneratorProc : PROCESS
BEGIN
H <= '0';
WAIT FOR CLOCK_PERIOD/2;
H <= '1';
WAIT FOR CLOCK_PERIOD/2;
END PROCESS ClockGeneratorProc;
ResetGeneratorProc : PROCESS
BEGIN
nRST <= '1';
WAIT FOR RESET_OFFSET;
nRST <= '0';
WAIT FOR RESET_DURATION;
nRST <= '1';
WAIT;
END PROCESS ResetGeneratorProc;
ProcessorBehaviorProc : PROCESS
BEGIN
D07 <= (others => 'Z');
--Waiting cycle--
ProcessorState <= Waiting;
nCS <= '1';
CnD <= '1';
RnW <= '1';
WAIT FOR RESET_OFFSET+RESET_DURATION+2*CLOCK_PERIOD;
--Reading data cycle--
ProcessorState <= DataReading;
WAIT FOR ACCESS_TIME;
nCS <= '0';
CnD <= '0';
RnW <= '1';
WAIT FOR 2*CLOCK_PERIOD;
--Waiting cycle--
ProcessorState <= Waiting;
nCS <= '1';
CnD <= '1';
RnW <= '1';
WAIT FOR 2*CLOCK_PERIOD-ACCESS_TIME;
--Reading state cycle--
ProcessorState <= StateReading;
WAIT FOR ACCESS_TIME;
nCS <= '0';
CnD <= '1';
RnW <= '1';
WAIT FOR 2*CLOCK_PERIOD;
--Waiting cycle--
ProcessorState <= Waiting;
nCS <= '1';
CnD <= '1';
RnW <= '1';
WAIT FOR 2*CLOCK_PERIOD-ACCESS_TIME;
--Writing cycle--
ProcessorState <= FilterWriting;
WAIT FOR ACCESS_TIME;
nCS <= '0';
CnD <= '0';
RnW <= '0';
D07 <= (others => '1');
WAIT FOR 2*CLOCK_PERIOD;
--Waiting cycle--
ProcessorState <= Waiting;
nCS <= '1';
CnD <= '1';
RnW <= '1';
WAIT FOR HOLD_TIME;
D07 <= (others => 'Z');
WAIT;
END PROCESS ProcessorBehaviorProc;
END ARCHITECTURE arch;