|
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--use ieee.std_logic_signed.all;
entity hardware_incident is
generic( Addr_type : integer:=16);
port( Hard_cs : in std_logic;
Hard_edge : in std_logic;
Hard_plus : in std_logic; --bi jiao qiao out plus zhuangtai
R_W_ctrl : in std_logic;
AddrClk : in std_logic;
AddrLine : inout std_logic_vector(0 to Addr_type-1));
end hardware_incident;
architecture beh of hardware_incident is
signal flag_num : integer;
signal flag_half : std_logic;
signal flow_write : std_logic;
signal flow_read : std_logic;
signal RAddrClk : std_logic;
signal WAddrClk : std_logic;
signal cenclk : std_logic;
signal RAddrLine : std_logic_vector(0 to Addr_type - 1);
signal WAddrLine : std_logic_vector(0 to Addr_type - 1);
signal wcenclk : std_logic;
signal rcenclk : std_logic;
signal wflag_num : integer;
signal rflag_num : integer;
BEGIN
PROCESS(R_W_ctrl,AddrClk)
BEGIN
IF(R_W_ctrl = '0')then
WAddrClk <= AddrClk;
wflag_num <= 0;
IF(WAddrClk = '1' and AddrClk = '1' and flow_write = '1')THEN
cenclk <= WAddrClk ;
IF(cenclk = '1' and WAddrClk = '1')THEN
wflag_num <= wflag_num + 1;
WAddrLine <= WAddrLine + "0000000000000001";
AddrLine <= WAddrLine ;
END IF;
IF(wflag_num = 65536)THEN
wflag_num <= 0;
WAddrLine <= "0000000000000000";
AddrLine <= WAddrLine;
END IF;
IF(wflag_num = 32767 and Hard_cs = '1' and Hard_edge = '0')THEN
wflag_num <= 0 ;
flag_half <= '1';
WAddrLine <= "0111111111111111";
AddrLine <= WAddrLine;
END IF;
IF(wflag_num = 32767 and Hard_cs = '1' and Hard_edge = '1')THEN --tiao jian ju bei
wflag_num <= 0 ;
flag_half <= '1';
WAddrLine <= "0111111111111111";
AddrLine <= WAddrLine;
END IF;
IF(AddrClk'event and AddrClk='1' and flag_half = '1')THEN --ying jian chu fa
wcenclk <= AddrClk ;
IF(wcenclk = '1'and AddrClk = '1' and Hard_plus = '1')THEN
wflag_num <= 0;
WAddrLine <= "0111111111111111";
AddrLine <= WAddrLine;
END IF;
END IF;
IF(wflag_num = 32767 and flag_half = '1')THEN --write half ram
wflag_num <= 0;
flag_half <= '0';
WAddrLine <= "0000000000000000";
AddrLine <= WAddrLine;
flow_read <= '1'; --read enable
END IF;
END IF;
END IF;
IF(R_W_ctrl = '1')then --read exeral enable
RAddrClk <= AddrClk;
rflag_num <= 0;
IF(RAddrClk'event and RAddrClk = '1' and flow_read = '1')THEN -- ji suan read plus ge shu
cenclk <= RAddrClk;
IF(cenclk = '1' and AddrClk = '1')THEN --add yiji wending
rflag_num <= rflag_num + 1;
rAddrLine <= RAddrLine + "0000000000000001";
AddrLine <= RAddrLine ;
END IF;
END IF;
IF(rflag_num = 65536)THEN --read plus yichu clear
rflag_num <= 0;
RAddrLine <= "0000000000000000";
AddrLine <= RAddrLine;
flow_write <= '1';
END IF;
END IF;
END PROCESS;
END beh;
烦请高手分析 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|