implemented video_control_register as ALIAS
fb_ta_n stuck at GND?
This commit is contained in:
@@ -67,7 +67,7 @@ ENTITY DDR_CTRL IS
|
||||
clk_33m : IN STD_LOGIC;
|
||||
fifo_mw : IN UNSIGNED (8 DOWNTO 0);
|
||||
|
||||
va : OUT UNSIGNED (12 DOWNTO 0); -- video Adress bus at the DDR chips
|
||||
va : OUT UNSIGNED (12 DOWNTO 0); -- video Adress bus at the DDR chips
|
||||
vwe_n : OUT STD_LOGIC; -- video memory write enable
|
||||
vras_n : OUT STD_LOGIC; -- video memory RAS
|
||||
vcs_n : OUT STD_LOGIC; -- video memory chip SELECT
|
||||
@@ -101,14 +101,18 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
||||
CONSTANT FIFO_MWM : INTEGER := 200; -- medium water mark
|
||||
CONSTANT FIFO_HWM : INTEGER := 500; -- high water mark
|
||||
|
||||
-- constants for bits in video_control_register
|
||||
CONSTANT vrcr_vcke : INTEGER := 0;
|
||||
CONSTANT VRCR_REFRESH_ON : INTEGER := 2;
|
||||
CONSTANT VRCR_CONFIG_ON : INTEGER := 3;
|
||||
CONSTANT vrcr_vcs : INTEGER := 1;
|
||||
--
|
||||
CONSTANT VRCR_FIFO_ON : INTEGER := 24;
|
||||
CONSTANT VRCR_BORDER_ON : INTEGER := 25;
|
||||
-- DDR2 RAM controller bits:
|
||||
-- $F0000400:
|
||||
-- BIT 0: vcke;
|
||||
-- 1: NOT nVC
|
||||
-- 2: REFRESH ON (0=ddr_access_fifo AND CNT CLEAR);
|
||||
-- 3: CONFIG
|
||||
-- 8: vmem_fifo_enable
|
||||
ALIAS vmem_clock_enable IS video_control_register(0);
|
||||
ALIAS vmem_cs_enable IS video_control_register(1);
|
||||
ALIAS vmem_refresh_enable IS video_control_register(2);
|
||||
ALIAS vmem_config_enable IS video_control_register(3);
|
||||
ALIAS vmem_fifo_enable IS video_control_register(8);
|
||||
|
||||
TYPE access_width_t IS (long_access, word_access, byte_access);
|
||||
TYPE ddr_access_t IS (ddr_access_cpu, ddr_access_fifo, ddr_access_blitter, ddr_access_none);
|
||||
@@ -146,12 +150,10 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
||||
SIGNAL cpu_req : STD_LOGIC;
|
||||
SIGNAL ddr_sel : STD_LOGIC;
|
||||
SIGNAL ddr_cs : STD_LOGIC;
|
||||
SIGNAL ddr_config : STD_LOGIC;
|
||||
SIGNAL fifo_req : STD_LOGIC;
|
||||
SIGNAL fifo_row_adr : UNSIGNED (12 DOWNTO 0);
|
||||
SIGNAL fifo_ba : UNSIGNED (1 DOWNTO 0);
|
||||
SIGNAL fifo_col_adr : UNSIGNED(9 DOWNTO 0);
|
||||
SIGNAL fifo_active : STD_LOGIC;
|
||||
SIGNAL fifo_clr_sync : STD_LOGIC;
|
||||
SIGNAL vdm_sel_i : UNSIGNED (3 DOWNTO 0);
|
||||
SIGNAL clear_fifo_cnt : STD_LOGIC;
|
||||
@@ -268,11 +270,11 @@ BEGIN
|
||||
-- fb_vdoe # VIDEO_OE.
|
||||
|
||||
-- Write access for video data:
|
||||
fb_vdoe(0) <= '1' WHEN fb_regddr = fr_s0 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' AND access_width = long_access ELSE
|
||||
'1' WHEN fb_regddr = fr_s0 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' AND access_width /= long_access AND clk_33m = '0' ELSE '0';
|
||||
fb_vdoe(1) <= '1' WHEN fb_regddr = fr_s1 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' ELSE '0';
|
||||
fb_vdoe(2) <= '1' WHEN fb_regddr = fr_s2 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' ELSE '0';
|
||||
fb_vdoe(3) <= '1' WHEN fb_regddr = fr_s3 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' AND clk_33m = '0' ELSE '0';
|
||||
fb_vdoe(0) <= '1' WHEN fb_regddr = fr_s0 AND ddr_cs = '1' AND fb_oe_n = '0' AND vmem_config_enable = '0' AND access_width = long_access ELSE
|
||||
'1' WHEN fb_regddr = fr_s0 AND ddr_cs = '1' AND fb_oe_n = '0' AND vmem_config_enable = '0' AND access_width /= long_access AND clk_33m = '0' ELSE '0';
|
||||
fb_vdoe(1) <= '1' WHEN fb_regddr = fr_s1 AND ddr_cs = '1' AND fb_oe_n = '0' AND vmem_config_enable = '0' ELSE '0';
|
||||
fb_vdoe(2) <= '1' WHEN fb_regddr = fr_s2 AND ddr_cs = '1' AND fb_oe_n = '0' AND vmem_config_enable = '0' ELSE '0';
|
||||
fb_vdoe(3) <= '1' WHEN fb_regddr = fr_s3 AND ddr_cs = '1' AND fb_oe_n = '0' AND vmem_config_enable = '0' AND clk_33m = '0' ELSE '0';
|
||||
|
||||
bus_cyc_end <= '1' WHEN fb_regddr = fr_s0 AND ddr_cs = '1' AND access_width /= long_access ELSE
|
||||
'1' WHEN fb_regddr = fr_s3 AND ddr_cs = '1' ELSE '0';
|
||||
@@ -285,14 +287,14 @@ BEGIN
|
||||
ddr_state <= ddr_next_state;
|
||||
END PROCESS ddr_state_reg;
|
||||
|
||||
ddr_state_dec: PROCESS(ddr_state, ddr_refresh_req, cpu_ddr_sync, ddr_config, fb_wr_n, ddr_access, blitter_wr, fifo_req, fifo_bank_ok,
|
||||
ddr_state_dec: PROCESS(ddr_state, ddr_refresh_req, cpu_ddr_sync, vmem_config_enable, fb_wr_n, ddr_access, blitter_wr, fifo_req, fifo_bank_ok,
|
||||
fifo_mw, cpu_req, video_adr_cnt, ddr_sel, tsiz, data_in, fifo_ba, ddr_refresh_sig)
|
||||
BEGIN
|
||||
CASE ddr_state IS
|
||||
WHEN ds_t1 =>
|
||||
IF ddr_refresh_req = '1' THEN
|
||||
ddr_next_state <= ds_r2;
|
||||
ELSIF cpu_ddr_sync = '1' AND ddr_config = '1' THEN -- Synchronous start.
|
||||
ELSIF cpu_ddr_sync = '1' AND vmem_config_enable = '1' THEN -- Synchronous start.
|
||||
ddr_next_state <= ds_c2;
|
||||
ELSIF cpu_ddr_sync = '1' AND cpu_req = '1' THEN -- Synchronous start.
|
||||
ddr_next_state <= ds_t2b;
|
||||
@@ -482,26 +484,26 @@ BEGIN
|
||||
sr_ddrwr_d_sel <= '0';
|
||||
|
||||
mcs <= mcs(0) & clk_33m; -- sync on clk_33m
|
||||
|
||||
blitter_req <= blitter_sig AND NOT
|
||||
video_control_register(VRCR_CONFIG_ON) AND
|
||||
video_control_register(vrcr_vcke) AND
|
||||
video_control_register(vrcr_vcs);
|
||||
|
||||
blitter_req <= blitter_sig AND
|
||||
(NOT vmem_config_enable) AND
|
||||
vmem_clock_enable AND
|
||||
vmem_cs_enable;
|
||||
|
||||
fifo_clr_sync <= fifo_clr;
|
||||
clear_fifo_cnt <= fifo_clr_sync OR NOT fifo_active;
|
||||
clear_fifo_cnt <= fifo_clr_sync OR NOT vmem_fifo_enable;
|
||||
stop <= fifo_clr_sync OR clear_fifo_cnt;
|
||||
|
||||
IF fifo_mw < fifo_mwm THEN
|
||||
fifo_req <= '1';
|
||||
ELSIF fifo_mw < FIFO_HWM AND fifo_req = '1' THEN
|
||||
fifo_req <= '1';
|
||||
ELSIF fifo_active = '1' AND
|
||||
ELSIF vmem_fifo_enable = '1' AND
|
||||
clear_fifo_cnt = '0' AND
|
||||
stop = '0' AND
|
||||
ddr_config = '0' AND
|
||||
video_control_register(vrcr_vcke) = '1' AND
|
||||
video_control_register(vrcr_vcs) = '1' THEN
|
||||
vmem_config_enable = '0' AND
|
||||
vmem_clock_enable = '1' AND
|
||||
vmem_cs_enable = '1' THEN
|
||||
fifo_req <= '1';
|
||||
ELSE
|
||||
fifo_req <= '1';
|
||||
@@ -513,13 +515,13 @@ BEGIN
|
||||
video_adr_cnt <= video_adr_cnt + 1;
|
||||
END IF;
|
||||
|
||||
IF mcs = "10" AND video_control_register(vrcr_vcke) = '1' AND video_control_register(vrcr_vcs) = '1' THEN
|
||||
IF mcs = "10" AND vmem_clock_enable = '1' AND vmem_cs_enable = '1' THEN
|
||||
cpu_ddr_sync <= '1';
|
||||
ELSE
|
||||
cpu_ddr_sync <= '0';
|
||||
END IF;
|
||||
|
||||
IF ddr_refresh_sig /= x"0" AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' AND need_refresh = '1' THEN
|
||||
IF ddr_refresh_sig /= x"0" AND vmem_refresh_enable = '1' AND vmem_config_enable = '0' AND need_refresh = '1' THEN
|
||||
ddr_refresh_req <= '1';
|
||||
ELSE
|
||||
ddr_refresh_req <= '0';
|
||||
@@ -531,9 +533,9 @@ BEGIN
|
||||
need_refresh <= '0';
|
||||
END IF;
|
||||
|
||||
IF need_refresh = '1' AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' THEN
|
||||
IF need_refresh = '1' AND vmem_refresh_enable = '1' AND vmem_config_enable = '0' THEN
|
||||
ddr_refresh_sig <= x"9";
|
||||
ELSIF ddr_state = ds_r6 AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' THEN
|
||||
ELSIF ddr_state = ds_r6 AND vmem_refresh_enable = '1' AND vmem_config_enable = '0' THEN
|
||||
ddr_refresh_sig <= ddr_refresh_sig - 1;
|
||||
ELSE
|
||||
ddr_refresh_sig <= x"0";
|
||||
@@ -576,14 +578,12 @@ BEGIN
|
||||
va_s(10) <= '1';
|
||||
ddr_access <= ddr_access_cpu;
|
||||
ELSIF ddr_state = ds_t2a THEN
|
||||
-- ?? mfro
|
||||
va_s(10) <= NOT (fifo_active AND fifo_req);
|
||||
va_s(10) <= NOT (vmem_fifo_enable AND fifo_req);
|
||||
ddr_access <= ddr_access_fifo;
|
||||
fifo_bank_ok <= fifo_active AND fifo_req;
|
||||
fifo_bank_ok <= vmem_fifo_enable AND fifo_req;
|
||||
IF ddr_access = ddr_access_blitter AND blitter_req = '1' THEN
|
||||
ddr_access <= ddr_access_blitter;
|
||||
END IF;
|
||||
-- ?? mfro BLITTER_AC <= BLITTER_ACTIVE AND blitter_req;
|
||||
ELSIF ddr_state = ds_t2b THEN
|
||||
fifo_bank_ok <= '0';
|
||||
ELSIF ddr_state = ds_t3 THEN
|
||||
@@ -591,7 +591,7 @@ BEGIN
|
||||
IF (fb_wr_n = '0' AND ddr_access = ddr_access_cpu) OR (blitter_wr = '1' AND ddr_access = ddr_access_blitter) THEN
|
||||
va_s(9 DOWNTO 0) <= cpu_col_adr;
|
||||
ba_s <= cpu_ba;
|
||||
ELSIF fifo_active = '1' THEN
|
||||
ELSIF vmem_fifo_enable = '1' THEN
|
||||
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr);
|
||||
ba_s <= fifo_ba;
|
||||
ELSIF ddr_access = ddr_access_blitter THEN
|
||||
@@ -705,7 +705,7 @@ BEGIN
|
||||
|
||||
p_ddr_cs: PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_33m);
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF fb_ale = '1' THEN
|
||||
ddr_cs <= ddr_sel;
|
||||
END IF;
|
||||
@@ -715,11 +715,11 @@ BEGIN
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(ddr_sync_66m);
|
||||
|
||||
IF ddr_sel = '1' AND fb_wr_n = '1' AND ddr_config = '0' THEN
|
||||
IF ddr_sel = '1' AND fb_wr_n = '1' AND vmem_config_enable = '0' THEN
|
||||
cpu_req <= '1';
|
||||
ELSIF ddr_sel = '1' AND access_width /= long_access AND ddr_config = '0' THEN -- Start when not config and not longword access.
|
||||
ELSIF ddr_sel = '1' AND access_width /= long_access AND vmem_config_enable = '0' THEN -- Start when not config and not longword access.
|
||||
cpu_req <= '1';
|
||||
ELSIF ddr_sel = '1' AND ddr_config = '1' THEN -- Config, start immediately.
|
||||
ELSIF ddr_sel = '1' AND vmem_config_enable = '1' THEN -- Config, start immediately.
|
||||
cpu_req <= '1';
|
||||
ELSIF fb_regddr = fr_s1 AND fb_wr_n = '0' THEN -- Longword write later.
|
||||
cpu_req <= '1';
|
||||
@@ -780,13 +780,8 @@ BEGIN
|
||||
'1' WHEN ddr_state = ds_cb8 ELSE
|
||||
'1' WHEN ddr_state = ds_r2 AND ddr_refresh_sig = x"9" ELSE '0';
|
||||
|
||||
-- DDR controller:
|
||||
-- VIDEO RAM CONTROL REGISTER (IS IN VIDEO_MUX_CTR)
|
||||
-- $F0000400: BIT 0: vcke; 1: NOT nVCS ;2:REFRESH ON , (0=ddr_access_fifo AND CNT CLEAR);
|
||||
-- 3: CONFIG; 8: fifo_active;
|
||||
vcs_n <= NOT(video_control_register(VRCR_REFRESH_ON));
|
||||
ddr_config <= video_control_register(3);
|
||||
fifo_active <= video_control_register(8);
|
||||
vcs_n <= NOT(vmem_cs_enable);
|
||||
vcke <= vmem_clock_enable;
|
||||
|
||||
cpu_row_adr <= fb_adr(26 DOWNTO 14);
|
||||
cpu_ba <= fb_adr(13 DOWNTO 12);
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
----------------------------------------------------------------------
|
||||
---- ----
|
||||
---- ThIS file IS part of the 'Firebee' project. ----
|
||||
---- http://acp.atari.ORg ----
|
||||
---- This file is part of the 'Firebee' project. ----
|
||||
---- http://acp.atari.org ----
|
||||
---- ----
|
||||
---- Description: ----
|
||||
---- ThIS design unit provides the DMA controller of the 'Firebee'----
|
||||
---- computer. It IS optimized fOR the use of an Altera Cyclone ----
|
||||
---- FPGA (EP3C40F484). ThIS IP-CORe IS based on the first edi- ----
|
||||
---- tion of the Firebee configware ORigINally provided by Fredi ----
|
||||
---- AshwANDen AND Wolfgang Förster. ThIS release IS IN compa- ----
|
||||
---- rISion to the first edition completely written IN VHDL. ----
|
||||
---- This design unit provides the DMA controller of the 'Firebee'----
|
||||
---- computer. It is optimized for the use of an Altera Cyclone ----
|
||||
---- FPGA (EP3C40F484). This IP-Core is based on the first edi- ----
|
||||
---- tion of the Firebee configware originally provided by Fredi ----
|
||||
---- Aschwanden and Wolfgang Förster. This release is in compa- ----
|
||||
---- rision to the first edition completely written in VHDL. ----
|
||||
---- ----
|
||||
---- AuthOR(s): ----
|
||||
---- - Wolfgang Foerster, wf@experiment-s.de; wf@INventronik.de ----
|
||||
---- Author(s): ----
|
||||
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
|
||||
---- ----
|
||||
----------------------------------------------------------------------
|
||||
---- ----
|
||||
---- Copyright (C) 2012 Fredi AschwANDen, Wolfgang Förster ----
|
||||
---- Copyright (C) 2012 Fredi Aschwanden, Wolfgang Förster ----
|
||||
---- ----
|
||||
---- ThIS source file IS free software; you can redIStribute it ----
|
||||
---- This source file is free software; you can redistribute it ----
|
||||
---- AND/OR modIFy it under the terms of the GNU General Public ----
|
||||
---- License as publIShed by the Free Software Foundation; either ----
|
||||
---- License as published by the Free Software Foundation; either ----
|
||||
---- version 2 of the License, OR (at your option) any later ----
|
||||
---- version. ----
|
||||
---- ----
|
||||
---- ThIS program IS dIStributed IN the hope that it will be ----
|
||||
---- useful, but WITHOUT ANY WARRANTY; withOUT even the implied ----
|
||||
---- This program is distributed in the hope that it will be ----
|
||||
---- useful, but WITHOUT ANY WARRANTY; without even the implied ----
|
||||
---- warranty of MERCHANTABILITY OR FITNESS FOR A PARTICULAR ----
|
||||
---- PURPOSE. See the GNU General Public License fOR mORe ----
|
||||
---- PURPOSE. See the GNU General Public License for more ----
|
||||
---- details. ----
|
||||
---- ----
|
||||
---- You should have received a copy of the GNU General Public ----
|
||||
---- License along with thIS program; IF NOT, write to the Free ----
|
||||
---- Software Foundation, Inc., 51 FranklIN Street, FIFth FloOR, ----
|
||||
---- License along with this program; If not, write to the Free ----
|
||||
---- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ----
|
||||
---- Boston, MA 02110-1301, USA. ----
|
||||
---- ----
|
||||
----------------------------------------------------------------------
|
||||
--
|
||||
-- RevISion HIStORy
|
||||
-- Revision History
|
||||
--
|
||||
-- RevISion 2K12B 20120801 WF
|
||||
-- Revision 2K12B 20120801 WF
|
||||
-- Initial Release of the second edition.
|
||||
|
||||
LIBRARY IEEE;
|
||||
@@ -55,9 +55,9 @@ ENTITY FBEE_DMA IS
|
||||
FB_ADR : IN STD_LOGIC_VECTOR(26 DOWNTO 0);
|
||||
FB_ALE : IN STD_LOGIC;
|
||||
FB_SIZE : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
|
||||
fb_cs_n : IN STD_LOGIC_VECTOR(2 DOWNTO 1);
|
||||
fb_oe_n : IN STD_LOGIC;
|
||||
FB_WRn : IN STD_LOGIC;
|
||||
fb_cs_n : IN STD_LOGIC_VECTOR(2 DOWNTO 1);
|
||||
fb_oe_n : IN STD_LOGIC;
|
||||
fb_wr_n : IN STD_LOGIC;
|
||||
FB_AD_IN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
FB_AD_OUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
FB_AD_EN_31_24 : OUT STD_LOGIC;
|
||||
@@ -194,7 +194,7 @@ ARCHITECTURE BEHAVIOUR of FBEE_DMA IS
|
||||
SIGNAL FB_B0 : STD_LOGIC;
|
||||
SIGNAL WRF_DOUT : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||
SIGNAL FB_AD_I : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||
SIGNAL d : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
SIGNAL d : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
BEGIN
|
||||
LONG <= '1' WHEN FB_SIZE(1) = '0' AND FB_SIZE(0) = '0' ELSE '0';
|
||||
BYTE <= '1' WHEN FB_SIZE(1) = '0' AND FB_SIZE(0) = '1' ELSE '0';
|
||||
@@ -258,7 +258,7 @@ BEGIN
|
||||
INBUFFER: PROCESS(CLK_MAIN)
|
||||
BEGIN
|
||||
IF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF FB_WRn = '0' THEN
|
||||
IF fb_wr_n = '0' THEN
|
||||
FB_AD_I <= FB_AD_IN(23 DOWNTO 16);
|
||||
END IF;
|
||||
END IF;
|
||||
@@ -295,7 +295,7 @@ BEGIN
|
||||
fcf_aph <= '1' WHEN FB_ALE = '1' AND FB_AD_IN(31 DOWNTO 0) = x"F0020110" AND LONG = '1' ELSE '0'; -- ADRESSPHASE F0020110 LONG ONLY
|
||||
|
||||
RDF_DIN <= DATA_IN_FDC WHEN dma_mode(7) = '1' ELSE DATA_IN_SCSI;
|
||||
RDF_RDE <= '1' WHEN fcf_aph = '1' AND FB_WRn = '1' ELSE '0'; -- AKTIVIEREN IN ADRESSPHASE
|
||||
RDF_RDE <= '1' WHEN fcf_aph = '1' AND fb_wr_n = '1' ELSE '0'; -- AKTIVIEREN IN ADRESSPHASE
|
||||
|
||||
DATA_OUT_FDC_SCSI <= WRF_DOUT WHEN dma_active = '1' AND dma_mode(8) = '1' ELSE FB_AD_I; -- BEI DMA WRITE <-FIFO SONST <-FB
|
||||
|
||||
@@ -304,16 +304,16 @@ BEGIN
|
||||
CA_I(2) <= '1' WHEN dma_active = '1' ELSE dma_mode(2);
|
||||
CA <= CA_I;
|
||||
|
||||
FDC_WRn <= (NOT dma_mode(8)) WHEN dma_active = '1' ELSE FB_WRn;
|
||||
FDC_WRn <= (NOT dma_mode(8)) WHEN dma_active = '1' ELSE fb_wr_n;
|
||||
|
||||
dma_mode_REGISTER: PROCESS(RESET, CLK_MAIN)
|
||||
BEGIN
|
||||
IF RESET = '1' THEN
|
||||
dma_mode <= x"0000";
|
||||
ELSIF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF dma_mode_cs = '1' AND FB_WRn = '0' AND FB_B0 = '1' THEN
|
||||
IF dma_mode_cs = '1' AND fb_wr_n = '0' AND FB_B0 = '1' THEN
|
||||
dma_mode(15 DOWNTO 8) <= FB_AD_IN(31 DOWNTO 24);
|
||||
ELSIF dma_mode_cs = '1' AND FB_WRn = '0' AND FB_B1 = '1' THEN
|
||||
ELSIF dma_mode_cs = '1' AND fb_wr_n = '0' AND FB_B1 = '1' THEN
|
||||
dma_mode(7 DOWNTO 0) <= FB_AD_IN(23 DOWNTO 16);
|
||||
END IF;
|
||||
END IF;
|
||||
@@ -324,11 +324,11 @@ BEGIN
|
||||
IF RESET = '1' OR CLR_FIFO = '1' THEN
|
||||
dma_bytecnt <= x"00000000";
|
||||
ELSIF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF dma_data_cs = '1' AND FB_WRn = '0' AND dma_mode(4) = '1' AND FB_B1 = '1' THEN
|
||||
IF dma_data_cs = '1' AND fb_wr_n = '0' AND dma_mode(4) = '1' AND FB_B1 = '1' THEN
|
||||
dma_bytecnt(31 DOWNTO 17) <= "000000000000000";
|
||||
dma_bytecnt(16 DOWNTO 9) <= FB_AD_IN(23 DOWNTO 16);
|
||||
dma_bytecnt(8 DOWNTO 0) <= "000000000";
|
||||
ELSIF dma_bytecnt_cs = '1' AND FB_WRn = '0' THEN
|
||||
ELSIF dma_bytecnt_cs = '1' AND fb_wr_n = '0' THEN
|
||||
dma_bytecnt <= FB_AD_IN;
|
||||
END IF;
|
||||
END IF;
|
||||
@@ -339,7 +339,7 @@ BEGIN
|
||||
IF RESET = '1' THEN
|
||||
WDC_BSL <= "00";
|
||||
ELSIF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF WDC_BSL_CS = '1' AND FB_WRn = '0' AND FB_B0 = '1' THEN
|
||||
IF WDC_BSL_CS = '1' AND fb_wr_n = '0' AND FB_B0 = '1' THEN
|
||||
WDC_BSL <= FB_AD_IN(25 DOWNTO 24);
|
||||
END IF;
|
||||
WDC_BSL0 <= WDC_BSL(0);
|
||||
@@ -367,20 +367,20 @@ BEGIN
|
||||
dma_mid <= x"00";
|
||||
dma_low <= x"00";
|
||||
ELSIF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF FB_WRn = '0' AND (dma_top_cs = '1' OR dma_adr_cs = '1') THEN
|
||||
IF fb_wr_n = '0' AND (dma_top_cs = '1' OR dma_adr_cs = '1') THEN
|
||||
dma_top <= FB_AD_IN(31 DOWNTO 24);
|
||||
END IF;
|
||||
IF FB_WRn = '0' AND (dma_high_cs = '1' OR dma_adr_cs = '1') THEN
|
||||
IF fb_wr_n = '0' AND (dma_high_cs = '1' OR dma_adr_cs = '1') THEN
|
||||
dma_high <= FB_AD_IN(23 DOWNTO 16);
|
||||
END IF;
|
||||
IF FB_WRn = '0' AND dma_mid_cs = '1' THEN
|
||||
IF fb_wr_n = '0' AND dma_mid_cs = '1' THEN
|
||||
dma_mid <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF FB_WRn = '0' AND dma_adr_cs = '1' THEN
|
||||
ELSIF fb_wr_n = '0' AND dma_adr_cs = '1' THEN
|
||||
dma_mid <= FB_AD_IN(15 DOWNTO 8);
|
||||
END IF;
|
||||
IF FB_WRn = '0' AND dma_low_cs = '1' THEN
|
||||
IF fb_wr_n = '0' AND dma_low_cs = '1' THEN
|
||||
dma_low <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF FB_WRn = '0' AND dma_adr_cs = '1' THEN
|
||||
ELSIF fb_wr_n = '0' AND dma_adr_cs = '1' THEN
|
||||
dma_low <= FB_AD_IN(7 DOWNTO 0);
|
||||
END IF;
|
||||
END IF;
|
||||
@@ -424,7 +424,7 @@ BEGIN
|
||||
IF RESET = '1' THEN
|
||||
WRF_WRE <= '0';
|
||||
ELSIF RISING_EDGE(CLK_MAIN) THEN
|
||||
IF fcf_aph = '1' AND FB_WRn = '0' THEN
|
||||
IF fcf_aph = '1' AND fb_wr_n = '0' THEN
|
||||
WRF_WRE <= '1';
|
||||
ELSE
|
||||
WRF_WRE <= '0';
|
||||
@@ -462,27 +462,27 @@ BEGIN
|
||||
SNDENDLO <= x"00";
|
||||
SNDMODE <= x"00";
|
||||
ELSIF CLK_MAIN = '1' AND CLK_MAIN' event THEN
|
||||
IF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"0" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
IF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"0" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDMACTL <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"1" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"1" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDBASHI <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"2" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"2" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDBASMI <= FB_AD_IN(23DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"3" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"3" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDBASLO <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"4" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"4" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDADRHI <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"5" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"5" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDADRMI <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"6" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"6" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDADRLO <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"7" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"7" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDENDHI <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"8" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"8" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDENDMI <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"9" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"9" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDENDLO <= FB_AD_IN(23 DOWNTO 16);
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"10" AND FB_WRn = '0' AND FB_B1 ='1' THEN
|
||||
ELSIF DMA_SND_CS = '1' AND FB_ADR(5 DOWNTO 1) = 5x"10" AND fb_wr_n = '0' AND FB_B1 ='1' THEN
|
||||
SNDMODE <= FB_AD_IN(23 DOWNTO 16);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
@@ -914,135 +914,135 @@ BEGIN
|
||||
blitter_run => blitter_run
|
||||
);
|
||||
|
||||
-- I_INTHANDLER: INTHANDLER
|
||||
-- PORT MAP(
|
||||
-- clk_main => clk_main,
|
||||
-- resetn => reset_n,
|
||||
-- fb_adr => fb_adr,
|
||||
-- fb_cs_n => fb_cs_n(2 DOWNTO 1),
|
||||
-- fb_oe_n => fb_oe_n,
|
||||
-- fb_size0 => fb_size(0),
|
||||
-- fb_size1 => fb_size(1),
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- fb_ad_IN => fb_ad,
|
||||
-- fb_ad_OUT => fb_ad_out_ih,
|
||||
-- fb_ad_EN_31_24 => fb_ad_en_31_24_ih,
|
||||
-- fb_ad_EN_23_16 => fb_ad_en_23_16_ih,
|
||||
-- fb_ad_EN_15_8 => fb_ad_en_15_8_ih,
|
||||
-- fb_ad_EN_7_0 => fb_ad_en_7_0_ih,
|
||||
-- pic_int => pic_int,
|
||||
-- e0_int => e0_int,
|
||||
-- dvi_int => dvi_int,
|
||||
-- pci_inta_n => pci_inta_n,
|
||||
-- pci_intb_n => pci_intb_n,
|
||||
-- pci_intc_n => pci_intc_n,
|
||||
-- pci_intd_n => pci_intd_n,
|
||||
-- mfp_intn => mfp_int_n,
|
||||
-- dsp_int => dsp_int,
|
||||
-- vsync => vsync_i,
|
||||
-- hsync => hsync_i,
|
||||
-- drq_dma => drq_dma,
|
||||
-- irq_n => irq_n,
|
||||
-- int_handler_ta => int_handler_ta,
|
||||
-- fbee_conf => fbee_conf,
|
||||
-- tin0 => tin0
|
||||
-- );
|
||||
I_INTHANDLER: INTHANDLER
|
||||
PORT MAP(
|
||||
clk_main => clk_main,
|
||||
reset_n => reset_n,
|
||||
fb_adr => fb_adr,
|
||||
fb_cs_n => fb_cs_n(2 DOWNTO 1),
|
||||
fb_oe_n => fb_oe_n,
|
||||
fb_size0 => fb_size(0),
|
||||
fb_size1 => fb_size(1),
|
||||
fb_wr_n => fb_wr_n,
|
||||
fb_ad_IN => fb_ad,
|
||||
fb_ad_OUT => fb_ad_out_ih,
|
||||
fb_ad_EN_31_24 => fb_ad_en_31_24_ih,
|
||||
fb_ad_EN_23_16 => fb_ad_en_23_16_ih,
|
||||
fb_ad_EN_15_8 => fb_ad_en_15_8_ih,
|
||||
fb_ad_EN_7_0 => fb_ad_en_7_0_ih,
|
||||
pic_int => pic_int,
|
||||
e0_int => e0_int,
|
||||
dvi_int => dvi_int,
|
||||
pci_inta_n => pci_inta_n,
|
||||
pci_intb_n => pci_intb_n,
|
||||
pci_intc_n => pci_intc_n,
|
||||
pci_intd_n => pci_intd_n,
|
||||
mfp_int_n => mfp_int_n,
|
||||
dsp_int => dsp_int,
|
||||
vsync => vsync_i,
|
||||
hsync => hsync_i,
|
||||
drq_dma => drq_dma,
|
||||
irq_n => irq_n,
|
||||
int_handler_ta => int_handler_ta,
|
||||
fbee_conf => fbee_conf,
|
||||
tin0 => tin0
|
||||
);
|
||||
|
||||
-- I_DMA: FBEE_DMA
|
||||
-- PORT MAP(
|
||||
-- RESET => NOT reset_n,
|
||||
-- clk_main => clk_main,
|
||||
-- clk_fdc => clk_fdc,
|
||||
--
|
||||
-- fb_adr => fb_adr(26 DOWNTO 0),
|
||||
-- fb_ale => fb_ale,
|
||||
-- fb_size => fb_size,
|
||||
-- fb_cs_n => fb_cs_n(2 DOWNTO 1),
|
||||
-- fb_oe_n => fb_oe_n,
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- fb_ad_IN => fb_ad,
|
||||
-- fb_ad_OUT => fb_ad_out_dma,
|
||||
-- fb_ad_EN_31_24 => fb_ad_en_31_24_dma,
|
||||
-- fb_ad_EN_23_16 => fb_ad_en_23_16_dma,
|
||||
-- fb_ad_EN_15_8 => fb_ad_en_15_8_dma,
|
||||
-- fb_ad_EN_7_0 => fb_ad_en_7_0_dma,
|
||||
--
|
||||
-- ACSI_DIR => ACSI_DIR,
|
||||
-- ACSI_D_IN => ACSI_D,
|
||||
-- acsi_d_out => acsi_d_out,
|
||||
-- acsi_d_en => acsi_d_en,
|
||||
-- ACSI_CSn => ACSI_CSn,
|
||||
-- ACSI_A1 => ACSI_A1,
|
||||
-- ACSI_resetn => ACSI_reset_n,
|
||||
-- ACSI_DRQn => ACSI_DRQn,
|
||||
-- ACSI_ACKn => ACSI_ACKn,
|
||||
--
|
||||
-- DATA_IN_FDC => data_out_fdc,
|
||||
-- DATA_IN_SCSI => data_out_scsi,
|
||||
-- data_out_fdc_SCSI => data_in_fdc_scsi,
|
||||
--
|
||||
-- DMA_DRQ_IN => drq_fdc,
|
||||
-- DMA_DRQ_OUT => drq_dma,
|
||||
-- DMA_DRQ11 => drq11_dma,
|
||||
--
|
||||
-- scsi_drq => scsi_drq,
|
||||
-- scsi_dackn => scsi_dack_n,
|
||||
-- scsi_int => scsi_int,
|
||||
-- scsi_csn => scsi_csn,
|
||||
-- scsi_cs => scsi_cs,
|
||||
--
|
||||
-- ca => ca,
|
||||
-- FLOPPY_HD_DD => FDD_HD_DD,
|
||||
-- wdc_bsl0 => wdc_bsl0,
|
||||
-- fdc_csn => fdc_cs_n,
|
||||
-- fdc_wrn => fdc_wr_n,
|
||||
-- fd_int => fd_int,
|
||||
-- ide_int => ide_int,
|
||||
-- dma_cs => dma_cs
|
||||
-- );
|
||||
I_DMA: FBEE_DMA
|
||||
PORT MAP(
|
||||
RESET => NOT reset_n,
|
||||
clk_main => clk_main,
|
||||
clk_fdc => clk_fdc,
|
||||
|
||||
-- I_IDE_CF_SD_ROM: IDE_CF_SD_ROM
|
||||
-- PORT MAP(
|
||||
-- RESET => NOT reset_n,
|
||||
-- clk_main => clk_main,
|
||||
--
|
||||
-- fb_adr => fb_adr(19 DOWNTO 5),
|
||||
-- FB_CS1n => fb_cs_n(1),
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- fb_b0 => fb_b0,
|
||||
-- fb_b1 => fb_b1,
|
||||
--
|
||||
-- fbee_conf => fbee_conf(31 DOWNTO 30),
|
||||
--
|
||||
-- RP_UDSn => RP_UDSn,
|
||||
-- RP_ldsn => RP_ldsn,
|
||||
--
|
||||
-- SD_CLK => SD_CLK,
|
||||
-- SD_D0 => SD_D0,
|
||||
-- SD_D1 => SD_D1,
|
||||
-- SD_D2 => SD_D2,
|
||||
-- SD_CD_D3_IN => SD_D3,
|
||||
-- sd_cd_d3_out => sd_cd_d3_out,
|
||||
-- sd_cd_d3_en => sd_cd_d3_en,
|
||||
-- SD_CMD_D1_IN => SD_CMD_D1,
|
||||
-- sd_cmd_d1_out => sd_cmd_d1_out,
|
||||
-- sd_cmd_d1_en => sd_cmd_d1_en,
|
||||
-- SD_caRD_DETECT => SD_caRD_DETECT,
|
||||
-- SD_WP => SD_WP,
|
||||
--
|
||||
-- ide_rdy => ide_rdy,
|
||||
-- IDE_WRn => IDE_WRn,
|
||||
-- IDE_RDn => IDE_RDn,
|
||||
-- IDE_CSn => IDE_CSn,
|
||||
-- -- IDE_DRQn =>, -- Not used.
|
||||
-- ide_cf_ta => ide_cf_ta,
|
||||
--
|
||||
-- ROM4n => ROM4n,
|
||||
-- ROM3n => ROM3n,
|
||||
--
|
||||
-- CF_WP => CF_WP,
|
||||
-- CF_CSn => CF_CSn
|
||||
-- );
|
||||
fb_adr => fb_adr(26 DOWNTO 0),
|
||||
fb_ale => fb_ale,
|
||||
fb_size => fb_size,
|
||||
fb_cs_n => fb_cs_n(2 DOWNTO 1),
|
||||
fb_oe_n => fb_oe_n,
|
||||
fb_wr_n => fb_wr_n,
|
||||
fb_ad_IN => fb_ad,
|
||||
fb_ad_OUT => fb_ad_out_dma,
|
||||
fb_ad_EN_31_24 => fb_ad_en_31_24_dma,
|
||||
fb_ad_EN_23_16 => fb_ad_en_23_16_dma,
|
||||
fb_ad_EN_15_8 => fb_ad_en_15_8_dma,
|
||||
fb_ad_EN_7_0 => fb_ad_en_7_0_dma,
|
||||
|
||||
ACSI_DIR => ACSI_DIR,
|
||||
ACSI_D_IN => ACSI_D,
|
||||
acsi_d_out => acsi_d_out,
|
||||
acsi_d_en => acsi_d_en,
|
||||
ACSI_CSn => ACSI_CSn,
|
||||
ACSI_A1 => ACSI_A1,
|
||||
ACSI_resetn => ACSI_reset_n,
|
||||
ACSI_DRQn => ACSI_DRQn,
|
||||
ACSI_ACKn => ACSI_ACKn,
|
||||
|
||||
DATA_IN_FDC => data_out_fdc,
|
||||
DATA_IN_SCSI => data_out_scsi,
|
||||
data_out_fdc_SCSI => data_in_fdc_scsi,
|
||||
|
||||
DMA_DRQ_IN => drq_fdc,
|
||||
DMA_DRQ_OUT => drq_dma,
|
||||
DMA_DRQ11 => drq11_dma,
|
||||
|
||||
scsi_drq => scsi_drq,
|
||||
scsi_dackn => scsi_dack_n,
|
||||
scsi_int => scsi_int,
|
||||
scsi_csn => scsi_csn,
|
||||
scsi_cs => scsi_cs,
|
||||
|
||||
ca => ca,
|
||||
FLOPPY_HD_DD => FDD_HD_DD,
|
||||
wdc_bsl0 => wdc_bsl0,
|
||||
fdc_csn => fdc_cs_n,
|
||||
fdc_wrn => fdc_wr_n,
|
||||
fd_int => fd_int,
|
||||
ide_int => ide_int,
|
||||
dma_cs => dma_cs
|
||||
);
|
||||
|
||||
I_IDE_CF_SD_ROM: IDE_CF_SD_ROM
|
||||
PORT MAP(
|
||||
RESET => NOT reset_n,
|
||||
clk_main => clk_main,
|
||||
|
||||
fb_adr => fb_adr(19 DOWNTO 5),
|
||||
FB_CS1n => fb_cs_n(1),
|
||||
fb_wr_n => fb_wr_n,
|
||||
fb_b0 => fb_b0,
|
||||
fb_b1 => fb_b1,
|
||||
|
||||
fbee_conf => fbee_conf(31 DOWNTO 30),
|
||||
|
||||
RP_UDSn => RP_UDSn,
|
||||
RP_ldsn => RP_ldsn,
|
||||
|
||||
SD_CLK => SD_CLK,
|
||||
SD_D0 => SD_D0,
|
||||
SD_D1 => SD_D1,
|
||||
SD_D2 => SD_D2,
|
||||
SD_CD_D3_IN => SD_D3,
|
||||
sd_cd_d3_out => sd_cd_d3_out,
|
||||
sd_cd_d3_en => sd_cd_d3_en,
|
||||
SD_CMD_D1_IN => SD_CMD_D1,
|
||||
sd_cmd_d1_out => sd_cmd_d1_out,
|
||||
sd_cmd_d1_en => sd_cmd_d1_en,
|
||||
SD_caRD_DETECT => SD_caRD_DETECT,
|
||||
SD_WP => SD_WP,
|
||||
|
||||
ide_rdy => ide_rdy,
|
||||
IDE_WRn => IDE_WRn,
|
||||
IDE_RDn => IDE_RDn,
|
||||
IDE_CSn => IDE_CSn,
|
||||
-- IDE_DRQn =>, -- Not used.
|
||||
ide_cf_ta => ide_cf_ta,
|
||||
|
||||
ROM4n => ROM4n,
|
||||
ROM3n => ROM3n,
|
||||
|
||||
CF_WP => CF_WP,
|
||||
CF_CSn => CF_CSn
|
||||
);
|
||||
|
||||
-- I_DSP: DSP
|
||||
-- PORT MAP(
|
||||
@@ -1054,7 +1054,7 @@ BEGIN
|
||||
-- FB_CS2n => fb_cs_n(2),
|
||||
-- fb_size0 => fb_size(0),
|
||||
-- fb_size1 => fb_size(1),
|
||||
-- fb_burst_n => fb_burst_n,
|
||||
-- fb_burst_n => fb_burst_n,
|
||||
-- fb_adr => fb_adr,
|
||||
-- resetn => reset_n,
|
||||
-- FB_CS3n => fb_cs_n(3),
|
||||
@@ -1076,41 +1076,41 @@ BEGIN
|
||||
-- SRD_EN => dsp_srd_en
|
||||
-- );
|
||||
|
||||
-- I_SOUND: WF2149IP_TOP_SOC
|
||||
-- PORT MAP(
|
||||
-- SYS_CLK => clk_main,
|
||||
-- resetn => reset_n,
|
||||
--
|
||||
-- WAV_CLK => clk_2m0,
|
||||
-- SELn => '1',
|
||||
--
|
||||
-- BDIR => sndir_i,
|
||||
-- BC2 => '1',
|
||||
-- BC1 => sndcs_i,
|
||||
--
|
||||
-- A9n => '0',
|
||||
-- A8 => '1',
|
||||
-- DA_IN => fb_ad(31 DOWNTO 24),
|
||||
-- DA_OUT => da_out_x,
|
||||
--
|
||||
-- IO_A_IN => x"00", -- All port pINs are dedicated OUTputs.
|
||||
-- IO_A_OUT(7) => ide_res_i,
|
||||
-- IO_A_OUT(6) => lp_dir_x,
|
||||
-- IO_A_OUT(5) => lp_str,
|
||||
-- IO_A_OUT(4) => dtr,
|
||||
-- IO_A_OUT(3) => rts,
|
||||
-- IO_A_OUT(2) => reserved_1,
|
||||
-- IO_A_OUT(1) => dsa_d,
|
||||
-- IO_A_OUT(0) => FDD_SDSELn,
|
||||
-- -- IO_A_EN => tout0_n, -- Not required.
|
||||
-- IO_B_IN => lp_d,
|
||||
-- IO_B_OUT => lp_d_x,
|
||||
-- -- IO_B_EN => -- Not used.
|
||||
--
|
||||
-- OUT_A => ym_qa,
|
||||
-- OUT_B => ym_qb,
|
||||
-- OUT_C => ym_qc
|
||||
-- );
|
||||
I_SOUND: WF2149IP_TOP_SOC
|
||||
PORT MAP(
|
||||
SYS_CLK => clk_main,
|
||||
resetn => reset_n,
|
||||
|
||||
WAV_CLK => clk_2m0,
|
||||
SELn => '1',
|
||||
|
||||
BDIR => sndir_i,
|
||||
BC2 => '1',
|
||||
BC1 => sndcs_i,
|
||||
|
||||
A9n => '0',
|
||||
A8 => '1',
|
||||
DA_IN => fb_ad(31 DOWNTO 24),
|
||||
DA_OUT => da_out_x,
|
||||
|
||||
IO_A_IN => x"00", -- All port pins are dedicated outputs.
|
||||
IO_A_OUT(7) => ide_res_i,
|
||||
IO_A_OUT(6) => lp_dir_x,
|
||||
IO_A_OUT(5) => lp_str,
|
||||
IO_A_OUT(4) => dtr,
|
||||
IO_A_OUT(3) => rts,
|
||||
IO_A_OUT(2) => reserved_1,
|
||||
IO_A_OUT(1) => dsa_d,
|
||||
IO_A_OUT(0) => FDD_SDSELn,
|
||||
-- IO_A_EN => tout0_n, -- Not required.
|
||||
IO_B_IN => lp_d,
|
||||
IO_B_OUT => lp_d_x,
|
||||
-- IO_B_EN => -- Not used.
|
||||
|
||||
OUT_A => ym_qa,
|
||||
OUT_B => ym_qb,
|
||||
OUT_C => ym_qc
|
||||
);
|
||||
|
||||
I_MFP: WF68901IP_TOP_SOC
|
||||
PORT MAP(
|
||||
@@ -1135,8 +1135,8 @@ BEGIN
|
||||
gpip_in(2) => NOT cts,
|
||||
gpip_in(1) => NOT dcd,
|
||||
gpip_in(0) => lp_busy,
|
||||
-- GPIP_OUT =>, -- Not used; all GPIPs are direction INput.
|
||||
-- GPIP_EN =>, -- Not used; all GPIPs are direction INput.
|
||||
-- GPIP_OUT =>, -- Not used; all GPIPs are direction input.
|
||||
-- GPIP_EN =>, -- Not used; all GPIPs are direction in put.
|
||||
-- Interrupt control:
|
||||
IACKn => NOT mfp_intack,
|
||||
IEIn => '0',
|
||||
|
||||
@@ -208,7 +208,7 @@ PACKAGE firebee_pkg IS
|
||||
COMPONENT INTHANDLER
|
||||
PORT(
|
||||
clk_main : IN STD_LOGIC;
|
||||
RESETn : IN STD_LOGIC;
|
||||
reset_n : IN STD_LOGIC;
|
||||
fb_adr : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
fb_cs_n : IN STD_LOGIC_VECTOR(2 DOWNTO 1);
|
||||
fb_size0 : IN STD_LOGIC;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
----------------------------------------------------------------------
|
||||
---- ----
|
||||
---- This file is part of the 'Firebee' project. ----
|
||||
---- This file is part OF the 'Firebee' project. ----
|
||||
---- http://acp.atari.org ----
|
||||
---- ----
|
||||
---- Description: ----
|
||||
---- This design unit provides the interruptlogic of the 'Firebee'----
|
||||
---- computer. It is optimized for the use of an Altera Cyclone ----
|
||||
---- This design unit provides the interruptlogic OF the 'Firebee'----
|
||||
---- computer. It is optimized FOR the use of an Altera Cyclone ----
|
||||
---- FPGA (EP3C40F484). This IP-Core is based on the first edi- ----
|
||||
---- tion of the Firebee configware originally provided by Fredi ----
|
||||
---- Ashwanden and Wolfgang Förster. This release is in compa- ----
|
||||
---- rision to the first edition completely written in VHDL. ----
|
||||
---- tion OF the Firebee configware originally provided by Fredi ----
|
||||
---- Aschwanden AND Wolfgang Förster. This release is in compa- ----
|
||||
---- rision TO the first edition completely written in VHDL. ----
|
||||
---- ----
|
||||
---- Author(s): ----
|
||||
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
|
||||
@@ -19,19 +19,19 @@
|
||||
---- Copyright (C) 2012 Fredi Aschwanden, Wolfgang Förster ----
|
||||
---- ----
|
||||
---- This source file is free software; you can redistribute it ----
|
||||
---- and/or modify it under the terms of the GNU General Public ----
|
||||
---- AND/or modify it under the terms OF the GNU General Public ----
|
||||
---- License as published by the Free Software Foundation; either ----
|
||||
---- version 2 of the License, or (at your option) any later ----
|
||||
---- version. ----
|
||||
---- ----
|
||||
---- This program is distributed in the hope that it will be ----
|
||||
---- This program IS distributed in the hope that it will be ----
|
||||
---- useful, but WITHOUT ANY WARRANTY; without even the implied ----
|
||||
---- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ----
|
||||
---- PURPOSE. See the GNU General Public License for more ----
|
||||
---- warranty OF MERCHANTABILITY or FITNESS FOR A PARTICULAR ----
|
||||
---- PURPOSE. See the GNU General Public License FOR more ----
|
||||
---- details. ----
|
||||
---- ----
|
||||
---- You should have received a copy of the GNU General Public ----
|
||||
---- License along with this program; if not, write to the Free ----
|
||||
---- License along with this program; IF NOT, write TO the Free ----
|
||||
---- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ----
|
||||
---- Boston, MA 02110-1301, USA. ----
|
||||
---- ----
|
||||
@@ -40,267 +40,267 @@
|
||||
-- Revision History
|
||||
--
|
||||
-- Revision 2K12B 20120801 WF
|
||||
-- Initial Release of the second edition.
|
||||
-- Initial Release OF the second edition.
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
-- use ieee.std_logic_arith.all;
|
||||
LIBRARY IEEE;
|
||||
USE IEEE.std_logic_1164.ALL;
|
||||
USE IEEE.numeric_std.all;
|
||||
-- USE ieee.std_logic_arith.ALL;
|
||||
|
||||
entity INTHANDLER is
|
||||
port(
|
||||
CLK_MAIN : in std_logic;
|
||||
RESETn : in std_logic;
|
||||
FB_ADR : in std_logic_vector(31 downto 0);
|
||||
fb_cs_n : in std_logic_vector(2 downto 1);
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_oe_n : in std_logic;
|
||||
FB_AD_IN : in std_logic_vector(31 downto 0);
|
||||
FB_AD_OUT : out std_logic_vector(31 downto 0);
|
||||
FB_AD_EN_31_24 : out std_logic;
|
||||
FB_AD_EN_23_16 : out std_logic;
|
||||
FB_AD_EN_15_8 : out std_logic;
|
||||
FB_AD_EN_7_0 : out std_logic;
|
||||
PIC_INT : in std_logic;
|
||||
E0_INT : in std_logic;
|
||||
DVI_INT : in std_logic;
|
||||
PCI_INTAn : in std_logic;
|
||||
PCI_INTBn : in std_logic;
|
||||
PCI_INTCn : in std_logic;
|
||||
PCI_INTDn : in std_logic;
|
||||
MFP_INTn : in std_logic;
|
||||
DSP_INT : in std_logic;
|
||||
VSYNC : in std_logic;
|
||||
HSYNC : in std_logic;
|
||||
DRQ_DMA : in std_logic;
|
||||
irq_n : out std_logic_vector(7 downto 2);
|
||||
INT_HANDLER_TA : out std_logic;
|
||||
FBEE_CONF : out std_logic_vector(31 downto 0);
|
||||
TIN0 : out std_logic
|
||||
ENTITY inthandler IS
|
||||
PORT(
|
||||
clk_main : IN STD_LOGIC;
|
||||
reset_n : IN STD_LOGIC;
|
||||
fb_adr : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
fb_cs_n : IN STD_LOGIC_VECTOR(2 DOWNTO 1);
|
||||
fb_size0 : IN STD_LOGIC;
|
||||
fb_size1 : IN STD_LOGIC;
|
||||
fb_wr_n : IN STD_LOGIC;
|
||||
fb_oe_n : IN STD_LOGIC;
|
||||
fb_ad_in : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
fb_ad_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
fb_ad_en_31_24 : OUT STD_LOGIC;
|
||||
fb_ad_en_23_16 : OUT STD_LOGIC;
|
||||
fb_ad_en_15_8 : OUT STD_LOGIC;
|
||||
fb_ad_en_7_0 : OUT STD_LOGIC;
|
||||
pic_int : IN STD_LOGIC;
|
||||
e0_int : IN STD_LOGIC;
|
||||
dvi_int : IN STD_LOGIC;
|
||||
pci_inta_n : IN STD_LOGIC;
|
||||
pci_intb_n : IN STD_LOGIC;
|
||||
pci_intc_n : IN STD_LOGIC;
|
||||
pci_intd_n : IN STD_LOGIC;
|
||||
mfp_int_n : IN STD_LOGIC;
|
||||
dsp_int : IN STD_LOGIC;
|
||||
vsync : IN STD_LOGIC;
|
||||
hsync : IN STD_LOGIC;
|
||||
drq_dma : IN STD_LOGIC;
|
||||
irq_n : OUT STD_LOGIC_VECTOR(7 DOWNTO 2);
|
||||
int_handler_ta : OUT STD_LOGIC;
|
||||
fbee_conf : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
tin0 : OUT STD_LOGIC
|
||||
);
|
||||
end entity INTHANDLER;
|
||||
END ENTITY inthandler;
|
||||
|
||||
architecture BEHAVIOUR of INTHANDLER is
|
||||
type INT_LA_TYPE is array(9 downto 0) of std_logic_vector(3 downto 0);
|
||||
signal INT_LA : INT_LA_TYPE;
|
||||
signal FB_B : std_logic_vector(3 downto 0);
|
||||
signal INT_CTR : std_logic_vector(31 downto 0);
|
||||
signal INT_CTR_CS : std_logic;
|
||||
signal INT_LATCH : std_logic_vector(31 downto 0);
|
||||
signal INT_LATCH_CS : std_logic;
|
||||
signal INT_CLEAR : std_logic_vector(31 downto 0);
|
||||
signal INT_CLEAR_CS : std_logic;
|
||||
signal INT_IN : std_logic_vector(31 downto 0);
|
||||
signal INT_ENA : std_logic_vector(31 downto 0);
|
||||
signal INT_ENA_CS : std_logic;
|
||||
signal INT_L : std_logic_vector(9 downto 0);
|
||||
signal FBEE_CONF_REG : std_logic_vector(31 downto 0);
|
||||
signal FBEE_CONF_CS : std_logic;
|
||||
signal PSEUDO_BUS_ERROR : std_logic;
|
||||
begin
|
||||
ARCHITECTURE BEHAVIOUR OF inthandler IS
|
||||
type int_la_t IS array(9 DOWNTO 0) OF STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||
signal int_la : int_la_t;
|
||||
signal fb_b : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||
signal int_ctr : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal int_ctr_cs : STD_LOGIC;
|
||||
signal int_latch : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal int_latch_cs : STD_LOGIC;
|
||||
signal int_clear : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal int_clear_cs : STD_LOGIC;
|
||||
signal int_in : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal int_ena : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal int_ena_cs : STD_LOGIC;
|
||||
signal int_l : STD_LOGIC_VECTOR(9 DOWNTO 0);
|
||||
signal fbee_conf_reg : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
signal fbee_conf_cs : STD_LOGIC;
|
||||
signal pseudo_bus_error : STD_LOGIC;
|
||||
BEGIN
|
||||
-- Byte selectors:
|
||||
FB_B(0) <= '1' when FB_SIZE1 = '1' and FB_SIZE0 = '0' and FB_ADR(1) = '0' else -- High word.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' and FB_ADR(1 downto 0) = "00" else -- HH Byte.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else -- Long.
|
||||
'1' when FB_SIZE1 = '1' and FB_SIZE0 = '1' else '0';-- Line.
|
||||
fb_b(0) <= '1' WHEN fb_size1 = '1' AND fb_size0 = '0' AND fb_adr(1) = '0' ELSE -- High word.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '1' AND fb_adr(1 DOWNTO 0) = "00" ELSE -- HH Byte.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '0' ELSE -- Long.
|
||||
'1' WHEN fb_size1 = '1' AND fb_size0 = '1' ELSE '0';-- Line.
|
||||
|
||||
FB_B(1) <= '1' when FB_SIZE1 = '1' and FB_SIZE0 = '0' and FB_ADR(1) = '0' else -- High word.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' and FB_ADR(1 downto 0) = "01" else -- HL Byte.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else -- Long.
|
||||
'1' when FB_SIZE1 = '1' and FB_SIZE0 = '1' else '0';-- Line.
|
||||
fb_b(1) <= '1' WHEN fb_size1 = '1' AND fb_size0 = '0' AND fb_adr(1) = '0' ELSE -- High word.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '1' AND fb_adr(1 DOWNTO 0) = "01" ELSE -- HL Byte.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '0' ELSE -- Long.
|
||||
'1' WHEN fb_size1 = '1' AND fb_size0 = '1' ELSE '0';-- Line.
|
||||
|
||||
FB_B(2) <= '1' when FB_SIZE1 = '1' and FB_SIZE0 = '0' and FB_ADR(1) = '1' else -- Low word.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' and FB_ADR(1 downto 0) = "10" else -- LH Byte.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else -- Long.
|
||||
'1' when FB_SIZE1 = '1' and FB_SIZE0 = '1' else '0';-- Line.
|
||||
fb_b(2) <= '1' WHEN fb_size1 = '1' AND fb_size0 = '0' AND fb_adr(1) = '1' ELSE -- Low word.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '1' AND fb_adr(1 DOWNTO 0) = "10" ELSE -- LH Byte.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '0' ELSE -- Long.
|
||||
'1' WHEN fb_size1 = '1' AND fb_size0 = '1' ELSE '0';-- Line.
|
||||
|
||||
FB_B(3) <= '1' when FB_SIZE1 = '1' and FB_SIZE0 = '0' and FB_ADR(1) = '1' else -- Low word.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' and FB_ADR(1 downto 0) = "11" else -- LL Byte.
|
||||
'1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else -- Long.
|
||||
'1' when FB_SIZE1 = '1' and FB_SIZE0 = '1' else '0';-- Line.
|
||||
fb_b(3) <= '1' WHEN fb_size1 = '1' AND fb_size0 = '0' AND fb_adr(1) = '1' ELSE -- Low word.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '1' AND fb_adr(1 DOWNTO 0) = "11" ELSE -- LL Byte.
|
||||
'1' WHEN fb_size1 = '0' AND fb_size0 = '0' ELSE -- Long.
|
||||
'1' WHEN fb_size1 = '1' AND fb_size0 = '1' ELSE '0';-- Line.
|
||||
|
||||
INT_CTR_CS <= '1' when fb_cs_n(2) = '0' and FB_ADR(27 downto 2) = "00000000000100000000000000" else '0'; -- $10000/4;
|
||||
INT_ENA_CS <= '1' when fb_cs_n(2) = '0' and FB_ADR(27 downto 2) = "00000000000100000000000001" else '0'; -- $10004/4;
|
||||
INT_CLEAR_CS <= '1' when fb_cs_n(2) = '0' and FB_ADR(27 downto 2) = "00000000000100000000000010" else '0'; -- $10008/4;
|
||||
INT_LATCH_CS <= '1' when fb_cs_n(2) = '0' and FB_ADR(27 downto 2) = "00000000000100000000000011" else '0'; -- $1000C/4;
|
||||
int_ctr_cs <= '1' WHEN fb_cs_n(2) = '0' AND fb_adr(27 DOWNTO 2) = "00000000000100000000000000" ELSE '0'; -- $10000/4;
|
||||
int_ena_cs <= '1' WHEN fb_cs_n(2) = '0' AND fb_adr(27 DOWNTO 2) = "00000000000100000000000001" ELSE '0'; -- $10004/4;
|
||||
int_clear_cs <= '1' WHEN fb_cs_n(2) = '0' AND fb_adr(27 DOWNTO 2) = "00000000000100000000000010" ELSE '0'; -- $10008/4;
|
||||
int_latch_cs <= '1' WHEN fb_cs_n(2) = '0' AND fb_adr(27 DOWNTO 2) = "00000000000100000000000011" ELSE '0'; -- $1000C/4;
|
||||
|
||||
P_INT_CTRL : process
|
||||
P_INT_CTRL : PROCESS
|
||||
-- Interrupt control register:
|
||||
-- BIT0 = INT5, Bit1 = INT7.
|
||||
-- Interrupt enabe register:
|
||||
-- BIT31 = INT7, Bit30 = INT6, Bit29 = INT5, Bit28 = INT4, Bit27 = INT3, Bit26 = INT2
|
||||
-- The interrupt clear register is write only; 1 = interrupt clear.
|
||||
begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
if INT_CTR_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
INT_CTR(31 downto 24) <= FB_AD_IN(31 downto 24);
|
||||
elsif INT_CTR_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
INT_CTR(23 downto 16) <= FB_AD_IN(23 downto 16);
|
||||
elsif INT_CTR_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
INT_CTR(15 downto 8) <= FB_AD_IN(15 downto 8);
|
||||
elsif INT_CTR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
INT_CTR(7 downto 0) <= FB_AD_IN(7 downto 0);
|
||||
end if;
|
||||
-- The interrupt clear register IS write only; 1 = interrupt clear.
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF int_ctr_cs = '1' AND fb_b(0) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ctr(31 DOWNTO 24) <= fb_ad_in(31 DOWNTO 24);
|
||||
ELSIF int_ctr_cs = '1' AND fb_b(1) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ctr(23 DOWNTO 16) <= fb_ad_in(23 DOWNTO 16);
|
||||
ELSIF int_ctr_cs = '1' AND fb_b(2) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ctr(15 DOWNTO 8) <= fb_ad_in(15 DOWNTO 8);
|
||||
ELSIF int_ctr_cs = '1' AND fb_b(3) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ctr(7 DOWNTO 0) <= fb_ad_in(7 DOWNTO 0);
|
||||
END IF;
|
||||
--
|
||||
if RESETn = '0' then
|
||||
INT_ENA <= (others => '0');
|
||||
elsif INT_ENA_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
INT_ENA(31 downto 24) <= FB_AD_IN(31 downto 24);
|
||||
elsif INT_ENA_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
INT_ENA(23 downto 16) <= FB_AD_IN(23 downto 16);
|
||||
elsif INT_ENA_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
INT_ENA(15 downto 8) <= FB_AD_IN(15 downto 8);
|
||||
elsif INT_ENA_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
INT_ENA(7 downto 0) <= FB_AD_IN(7 downto 0);
|
||||
end if;
|
||||
IF reset_n = '0' THEN
|
||||
int_ena <= (OTHERS => '0');
|
||||
ELSIF int_ena_cs = '1' AND fb_b(0) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ena(31 DOWNTO 24) <= fb_ad_in(31 DOWNTO 24);
|
||||
ELSIF int_ena_cs = '1' AND fb_b(1) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ena(23 DOWNTO 16) <= fb_ad_in(23 DOWNTO 16);
|
||||
ELSIF int_ena_cs = '1' AND fb_b(2) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ena(15 DOWNTO 8) <= fb_ad_in(15 DOWNTO 8);
|
||||
ELSIF int_ena_cs = '1' AND fb_b(3) = '1' AND fb_wr_n = '0' THEN
|
||||
int_ena(7 DOWNTO 0) <= fb_ad_in(7 DOWNTO 0);
|
||||
END IF;
|
||||
--
|
||||
if INT_CLEAR_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
INT_CLEAR(31 downto 24) <= FB_AD_IN(31 downto 24);
|
||||
elsif INT_CLEAR_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
INT_CLEAR(23 downto 16) <= FB_AD_IN(23 downto 16);
|
||||
elsif INT_CLEAR_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
INT_CLEAR(15 downto 8) <= FB_AD_IN(15 downto 8);
|
||||
elsif INT_CLEAR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
INT_CLEAR(7 downto 0) <= FB_AD_IN(7 downto 0);
|
||||
end if;
|
||||
end process P_INT_CTRL;
|
||||
IF int_clear_cs = '1' AND fb_b(0) = '1' AND fb_wr_n = '0' THEN
|
||||
int_clear(31 DOWNTO 24) <= fb_ad_in(31 DOWNTO 24);
|
||||
ELSIF int_clear_cs = '1' AND fb_b(1) = '1' AND fb_wr_n = '0' THEN
|
||||
int_clear(23 DOWNTO 16) <= fb_ad_in(23 DOWNTO 16);
|
||||
ELSIF int_clear_cs = '1' AND fb_b(2) = '1' AND fb_wr_n = '0' THEN
|
||||
int_clear(15 DOWNTO 8) <= fb_ad_in(15 DOWNTO 8);
|
||||
ELSIF int_clear_cs = '1' AND fb_b(3) = '1' AND fb_wr_n = '0' THEN
|
||||
int_clear(7 DOWNTO 0) <= fb_ad_in(7 DOWNTO 0);
|
||||
END IF;
|
||||
END PROCESS P_INT_CTRL;
|
||||
|
||||
-- Interrupt latch register: read only.
|
||||
irq_n(2) <= '0' when HSYNC = '1' and INT_ENA(26) = '1' else '1';
|
||||
irq_n(3) <= '0' when INT_CTR(0) = '1' and INT_ENA(27) = '1' else '1';
|
||||
irq_n(4) <= '0' when VSYNC = '1' and INT_ENA(28) = '1' else '1';
|
||||
irq_n(5) <= '0' when INT_LATCH /= x"00000000" and INT_ENA(29) = '1' else '1';
|
||||
irq_n(6) <= '0' when MFP_INTn = '0' and INT_ENA(30) = '1' else '1';
|
||||
irq_n(7) <= '0' when PSEUDO_BUS_ERROR = '1' and INT_ENA(31) = '1' else '1';
|
||||
irq_n(2) <= '0' WHEN hsync = '1' AND int_ena(26) = '1' ELSE '1';
|
||||
irq_n(3) <= '0' WHEN int_ctr(0) = '1' AND int_ena(27) = '1' ELSE '1';
|
||||
irq_n(4) <= '0' WHEN vsync = '1' AND int_ena(28) = '1' ELSE '1';
|
||||
irq_n(5) <= '0' WHEN int_latch /= x"00000000" AND int_ena(29) = '1' ELSE '1';
|
||||
irq_n(6) <= '0' WHEN mfp_int_n = '0' AND int_ena(30) = '1' ELSE '1';
|
||||
irq_n(7) <= '0' WHEN pseudo_bus_error = '1' AND int_ena(31) = '1' ELSE '1';
|
||||
|
||||
PSEUDO_BUS_ERROR <= '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F8C8" else -- SCC
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F8E0" else -- VME
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F920" else -- PADDLE
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F921" else -- PADDLE
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F922" else -- PADDLE
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFA8" else -- MFP2
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFA9" else -- MFP2
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFAA" else -- MFP2
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFA8" else -- MFP2
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 8) = x"F87" else -- TT SCSI
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFC2" else -- ST UHR
|
||||
'1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"FFC3" else '0'; -- ST UHR
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F890" else -- DMA SOUND
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F891" else -- DMA SOUND
|
||||
-- '1' when fb_cs_n(1) = '0' and FB_ADR(19 downto 4) = x"F892" else '0'; -- DMA SOUND
|
||||
pseudo_bus_error <= '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F8C8" ELSE -- SCC
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F8E0" ELSE -- VME
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F920" ELSE -- PADDLE
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F921" ELSE -- PADDLE
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F922" ELSE -- PADDLE
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFA8" ELSE -- MFP2
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFA9" ELSE -- MFP2
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFAA" ELSE -- MFP2
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFA8" ELSE -- MFP2
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 8) = x"F87" ELSE -- TT SCSI
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFC2" ELSE -- ST UHR
|
||||
'1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"FFC3" ELSE '0'; -- ST UHR
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F890" ELSE -- DMA SOUND
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F891" ELSE -- DMA SOUND
|
||||
-- '1' WHEN fb_cs_n(1) = '0' AND fb_adr(19 DOWNTO 4) = x"F892" ELSE '0'; -- DMA SOUND
|
||||
|
||||
-- IF video ADR changes:
|
||||
TIN0 <= '1' when fb_cs_n(1) = '0' and FB_WRn = '0' and FB_ADR(19 downto 1) = 19x"7C100" else '0'; -- Write video base address high 0xFFFF8201/2.
|
||||
tin0 <= '1' WHEN fb_cs_n(1) = '0' AND fb_wr_n = '0' AND fb_adr(19 DOWNTO 1) = 19x"7C100" ELSE '0'; -- Write video base address high 0xFFFF8201/2.
|
||||
|
||||
P_INT_LATCH : process
|
||||
begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
if RESETn = '0' then
|
||||
INT_L <= (others => '0');
|
||||
else
|
||||
INT_L(0) <= PIC_INT and INT_ENA(0);
|
||||
INT_L(1) <= E0_INT and INT_ENA(1);
|
||||
INT_L(2) <= DVI_INT and INT_ENA(2);
|
||||
INT_L(3) <= not PCI_INTAn and INT_ENA(3);
|
||||
INT_L(4) <= not PCI_INTBn and INT_ENA(4);
|
||||
INT_L(5) <= not PCI_INTCn and INT_ENA(5);
|
||||
INT_L(6) <= not PCI_INTDn and INT_ENA(6);
|
||||
INT_L(7) <= DSP_INT and INT_ENA(7);
|
||||
INT_L(8) <= VSYNC and INT_ENA(8);
|
||||
INT_L(9) <= HSYNC and INT_ENA(9);
|
||||
end if;
|
||||
P_INT_LATCH : PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF reset_n = '0' THEN
|
||||
int_l <= (OTHERS => '0');
|
||||
ELSE
|
||||
int_l(0) <= pic_int AND int_ena(0);
|
||||
int_l(1) <= e0_int AND int_ena(1);
|
||||
int_l(2) <= dvi_int AND int_ena(2);
|
||||
int_l(3) <= NOT pci_inta_n AND int_ena(3);
|
||||
int_l(4) <= NOT pci_intb_n AND int_ena(4);
|
||||
int_l(5) <= NOT pci_intc_n AND int_ena(5);
|
||||
int_l(6) <= NOT pci_intd_n AND int_ena(6);
|
||||
int_l(7) <= dsp_int AND int_ena(7);
|
||||
int_l(8) <= vsync AND int_ena(8);
|
||||
int_l(9) <= hsync AND int_ena(9);
|
||||
END IF;
|
||||
|
||||
for i in 0 to 9 loop
|
||||
if INT_ENA(i) = '1' and RESETn = '1' then
|
||||
INT_LA(i) <= x"0";
|
||||
elsif INT_L(i) = '1' and INT_LA(i) < x"7" then
|
||||
INT_LA(i) <= std_logic_vector(unsigned(INT_LA(i)) + 1);
|
||||
elsif INT_L(i) = '0' and INT_LA(i) > x"8" then
|
||||
INT_LA(i) <= std_logic_vector(unsigned(INT_LA(i)) - 1);
|
||||
elsif INT_L(i) = '1' and INT_LA(i) > x"6" then
|
||||
INT_LA(i) <= x"F";
|
||||
elsif INT_L(i) = '0' and INT_LA(i) > x"9" then
|
||||
INT_LA(i) <= x"0";
|
||||
end if;
|
||||
end loop;
|
||||
FOR i IN 0 TO 9 LOOP
|
||||
IF int_ena(i) = '1' AND reset_n = '1' THEN
|
||||
int_la(i) <= x"0";
|
||||
ELSIF int_l(i) = '1' AND int_la(i) < x"7" THEN
|
||||
int_la(i) <= STD_LOGIC_VECTOR(UNSIGNED(int_la(i)) + 1);
|
||||
ELSIF int_l(i) = '0' AND int_la(i) > x"8" THEN
|
||||
int_la(i) <= STD_LOGIC_VECTOR(UNSIGNED(int_la(i)) - 1);
|
||||
ELSIF int_l(i) = '1' AND int_la(i) > x"6" THEN
|
||||
int_la(i) <= x"F";
|
||||
ELSIF int_l(i) = '0' AND int_la(i) > x"9" THEN
|
||||
int_la(i) <= x"0";
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
for i in 0 to 31 loop
|
||||
if INT_CLEAR(i) = '0' and RESETn = '1' then
|
||||
INT_LATCH(i) <= '0';
|
||||
end if;
|
||||
end loop;
|
||||
FOR i IN 0 TO 31 LOOP
|
||||
IF int_clear(i) = '0' AND reset_n = '1' THEN
|
||||
int_latch(i) <= '0';
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
for i in 0 to 9 loop
|
||||
if INT_LA(i)(3) = '1' then
|
||||
INT_LATCH(i) <= '1';
|
||||
end if;
|
||||
end loop;
|
||||
end process P_INT_LATCH;
|
||||
FOR i IN 0 TO 9 LOOP
|
||||
IF int_la(i)(3) = '1' THEN
|
||||
int_latch(i) <= '1';
|
||||
END IF;
|
||||
END LOOP;
|
||||
END PROCESS P_INT_LATCH;
|
||||
|
||||
-- INT_IN:
|
||||
INT_IN(0) <= PIC_INT;
|
||||
INT_IN(1) <= E0_INT;
|
||||
INT_IN(2) <= DVI_INT;
|
||||
INT_IN(3) <= not PCI_INTAn;
|
||||
INT_IN(4) <= not PCI_INTBn;
|
||||
INT_IN(5) <= not PCI_INTCn;
|
||||
INT_IN(6) <= not PCI_INTDn;
|
||||
INT_IN(7) <= DSP_INT;
|
||||
INT_IN(8) <= VSYNC;
|
||||
INT_IN(9) <= HSYNC;
|
||||
INT_IN(25 downto 10) <= x"0000";
|
||||
INT_IN(26) <= HSYNC;
|
||||
INT_IN(27) <= INT_CTR(0);
|
||||
INT_IN(28) <= VSYNC;
|
||||
INT_IN(29) <= '1' when INT_LATCH /= x"00000000";
|
||||
INT_IN(30) <= not MFP_INTn;
|
||||
INT_IN(31) <= DRQ_DMA;
|
||||
-- int_in:
|
||||
int_in(0) <= pic_int;
|
||||
int_in(1) <= e0_int;
|
||||
int_in(2) <= dvi_int;
|
||||
int_in(3) <= NOT pci_inta_n;
|
||||
int_in(4) <= NOT pci_intb_n;
|
||||
int_in(5) <= NOT pci_intc_n;
|
||||
int_in(6) <= NOT pci_intd_n;
|
||||
int_in(7) <= dsp_int;
|
||||
int_in(8) <= vsync;
|
||||
int_in(9) <= hsync;
|
||||
int_in(25 DOWNTO 10) <= x"0000";
|
||||
int_in(26) <= hsync;
|
||||
int_in(27) <= int_ctr(0);
|
||||
int_in(28) <= vsync;
|
||||
int_in(29) <= '1' WHEN int_latch /= x"00000000";
|
||||
int_in(30) <= NOT mfp_int_n;
|
||||
int_in(31) <= drq_dma;
|
||||
|
||||
FBEE_CONF_CS <= '1' when fb_cs_n(2) = '0' and FB_ADR(27 downto 2) = "00000001000000000000000000" else '0'; -- $40000/4.
|
||||
fbee_conf_cs <= '1' WHEN fb_cs_n(2) = '0' AND fb_adr(27 DOWNTO 2) = "00000001000000000000000000" ELSE '0'; -- $40000/4.
|
||||
|
||||
P_FBEE_CONFIG : process
|
||||
p_fbee_config : PROCESS
|
||||
-- Firebee configuration register: BIT 31 -> 0 = CF 1 = IDE
|
||||
begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
if FBEE_CONF_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
FBEE_CONF_REG(31 downto 24) <= FB_AD_IN(31 downto 24);
|
||||
elsif FBEE_CONF_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
FBEE_CONF_REG(23 downto 16) <= FB_AD_IN(23 downto 16);
|
||||
elsif FBEE_CONF_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
FBEE_CONF_REG(15 downto 8) <= FB_AD_IN(15 downto 8);
|
||||
elsif FBEE_CONF_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
FBEE_CONF_REG(7 downto 0) <= FB_AD_IN(7 downto 0);
|
||||
end if;
|
||||
FBEE_CONF <= FBEE_CONF_REG;
|
||||
end process P_FBEE_CONFIG;
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF fbee_conf_cs = '1' AND fb_b(0) = '1' AND fb_wr_n = '0' THEN
|
||||
fbee_conf_reg(31 DOWNTO 24) <= fb_ad_in(31 DOWNTO 24);
|
||||
ELSIF fbee_conf_cs = '1' AND fb_b(1) = '1' AND fb_wr_n = '0' THEN
|
||||
fbee_conf_reg(23 DOWNTO 16) <= fb_ad_in(23 DOWNTO 16);
|
||||
ELSIF fbee_conf_cs = '1' AND fb_b(2) = '1' AND fb_wr_n = '0' THEN
|
||||
fbee_conf_reg(15 DOWNTO 8) <= fb_ad_in(15 DOWNTO 8);
|
||||
ELSIF fbee_conf_cs = '1' AND fb_b(3) = '1' AND fb_wr_n = '0' THEN
|
||||
fbee_conf_reg(7 DOWNTO 0) <= fb_ad_in(7 DOWNTO 0);
|
||||
END IF;
|
||||
fbee_conf <= fbee_conf_reg;
|
||||
END PROCESS p_fbee_config;
|
||||
|
||||
-- Data out multiplexers:
|
||||
FB_AD_EN_31_24 <= (INT_CTR_CS or INT_ENA_CS or INT_LATCH_CS or INT_CLEAR_CS or FBEE_CONF_CS) and not fb_oe_n;
|
||||
FB_AD_EN_23_16 <= (INT_CTR_CS or INT_ENA_CS or INT_LATCH_CS or INT_CLEAR_CS or FBEE_CONF_CS) and not fb_oe_n;
|
||||
FB_AD_EN_15_8 <= (INT_CTR_CS or INT_ENA_CS or INT_LATCH_CS or INT_CLEAR_CS or FBEE_CONF_CS) and not fb_oe_n;
|
||||
FB_AD_EN_7_0 <= (INT_CTR_CS or INT_ENA_CS or INT_LATCH_CS or INT_CLEAR_CS or FBEE_CONF_CS) and not fb_oe_n;
|
||||
-- Data OUT multiplexers:
|
||||
fb_ad_en_31_24 <= (int_ctr_cs or int_ena_cs or int_latch_cs or int_clear_cs or fbee_conf_cs) AND NOT fb_oe_n;
|
||||
fb_ad_en_23_16 <= (int_ctr_cs or int_ena_cs or int_latch_cs or int_clear_cs or fbee_conf_cs) AND NOT fb_oe_n;
|
||||
fb_ad_en_15_8 <= (int_ctr_cs or int_ena_cs or int_latch_cs or int_clear_cs or fbee_conf_cs) AND NOT fb_oe_n;
|
||||
fb_ad_en_7_0 <= (int_ctr_cs or int_ena_cs or int_latch_cs or int_clear_cs or fbee_conf_cs) AND NOT fb_oe_n;
|
||||
|
||||
FB_AD_OUT(31 downto 24) <= INT_CTR(31 downto 24) when INT_CTR_CS = '1' else
|
||||
INT_ENA(31 downto 24) when INT_ENA_CS = '1' else
|
||||
INT_LATCH(31 downto 24) when INT_LATCH_CS = '1' else
|
||||
INT_IN(31 downto 24) when INT_CLEAR_CS = '1' else FBEE_CONF_REG(31 downto 24);
|
||||
fb_ad_out(31 DOWNTO 24) <= int_ctr(31 DOWNTO 24) WHEN int_ctr_cs = '1' ELSE
|
||||
int_ena(31 DOWNTO 24) WHEN int_ena_cs = '1' ELSE
|
||||
int_latch(31 DOWNTO 24) WHEN int_latch_cs = '1' ELSE
|
||||
int_in(31 DOWNTO 24) WHEN int_clear_cs = '1' ELSE fbee_conf_reg(31 DOWNTO 24);
|
||||
|
||||
FB_AD_OUT(23 downto 16) <= INT_CTR(23 downto 16) when INT_CTR_CS = '1' else
|
||||
INT_ENA(23 downto 16) when INT_ENA_CS = '1' else
|
||||
INT_LATCH(23 downto 16) when INT_LATCH_CS = '1' else
|
||||
INT_IN(23 downto 16) when INT_CLEAR_CS = '1' else FBEE_CONF_REG(23 downto 16);
|
||||
fb_ad_out(23 DOWNTO 16) <= int_ctr(23 DOWNTO 16) WHEN int_ctr_cs = '1' ELSE
|
||||
int_ena(23 DOWNTO 16) WHEN int_ena_cs = '1' ELSE
|
||||
int_latch(23 DOWNTO 16) WHEN int_latch_cs = '1' ELSE
|
||||
int_in(23 DOWNTO 16) WHEN int_clear_cs = '1' ELSE fbee_conf_reg(23 DOWNTO 16);
|
||||
|
||||
FB_AD_OUT(15 downto 8) <= INT_CTR(15 downto 8) when INT_CTR_CS = '1' else
|
||||
INT_ENA(15 downto 8) when INT_ENA_CS = '1' else
|
||||
INT_LATCH(15 downto 8) when INT_LATCH_CS = '1' else
|
||||
INT_CLEAR(15 downto 8) when INT_CLEAR_CS = '1' else FBEE_CONF_REG(15 downto 8);
|
||||
fb_ad_out(15 DOWNTO 8) <= int_ctr(15 DOWNTO 8) WHEN int_ctr_cs = '1' ELSE
|
||||
int_ena(15 DOWNTO 8) WHEN int_ena_cs = '1' ELSE
|
||||
int_latch(15 DOWNTO 8) WHEN int_latch_cs = '1' ELSE
|
||||
int_clear(15 DOWNTO 8) WHEN int_clear_cs = '1' ELSE fbee_conf_reg(15 DOWNTO 8);
|
||||
|
||||
FB_AD_OUT(7 downto 0) <= INT_CTR(7 downto 0) when INT_CTR_CS = '1' else
|
||||
INT_ENA(7 downto 0) when INT_ENA_CS = '1' else
|
||||
INT_LATCH(7 downto 0) when INT_LATCH_CS = '1' else
|
||||
INT_CLEAR(7 downto 0) when INT_CLEAR_CS = '1' else FBEE_CONF_REG(7 downto 0);
|
||||
fb_ad_out(7 DOWNTO 0) <= int_ctr(7 DOWNTO 0) WHEN int_ctr_cs = '1' ELSE
|
||||
int_ena(7 DOWNTO 0) WHEN int_ena_cs = '1' ELSE
|
||||
int_latch(7 DOWNTO 0) WHEN int_latch_cs = '1' ELSE
|
||||
int_clear(7 DOWNTO 0) WHEN int_clear_cs = '1' ELSE fbee_conf_reg(7 DOWNTO 0);
|
||||
|
||||
INT_HANDLER_TA <= INT_CTR_CS or INT_ENA_CS or INT_LATCH_CS or INT_CLEAR_CS;
|
||||
end architecture BEHAVIOUR;
|
||||
int_handler_ta <= int_ctr_cs or int_ena_cs or int_latch_cs or int_clear_cs;
|
||||
END ARCHITECTURE BEHAVIOUR;
|
||||
|
||||
@@ -53,7 +53,7 @@ entity IDE_CF_SD_ROM is
|
||||
|
||||
FB_ADR : in std_logic_vector(19 downto 5);
|
||||
FB_CS1n : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_B0 : in std_logic;
|
||||
FB_B1 : in std_logic;
|
||||
|
||||
@@ -100,10 +100,10 @@ architecture BEHAVIOUR of IDE_CF_SD_ROM is
|
||||
signal NEXT_IDE_RDn : std_logic;
|
||||
signal NEXT_IDE_WRn : std_logic;
|
||||
begin
|
||||
ROM_CS <= '1' when FB_CS1n = '0' and FB_WRn = '1' and FB_ADR(19 downto 17) = "101" else '0'; -- FFF A'0000/2'0000
|
||||
ROM_CS <= '1' when FB_CS1n = '0' and fb_wr_n = '1' and FB_ADR(19 downto 17) = "101" else '0'; -- FFF A'0000/2'0000
|
||||
|
||||
RP_UDSn <= '0' when FB_WRn = '1' and FB_B0 = '1' and (ROM_CS = '1' or IDE_CF_CS = '1' or IDE_WRn = '0') else '1';
|
||||
RP_LDSn <= '0' when FB_WRn = '1' and FB_B1 = '1' and (ROM_CS = '1' or IDE_CF_CS = '1' or IDE_WRn = '0') else '1';
|
||||
RP_UDSn <= '0' when fb_wr_n = '1' and FB_B0 = '1' and (ROM_CS = '1' or IDE_CF_CS = '1' or IDE_WRn = '0') else '1';
|
||||
RP_LDSn <= '0' when fb_wr_n = '1' and FB_B1 = '1' and (ROM_CS = '1' or IDE_CF_CS = '1' or IDE_WRn = '0') else '1';
|
||||
|
||||
IDE_CF_CS <= '1' when FB_CS1n = '0' and FB_ADR(19 downto 7) = 13x"1" else '0'; -- FFF0'0000/80
|
||||
|
||||
@@ -130,14 +130,14 @@ begin
|
||||
end if;
|
||||
end process IDE_CMD_REG;
|
||||
|
||||
IDE_CMD_DECODER: process(CMD_STATE, IDE_CF_CS, FB_WRn, IDE_RDY)
|
||||
IDE_CMD_DECODER: process(CMD_STATE, IDE_CF_CS, fb_wr_n, IDE_RDY)
|
||||
begin
|
||||
case CMD_STATE is
|
||||
when IDLE =>
|
||||
IDE_CF_TA <= '0';
|
||||
if IDE_CF_CS = '1' then
|
||||
NEXT_IDE_RDn <= not FB_WRn;
|
||||
NEXT_IDE_WRn <= FB_WRn;
|
||||
NEXT_IDE_RDn <= not fb_wr_n;
|
||||
NEXT_IDE_WRn <= fb_wr_n;
|
||||
NEXT_CMD_STATE <= T1;
|
||||
else
|
||||
NEXT_IDE_RDn <= '1';
|
||||
@@ -146,8 +146,8 @@ begin
|
||||
end if;
|
||||
when T1 =>
|
||||
IDE_CF_TA <= '0';
|
||||
NEXT_IDE_RDn <= not FB_WRn;
|
||||
NEXT_IDE_WRn <= FB_WRn;
|
||||
NEXT_IDE_RDn <= not fb_wr_n;
|
||||
NEXT_IDE_WRn <= fb_wr_n;
|
||||
NEXT_CMD_STATE <= T6;
|
||||
when T6 =>
|
||||
IF IDE_RDY = '1' then
|
||||
@@ -157,8 +157,8 @@ begin
|
||||
NEXT_CMD_STATE <= T7;
|
||||
else
|
||||
IDE_CF_TA <= '0';
|
||||
NEXT_IDE_RDn <= not FB_WRn;
|
||||
NEXT_IDE_WRn <= FB_WRn;
|
||||
NEXT_IDE_RDn <= not fb_wr_n;
|
||||
NEXT_IDE_WRn <= fb_wr_n;
|
||||
NEXT_CMD_STATE <= T6;
|
||||
end if;
|
||||
when T7 =>
|
||||
@@ -175,6 +175,6 @@ begin
|
||||
SD_CMD_D1_OUT <= '0';
|
||||
SD_CMD_D1_EN <= '0';
|
||||
|
||||
ROM4n <= '0' when FB_CS1n = '0' and FB_WRn = '1' and FB_ADR(19 downto 17) = 3x"5" and FB_ADR(16) = '0' else '1'; -- FFF A'0000/2'0000
|
||||
ROM3n <= '0' when FB_CS1n = '0' and FB_WRn = '1' and FB_ADR(19 downto 17) = 3x"5" and FB_ADR(16) = '1' else '1'; -- FFF A'0000/2'0000
|
||||
ROM4n <= '0' when FB_CS1n = '0' and fb_wr_n = '1' and FB_ADR(19 downto 17) = 3x"5" and FB_ADR(16) = '0' else '1'; -- FFF A'0000/2'0000
|
||||
ROM3n <= '0' when FB_CS1n = '0' and fb_wr_n = '1' and FB_ADR(19 downto 17) = 3x"5" and FB_ADR(16) = '1' else '1'; -- FFF A'0000/2'0000
|
||||
end architecture BEHAVIOUR;
|
||||
|
||||
@@ -44,8 +44,8 @@ ARCHITECTURE rtl OF io_register IS
|
||||
BEGIN
|
||||
register_select : PROCESS
|
||||
BEGIN
|
||||
IF address_bus AND address_mask = address AND address_mask THEN
|
||||
/* IF (address_bus AND address_mask) = (address AND address_mask) THEN
|
||||
sel <= '1';
|
||||
END IF;
|
||||
END IF; */
|
||||
END PROCESS register_select;
|
||||
END rtl;
|
||||
Reference in New Issue
Block a user