L
lzh08
Guest
Knihovna IEEE;
použití ieee.std_logic_1164.all;
ENTITY MCU IS
PORT
(
nDataStrobe: IN Std_Logic;
nAddrStrobe: IN Std_Logic;
nWri: IN Std_Logic;
nReset: IN Std_Logic;
Data: INOUT Std_Logic_Vector (7 DOWNTO 0);
nWait: OUT Std_Logic;
Nack: OUT Std_Logic;
);
END MCU;
ARCHITEKTURA akční MCU IS
TYP stav je (St0, ST1, St2, St3, ST4, St5);
SIGNAL Cur_State, Next_State: Stát: = St0;
SIGNAL RegDataTemp: std_logic_vector (7 downto 0);
SIGNAL RegAddrTemp: std_logic_vector (7 downto 0);
BEGIN
DataWrite: proces (Cur_State, nDataStrobe, nWri)
BEGIN
CASE Cur_State IS
Když St0 => nWait <= '0 ';
if (nWri = '1 '), pak
Next_State <= St0;
jiný
Next_State <= st1;
end if;
Když st1 => RegDataTemp <= Data;
if (nDataStrobe = '1 '), pak
Next_State <= st1;
jiný
Next_State <= St2;
end if;
Když St2 => nWait <= '1 ';
Next_State <= St3;
Když St3 => if (nDataStrobe = '0 '), pak
Next_State <= St3;
jiný
Next_State <= ST4;
end if;
Když ST4 => if (nWri = '0 ')
Next_State <= ST4;
jiný
Next_State <= St5;
end if;
Když St5 => nWait <= 1;
Next_State <= St0;
Když ostatní => Next_State <= St0;
konec případu;
Ukončit proces;Proces (SysClk)
BEGIN
IF Rising_Edge (SysClk), pak
Cur_State <= Next_State;
END IF;
Ukončit proces;
END akce;
použití ieee.std_logic_1164.all;
ENTITY MCU IS
PORT
(
nDataStrobe: IN Std_Logic;
nAddrStrobe: IN Std_Logic;
nWri: IN Std_Logic;
nReset: IN Std_Logic;
Data: INOUT Std_Logic_Vector (7 DOWNTO 0);
nWait: OUT Std_Logic;
Nack: OUT Std_Logic;
);
END MCU;
ARCHITEKTURA akční MCU IS
TYP stav je (St0, ST1, St2, St3, ST4, St5);
SIGNAL Cur_State, Next_State: Stát: = St0;
SIGNAL RegDataTemp: std_logic_vector (7 downto 0);
SIGNAL RegAddrTemp: std_logic_vector (7 downto 0);
BEGIN
DataWrite: proces (Cur_State, nDataStrobe, nWri)
BEGIN
CASE Cur_State IS
Když St0 => nWait <= '0 ';
if (nWri = '1 '), pak
Next_State <= St0;
jiný
Next_State <= st1;
end if;
Když st1 => RegDataTemp <= Data;
if (nDataStrobe = '1 '), pak
Next_State <= st1;
jiný
Next_State <= St2;
end if;
Když St2 => nWait <= '1 ';
Next_State <= St3;
Když St3 => if (nDataStrobe = '0 '), pak
Next_State <= St3;
jiný
Next_State <= ST4;
end if;
Když ST4 => if (nWri = '0 ')
Next_State <= ST4;
jiný
Next_State <= St5;
end if;
Když St5 => nWait <= 1;
Next_State <= St0;
Když ostatní => Next_State <= St0;
konec případu;
Ukončit proces;Proces (SysClk)
BEGIN
IF Rising_Edge (SysClk), pak
Cur_State <= Next_State;
END IF;
Ukončit proces;
END akce;