Files
FPGA_Config/FPGA_Quartus_13.1/Video/DDR_CTR.vhd
2016-01-18 07:40:08 +00:00

1428 lines
54 KiB
VHDL
Executable File

-- Xilinx XPort Language Converter, Version 4.1 (110)
--
-- AHDL Design Source: DDR_CTR.tdf
-- VHDL Design Output: DDR_CTR.vhd
-- Created 11-Jan-2016 06:52 PM
--
-- Copyright (c) 2016, Xilinx, Inc. All Rights Reserved.
-- Xilinx Inc makes no warranty, expressed or implied, with respect to
-- the operation and/or functionality of the converted output files.
--
-- ddr_ctr
-- CREATED BY FREDI ASCHWANDEN
-- FIFO WATER MARK
-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY ddr_ctr IS
PORT
(
FB_ADR : IN std_logic_vector(31 DOWNTO 0);
nFB_CS1 : IN std_logic;
nFB_CS2 : IN std_logic;
nFB_CS3 : IN std_logic;
nFB_OE : IN std_logic;
FB_SIZE0 : IN std_logic;
FB_SIZE1 : IN std_logic;
nRSTO : IN std_logic;
MAIN_CLK : IN std_logic;
FB_ALE : IN std_logic;
nFB_WR : IN std_logic;
DDR_SYNC_66M : IN std_logic;
CLR_FIFO : IN std_logic;
VIDEO_RAM_CTR : IN std_logic_vector(15 DOWNTO 0);
BLITTER_ADR : IN std_logic_vector(31 DOWNTO 0);
BLITTER_SIG : IN std_logic;
BLITTER_WR : IN std_logic;
DDRCLK0 : IN std_logic;
CLK33M : IN std_logic;
FIFO_MW : IN std_logic_vector(8 DOWNTO 0);
VA : BUFFER std_logic_vector(12 DOWNTO 0);
nVWE : BUFFER std_logic;
nVRAS : BUFFER std_logic;
nVCS : BUFFER std_logic;
VCKE : BUFFER std_logic;
nVCAS : BUFFER std_logic;
FB_LE : BUFFER std_logic_vector(3 DOWNTO 0);
FB_VDOE : BUFFER std_logic_vector(3 DOWNTO 0);
SR_FIFO_WRE : BUFFER std_logic;
SR_DDR_FB : BUFFER std_logic;
SR_DDR_WR : BUFFER std_logic;
SR_DDRWR_D_SEL : BUFFER std_logic;
SR_VDMP : BUFFER std_logic_vector(7 DOWNTO 0);
VIDEO_DDR_TA : BUFFER std_logic;
SR_BLITTER_DACK : BUFFER std_logic;
BA : BUFFER std_logic_vector(1 DOWNTO 0);
DDRWR_D_SEL1 : BUFFER std_logic;
VDM_SEL : BUFFER std_logic_vector(3 DOWNTO 0);
FB_AD : INOUT std_logic_vector(31 DOWNTO 0)
);
END ddr_ctr;
ARCHITECTURE rtl OF ddr_ctr IS
-- START (NORMAL 8 CYCLES TOTAL = 60ns)
-- CONFIG
-- READ CPU UND BLITTER,
-- WRITE CPU UND BLITTER
-- READ FIFO
-- CLOSE FIFO BANK
-- REFRESH 10X7.5NfS=75NS
SIGNAL FB_REGDDR_3 : std_logic_vector(2 DOWNTO 0);
SIGNAL FB_REGDDR_d : std_logic_vector(2 DOWNTO 0);
SIGNAL FB_REGDDR_q : std_logic_vector(2 DOWNTO 0);
SIGNAL DDR_SM_6 : std_logic_vector(5 DOWNTO 0);
SIGNAL DDR_SM_d : std_logic_vector(5 DOWNTO 0);
SIGNAL DDR_SM_q : std_logic_vector(5 DOWNTO 0);
SIGNAL FB_B : std_logic_vector(3 DOWNTO 0);
SIGNAL VA_P : std_logic_vector(12 DOWNTO 0);
SIGNAL VA_P_d : std_logic_vector(12 DOWNTO 0);
SIGNAL VA_P_q : std_logic_vector(12 DOWNTO 0);
SIGNAL BA_P : std_logic_vector(1 DOWNTO 0);
SIGNAL BA_P_d : std_logic_vector(1 DOWNTO 0);
SIGNAL BA_P_q : std_logic_vector(1 DOWNTO 0);
SIGNAL VA_S : std_logic_vector(12 DOWNTO 0);
SIGNAL VA_S_d : std_logic_vector(12 DOWNTO 0);
SIGNAL VA_S_q : std_logic_vector(12 DOWNTO 0);
SIGNAL BA_S : std_logic_vector(1 DOWNTO 0);
SIGNAL BA_S_d : std_logic_vector(1 DOWNTO 0);
SIGNAL BA_S_q : std_logic_vector(1 DOWNTO 0);
SIGNAL MCS : std_logic_vector(1 DOWNTO 0);
SIGNAL MCS_d : std_logic_vector(1 DOWNTO 0);
SIGNAL MCS_q : std_logic_vector(1 DOWNTO 0);
SIGNAL SR_VDMP_d : std_logic_vector(7 DOWNTO 0);
SIGNAL SR_VDMP_q : std_logic_vector(7 DOWNTO 0);
SIGNAL CPU_ROW_ADR : std_logic_vector(12 DOWNTO 0);
SIGNAL CPU_BA : std_logic_vector(1 DOWNTO 0);
SIGNAL CPU_COL_ADR : std_logic_vector(9 DOWNTO 0);
SIGNAL BLITTER_ROW_ADR : std_logic_vector(12 DOWNTO 0);
SIGNAL BLITTER_BA : std_logic_vector(1 DOWNTO 0);
SIGNAL BLITTER_COL_ADR : std_logic_vector(9 DOWNTO 0);
SIGNAL FIFO_ROW_ADR : std_logic_vector(12 DOWNTO 0);
SIGNAL FIFO_BA : std_logic_vector(1 DOWNTO 0);
SIGNAL FIFO_COL_ADR : std_logic_vector(9 DOWNTO 0);
SIGNAL DDR_REFRESH_CNT : std_logic_vector(10 DOWNTO 0);
SIGNAL DDR_REFRESH_CNT_d : std_logic_vector(10 DOWNTO 0);
SIGNAL DDR_REFRESH_CNT_q : std_logic_vector(10 DOWNTO 0);
SIGNAL DDR_REFRESH_SIG : std_logic_vector(3 DOWNTO 0);
SIGNAL DDR_REFRESH_SIG_d : std_logic_vector(3 DOWNTO 0);
SIGNAL DDR_REFRESH_SIG_q : std_logic_vector(3 DOWNTO 0);
SIGNAL VIDEO_BASE_L_D : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_L_D_d : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_L_D_q : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_M_D : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_M_D_d : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_M_D_q : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_H_D : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_H_D_d : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_H_D_q : std_logic_vector(7 DOWNTO 0);
SIGNAL VIDEO_BASE_X_D : std_logic_vector(2 DOWNTO 0);
SIGNAL VIDEO_BASE_X_D_d : std_logic_vector(2 DOWNTO 0);
SIGNAL VIDEO_BASE_X_D_q : std_logic_vector(2 DOWNTO 0);
SIGNAL VIDEO_ADR_CNT : std_logic_vector(22 DOWNTO 0);
SIGNAL VIDEO_ADR_CNT_d : std_logic_vector(22 DOWNTO 0);
SIGNAL VIDEO_ADR_CNT_q : std_logic_vector(22 DOWNTO 0);
SIGNAL VIDEO_BASE_ADR : std_logic_vector(22 DOWNTO 0);
SIGNAL VIDEO_ACT_ADR : std_logic_vector(26 DOWNTO 0);
SIGNAL u0_data : std_logic_vector(7 DOWNTO 0);
SIGNAL u0_tridata : std_logic_vector(7 DOWNTO 0);
SIGNAL FB_REGDDR_0_clk_ctrl : std_logic;
SIGNAL SR_VDMP0_clk_ctrl : std_logic;
SIGNAL MCS0_clk_ctrl : std_logic;
SIGNAL VA_S0_clk_ctrl : std_logic;
SIGNAL BA_S0_clk_ctrl : std_logic;
SIGNAL VA_P0_clk_ctrl : std_logic;
SIGNAL BA_P0_clk_ctrl : std_logic;
SIGNAL DDR_SM_0_clk_ctrl : std_logic;
SIGNAL VIDEO_ADR_CNT0_clk_ctrl : std_logic;
SIGNAL VIDEO_ADR_CNT0_ena_ctrl : std_logic;
SIGNAL DDR_REFRESH_CNT0_clk_ctrl : std_logic;
SIGNAL DDR_REFRESH_SIG0_clk_ctrl : std_logic;
SIGNAL DDR_REFRESH_SIG0_ena_ctrl : std_logic;
SIGNAL VIDEO_BASE_L_D0_clk_ctrl : std_logic;
SIGNAL VIDEO_BASE_L_D0_ena_ctrl : std_logic;
SIGNAL VIDEO_BASE_M_D0_clk_ctrl : std_logic;
SIGNAL VIDEO_BASE_M_D0_ena_ctrl : std_logic;
SIGNAL VIDEO_BASE_H_D0_clk_ctrl : std_logic;
SIGNAL VIDEO_BASE_H_D0_ena_ctrl : std_logic;
SIGNAL VIDEO_BASE_X_D0_clk_ctrl : std_logic;
SIGNAL VIDEO_BASE_X_D0_ena_ctrl : std_logic;
SIGNAL VA12_2 : std_logic;
SIGNAL VA12_1 : std_logic;
SIGNAL VA11_2 : std_logic;
SIGNAL VA11_1 : std_logic;
SIGNAL VA10_2 : std_logic;
SIGNAL VA10_1 : std_logic;
SIGNAL VA9_2 : std_logic;
SIGNAL VA9_1 : std_logic;
SIGNAL VA8_2 : std_logic;
SIGNAL VA8_1 : std_logic;
SIGNAL VA7_2 : std_logic;
SIGNAL VA7_1 : std_logic;
SIGNAL VA6_2 : std_logic;
SIGNAL VA6_1 : std_logic;
SIGNAL VA5_2 : std_logic;
SIGNAL VA5_1 : std_logic;
SIGNAL VA4_2 : std_logic;
SIGNAL VA4_1 : std_logic;
SIGNAL VA3_2 : std_logic;
SIGNAL VA3_1 : std_logic;
SIGNAL VA2_2 : std_logic;
SIGNAL VA2_1 : std_logic;
SIGNAL VA1_2 : std_logic;
SIGNAL VA1_1 : std_logic;
SIGNAL VA0_2 : std_logic;
SIGNAL VA0_1 : std_logic;
SIGNAL BA1_2 : std_logic;
SIGNAL BA1_1 : std_logic;
SIGNAL BA0_2 : std_logic;
SIGNAL BA0_1 : std_logic;
SIGNAL BUS_CYC_d_2 : std_logic;
SIGNAL BUS_CYC_d_1 : std_logic;
SIGNAL FIFO_BANK_OK_d_2 : std_logic;
SIGNAL FIFO_BANK_OK_d_1 : std_logic;
SIGNAL u0_enabledt : std_logic;
SiGNAL gnd : std_logic;
SIGNAL vcc : std_logic;
SIGNAL VIDEO_CNT_H : std_logic;
SIGNAL VIDEO_CNT_M : std_logic;
SIGNAL VIDEO_CNT_L : std_logic;
SIGNAL VIDEO_BASE_H : std_logic;
SIGNAL VIDEO_BASE_M : std_logic;
SIGNAL VIDEO_BASE_L : std_logic;
SIGNAL REFRESH_TIME_q : std_logic;
SIGNAL REFRESH_TIME_clk : std_logic;
SIGNAL REFRESH_TIME_d : std_logic;
SIGNAL REFRESH_TIME : std_logic;
SIGNAL DDR_REFRESH_REQ_q : std_logic;
SIGNAL DDR_REFRESH_REQ_clk : std_logic;
SIGNAL DDR_REFRESH_REQ_d : std_logic;
SIGNAL DDR_REFRESH_REQ : std_logic;
SIGNAL DDR_REFRESH_ON : std_logic;
SIGNAL FIFO_BANK_NOT_OK : std_logic;
SIGNAL FIFO_BANK_OK_q : std_logic;
SIGNAL FIFO_BANK_OK_clk : std_logic;
SIGNAL FIFO_BANK_OK_d : std_logic;
SIGNAL FIFO_BANK_OK : std_logic;
SiGNAL SR_FIFO_WRE_q : std_logic;
SIGNAL SR_FIFO_WRE_clk : std_logic;
SIGNAL SR_FIFO_WRE_d : std_logic;
SIGNAL STOP_q : std_logic;
SIGNAL STOP_clk : std_logic;
SIGNAL STOP_d : std_logic;
SIGNAL STOP : std_logic;
SIGNAL CLEAR_FIFO_CNT_q : std_logic;
SIGNAL CLEAR_FIFO_CNT_clk : std_logic;
SIGNAL CLEAR_FIFO_CNT_d : std_logic;
SIGNAL CLEAR_FIFO_CNT : std_logic;
SIGNAL CLR_FIFO_SYNC_q : std_logic;
SIGNAL CLR_FIFO_SYNC_clk : std_logic;
SIGNAL CLR_FIFO_SYNC_d : std_logic;
SIGNAL CLR_FIFO_SYNC : std_logic;
SIGNAL FIFO_ACTIVE : std_logic;
SIGNAL FIFO_AC_q : std_logic;
SIGNAL FIFO_AC_clk : std_logic;
SIGNAL FIFO_AC_d : std_logic;
SIGNAL FIFO_AC : std_logic;
SIGNAL FIFO_REQ_q : std_logic;
SIGNAL FIFO_REQ_clk : std_logic;
SIGNAL FIFO_REQ_d : std_logic;
SIGNAL FIFO_REQ : std_logic;
SIGNAL BLITTER_AC_q : std_logic;
SIGNAL BLITTER_AC_clk : std_logic;
SIGNAL BLITTER_AC_d : std_logic;
SIGNAL BLITTER_AC : std_logic;
SIGNAL BLITTER_REQ_q : std_logic;
SIGNAL BLITTER_REQ_clk : std_logic;
SIGNAL BLITTER_REQ_d : std_logic;
SIGNAL BLITTER_REQ : std_logic;
SIGNAL BUS_CYC_END : std_logic;
SIGNAL BUS_CYC_q : std_logic;
SIGNAL BUS_CYC_clk : std_logic;
SIGNAL BUS_CYC_d : std_logic;
SIGNAL BUS_CYC : std_logic;
SIGNAL CPU_AC_q : std_logic;
SIGNAL CPU_AC_clk : std_logic;
SIGNAL CPU_AC_d : std_logic;
SIGNAL CPU_AC : std_logic;
SIGNAL CPU_REQ_q : std_logic;
SIGNAL CPU_REQ_clk : std_logic;
SIGNAL CPU_REQ_d : std_logic;
SIGNAL CPU_REQ : std_logic;
SIGNAL CPU_SIG : std_logic;
SIGNAL SR_DDRWR_D_SEL_q : std_logic;
SIGNAL SR_DDRWR_D_SEL_clk : std_logic;
SIGNAL SR_DDRWR_D_SEL_d : std_logic;
SIGNAL SR_DDR_WR_q : std_logic;
SIGNAL SR_DDR_WR_clk : std_logic;
SIGNAL SR_DDR_WR_d : std_logic;
SIGNAL DDR_CONFIG : std_logic;
SIGNAL DDR_CS_q : std_logic;
SIGNAL DDR_CS_ena : std_logic;
SIGNAL DDR_CS_clk : std_logic;
SIGNAL DDR_CS_d : std_logic;
SIGNAL DDR_CS : std_logic;
SIGNAL DDR_SEL : std_logic;
SIGNAL CPU_DDR_SYNC_q : std_logic;
SIGNAL CPU_DDR_SYNC_clk : std_logic;
SIGNAL CPU_DDR_SYNC_d : std_logic;
SIGNAL CPU_DDR_SYNC : std_logic;
SIGNAL VWE : std_logic;
SIGNAL VRAS : std_logic;
SIGNAL VCAS : std_logic;
SIGNAL LINE : std_logic;
SIGNAL v_basx : std_logic_vector(1 DOWNTO 0);
SIGNAL v_basx_cs : std_logic;
SIGNAL v_bash : std_logic_vector(7 DOWNTO 0);
SIGNAL v_bash_cs : std_logic;
SIGNAL reg_ta : std_logic;
-- Sub Module Interface Section
COMPONENT lpm_bustri_BYT
PORT
(
data : IN std_logic_vector(7 DOWNTO 0);
enabledt : IN std_logic;
tridata : BUFFER std_logic_vector(7 DOWNTO 0)
);
END COMPONENT lpm_bustri_BYT;
FUNCTION to_std_logic(X : IN boolean) RETURN std_logic IS
VARIABLE ret : std_logic;
BEGIN
IF x THEN
ret := '1';
ELSE
ret := '0';
END IF;
RETURN ret;
END to_std_logic;
-- sizeIt replicates a value to an array of specific length.
FUNCTION sizeit(a: std_logic; len: integer) RETURN std_logic_vector IS
VARIABLE rep: std_logic_vector(len - 1 DOWNTO 0);
BEGIN
FOR i IN rep'RANGE LOOP
rep(i) := a;
END LOOP;
RETURN rep;
END sizeIt;
BEGIN
-- Sub Module Section
u0: lpm_bustri_BYT
port map
(
data=>u0_data,
enabledt=>u0_enabledt,
tridata=>u0_tridata
);
-- Register Section
SR_FIFO_WRE <= SR_FIFO_WRE_q;
PROCESS (SR_FIFO_WRE_clk)
BEGIN
IF SR_FIFO_WRE_clk'event and SR_FIFO_WRE_clk='1' THEN
SR_FIFO_WRE_q <= SR_FIFO_WRE_d;
END IF;
END PROCESS;
SR_DDR_WR <= SR_DDR_WR_q;
PROCESS (SR_DDR_WR_clk)
BEGIN
IF SR_DDR_WR_clk'event and SR_DDR_WR_clk='1' THEN
SR_DDR_WR_q <= SR_DDR_WR_d;
END IF;
END PROCESS;
SR_DDRWR_D_SEL <= SR_DDRWR_D_SEL_q;
PROCESS (SR_DDRWR_D_SEL_clk)
BEGIN
IF SR_DDRWR_D_SEL_clk'event and SR_DDRWR_D_SEL_clk='1' THEN
SR_DDRWR_D_SEL_q <= SR_DDRWR_D_SEL_d;
END IF;
END PROCESS;
SR_VDMP <= SR_VDMP_q;
PROCESS (SR_VDMP0_clk_ctrl)
BEGIN
IF SR_VDMP0_clk_ctrl'event and SR_VDMP0_clk_ctrl='1' THEN
SR_VDMP_q <= SR_VDMP_d;
END IF;
END PROCESS;
PROCESS (FB_REGDDR_0_clk_ctrl)
BEGIN
IF FB_REGDDR_0_clk_ctrl'event and FB_REGDDR_0_clk_ctrl='1' THEN
FB_REGDDR_q <= FB_REGDDR_d;
END IF;
END PROCESS;
PROCESS (DDR_SM_0_clk_ctrl)
BEGIN
IF DDR_SM_0_clk_ctrl'event and DDR_SM_0_clk_ctrl='1' THEN
DDR_SM_q <= DDR_SM_d;
END IF;
END PROCESS;
PROCESS (VA_P0_clk_ctrl)
BEGIN
IF VA_P0_clk_ctrl'event and VA_P0_clk_ctrl='1' THEN
VA_P_q <= VA_P_d;
END IF;
END PROCESS;
PROCESS (BA_P0_clk_ctrl)
BEGIN
IF BA_P0_clk_ctrl'event and BA_P0_clk_ctrl='1' THEN
BA_P_q <= BA_P_d;
END IF;
END PROCESS;
PROCESS (VA_S0_clk_ctrl)
BEGIN
IF VA_S0_clk_ctrl'event and VA_S0_clk_ctrl='1' THEN
VA_S_q <= VA_S_d;
END IF;
END PROCESS;
PROCESS (BA_S0_clk_ctrl)
BEGIN
IF BA_S0_clk_ctrl'event and BA_S0_clk_ctrl='1' THEN
BA_S_q <= BA_S_d;
END IF;
END PROCESS;
PROCESS (MCS0_clk_ctrl)
BEGIN
IF MCS0_clk_ctrl'event and MCS0_clk_ctrl='1' THEN
MCS_q <= MCS_d;
END IF;
END PROCESS;
PROCESS (CPU_DDR_SYNC_clk)
BEGIN
IF CPU_DDR_SYNC_clk'event and CPU_DDR_SYNC_clk='1' THEN
CPU_DDR_SYNC_q <= CPU_DDR_SYNC_d;
END IF;
END PROCESS;
PROCESS (DDR_CS_clk)
BEGIN
IF DDR_CS_clk'event and DDR_CS_clk='1' THEN
IF DDR_CS_ena='1' THEN
DDR_CS_q <= DDR_CS_d;
END IF;
END IF;
END PROCESS;
PROCESS (CPU_REQ_clk)
BEGIN
IF CPU_REQ_clk'event and CPU_REQ_clk='1' THEN
CPU_REQ_q <= CPU_REQ_d;
END IF;
END PROCESS;
PROCESS (CPU_AC_clk)
BEGIN
IF CPU_AC_clk'event and CPU_AC_clk='1' THEN
CPU_AC_q <= CPU_AC_d;
END IF;
END PROCESS;
PROCESS (BUS_CYC_clk)
BEGIN
IF BUS_CYC_clk'event and BUS_CYC_clk='1' THEN
BUS_CYC_q <= BUS_CYC_d;
END IF;
END PROCESS;
PROCESS (BLITTER_REQ_clk)
BEGIN
IF BLITTER_REQ_clk'event and BLITTER_REQ_clk='1' THEN
BLITTER_REQ_q <= BLITTER_REQ_d;
END IF;
END PROCESS;
PROCESS (BLITTER_AC_clk)
BEGIN
IF BLITTER_AC_clk'event and BLITTER_AC_clk='1' THEN
BLITTER_AC_q <= BLITTER_AC_d;
END IF;
END PROCESS;
PROCESS (FIFO_REQ_clk)
BEGIN
IF FIFO_REQ_clk'event and FIFO_REQ_clk='1' THEN
FIFO_REQ_q <= FIFO_REQ_d;
END IF;
END PROCESS;
PROCESS (FIFO_AC_clk)
BEGIN
IF FIFO_AC_clk'event and FIFO_AC_clk='1' THEN
FIFO_AC_q <= FIFO_AC_d;
END IF;
END PROCESS;
PROCESS (CLR_FIFO_SYNC_clk)
BEGIN
IF CLR_FIFO_SYNC_clk'event and CLR_FIFO_SYNC_clk='1' THEN
CLR_FIFO_SYNC_q <= CLR_FIFO_SYNC_d;
END IF;
END PROCESS;
PROCESS (CLEAR_FIFO_CNT_clk)
BEGIN
IF CLEAR_FIFO_CNT_clk'event and CLEAR_FIFO_CNT_clk='1' THEN
CLEAR_FIFO_CNT_q <= CLEAR_FIFO_CNT_d;
END IF;
END PROCESS;
PROCESS (STOP_clk)
BEGIN
IF STOP_clk'event and STOP_clk='1' THEN
STOP_q <= STOP_d;
END IF;
END PROCESS;
PROCESS (FIFO_BANK_OK_clk)
BEGIN
IF FIFO_BANK_OK_clk'event and FIFO_BANK_OK_clk='1' THEN
FIFO_BANK_OK_q <= FIFO_BANK_OK_d;
END IF;
END PROCESS;
PROCESS (DDR_REFRESH_CNT0_clk_ctrl)
BEGIN
IF DDR_REFRESH_CNT0_clk_ctrl'event and DDR_REFRESH_CNT0_clk_ctrl='1' THEN
DDR_REFRESH_CNT_q <= DDR_REFRESH_CNT_d;
END IF;
END PROCESS;
PROCESS (DDR_REFRESH_REQ_clk)
BEGIN
IF DDR_REFRESH_REQ_clk'event and DDR_REFRESH_REQ_clk='1' THEN
DDR_REFRESH_REQ_q <= DDR_REFRESH_REQ_d;
END IF;
END PROCESS;
PROCESS (DDR_REFRESH_SIG0_clk_ctrl)
BEGIN
IF DDR_REFRESH_SIG0_clk_ctrl'event and DDR_REFRESH_SIG0_clk_ctrl='1' THEN
IF DDR_REFRESH_SIG0_ena_ctrl='1' THEN
DDR_REFRESH_SIG_q <= DDR_REFRESH_SIG_d;
END IF;
END IF;
END PROCESS;
PROCESS (REFRESH_TIME_clk)
BEGIN
IF REFRESH_TIME_clk'event and REFRESH_TIME_clk = '1' THEN
REFRESH_TIME_q <= REFRESH_TIME_d;
END IF;
END PROCESS;
PROCESS (VIDEO_BASE_L_D0_clk_ctrl)
BEGIN
IF VIDEO_BASE_L_D0_clk_ctrl'event and VIDEO_BASE_L_D0_clk_ctrl='1' THEN
IF VIDEO_BASE_L_D0_ena_ctrl='1' THEN
VIDEO_BASE_L_D_q <= VIDEO_BASE_L_D_d;
END IF;
END IF;
END PROCESS;
PROCESS (VIDEO_BASE_M_D0_clk_ctrl)
BEGIN
IF VIDEO_BASE_M_D0_clk_ctrl'event and VIDEO_BASE_M_D0_clk_ctrl='1' THEN
IF VIDEO_BASE_M_D0_ena_ctrl='1' THEN
VIDEO_BASE_M_D_q <= VIDEO_BASE_M_D_d;
END IF;
END IF;
END PROCESS;
PROCESS (VIDEO_BASE_H_D0_clk_ctrl)
BEGIN
IF VIDEO_BASE_H_D0_clk_ctrl'event and VIDEO_BASE_H_D0_clk_ctrl='1' THEN
IF VIDEO_BASE_H_D0_ena_ctrl='1' THEN
VIDEO_BASE_H_D_q <= VIDEO_BASE_H_D_d;
END IF;
END IF;
END PROCESS;
PROCESS (VIDEO_BASE_X_D0_clk_ctrl)
BEGIN
IF VIDEO_BASE_X_D0_clk_ctrl'event and VIDEO_BASE_X_D0_clk_ctrl='1' THEN
IF VIDEO_BASE_X_D0_ena_ctrl='1' THEN
VIDEO_BASE_X_D_q <= VIDEO_BASE_X_D_d;
END IF;
END IF;
END PROCESS;
PROCESS (VIDEO_ADR_CNT0_clk_ctrl)
BEGIN
IF VIDEO_ADR_CNT0_clk_ctrl'event and VIDEO_ADR_CNT0_clk_ctrl='1' THEN
IF VIDEO_ADR_CNT0_ena_ctrl='1' THEN
VIDEO_ADR_CNT_q <= VIDEO_ADR_CNT_d;
END IF;
END IF;
END PROCESS;
i_vbasx : work.flexbus_register
GENERIC MAP
(
reg_width => 2,
match_address => x"ffff8603",
match_mask => x"0000ffff", -- byte register
match_fbcs => 1
)
PORT MAP
(
clk => clk33m,
fb_addr => fb_adr,
fb_data => fb_ad,
fb_cs => ('0', '0', nfb_cs3, nfb_cs2, nfb_cs1),
fb_ta_n => reg_ta,
fb_wr_n => nfb_wr,
reg_value => v_basx,
cs => v_basx_cs
);
i_vbash : work.flexbus_register
GENERIC MAP
(
reg_width => 8,
match_address => x"ffff8604",
match_mask => x"0000fffe", -- byte register
match_fbcs => 1
)
PORT MAP
(
clk => clk33m,
fb_addr => fb_adr,
fb_data => fb_ad,
fb_cs => ('0', '0', nfb_cs3, nfb_cs2, nfb_cs1),
fb_ta_n => reg_ta,
fb_wr_n => nfb_wr,
reg_value => v_bash,
cs => v_bash_cs
);
-- Start of original equations
LINE <= FB_SIZE0 and FB_SIZE1;
-- BYT SELECT
-- ADR==0
-- LONG UND LINE
FB_B(0) <= to_std_logic(FB_ADR(1 DOWNTO 0) = "00") or (FB_SIZE1 and FB_SIZE0) or ((not FB_SIZE1) and (not FB_SIZE0));
-- ADR==1
-- HIGH WORD
-- LONG UND LINE
FB_B(1) <= to_std_logic(FB_ADR(1 DOWNTO 0) = "01") or (FB_SIZE1 and (not FB_SIZE0) and (not FB_ADR(1))) or (FB_SIZE1 and FB_SIZE0) or ((not FB_SIZE1) and (not FB_SIZE0));
-- ADR==2
-- LONG UND LINE
FB_B(2) <= to_std_logic(FB_ADR(1 DOWNTO 0) = "10") or (FB_SIZE1 and FB_SIZE0) or ((not FB_SIZE1) and (not FB_SIZE0));
-- ADR==3
-- LOW WORD
-- LONG UND LINE
FB_B(3) <= to_std_logic(FB_ADR(1 DOWNTO 0) = "11") or (FB_SIZE1 and (not FB_SIZE0) and FB_ADR(1)) or (FB_SIZE1 and FB_SIZE0) or ((not FB_SIZE1) and (not FB_SIZE0));
-- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) --------------------------------------------------
FB_REGDDR_0_clk_ctrl <= MAIN_CLK;
PROCESS (FB_REGDDR_q, DDR_SEL, BUS_CYC_q, LINE, DDR_CS_q, nFB_OE, MAIN_CLK, DDR_CONFIG, nFB_WR, vcc)
VARIABLE stdVec3: std_logic_vector(2 DOWNTO 0);
BEGIN
FB_REGDDR_d <= FB_REGDDR_q;
fb_vdoe <= (OTHERS => '0');
fb_le <= (OTHERS => '0');
video_ddr_ta <= '0';
bus_cyc_end <= '0';
stdVec3 := FB_REGDDR_q;
CASE stdVec3 IS
WHEN "000" =>
FB_LE(0) <= not nFB_WR;
-- LOS WENN BEREIT ODER IMMER BEI LINE WRITE
IF (BUS_CYC_q or (DDR_SEL and LINE and (not nFB_WR))) = '1' THEN
FB_REGDDR_d <= "001";
ELSE
FB_REGDDR_d <= "000";
END IF;
WHEN "001" =>
IF DDR_CS_q = '1' THEN
FB_LE(0) <= not nFB_WR;
VIDEO_DDR_TA <= vcc;
IF LINE ='1' THEN
FB_VDOE(0) <= (not nFB_OE) and (not DDR_CONFIG);
FB_REGDDR_d <= "010";
ELSE
BUS_CYC_END <= vcc;
FB_VDOE(0) <= (not nFB_OE) and (not MAIN_CLK) and (not DDR_CONFIG);
FB_REGDDR_d <= "000";
END IF;
ELSE
FB_REGDDR_d <= "000";
END IF;
WHEN "010" =>
IF DDR_CS_q = '1' THEN
FB_VDOE(1) <= (not nFB_OE) and (not DDR_CONFIG);
FB_LE(1) <= not nFB_WR;
VIDEO_DDR_TA <= vcc;
FB_REGDDR_d <= "011";
ELSE
FB_REGDDR_d <= "000";
END IF;
WHEN "011" =>
IF DDR_CS_q ='1' THEN
FB_VDOE(2) <= (not nFB_OE) and (not DDR_CONFIG);
FB_LE(2) <= not nFB_WR;
-- BEI LINE WRITE EVT. WARTEN
IF ((not BUS_CYC_q) and LINE and (not nFB_WR)) = '1' THEN
FB_REGDDR_d <= "011";
ELSE
VIDEO_DDR_TA <= vcc;
FB_REGDDR_d <= "100";
END IF;
ELSE
FB_REGDDR_d <= "000";
END IF;
WHEN "100" =>
IF DDR_CS_q = '1' THEN
FB_VDOE(3) <= (not nFB_OE) and (not MAIN_CLK) and (not DDR_CONFIG);
FB_LE(3) <= not nFB_WR;
VIDEO_DDR_TA <= vcc;
BUS_CYC_END <= vcc;
FB_REGDDR_d <= "000";
ELSE
FB_REGDDR_d <= "000";
END IF;
WHEN others =>
END CASE;
stdVec3 := (OTHERS => '0'); -- no storage needed
END PROCESS;
-- DDR STEUERUNG -----------------------------------------------------
-- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE;
VCKE <= VIDEO_RAM_CTR(0);
nVCS <= not VIDEO_RAM_CTR(1);
DDR_REFRESH_ON <= VIDEO_RAM_CTR(2);
DDR_CONFIG <= VIDEO_RAM_CTR(3);
FIFO_ACTIVE <= VIDEO_RAM_CTR(8);
-- ------------------------------
CPU_ROW_ADR <= FB_ADR(26 DOWNTO 14);
CPU_BA <= FB_ADR(13 DOWNTO 12);
CPU_COL_ADR <= FB_ADR(11 DOWNTO 2);
nVRAS <= not VRAS;
nVCAS <= not VCAS;
nVWE <= not VWE;
SR_DDR_WR_clk <= DDRCLK0;
SR_DDRWR_D_SEL_clk <= DDRCLK0;
SR_VDMP0_clk_ctrl <= DDRCLK0;
SR_FIFO_WRE_clk <= DDRCLK0;
CPU_AC_clk <= DDRCLK0;
FIFO_AC_clk <= DDRCLK0;
BLITTER_AC_clk <= DDRCLK0;
DDRWR_D_SEL1 <= BLITTER_AC_q;
-- SELECT LOGIC
DDR_SEL <= to_std_logic(FB_ALE='1' and FB_AD(31 DOWNTO 30) = "01");
DDR_CS_clk <= MAIN_CLK;
DDR_CS_ena <= FB_ALE;
DDR_CS_d <= DDR_SEL;
-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER
-- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG
-- CONFIG SOFORT LOS
-- LINE WRITE SPÄTER
CPU_SIG <= (DDR_SEL and (nFB_WR or (not LINE)) and (not DDR_CONFIG)) or
(DDR_SEL and DDR_CONFIG) or (to_std_logic(FB_REGDDR_q = "010") and (not nFB_WR));
CPU_REQ_clk <= DDR_SYNC_66M;
-- HALTEN BUS CYC BEGONNEN ODER FERTIG
CPU_REQ_d <= CPU_SIG or (to_std_logic(CPU_REQ_q='1' and FB_REGDDR_q /= "010"
and FB_REGDDR_q /= "100") and (not BUS_CYC_END) and (not BUS_CYC_q));
BUS_CYC_clk <= DDRCLK0;
BUS_CYC_d_1 <= BUS_CYC_q and (not BUS_CYC_END);
-- STATE MACHINE SYNCHRONISIEREN -----------------
MCS0_clk_ctrl <= DDRCLK0;
MCS_d(0) <= MAIN_CLK;
MCS_d(1) <= MCS_q(0);
CPU_DDR_SYNC_clk <= DDRCLK0;
-- NUR 1 WENN EIN
CPU_DDR_SYNC_d <= to_std_logic(MCS_q = "10") and VCKE and (not nVCS);
-- -------------------------------------------------
VA_S0_clk_ctrl <= DDRCLK0;
BA_S0_clk_ctrl <= DDRCLK0;
(VA12_1, VA11_1, VA10_1, VA9_1, VA8_1, VA7_1, VA6_1, VA5_1, VA4_1, VA3_1,
VA2_1, VA1_1, VA0_1) <= VA_S_q;
(BA1_1, BA0_1) <= BA_S_q;
VA_P0_clk_ctrl <= DDRCLK0;
BA_P0_clk_ctrl <= DDRCLK0;
-- DDR STATE MACHINE -----------------------------------------------
DDR_SM_0_clk_ctrl <= DDRCLK0;
PROCESS (DDR_SM_q, DDR_REFRESH_REQ_q, CPU_DDR_SYNC_q, DDR_CONFIG,
CPU_ROW_ADR, FIFO_ROW_ADR, BLITTER_ROW_ADR, BLITTER_REQ_q, BLITTER_WR,
FIFO_AC_q, CPU_COL_ADR, BLITTER_COL_ADR, VA_S_q, CPU_BA, BLITTER_BA,
FB_B, CPU_AC_q, BLITTER_AC_q, FIFO_BANK_OK_q, FIFO_MW, FIFO_REQ_q,
VIDEO_ADR_CNT_q, FIFO_COL_ADR, gnd, DDR_SEL, LINE, FIFO_BA, VA_P_q,
BA_P_q, CPU_REQ_q, FB_AD, nFB_WR, FB_SIZE0, FB_SIZE1,
DDR_REFRESH_SIG_q, vcc)
VARIABLE stdVec6: std_logic_vector(5 DOWNTO 0);
BEGIN
DDR_SM_d <= DDR_SM_q;
BA_S_d <= "00";
VA_S_d <= "0000000000000";
BA_P_d <= "00";
(VA_P_d(9), VA_P_d(8), VA_P_d(7), VA_P_d(6), VA_P_d(5), VA_P_d(4),
VA_P_d(3), VA_P_d(2), VA_P_d(1), VA_P_d(0), VA_P_d(10)) <=
std_logic_vector'("00000000000");
SR_VDMP_d <= "00000000";
VA_P_d(12 DOWNTO 11) <= "00";
(FIFO_BANK_OK_d_1, FIFO_AC_d, SR_DDR_FB, SR_BLITTER_DACK, BLITTER_AC_d,
SR_DDR_WR_d, SR_DDRWR_D_SEL_d, CPU_AC_d, VA12_2, VA11_2, VA9_2,
VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2,
BA1_2, BA0_2, SR_FIFO_WRE_d, BUS_CYC_d_2, VWE, VA10_2,
FIFO_BANK_NOT_OK, VCAS, VRAS) <=
std_logic_vector'("00000000000000000000000000000");
stdVec6 := DDR_SM_q;
CASE stdVec6 IS
WHEN "000000" =>
IF (DDR_REFRESH_REQ_q)='1' THEN
DDR_SM_d <= "011111";
-- SYNCHRON UND EIN?
ELSIF (CPU_DDR_SYNC_q)='1' THEN
-- JA
IF (DDR_CONFIG)='1' THEN
DDR_SM_d <= "001000";
-- BEI WAIT UND LINE WRITE
ELSIF (CPU_REQ_q)='1' THEN
VA_S_d <= CPU_ROW_ADR;
BA_S_d <= CPU_BA;
CPU_AC_d <= vcc;
BUS_CYC_d_2 <= vcc;
DDR_SM_d <= "000010";
ELSE
-- FIFO IST DEFAULT
IF (FIFO_REQ_q or (not BLITTER_REQ_q))='1' THEN
VA_P_d <= FIFO_ROW_ADR;
BA_P_d <= FIFO_BA;
-- VORBESETZEN
FIFO_AC_d <= vcc;
ELSE
VA_P_d <= BLITTER_ROW_ADR;
BA_P_d <= BLITTER_BA;
-- VORBESETZEN
BLITTER_AC_d <= vcc;
END IF;
DDR_SM_d <= "000001";
END IF;
ELSE
-- NEIN ->SYNCHRONISIEREN
DDR_SM_d <= "000000";
END IF;
WHEN "000001" =>
-- SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK ***
IF (DDR_SEL and (nFB_WR or (not LINE)))='1' THEN
VRAS <= vcc;
(VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2) <= FB_AD(26 DOWNTO 14);
(BA1_2, BA0_2) <= FB_AD(13 DOWNTO 12);
-- AUTO PRECHARGE DA NICHT FIFO PAGE
VA_S_d(10) <= vcc;
CPU_AC_d <= vcc;
-- BUS CYCLUS LOSTRETEN
BUS_CYC_d_2 <= vcc;
ELSE
VRAS <= (FIFO_AC_q and FIFO_REQ_q) or (BLITTER_AC_q and BLITTER_REQ_q);
(VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2) <= VA_P_q;
(BA1_2, BA0_2) <= BA_P_q;
VA_S_d(10) <= not (FIFO_AC_q and FIFO_REQ_q);
FIFO_BANK_OK_d_1 <= FIFO_AC_q and FIFO_REQ_q;
FIFO_AC_d <= FIFO_AC_q and FIFO_REQ_q;
BLITTER_AC_d <= BLITTER_AC_q and BLITTER_REQ_q;
END IF;
DDR_SM_d <= "000011";
WHEN "000010" =>
VRAS <= vcc;
FIFO_BANK_NOT_OK <= vcc;
CPU_AC_d <= vcc;
-- BUS CYCLUS LOSTRETEN
BUS_CYC_d_2 <= vcc;
DDR_SM_d <= "000011";
WHEN "000011" =>
CPU_AC_d <= CPU_AC_q;
FIFO_AC_d <= FIFO_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
-- AUTO PRECHARGE WENN NICHT FIFO PAGE
VA_S_d(10) <= VA_S_q(10);
IF (((not nFB_WR) and CPU_AC_q) or (BLITTER_WR and BLITTER_AC_q))='1' THEN
DDR_SM_d <= "010000";
-- CPU?
ELSIF (CPU_AC_q)='1' THEN
VA_S_d(9 DOWNTO 0) <= CPU_COL_ADR;
BA_S_d <= CPU_BA;
DDR_SM_d <= "001110";
-- FIFO?
ELSIF (FIFO_AC_q)='1' THEN
VA_S_d(9 DOWNTO 0) <= FIFO_COL_ADR;
BA_S_d <= FIFO_BA;
DDR_SM_d <= "010110";
ELSIF (BLITTER_AC_q)='1' THEN
VA_S_d(9 DOWNTO 0) <= BLITTER_COL_ADR;
BA_S_d <= BLITTER_BA;
DDR_SM_d <= "001110";
ELSE
-- READ
DDR_SM_d <= "000111";
END IF;
WHEN "001110" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
VCAS <= vcc;
-- READ DATEN FÜR CPU
SR_DDR_FB <= CPU_AC_q;
-- BLITTER DACK AND BLITTER LATCH DATEN
SR_BLITTER_DACK <= BLITTER_AC_q;
DDR_SM_d <= "001111";
WHEN "001111" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
-- FIFO READ EINSCHIEBEN WENN BANK OK
IF (FIFO_REQ_q and FIFO_BANK_OK_q)='1' THEN
VA_S_d(9 DOWNTO 0) <= FIFO_COL_ADR;
-- MANUELL PRECHARGE
VA_S_d(10) <= gnd;
BA_S_d <= FIFO_BA;
DDR_SM_d <= "011000";
ELSE
-- ALLE PAGES SCHLIESSEN
VA_S_d(10) <= vcc;
-- WRITE
DDR_SM_d <= "011101";
END IF;
WHEN "010000" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
-- BLITTER ACK AND BLITTER LATCH DATEN
SR_BLITTER_DACK <= BLITTER_AC_q;
-- AUTO PRECHARGE WENN NICHT FIFO PAGE
VA_S_d(10) <= VA_S_q(10);
DDR_SM_d <= "010001";
WHEN "010001" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
VA_S_d(9 DOWNTO 0) <= (sizeIt(CPU_AC_q, 10) and CPU_COL_ADR) or (sizeIt(BLITTER_AC_q, 10) and BLITTER_COL_ADR);
-- AUTO PRECHARGE WENN NICHT FIFO PAGE
VA_S_d(10) <= VA_S_q(10);
BA_S_d <= (std_logic_vector'(CPU_AC_q & CPU_AC_q) and CPU_BA) or (std_logic_vector'(BLITTER_AC_q & BLITTER_AC_q) and BLITTER_BA);
-- BYTE ENABLE WRITE
SR_VDMP_d(7 DOWNTO 4) <= FB_B;
-- LINE ENABLE WRITE
SR_VDMP_d(3 DOWNTO 0) <= sizeIt(LINE,4) and "1111";
DDR_SM_d <= "010010";
WHEN "010010" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
VCAS <= vcc;
VWE <= vcc;
-- WRITE COMMAND CPU UND BLITTER IF WRITER
SR_DDR_WR_d <= vcc;
-- 2. HÄLFTE WRITE DATEN SELEKTIEREN
SR_DDRWR_D_SEL_d <= vcc;
-- WENN LINE DANN ACTIV
SR_VDMP_d <= sizeIt(LINE,8) and "11111111";
DDR_SM_d <= "010011";
WHEN "010011" =>
CPU_AC_d <= CPU_AC_q;
BLITTER_AC_d <= BLITTER_AC_q;
-- WRITE COMMAND CPU UND BLITTER IF WRITE
SR_DDR_WR_d <= vcc;
-- 2. HÄLFTE WRITE DATEN SELEKTIEREN
SR_DDRWR_D_SEL_d <= vcc;
DDR_SM_d <= "010100";
WHEN "010100" =>
DDR_SM_d <= "010101";
WHEN "010101" =>
IF (FIFO_REQ_q and FIFO_BANK_OK_q)='1' THEN
VA_S_d(9 DOWNTO 0) <= FIFO_COL_ADR;
-- NON AUTO PRECHARGE
VA_S_d(10) <= gnd;
BA_S_d <= FIFO_BA;
DDR_SM_d <= "011000";
ELSE
-- ALLE PAGES SCHLIESSEN
VA_S_d(10) <= vcc;
-- FIFO READ
DDR_SM_d <= "011101";
END IF;
WHEN "010110" =>
VCAS <= vcc;
-- DATEN WRITE FIFO
SR_FIFO_WRE_d <= vcc;
DDR_SM_d <= "010111";
WHEN "010111" =>
IF (FIFO_REQ_q)='1' THEN
-- NEUE PAGE?
IF VIDEO_ADR_CNT_q(7 DOWNTO 0) = "11111111" THEN
-- ALLE PAGES SCHLIESSEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011101";
ELSE
VA_S_d(9 DOWNTO 0) <= std_logic_vector'(unsigned(FIFO_COL_ADR) + unsigned'("0000000100"));
-- NON AUTO PRECHARGE
VA_S_d(10) <= gnd;
BA_S_d <= FIFO_BA;
DDR_SM_d <= "011000";
END IF;
ELSE
-- ALLE PAGES SCHLIESSEN
VA_S_d(10) <= vcc;
-- NOCH OFFEN LASSEN
DDR_SM_d <= "011101";
END IF;
WHEN "011000" =>
VCAS <= vcc;
-- DATEN WRITE FIFO
SR_FIFO_WRE_d <= vcc;
DDR_SM_d <= "011001";
WHEN "011001" =>
IF CPU_REQ_q='1' and (unsigned(FIFO_MW) > unsigned'("000000000")) THEN
-- ALLE PAGES SCHLIESEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011110";
ELSIF (FIFO_REQ_q)='1' THEN
-- NEUE PAGE?
IF VIDEO_ADR_CNT_q(7 DOWNTO 0) = "11111111" THEN
-- ALLE PAGES SCHLIESSEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011110";
ELSE
VA_S_d(9 DOWNTO 0) <= std_logic_vector'(unsigned(FIFO_COL_ADR) + unsigned'("0000000100"));
-- NON AUTO PRECHARGE
VA_S_d(10) <= gnd;
BA_S_d <= FIFO_BA;
DDR_SM_d <= "011010";
END IF;
ELSE
-- ALLE PAGES SCHLIESEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011110";
END IF;
WHEN "011010" =>
VCAS <= vcc;
-- DATEN WRITE FIFO
SR_FIFO_WRE_d <= vcc;
-- NOTFALL?
IF (unsigned(FIFO_MW) < unsigned'("000000000")) THEN
-- JA->
DDR_SM_d <= "010111";
ELSE
DDR_SM_d <= "011011";
END IF;
WHEN "011011" =>
IF (FIFO_REQ_q)='1' THEN
-- NEUE PAGE?
IF VIDEO_ADR_CNT_q(7 DOWNTO 0) = "11111111" THEN
-- ALLE BANKS SCHLIESEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011101";
ELSE
VA_P_d(9 DOWNTO 0) <= std_logic_vector'(unsigned(FIFO_COL_ADR) + unsigned'("0000000100"));
-- NON AUTO PRECHARGE
VA_P_d(10) <= gnd;
BA_P_d <= FIFO_BA;
DDR_SM_d <= "011100";
END IF;
ELSE
-- ALLE BANKS SCHLIESEN
VA_S_d(10) <= vcc;
-- BANK SCHLIESSEN
DDR_SM_d <= "011101";
END IF;
WHEN "011100" =>
IF (DDR_SEL and (nFB_WR or (not LINE)))='1' and FB_AD(13 DOWNTO 12) /= FIFO_BA THEN
VRAS <= vcc;
(VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2) <= FB_AD(26 DOWNTO 14);
(BA1_2, BA0_2) <= FB_AD(13 DOWNTO 12);
CPU_AC_d <= vcc;
-- BUS CYCLUS LOSTRETEN
BUS_CYC_d_2 <= vcc;
-- AUTO PRECHARGE DA NICHT FIFO BANK
VA_S_d(10) <= vcc;
DDR_SM_d <= "000011";
ELSE
VCAS <= vcc;
(VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2) <= VA_P_q;
(BA1_2, BA0_2) <= BA_P_q;
-- DATEN WRITE FIFO
SR_FIFO_WRE_d <= vcc;
-- CONFIG CYCLUS
DDR_SM_d <= "011001";
END IF;
WHEN "001000" =>
DDR_SM_d <= "001001";
WHEN "001001" =>
BUS_CYC_d_2 <= CPU_REQ_q;
DDR_SM_d <= "001010";
WHEN "001010" =>
IF (CPU_REQ_q)='1' THEN
DDR_SM_d <= "001011";
ELSE
DDR_SM_d <= "000000";
END IF;
WHEN "001011" =>
DDR_SM_d <= "001100";
WHEN "001100" =>
VA_S_d <= FB_AD(12 DOWNTO 0);
BA_S_d <= FB_AD(14 DOWNTO 13);
DDR_SM_d <= "001101";
WHEN "001101" =>
-- NUR BEI LONG WRITE
VRAS <= FB_AD(18) and (not nFB_WR) and (not FB_SIZE0) and (not FB_SIZE1);
-- NUR BEI LONG WRITE
VCAS <= FB_AD(17) and (not nFB_WR) and (not FB_SIZE0) and (not FB_SIZE1);
-- NUR BEI LONG WRITE
VWE <= FB_AD(16) and (not nFB_WR) and (not FB_SIZE0) and (not FB_SIZE1);
-- CLOSE FIFO BANK
DDR_SM_d <= "000111";
WHEN "011101" =>
-- AUF NOT OK
FIFO_BANK_NOT_OK <= vcc;
-- BÄNKE SCHLIESSEN
VRAS <= vcc;
VWE <= vcc;
DDR_SM_d <= "000110";
WHEN "011110" =>
-- AUF NOT OK
FIFO_BANK_NOT_OK <= vcc;
-- BÄNKE SCHLIESSEN
VRAS <= vcc;
VWE <= vcc;
-- REFRESH 70NS = 10 ZYCLEN
DDR_SM_d <= "000000";
WHEN "011111" =>
-- EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN
IF DDR_REFRESH_SIG_q = "1001" THEN
-- ALLE BANKS SCHLIESSEN
VRAS <= vcc;
VWE <= vcc;
VA10_2 <= vcc;
FIFO_BANK_NOT_OK <= vcc;
DDR_SM_d <= "100001";
ELSE
VCAS <= vcc;
VRAS <= vcc;
DDR_SM_d <= "100000";
END IF;
WHEN "100000" =>
DDR_SM_d <= "100001";
WHEN "100001" =>
DDR_SM_d <= "100010";
WHEN "100010" =>
DDR_SM_d <= "100011";
WHEN "100011" =>
-- LEERSCHLAUFE
DDR_SM_d <= "000100";
WHEN "000100" =>
DDR_SM_d <= "000101";
WHEN "000101" =>
DDR_SM_d <= "000110";
WHEN "000110" =>
DDR_SM_d <= "000111";
WHEN "000111" =>
DDR_SM_d <= "000000";
WHEN OTHERS =>
END CASE;
stdVec6 := (OTHERS => '0'); -- no storage needed
END PROCESS;
-- -------------------------------------------------------------
-- BLITTER ----------------------
-- ---------------------------------------
BLITTER_REQ_clk <= DDRCLK0;
BLITTER_REQ_d <= BLITTER_SIG and (not DDR_CONFIG) and VCKE and (not nVCS);
BLITTER_ROW_ADR <= BLITTER_ADR(26 DOWNTO 14);
BLITTER_BA(1) <= BLITTER_ADR(13);
BLITTER_BA(0) <= BLITTER_ADR(12);
BLITTER_COL_ADR <= BLITTER_ADR(11 DOWNTO 2);
-- ----------------------------------------------------------------------------
-- FIFO ---------------------------------
-- ------------------------------------------------------
FIFO_REQ_clk <= DDRCLK0;
FIFO_REQ_d <= (to_std_logic((unsigned(FIFO_MW) < unsigned'("011001000"))) or
(to_std_logic((unsigned(FIFO_MW) < unsigned'("111110100"))) and
FIFO_REQ_q)) and FIFO_ACTIVE and (not CLEAR_FIFO_CNT_q) and (not
STOP_q) and (not DDR_CONFIG) and VCKE and (not nVCS);
FIFO_ROW_ADR <= VIDEO_ADR_CNT_q(22 DOWNTO 10);
FIFO_BA(1) <= VIDEO_ADR_CNT_q(9);
FIFO_BA(0) <= VIDEO_ADR_CNT_q(8);
FIFO_COL_ADR <= std_logic_vector'(VIDEO_ADR_CNT_q(7) & VIDEO_ADR_CNT_q(6) &
VIDEO_ADR_CNT_q(5) & VIDEO_ADR_CNT_q(4) & VIDEO_ADR_CNT_q(3) &
VIDEO_ADR_CNT_q(2) & VIDEO_ADR_CNT_q(1) & VIDEO_ADR_CNT_q(0) & "00");
FIFO_BANK_OK_clk <= DDRCLK0;
FIFO_BANK_OK_d_2 <= FIFO_BANK_OK_q and (not FIFO_BANK_NOT_OK);
-- ZÄHLER RÜCKSETZEN WENN CLR FIFO ----------------
CLR_FIFO_SYNC_clk <= DDRCLK0;
-- SYNCHRONISIEREN
CLR_FIFO_SYNC_d <= CLR_FIFO;
CLEAR_FIFO_CNT_clk <= DDRCLK0;
CLEAR_FIFO_CNT_d <= CLR_FIFO_SYNC_q or (not FIFO_ACTIVE);
STOP_clk <= DDRCLK0;
STOP_d <= CLR_FIFO_SYNC_q or CLEAR_FIFO_CNT_q;
-- ZÄHLEN -----------------------------------------------
VIDEO_ADR_CNT0_clk_ctrl <= DDRCLK0;
VIDEO_ADR_CNT0_ena_ctrl <= SR_FIFO_WRE_q or CLEAR_FIFO_CNT_q;
VIDEO_ADR_CNT_d <= (sizeIt(CLEAR_FIFO_CNT_q,23) and VIDEO_BASE_ADR) or
(sizeIt(not CLEAR_FIFO_CNT_q,23) and
(std_logic_vector'(unsigned(VIDEO_ADR_CNT_q) +
unsigned'("00000000000000000000001"))));
VIDEO_BASE_ADR(22 DOWNTO 20) <= VIDEO_BASE_X_D_q;
VIDEO_BASE_ADR(19 DOWNTO 12) <= VIDEO_BASE_H_D_q;
VIDEO_BASE_ADR(11 DOWNTO 4) <= VIDEO_BASE_M_D_q;
VIDEO_BASE_ADR(3 DOWNTO 0) <= VIDEO_BASE_L_D_q(7 DOWNTO 4);
VDM_SEL <= VIDEO_BASE_L_D_q(3 DOWNTO 0);
-- AKTUELLE VIDEO ADRESSE
VIDEO_ACT_ADR(26 DOWNTO 4) <= std_logic_vector'(unsigned(VIDEO_ADR_CNT_q) -
unsigned(std_logic_vector'("00000000000000" & FIFO_MW)));
VIDEO_ACT_ADR(3 DOWNTO 0) <= VDM_SEL;
-- ---------------------------------------------------------------------------------------
-- REFRESH: IMMER 8 AUFS MAL, ANFORDERUNG ALLE 7.8us X 8 STCK. = 62.4us = 2059->2048 33MHz CLOCKS
-- ---------------------------------------------------------------------------------------
DDR_REFRESH_CNT0_clk_ctrl <= CLK33M;
-- ZÄHLEN 0-2047
DDR_REFRESH_CNT_d <= std_logic_vector'(unsigned(DDR_REFRESH_CNT_q) + unsigned'("00000000001"));
REFRESH_TIME_clk <= DDRCLK0;
-- SYNC
REFRESH_TIME_d <= to_std_logic(DDR_REFRESH_CNT_q = "00000000000") and (not MAIN_CLK);
DDR_REFRESH_SIG0_clk_ctrl <= DDRCLK0;
DDR_REFRESH_SIG0_ena_ctrl <= to_std_logic(REFRESH_TIME_q='1' or DDR_SM_q = "100011");
-- 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF)
-- MINUS 1 WENN GEMACHT
DDR_REFRESH_SIG_d <= (sizeIt(REFRESH_TIME_q,4) and "1001" and
sizeIt(DDR_REFRESH_ON,4) and sizeIt(not DDR_CONFIG,4)) or (sizeIt(not
REFRESH_TIME_q,4) and (std_logic_vector'(unsigned(DDR_REFRESH_SIG_q) -
unsigned'("0001"))) and sizeIt(DDR_REFRESH_ON,4) and sizeIt(not
DDR_CONFIG,4));
DDR_REFRESH_REQ_clk <= DDRCLK0;
DDR_REFRESH_REQ_d <= to_std_logic(DDR_REFRESH_SIG_q /= "0000") and DDR_REFRESH_ON and (not REFRESH_TIME_q) and (not DDR_CONFIG);
-- ---------------------------------------------------------
-- VIDEO REGISTER -----------------------
-- -------------------------------------------------------------------------------------------------------------------
VIDEO_BASE_L_D0_clk_ctrl <= MAIN_CLK;
-- 820D/2
VIDEO_BASE_L <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000110");
-- SORRY, NUR 16 BYT GRENZEN
VIDEO_BASE_L_D_d <= FB_AD(23 DOWNTO 16);
VIDEO_BASE_L_D0_ena_ctrl <= (not nFB_WR) and VIDEO_BASE_L and FB_B(1);
VIDEO_BASE_M_D0_clk_ctrl <= MAIN_CLK;
-- 8203/2
VIDEO_BASE_M <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000001");
VIDEO_BASE_M_D_d <= FB_AD(23 DOWNTO 16);
VIDEO_BASE_M_D0_ena_ctrl <= (not nFB_WR) and VIDEO_BASE_M and FB_B(3);
VIDEO_BASE_H_D0_clk_ctrl <= MAIN_CLK;
-- 8200-1/2
VIDEO_BASE_H <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000000");
VIDEO_BASE_H_D_d <= FB_AD(23 DOWNTO 16);
VIDEO_BASE_H_D0_ena_ctrl <= (not nFB_WR) and VIDEO_BASE_H and FB_B(1);
VIDEO_BASE_X_D0_clk_ctrl <= MAIN_CLK;
VIDEO_BASE_X_D_d <= FB_AD(26 DOWNTO 24);
VIDEO_BASE_X_D0_ena_ctrl <= (not nFB_WR) and VIDEO_BASE_H and FB_B(0);
-- 8209/2
VIDEO_CNT_L <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000100");
-- 8207/2
VIDEO_CNT_M <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000011");
-- 8204,5/2
VIDEO_CNT_H <= to_std_logic(((not nFB_CS1)='1') and FB_ADR(19 DOWNTO 1) = "1111100000100000010");
-- FB_AD[31..24] = lpm_bustri_BYT(
-- VIDEO_BASE_H & (0, VIDEO_BASE_X_D[])
-- # VIDEO_CNT_H & (0, VIDEO_ACT_ADR[26..24]),
-- (VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE);
fb_ad(31 DOWNTO 24) <= "00000" & video_base_x_d_d WHEN video_base_h and not nfb_oe ELSE
"00000" & video_act_adr(26 DOWNTO 24) WHEN video_cnt_h and not nfb_oe ELSE
(OTHERS => 'Z');
u0_data <= (sizeIt(VIDEO_BASE_L,8) and VIDEO_BASE_L_D_q) or
(sizeIt(VIDEO_BASE_M,8) and VIDEO_BASE_M_D_q) or
(sizeIt(VIDEO_BASE_H,8) and VIDEO_BASE_H_D_q) or
(sizeIt(VIDEO_CNT_L,8) and VIDEO_ACT_ADR(7 DOWNTO 0)) or
(sizeIt(VIDEO_CNT_M,8) and VIDEO_ACT_ADR(15 DOWNTO 8)) or
(sizeIt(VIDEO_CNT_H,8) and VIDEO_ACT_ADR(23 DOWNTO 16));
u0_enabledt <= (VIDEO_BASE_L or VIDEO_BASE_M or VIDEO_BASE_H or VIDEO_CNT_L
or VIDEO_CNT_M or VIDEO_CNT_H) and (not nFB_OE);
FB_AD(23 DOWNTO 16) <= u0_tridata;
-- Assignments added to explicitly combine the
-- effects of multiple drivers in the source
FIFO_BANK_OK_d <= FIFO_BANK_OK_d_1 or FIFO_BANK_OK_d_2;
BUS_CYC_d <= BUS_CYC_d_1 or BUS_CYC_d_2;
BA(0) <= BA0_1 or BA0_2;
BA(1) <= BA1_1 or BA1_2;
VA(0) <= VA0_1 or VA0_2;
VA(1) <= VA1_1 or VA1_2;
VA(2) <= VA2_1 or VA2_2;
VA(3) <= VA3_1 or VA3_2;
VA(4) <= VA4_1 or VA4_2;
VA(5) <= VA5_1 or VA5_2;
VA(6) <= VA6_1 or VA6_2;
VA(7) <= VA7_1 or VA7_2;
VA(8) <= VA8_1 or VA8_2;
VA(9) <= VA9_1 or VA9_2;
VA(10) <= VA10_1 or VA10_2;
VA(11) <= VA11_1 or VA11_2;
VA(12) <= VA12_1 or VA12_2;
-- Define power SIGNAL(s)
vcc <= '1';
gnd <= '0';
END ARCHITECTURE rtl;