updated testbench (not functional yet)
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
---- ----
|
||||
---- Author(s): ----
|
||||
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
|
||||
---- ----
|
||||
---- K ----
|
||||
----------------------------------------------------------------------
|
||||
---- ----
|
||||
---- Copyright (C) 2012 Fredi Aschwanden, Wolfgang Förster ----
|
||||
@@ -53,18 +53,18 @@ ENTITY DDR_CTRL IS
|
||||
fb_adr : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
fb_cs1_n : IN STD_LOGIC;
|
||||
fb_oe_n : IN STD_LOGIC;
|
||||
FB_SIZE0 : IN STD_LOGIC;
|
||||
FB_SIZE1 : IN STD_LOGIC;
|
||||
FB_ALE : IN STD_LOGIC;
|
||||
FB_WRn : IN STD_LOGIC;
|
||||
FIFO_CLR : IN STD_LOGIC;
|
||||
fb_size0 : IN STD_LOGIC;
|
||||
fb_size1 : IN STD_LOGIC;
|
||||
fb_ale : IN STD_LOGIC;
|
||||
fb_wr_n : IN STD_LOGIC;
|
||||
fifo_clr : IN STD_LOGIC;
|
||||
video_control_register : 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;
|
||||
CLK_33M : IN STD_LOGIC;
|
||||
clk_33m : IN STD_LOGIC;
|
||||
fifo_mw : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
|
||||
|
||||
va : OUT STD_LOGIC_VECTOR (12 DOWNTO 0); -- video Adress bus at the DDR chips
|
||||
@@ -85,7 +85,7 @@ ENTITY DDR_CTRL IS
|
||||
|
||||
VIDEO_DDR_TA : OUT STD_LOGIC;
|
||||
sr_blitter_dack : OUT STD_LOGIC;
|
||||
BA : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
ddrwr_d_sel1 : OUT STD_LOGIC;
|
||||
VDM_SEL : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
|
||||
data_in : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
@@ -183,7 +183,7 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
||||
SIGNAL ba_p : STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
SIGNAL tsiz : STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
BEGIN
|
||||
tsiz <= FB_SIZE1 & FB_SIZE0;
|
||||
tsiz <= fb_size1 & fb_size0;
|
||||
WITH tsiz SELECT
|
||||
access_width <= LONG WHEN "11",
|
||||
WORD WHEN "00",
|
||||
@@ -208,17 +208,17 @@ BEGIN
|
||||
------------------------------------ cpu READ (REG DDR => cpu) AND WRITE (cpu => REG DDR) ---------------------------------------------------------------------
|
||||
fbctrl_reg : PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
WAIT UNTIL RISING_EDGE(clk_33m);
|
||||
fb_regddr <= fb_regddr_next;
|
||||
END PROCESS FBCTRL_REG;
|
||||
|
||||
fbctrl_dec : PROCESS(fb_regddr, bus_cyc, ddr_sel, access_width, FB_WRn, ddr_cs)
|
||||
fbctrl_dec : PROCESS(fb_regddr, bus_cyc, ddr_sel, access_width, fb_wr_n, ddr_cs)
|
||||
BEGIN
|
||||
CASE fb_regddr IS
|
||||
WHEN FR_WAIT =>
|
||||
IF bus_cyc = '1' THEN
|
||||
fb_regddr_next <= FR_S0;
|
||||
ELSIF ddr_sel = '1' AND access_width = LONG AND FB_WRn = '0' THEN
|
||||
ELSIF ddr_sel = '1' AND access_width = LONG AND fb_wr_n = '0' THEN
|
||||
fb_regddr_next <= FR_S0;
|
||||
ELSE
|
||||
fb_regddr_next <= FR_WAIT;
|
||||
@@ -239,7 +239,7 @@ BEGIN
|
||||
END IF;
|
||||
|
||||
WHEN FR_S2 =>
|
||||
IF ddr_cs = '1' AND bus_cyc = '0' AND access_width = LONG AND FB_WRn = '0' THEN -- wait during long word access IF needed
|
||||
IF ddr_cs = '1' AND bus_cyc = '0' AND access_width = LONG AND fb_wr_n = '0' THEN -- wait during long word access IF needed
|
||||
fb_regddr_next <= FR_S2;
|
||||
ELSIF ddr_cs = '1' THEN
|
||||
fb_regddr_next <= fr_s3;
|
||||
@@ -253,11 +253,11 @@ BEGIN
|
||||
END PROCESS FBCTRL_DEC;
|
||||
|
||||
-- Coldfire cpu access:
|
||||
FB_LE(0) <= NOT FB_WRn WHEN fb_regddr = FR_WAIT ELSE
|
||||
NOT FB_WRn WHEN fb_regddr = FR_S0 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(1) <= NOT FB_WRn WHEN fb_regddr = fr_s1 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(2) <= NOT FB_WRn WHEN fb_regddr = FR_S2 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(3) <= NOT FB_WRn WHEN fb_regddr = fr_s3 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(0) <= NOT fb_wr_n WHEN fb_regddr = FR_WAIT ELSE
|
||||
NOT fb_wr_n WHEN fb_regddr = FR_S0 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(1) <= NOT fb_wr_n WHEN fb_regddr = fr_s1 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(2) <= NOT fb_wr_n WHEN fb_regddr = FR_S2 AND ddr_cs = '1' ELSE '0';
|
||||
FB_LE(3) <= NOT fb_wr_n WHEN fb_regddr = fr_s3 AND ddr_cs = '1' ELSE '0';
|
||||
|
||||
-- Video data access:
|
||||
VIDEO_DDR_TA <= '1' WHEN fb_regddr = FR_S0 AND ddr_cs = '1' ELSE
|
||||
@@ -269,10 +269,10 @@ BEGIN
|
||||
|
||||
-- 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 ELSE
|
||||
'1' WHEN fb_regddr = FR_S0 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' AND access_width /= LONG AND clk_main = '0' ELSE '0';
|
||||
'1' WHEN fb_regddr = FR_S0 AND ddr_cs = '1' AND fb_oe_n = '0' AND ddr_config = '0' AND access_width /= LONG 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_main = '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';
|
||||
|
||||
bus_cyc_end <= '1' WHEN fb_regddr = FR_S0 AND ddr_cs = '1' AND access_width /= LONG ELSE
|
||||
'1' WHEN fb_regddr = fr_s3 AND ddr_cs = '1' ELSE '0';
|
||||
@@ -285,7 +285,7 @@ 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_WRn, ddr_access, blitter_wr, fifo_req, fifo_bank_ok,
|
||||
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,
|
||||
fifo_mw, cpu_req, video_adr_cnt, ddr_sel, tsiz, data_in, fifo_ba, ddr_refresh_sig)
|
||||
BEGIN
|
||||
CASE ddr_state IS
|
||||
@@ -309,7 +309,7 @@ BEGIN
|
||||
ddr_next_state <= ds_t3;
|
||||
|
||||
WHEN ds_t3 =>
|
||||
IF ddr_access = cpu AND FB_WRn = '0' THEN
|
||||
IF ddr_access = cpu AND fb_wr_n = '0' THEN
|
||||
ddr_next_state <= DS_T4W;
|
||||
ELSIF ddr_access = blitter AND blitter_wr = '1' THEN
|
||||
ddr_next_state <= DS_T4W;
|
||||
@@ -399,7 +399,7 @@ BEGIN
|
||||
END IF;
|
||||
|
||||
WHEN ds_t10f =>
|
||||
IF ddr_sel = '1' AND (FB_WRn = '1' OR tsiz /= "11") AND data_in(13 DOWNTO 12) /= fifo_ba THEN
|
||||
IF ddr_sel = '1' AND (fb_wr_n = '1' OR tsiz /= "11") AND data_in(13 DOWNTO 12) /= fifo_ba THEN
|
||||
ddr_next_state <= ds_t3;
|
||||
ELSE
|
||||
ddr_next_state <= ds_t7f;
|
||||
@@ -481,10 +481,14 @@ BEGIN
|
||||
sr_ddr_wr <= '0';
|
||||
sr_ddrwr_d_sel <= '0';
|
||||
|
||||
mcs <= mcs(0) & clk_main; -- sync on clk_main
|
||||
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);
|
||||
fifo_clr_sync <= FIFO_CLR;
|
||||
blitter_req <= blitter_sig AND NOT
|
||||
video_control_register(vrcr_config_on) AND
|
||||
video_control_register(vrcr_vcke) AND
|
||||
video_control_register(vrcr_vcs);
|
||||
|
||||
fifo_clr_sync <= fifo_clr;
|
||||
clear_fifo_cnt <= fifo_clr_sync OR NOT fifo_active;
|
||||
stop <= fifo_clr_sync OR clear_fifo_cnt;
|
||||
|
||||
@@ -492,7 +496,12 @@ BEGIN
|
||||
fifo_req <= '1';
|
||||
ELSIF fifo_mw < STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_hwm, fifo_mw'LENGTH)) AND fifo_req = '1' THEN
|
||||
fifo_req <= '1';
|
||||
ELSIF fifo_active = '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
|
||||
ELSIF fifo_active = '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
|
||||
fifo_req <= '1';
|
||||
ELSE
|
||||
fifo_req <= '1';
|
||||
@@ -516,7 +525,7 @@ BEGIN
|
||||
ddr_refresh_req <= '0';
|
||||
END IF;
|
||||
|
||||
IF ddr_refresh_cnt = 0 AND clk_main = '0' THEN
|
||||
IF ddr_refresh_cnt = 0 AND clk_33m = '0' THEN
|
||||
refresh_time <= '1';
|
||||
ELSE
|
||||
refresh_time <= '0';
|
||||
@@ -534,13 +543,13 @@ BEGIN
|
||||
bus_cyc <= '0';
|
||||
ELSIF ddr_state = ds_t1 AND cpu_ddr_sync = '1' AND cpu_req = '1' THEN
|
||||
bus_cyc <= '1';
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND FB_WRn = '0' THEN
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '0' THEN
|
||||
bus_cyc <= '1';
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND access_width /= LONG THEN
|
||||
bus_cyc <= '1';
|
||||
ELSIF ddr_state = ds_t2b THEN
|
||||
bus_cyc <= '1';
|
||||
ELSIF ddr_state = ds_t10f AND FB_WRn = '0' AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
ELSIF ddr_state = ds_t10f AND fb_wr_n = '0' AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
bus_cyc <= '1';
|
||||
ELSIF ddr_state = ds_t10f AND access_width /= LONG AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
bus_cyc <= '1';
|
||||
@@ -560,7 +569,7 @@ BEGIN
|
||||
va_p <= blitter_row_adr;
|
||||
ba_p <= blitter_ba;
|
||||
ddr_access <= blitter;
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND FB_WRn = '0' THEN
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '0' THEN
|
||||
va_s(10) <= '1';
|
||||
ddr_access <= cpu;
|
||||
ELSIF ddr_state = ds_t2a AND ddr_sel = '1' AND access_width /= LONG THEN
|
||||
@@ -579,7 +588,7 @@ BEGIN
|
||||
fifo_bank_ok <= '0';
|
||||
ELSIF ddr_state = ds_t3 THEN
|
||||
va_s(10) <= va_s(10);
|
||||
IF (FB_WRn = '0' AND ddr_access = cpu) OR (blitter_wr = '1' AND ddr_access = blitter) THEN
|
||||
IF (fb_wr_n = '0' AND ddr_access = cpu) OR (blitter_wr = '1' AND ddr_access = blitter) THEN
|
||||
va_s(9 DOWNTO 0) <= cpu_col_adr;
|
||||
ba_s <= cpu_ba;
|
||||
ELSIF fifo_active = '1' THEN
|
||||
@@ -671,7 +680,7 @@ BEGIN
|
||||
ba_p <= fifo_ba;
|
||||
ELSIF ddr_state = ds_t9f THEN
|
||||
va_s(10) <= '1';
|
||||
ELSIF ddr_state = ds_t10f AND FB_WRn = '0' AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
ELSIF ddr_state = ds_t10f AND fb_wr_n = '0' AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
va_s(10) <= '1';
|
||||
ddr_access <= cpu;
|
||||
ELSIF ddr_state = ds_t10f AND access_width /= LONG AND data_in(13 DOWNTO 12) = fifo_ba THEN
|
||||
@@ -692,12 +701,12 @@ BEGIN
|
||||
END IF;
|
||||
END PROCESS p_clk0;
|
||||
|
||||
ddr_sel <= '1' WHEN FB_ALE = '1' AND data_in(31 DOWNTO 30) = "01" ELSE '0';
|
||||
ddr_sel <= '1' WHEN fb_ale = '1' AND data_in(31 DOWNTO 30) = "01" ELSE '0';
|
||||
|
||||
p_ddr_cs: PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF FB_ALE = '1' THEN
|
||||
WAIT UNTIL RISING_EDGE(clk_33m);
|
||||
IF fb_ale = '1' THEN
|
||||
ddr_cs <= ddr_sel;
|
||||
END IF;
|
||||
END PROCESS p_ddr_cs;
|
||||
@@ -706,13 +715,13 @@ BEGIN
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(ddr_sync_66m);
|
||||
|
||||
IF ddr_sel = '1' AND FB_WRn = '1' AND ddr_config = '0' THEN
|
||||
IF ddr_sel = '1' AND fb_wr_n = '1' AND ddr_config = '0' THEN
|
||||
cpu_req <= '1';
|
||||
ELSIF ddr_sel = '1' AND access_width /= LONG AND ddr_config = '0' THEN -- Start WHEN NOT config AND NOT long word access.
|
||||
cpu_req <= '1';
|
||||
ELSIF ddr_sel = '1' AND ddr_config = '1' THEN -- Config, start immediately.
|
||||
cpu_req <= '1';
|
||||
ELSIF fb_regddr = fr_s1 AND FB_WRn = '0' THEN -- Long word write later.
|
||||
ELSIF fb_regddr = fr_s1 AND fb_wr_n = '0' THEN -- Long word write later.
|
||||
cpu_req <= '1';
|
||||
ELSIF fb_regddr /= fr_s1 AND fb_regddr /= fr_s3 AND bus_cyc_end = '0' AND bus_cyc = '0' THEN -- Halt, bus cycle IN progress OR ready.
|
||||
cpu_req <= '0';
|
||||
@@ -723,35 +732,35 @@ BEGIN
|
||||
-- Refresh: Always 8 at a time every 7.8us.
|
||||
-- 7.8us x 8 = 62.4us = 2059 -> 2048 @ 33MHz.
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(CLK_33M);
|
||||
ddr_refresh_cnt <= ddr_refresh_cnt + 1; -- Count 0 to 2047.
|
||||
WAIT UNTIL RISING_EDGE(clk_33m);
|
||||
ddr_refresh_cnt <= ddr_refresh_cnt + 1; -- Count from 0 to 2047
|
||||
END PROCESS p_refresh;
|
||||
|
||||
sr_fifo_wre <= sr_fifo_wre_i;
|
||||
|
||||
va <= data_in(26 DOWNTO 14) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND FB_WRn = '0' ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') ELSE
|
||||
va <= data_in(26 DOWNTO 14) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '0' ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (fb_size0 = '0' OR fb_size1= '0') ELSE
|
||||
va_p WHEN ddr_state = ds_t2a ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t10f AND FB_WRn = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t10f AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t10f AND fb_wr_n = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(26 DOWNTO 14) WHEN ddr_state = ds_t10f AND (fb_size0 = '0' OR fb_size1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
va_p WHEN ddr_state = ds_t10f ELSE
|
||||
"0010000000000" WHEN ddr_state = ds_r2 AND ddr_refresh_sig = x"9" ELSE va_s;
|
||||
|
||||
BA <= data_in(13 DOWNTO 12) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND FB_WRn = '0' ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') ELSE
|
||||
ba <= data_in(13 DOWNTO 12) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '0' ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (fb_size0 = '0' OR fb_size1= '0') ELSE
|
||||
ba_p WHEN ddr_state = ds_t2a ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t10f AND FB_WRn = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t10f AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t10f AND fb_wr_n = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(13 DOWNTO 12) WHEN ddr_state = ds_t10f AND (fb_size0 = '0' OR fb_size1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
ba_p WHEN ddr_state = ds_t10f ELSE ba_s;
|
||||
|
||||
vras <= '1' WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND FB_WRn = '0' ELSE
|
||||
'1' WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') ELSE
|
||||
vras <= '1' WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '0' ELSE
|
||||
'1' WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND (fb_size0 = '0' OR fb_size1= '0') ELSE
|
||||
'1' WHEN ddr_state = ds_t2a AND ddr_access = fifo AND fifo_req = '1' ELSE
|
||||
'1' WHEN ddr_state = ds_t2a AND ddr_access = blitter AND blitter_req = '1' ELSE
|
||||
'1' WHEN ddr_state = ds_t2b ELSE
|
||||
'1' WHEN ddr_state = ds_t10f AND FB_WRn = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
'1' WHEN ddr_state = ds_t10f AND (FB_SIZE0 = '0' OR FB_SIZE1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(18) AND NOT FB_WRn AND NOT FB_SIZE0 AND NOT FB_SIZE1 WHEN ddr_state = ds_c7 ELSE
|
||||
'1' WHEN ddr_state = ds_t10f AND fb_wr_n = '0' AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
'1' WHEN ddr_state = ds_t10f AND (fb_size0 = '0' OR fb_size1= '0') AND data_in(13 DOWNTO 12) = fifo_ba ELSE
|
||||
data_in(18) AND NOT fb_wr_n AND NOT fb_size0 AND NOT fb_size1 WHEN ddr_state = ds_c7 ELSE
|
||||
'1' WHEN ddr_state = ds_cb6 ELSE
|
||||
'1' WHEN ddr_state = ds_cb8 ELSE
|
||||
'1' WHEN ddr_state = ds_r2 ELSE '0';
|
||||
@@ -762,11 +771,11 @@ BEGIN
|
||||
'1' WHEN ddr_state = ds_t6f ELSE
|
||||
'1' WHEN ddr_state = DS_T8F ELSE
|
||||
'1' WHEN ddr_state = ds_t10f AND vras = '0' ELSE
|
||||
data_in(17) AND NOT FB_WRn AND NOT FB_SIZE0 AND NOT FB_SIZE1 WHEN ddr_state = ds_c7 ELSE
|
||||
data_in(17) AND NOT fb_wr_n AND NOT fb_size0 AND NOT fb_size1 WHEN ddr_state = ds_c7 ELSE
|
||||
'1' WHEN ddr_state = ds_r2 AND ddr_refresh_sig /= x"9" ELSE '0';
|
||||
|
||||
vwe <= '1' WHEN ddr_state = DS_T6W ELSE
|
||||
data_in(16) AND NOT FB_WRn AND NOT FB_SIZE0 AND NOT FB_SIZE1 WHEN ddr_state = ds_c7 ELSE
|
||||
data_in(16) AND NOT fb_wr_n AND NOT fb_size0 AND NOT fb_size1 WHEN ddr_state = ds_c7 ELSE
|
||||
'1' WHEN ddr_state = ds_cb6 ELSE
|
||||
'1' WHEN ddr_state = ds_cb8 ELSE
|
||||
'1' WHEN ddr_state = ds_r2 AND ddr_refresh_sig = x"9" ELSE '0';
|
||||
@@ -811,20 +820,20 @@ BEGIN
|
||||
p_video_regs : PROCESS
|
||||
-- Video registers.
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_main);
|
||||
IF video_base_l = '1' AND FB_WRn = '0' AND byte_sel(1) = '1' THEN
|
||||
WAIT UNTIL RISING_EDGE(clk_33m);
|
||||
IF video_base_l = '1' AND fb_wr_n = '0' AND byte_sel(1) = '1' THEN
|
||||
video_base_l_d <= data_in(23 DOWNTO 16); -- 16 byte boarders.
|
||||
END IF;
|
||||
|
||||
IF video_base_m = '1' AND FB_WRn = '0' AND byte_sel(3) = '1' THEN
|
||||
IF video_base_m = '1' AND fb_wr_n = '0' AND byte_sel(3) = '1' THEN
|
||||
video_base_m_d <= data_in(23 DOWNTO 16);
|
||||
END IF;
|
||||
|
||||
IF video_base_h = '1' AND FB_WRn = '0' AND byte_sel(1) = '1' THEN
|
||||
IF video_base_h = '1' AND fb_wr_n = '0' AND byte_sel(1) = '1' THEN
|
||||
video_base_h_d <= data_in(23 DOWNTO 16);
|
||||
END IF;
|
||||
|
||||
IF video_base_h = '1' AND FB_WRn = '0' AND byte_sel(0) = '1' THEN
|
||||
IF video_base_h = '1' AND fb_wr_n = '0' AND byte_sel(0) = '1' THEN
|
||||
video_base_x_d <= data_in(26 DOWNTO 24);
|
||||
END IF;
|
||||
END PROCESS p_video_regs;
|
||||
@@ -856,8 +865,8 @@ END ARCHITECTURE BEHAVIOUR;
|
||||
-- va : Video DDR address multiplexed
|
||||
-- va_p : latched va, wenn FIFO_AC, BLITTER_AC
|
||||
-- va_s : latch for default va
|
||||
-- BA : Video DDR bank address multiplexed
|
||||
-- ba_p : latched BA, wenn FIFO_AC, BLITTER_AC
|
||||
-- ba_s : latch for default BA
|
||||
-- ba : Video DDR bank address multiplexed
|
||||
-- ba_p : latched ba, wenn FIFO_AC, BLITTER_AC
|
||||
-- ba_s : latch for default ba
|
||||
--
|
||||
--FB_SIZE ersetzen.
|
||||
|
||||
@@ -98,21 +98,21 @@ ENTITY firebee IS
|
||||
PORT(
|
||||
RSTO_MCFn : IN STD_LOGIC; -- reset SIGNAL from Coldfire
|
||||
CLK_33M : IN STD_LOGIC; -- 33 MHz clock
|
||||
CLK_MAIN : IN STD_LOGIC; -- 33 MHz clock
|
||||
clk_main : IN STD_LOGIC; -- 33 MHz clock
|
||||
|
||||
CLK_24M576 : OUT STD_LOGIC; --
|
||||
CLK_25M : OUT STD_LOGIC;
|
||||
clk_ddr_OUT : OUT STD_LOGIC;
|
||||
clk_ddr_OUTn : OUT STD_LOGIC;
|
||||
CLK_USB : OUT STD_LOGIC;
|
||||
clk_usb : OUT STD_LOGIC;
|
||||
|
||||
FB_AD : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
FB_ALE : IN STD_LOGIC;
|
||||
fb_ad : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
fb_ale : IN STD_LOGIC;
|
||||
FB_BURSTn : IN STD_LOGIC;
|
||||
FB_CSn : IN STD_LOGIC_VECTOR (3 DOWNTO 1);
|
||||
FB_SIZE : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
fb_size : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
FB_OEn : IN STD_LOGIC;
|
||||
FB_WRn : IN STD_LOGIC;
|
||||
fb_wr_n : IN STD_LOGIC;
|
||||
FB_TAn : OUT STD_LOGIC;
|
||||
|
||||
DACK1n : IN STD_LOGIC;
|
||||
@@ -121,43 +121,43 @@ ENTITY firebee IS
|
||||
MASTERn : IN STD_LOGIC; -- determines if the Firebee is PCI master (='0') OR slave. Not used so far.
|
||||
TOUT0n : IN STD_LOGIC; -- Not used so far.
|
||||
|
||||
LED_FPGA_OK : OUT STD_LOGIC;
|
||||
RESERVED_1 : OUT STD_LOGIC;
|
||||
led_fpga_ok : OUT STD_LOGIC;
|
||||
reserved_1 : OUT STD_LOGIC;
|
||||
|
||||
VA : OUT STD_LOGIC_VECTOR (12 DOWNTO 0);
|
||||
BA : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
va : OUT STD_LOGIC_VECTOR (12 DOWNTO 0);
|
||||
ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
|
||||
VWEn : OUT STD_LOGIC;
|
||||
VcaSn : OUT STD_LOGIC;
|
||||
VRASn : OUT STD_LOGIC;
|
||||
vrASn : OUT STD_LOGIC;
|
||||
VCSn : OUT STD_LOGIC;
|
||||
|
||||
CLK_PIXEL : OUT STD_LOGIC;
|
||||
clk_pixel : OUT STD_LOGIC;
|
||||
SYNCn : OUT STD_LOGIC;
|
||||
VSYNC : OUT STD_LOGIC;
|
||||
HSYNC : OUT STD_LOGIC;
|
||||
BLANKn : OUT STD_LOGIC;
|
||||
|
||||
VR : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
VG : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
VB : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
vr : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
vg : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
vb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||
|
||||
VDM : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
|
||||
vdm : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
|
||||
|
||||
VD : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
VD_QS : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
|
||||
vd : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
|
||||
vd_qs : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
|
||||
|
||||
PD_VGAn : OUT STD_LOGIC;
|
||||
VCKE : OUT STD_LOGIC;
|
||||
PIC_INT : IN STD_LOGIC;
|
||||
E0_INT : IN STD_LOGIC;
|
||||
DVI_INT : IN STD_LOGIC;
|
||||
PD_vgAn : OUT STD_LOGIC;
|
||||
vcke : 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;
|
||||
|
||||
IRQn : OUT STD_LOGIC_VECTOR (7 DOWNTO 2);
|
||||
TIN0 : OUT STD_LOGIC;
|
||||
tin0 : OUT STD_LOGIC;
|
||||
|
||||
YM_QA : OUT STD_LOGIC;
|
||||
YM_QB : OUT STD_LOGIC;
|
||||
@@ -244,9 +244,9 @@ ENTITY firebee IS
|
||||
DSP_SRWEn : OUT STD_LOGIC;
|
||||
DSP_SROEn : OUT STD_LOGIC;
|
||||
|
||||
IDE_INT : IN STD_LOGIC;
|
||||
IDE_RDY : IN STD_LOGIC;
|
||||
IDE_RES : OUT STD_LOGIC;
|
||||
ide_int : IN STD_LOGIC;
|
||||
ide_rdy : IN STD_LOGIC;
|
||||
ide_res : OUT STD_LOGIC;
|
||||
IDE_WRn : OUT STD_LOGIC;
|
||||
IDE_RDn : OUT STD_LOGIC;
|
||||
IDE_CSn : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)
|
||||
@@ -490,7 +490,7 @@ ARCHITECTURE Structure of firebee is
|
||||
BEGIN
|
||||
I_PLL1: altpll1
|
||||
PORT MAP(
|
||||
inclk0 => CLK_MAIN,
|
||||
inclk0 => clk_main,
|
||||
c0 => clk_2m4576, -- 2.4576 MHz
|
||||
c1 => CLK_24M576, -- 24.576 MHz
|
||||
c2 => clk_48m, -- 48 MHz
|
||||
@@ -499,7 +499,7 @@ BEGIN
|
||||
|
||||
I_PLL2: altpll2
|
||||
PORT MAP(
|
||||
inclk0 => CLK_MAIN,
|
||||
inclk0 => clk_main,
|
||||
c0 => clk_ddr(0), -- 132 MHz / 240°
|
||||
c1 => clk_ddr(1), -- 132 MHz / 0°
|
||||
c2 => clk_ddr(2), -- 132 MHz / 180°
|
||||
@@ -509,7 +509,7 @@ BEGIN
|
||||
|
||||
I_PLL3: altpll3
|
||||
PORT MAP(
|
||||
inclk0 => CLK_MAIN,
|
||||
inclk0 => clk_main,
|
||||
c0 => clk_2m0, -- 2 MHz
|
||||
c1 => clk_fdc, -- 16 MHz
|
||||
c2 => clk_25m_i, -- 25 MHz
|
||||
@@ -518,7 +518,7 @@ BEGIN
|
||||
|
||||
I_PLL4: altpll4
|
||||
PORT MAP(
|
||||
inclk0 => CLK_MAIN,
|
||||
inclk0 => clk_main,
|
||||
areset => pll_areset,
|
||||
scanclk => pll_scanclk,
|
||||
scandata => pll_scandata,
|
||||
@@ -535,12 +535,12 @@ BEGIN
|
||||
reconfig => video_reconfig,
|
||||
read_param => vr_rd,
|
||||
write_param => vr_wr,
|
||||
data_in => FB_AD (24 DOWNTO 16), -- FIXED: this looks like a typo. Must be FB_AD(24 DOWNTO 16) instead of fb_adr(24 DOWNTO 16)
|
||||
data_in => fb_ad (24 DOWNTO 16), -- FIXED: this looks like a typo. Must be fb_ad(24 DOWNTO 16) instead of fb_adr(24 DOWNTO 16)
|
||||
counter_type => fb_adr (5 DOWNTO 2),
|
||||
counter_param => fb_adr (8 DOWNTO 6),
|
||||
pll_scandataout => pll_scandataout,
|
||||
pll_scandone => pll_scandone,
|
||||
clock => CLK_MAIN,
|
||||
clock => clk_main,
|
||||
reset => NOT reset_n,
|
||||
pll_areset_in => '0', -- Not used.
|
||||
busy => vr_busy,
|
||||
@@ -553,31 +553,33 @@ BEGIN
|
||||
);
|
||||
|
||||
CLK_25M <= clk_25m_i;
|
||||
CLK_USB <= clk_48m;
|
||||
clk_usb <= clk_48m;
|
||||
|
||||
clk_ddr_OUT <= clk_ddr(0);
|
||||
clk_ddr_OUTn <= NOT clk_ddr(0);
|
||||
CLK_PIXEL <= clk_pixel_i;
|
||||
|
||||
clk_pixel <= clk_pixel_i;
|
||||
|
||||
P_timebase: PROCESS
|
||||
p_timebase: PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_500k);
|
||||
timebase <= timebase + 1;
|
||||
END PROCESS P_timebase;
|
||||
END PROCESS p_timebase;
|
||||
|
||||
reset_n <= RSTO_MCFn and locked;
|
||||
IDE_RES <= NOT ide_res_i and reset_n;
|
||||
ide_res <= NOT ide_res_i and reset_n;
|
||||
DREQ1n <= DACK1n;
|
||||
LED_FPGA_OK <= timebase(17);
|
||||
led_fpga_ok <= timebase(17); -- won't work: doesn't seem to be connected
|
||||
|
||||
falcon_io_ta <= acia_cs OR sndcs OR NOT dtack_out_mfp_n OR paddle_cs OR ide_cf_ta OR dma_cs;
|
||||
FB_TAn <= '0' WHEN (blitter_ta OR video_ddr_ta OR video_mod_ta OR falcon_io_ta OR dsp_ta OR int_handler_ta)= '1' ELSE 'Z';
|
||||
FB_TAn <= '0' WHEN (blitter_ta OR video_ddr_ta OR video_mod_ta OR falcon_io_ta OR dsp_ta OR int_handler_ta) = '1' ELSE 'Z';
|
||||
|
||||
acia_cs <= '1' WHEN FB_CSn(1) = '0' and fb_adr(23 DOWNTO 3) & "000" = x"FFFC00" ELSE '0'; -- FFFC00 - FFFC07
|
||||
mfp_cs <= '1' WHEN FB_CSn(1) = '0' and fb_adr(23 DOWNTO 6) & "000000" = x"FFFA00" ELSE '0'; -- FFFA00/40
|
||||
paddle_cs <= '1' WHEN FB_CSn(1) = '0' and fb_adr(23 DOWNTO 6) & "000000"= x"FF9200" ELSE '0'; -- FF9200-FF923F
|
||||
sndcs <= '1' WHEN FB_CSn(1) = '0' and fb_adr(23 DOWNTO 2) & "00" = x"FF8800" ELSE '0'; -- FF8800-FF8803
|
||||
sndcs_i <= '1' WHEN sndcs = '1' and fb_adr (1) = '0' ELSE '0';
|
||||
sndir_i <= '1' WHEN sndcs = '1' and FB_WRn = '0' ELSE '0';
|
||||
sndir_i <= '1' WHEN sndcs = '1' and fb_wr_n = '0' ELSE '0';
|
||||
|
||||
LP_D <= lp_d_x WHEN lp_dir_x = '0' ELSE (OTHERS => 'Z');
|
||||
LP_DIR <= lp_dir_x;
|
||||
@@ -603,18 +605,18 @@ BEGIN
|
||||
lds <= '1' WHEN mfp_cs = '1' OR mfp_intack = '1' ELSE '0';
|
||||
acia_irq_n <= irq_keybd_n and irq_midi_n;
|
||||
mfp_intack <= '1' WHEN FB_CSn(2) = '0' and fb_adr(19 DOWNTO 0) = x"20000" ELSE '0'; --F002'0000
|
||||
dint_n <= '0' WHEN IDE_INT = '1' and fbee_conf(28) = '1' ELSE
|
||||
dint_n <= '0' WHEN ide_int = '1' and fbee_conf(28) = '1' ELSE
|
||||
'0' WHEN fd_int = '1' ELSE
|
||||
'0' WHEN scsi_int = '1' and fbee_conf(28) = '1' ELSE '1';
|
||||
|
||||
MIDI_TLR <= midi_out;
|
||||
MIDI_OLR <= midi_out;
|
||||
|
||||
byte <= '1' WHEN FB_SIZE(1) = '0' and FB_SIZE(0) = '1' ELSE '0';
|
||||
byte <= '1' WHEN fb_size(1) = '0' and fb_size(0) = '1' ELSE '0';
|
||||
fb_b0 <= '1' WHEN fb_adr(0) = '0' OR byte = '0' ELSE '0';
|
||||
fb_b1 <= '1' WHEN fb_adr(0) = '1' OR byte = '0' ELSE '0';
|
||||
|
||||
FB_AD(31 DOWNTO 24) <= data_out_blitter(31 DOWNTO 24) WHEN data_en_blitter = '1' ELSE
|
||||
fb_ad(31 DOWNTO 24) <= data_out_blitter(31 DOWNTO 24) WHEN data_en_blitter = '1' ELSE
|
||||
vdp_q1(31 DOWNTO 24) WHEN fb_vdoe = x"2" ELSE
|
||||
vdp_q2(31 DOWNTO 24) WHEN fb_vdoe = x"4" ELSE
|
||||
vdp_q3(31 DOWNTO 24) WHEN fb_vdoe = x"8" ELSE
|
||||
@@ -637,7 +639,7 @@ BEGIN
|
||||
x"00" WHEN paddle_cs = '1' and fb_adr(5 DOWNTO 1) = 5x"10" and FB_OEn = '0' ELSE
|
||||
x"00" WHEN paddle_cs = '1' and fb_adr(5 DOWNTO 1) = 5x"11" and FB_OEn = '0' ELSE (OTHERS => 'Z');
|
||||
|
||||
FB_AD(23 DOWNTO 16) <= data_out_blitter(23 DOWNTO 16) WHEN data_en_blitter = '1' ELSE
|
||||
fb_ad(23 DOWNTO 16) <= data_out_blitter(23 DOWNTO 16) WHEN data_en_blitter = '1' ELSE
|
||||
vdp_q1(23 DOWNTO 16) WHEN fb_vdoe = x"2" ELSE
|
||||
vdp_q2(23 DOWNTO 16) WHEN fb_vdoe = x"4" ELSE
|
||||
vdp_q3(23 DOWNTO 16) WHEN fb_vdoe = x"8" ELSE
|
||||
@@ -659,7 +661,7 @@ BEGIN
|
||||
x"00" WHEN paddle_cs = '1' and fb_adr(5 DOWNTO 1) = 5x"10" and FB_OEn = '0' ELSE
|
||||
x"00" WHEN paddle_cs = '1' and fb_adr(5 DOWNTO 1) = 5x"11" and FB_OEn = '0' ELSE (OTHERS => 'Z');
|
||||
|
||||
FB_AD(15 DOWNTO 8) <= data_out_blitter(15 DOWNTO 8) WHEN data_en_blitter = '1' ELSE
|
||||
fb_ad(15 DOWNTO 8) <= data_out_blitter(15 DOWNTO 8) WHEN data_en_blitter = '1' ELSE
|
||||
vdp_q1(15 DOWNTO 8) WHEN fb_vdoe = x"2" ELSE
|
||||
vdp_q2(15 DOWNTO 8) WHEN fb_vdoe = x"4" ELSE
|
||||
vdp_q3(15 DOWNTO 8) WHEN fb_vdoe = x"8" ELSE
|
||||
@@ -670,7 +672,7 @@ BEGIN
|
||||
vdr(15 DOWNTO 8) WHEN fb_vdoe = x"1" ELSE
|
||||
"000000" & data_out_mfp(7 DOWNTO 6) WHEN mfp_intack = '1' and FB_OEn = '0' ELSE (OTHERS => 'Z');
|
||||
|
||||
FB_AD(7 DOWNTO 0) <= data_out_blitter(7 DOWNTO 0) WHEN data_en_blitter = '1' ELSE
|
||||
fb_ad(7 DOWNTO 0) <= data_out_blitter(7 DOWNTO 0) WHEN data_en_blitter = '1' ELSE
|
||||
vdp_q1(7 DOWNTO 0) WHEN fb_vdoe = x"2" ELSE
|
||||
vdp_q2(7 DOWNTO 0) WHEN fb_vdoe = x"4" ELSE
|
||||
vdp_q3(7 DOWNTO 0) WHEN fb_vdoe = x"8" ELSE
|
||||
@@ -684,32 +686,32 @@ BEGIN
|
||||
synchronization : PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(ddr_sync_66m);
|
||||
IF FB_ALE = '1' THEN
|
||||
fb_adr <= FB_AD; -- latch Flexbus address
|
||||
IF fb_ale = '1' THEN
|
||||
fb_adr <= fb_ad; -- latch Flexbus address
|
||||
END IF;
|
||||
--
|
||||
IF vd_en_i = '0' THEN
|
||||
vdr <= VD;
|
||||
vdr <= vd;
|
||||
ELSE
|
||||
vdr <= vd_out;
|
||||
END IF;
|
||||
--
|
||||
IF fb_le(0) = '1' THEN
|
||||
fb_ddr(127 DOWNTO 96) <= FB_AD;
|
||||
fb_ddr(127 DOWNTO 96) <= fb_ad;
|
||||
END IF;
|
||||
--
|
||||
IF fb_le(1) = '1' THEN
|
||||
fb_ddr(95 DOWNTO 64) <= FB_AD;
|
||||
fb_ddr(95 DOWNTO 64) <= fb_ad;
|
||||
END IF;
|
||||
--
|
||||
IF fb_le(2) = '1' THEN
|
||||
fb_ddr(63 DOWNTO 32) <= FB_AD;
|
||||
fb_ddr(63 DOWNTO 32) <= fb_ad;
|
||||
END IF;
|
||||
--
|
||||
IF fb_le(3) = '1' THEN
|
||||
fb_ddr(31 DOWNTO 0) <= FB_AD;
|
||||
fb_ddr(31 DOWNTO 0) <= fb_ad;
|
||||
END IF;
|
||||
END PROCESS SYNCHRONIZATION;
|
||||
END PROCESS synchronization;
|
||||
|
||||
video_out : PROCESS
|
||||
BEGIN
|
||||
@@ -727,24 +729,24 @@ BEGIN
|
||||
END PROCESS p_ddr_wr;
|
||||
|
||||
vd_qs_en <= ddr_wr;
|
||||
VD <= vd_out WHEN vd_en = '1' ELSE (OTHERS => 'Z');
|
||||
vd <= vd_out WHEN vd_en = '1' ELSE (OTHERS => 'Z');
|
||||
|
||||
vd_qs_out(0) <= clk_ddr(0);
|
||||
vd_qs_out(1) <= clk_ddr(0);
|
||||
vd_qs_out(2) <= clk_ddr(0);
|
||||
vd_qs_out(3) <= clk_ddr(0);
|
||||
VD_QS <= vd_qs_out WHEN vd_qs_en = '1' ELSE (OTHERS => 'Z');
|
||||
vd_qs <= vd_qs_out WHEN vd_qs_en = '1' ELSE (OTHERS => 'Z');
|
||||
|
||||
ddr_data_in_n : PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_ddr(1));
|
||||
ddr_d_in_n <= VD;
|
||||
ddr_d_in_n <= vd;
|
||||
END PROCESS ddr_data_in_n;
|
||||
--
|
||||
ddr_data_in_p : PROCESS
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clk_ddr(1));
|
||||
vdp_in(31 DOWNTO 0) <= VD;
|
||||
vdp_in(31 DOWNTO 0) <= vd;
|
||||
vdp_in(63 DOWNTO 32) <= ddr_d_in_n;
|
||||
END PROCESS ddr_data_in_p;
|
||||
|
||||
@@ -790,32 +792,32 @@ BEGIN
|
||||
|
||||
I_DDR_CTRL: DDR_CTRL
|
||||
PORT MAP(
|
||||
CLK_MAIN => CLK_MAIN,
|
||||
clk_main => clk_main,
|
||||
ddr_sync_66m => ddr_sync_66m,
|
||||
fb_adr => fb_adr,
|
||||
FB_CS1_n => FB_CSn(1),
|
||||
FB_OE_n => FB_OEn,
|
||||
FB_SIZE0 => FB_SIZE(0),
|
||||
FB_SIZE1 => FB_SIZE(1),
|
||||
FB_ALE => FB_ALE,
|
||||
FB_WRn => FB_WRn,
|
||||
fb_cs1_n => FB_CSn(1),
|
||||
fb_oe_n => FB_OEn,
|
||||
fb_size0 => fb_size(0),
|
||||
fb_size1 => fb_size(1),
|
||||
fb_ale => fb_ale,
|
||||
fb_wr_n => fb_wr_n,
|
||||
blitter_adr => blitter_adr,
|
||||
blitter_sig => blitter_sig,
|
||||
blitter_wr => blitter_wr,
|
||||
SR_BLITTER_DACK => blitter_dack_sr,
|
||||
BA => BA,
|
||||
VA => VA,
|
||||
ba => ba,
|
||||
va => va,
|
||||
fb_le => fb_le,
|
||||
CLK_33M => CLK_33M,
|
||||
VRASn => VRASn,
|
||||
vrASn => vrASn,
|
||||
VcaSn => VcaSn,
|
||||
VWEn => VWEn,
|
||||
VCSn => VCSn,
|
||||
fifo_clr => fifo_clr,
|
||||
DDRCLK0 => clk_ddr(0),
|
||||
video_control_register => video_ram_ctr,
|
||||
VCKE => VCKE,
|
||||
DATA_IN => FB_AD,
|
||||
vcke => vcke,
|
||||
DATA_IN => fb_ad,
|
||||
DATA_OUT => data_out_ddr_ctrl,
|
||||
DATA_EN_H => data_en_h_ddr_ctrl,
|
||||
DATA_EN_L => data_en_l_ddr_ctrl,
|
||||
@@ -834,16 +836,16 @@ BEGIN
|
||||
-- I_BLITTER: FBEE_BLITTER
|
||||
-- PORT MAP(
|
||||
-- resetn => reset_n,
|
||||
-- CLK_MAIN => CLK_MAIN,
|
||||
-- clk_main => clk_main,
|
||||
-- clk_ddr0 => clk_ddr(0),
|
||||
-- fb_adr => fb_adr,
|
||||
-- FB_ALE => FB_ALE,
|
||||
-- FB_SIZE1 => FB_SIZE(1),
|
||||
-- FB_SIZE0 => FB_SIZE(0),
|
||||
-- fb_ale => fb_ale,
|
||||
-- fb_size1 => fb_size(1),
|
||||
-- fb_size0 => fb_size(0),
|
||||
-- FB_CSn => FB_CSn,
|
||||
-- FB_OEn => FB_OEn,
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- DATA_IN => FB_AD,
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- DATA_IN => fb_ad,
|
||||
-- DATA_OUT => data_out_blitter,
|
||||
-- DATA_EN => data_en_blitter,
|
||||
-- blitter_adr => blitter_adr,
|
||||
@@ -859,29 +861,29 @@ BEGIN
|
||||
|
||||
I_VIDEOSYSTEM: VIDEO_SYSTEM
|
||||
PORT MAP(
|
||||
CLK_MAIN => CLK_MAIN,
|
||||
clk_main => clk_main,
|
||||
CLK_33M => CLK_33M,
|
||||
CLK_25M => clk_25m_i,
|
||||
clk_video => clk_video,
|
||||
clk_ddr3 => clk_ddr(3),
|
||||
clk_ddr2 => clk_ddr(2),
|
||||
clk_ddr0 => clk_ddr(0),
|
||||
CLK_PIXEL => clk_pixel_i,
|
||||
clk_pixel => clk_pixel_i,
|
||||
|
||||
vr_d => vr_d,
|
||||
vr_busy => vr_busy,
|
||||
|
||||
fb_adr => fb_adr,
|
||||
FB_AD_IN => FB_AD,
|
||||
FB_AD_OUT => fb_ad_out_video,
|
||||
FB_AD_EN_31_16 => fb_ad_en_31_16_video,
|
||||
FB_AD_EN_15_0 => fb_ad_en_15_0_video,
|
||||
FB_ALE => FB_ALE,
|
||||
fb_ad_in => fb_ad,
|
||||
fb_ad_out => fb_ad_out_video,
|
||||
fb_ad_en_31_16 => fb_ad_en_31_16_video,
|
||||
fb_ad_en_15_0 => fb_ad_en_15_0_video,
|
||||
fb_ale => fb_ale,
|
||||
FB_CSn => FB_CSn,
|
||||
FB_OEn => FB_OEn,
|
||||
FB_WRn => FB_WRn,
|
||||
FB_SIZE1 => FB_SIZE(1),
|
||||
FB_SIZE0 => FB_SIZE(0),
|
||||
fb_wr_n => FB_WR_n,
|
||||
fb_size1 => fb_size(1),
|
||||
fb_size0 => fb_size(0),
|
||||
|
||||
vdp_in => vdp_in,
|
||||
|
||||
@@ -889,15 +891,15 @@ BEGIN
|
||||
vr_wr => vr_wr,
|
||||
video_reconfig => video_reconfig,
|
||||
|
||||
RED => VR,
|
||||
GREEN => VG,
|
||||
BLUE => VB,
|
||||
RED => vr,
|
||||
GREEN => vg,
|
||||
BLUE => vb,
|
||||
VSYNC => vsync_i,
|
||||
HSYNC => hsync_i,
|
||||
SYNCn => SYNCn,
|
||||
BLANKn => blank_i_n,
|
||||
|
||||
PD_VGAn => PD_VGAn,
|
||||
PD_vgAn => PD_vgAn,
|
||||
video_mod_ta => video_mod_ta,
|
||||
|
||||
vd_vz => vd_vz,
|
||||
@@ -907,30 +909,30 @@ BEGIN
|
||||
vdm_sel => vdm_sel,
|
||||
video_ram_ctr => video_ram_ctr,
|
||||
fifo_clr => fifo_clr,
|
||||
VDM => VDM,
|
||||
vdm => vdm,
|
||||
blitter_on => blitter_on,
|
||||
blitter_run => blitter_run
|
||||
);
|
||||
|
||||
-- I_INTHANDLER: INTHANDLER
|
||||
-- PORT MAP(
|
||||
-- CLK_MAIN => CLK_MAIN,
|
||||
-- clk_main => clk_main,
|
||||
-- resetn => reset_n,
|
||||
-- fb_adr => fb_adr,
|
||||
-- FB_CSn => FB_CSn(2 DOWNTO 1),
|
||||
-- FB_OEn => FB_OEn,
|
||||
-- FB_SIZE0 => FB_SIZE(0),
|
||||
-- FB_SIZE1 => FB_SIZE(1),
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- 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,
|
||||
-- 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_INTAn => PCI_INTAn,
|
||||
-- PCI_INTBn => PCI_INTBn,
|
||||
-- PCI_INTCn => PCI_INTCn,
|
||||
@@ -943,27 +945,27 @@ BEGIN
|
||||
-- IRQn => IRQn,
|
||||
-- int_handler_ta => int_handler_ta,
|
||||
-- fbee_conf => fbee_conf,
|
||||
-- TIN0 => TIN0
|
||||
-- tin0 => tin0
|
||||
-- );
|
||||
|
||||
-- I_DMA: FBEE_DMA
|
||||
-- PORT MAP(
|
||||
-- RESET => NOT reset_n,
|
||||
-- CLK_MAIN => CLK_MAIN,
|
||||
-- clk_main => clk_main,
|
||||
-- clk_fdc => clk_fdc,
|
||||
--
|
||||
-- fb_adr => fb_adr(26 DOWNTO 0),
|
||||
-- FB_ALE => FB_ALE,
|
||||
-- FB_SIZE => FB_SIZE,
|
||||
-- fb_ale => fb_ale,
|
||||
-- fb_size => fb_size,
|
||||
-- FB_CSn => FB_CSn(2 DOWNTO 1),
|
||||
-- FB_OEn => FB_OEn,
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- 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,
|
||||
-- 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,
|
||||
@@ -995,18 +997,18 @@ BEGIN
|
||||
-- fdc_csn => fdc_cs_n,
|
||||
-- fdc_wrn => fdc_wr_n,
|
||||
-- fd_int => fd_int,
|
||||
-- IDE_INT => IDE_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,
|
||||
-- clk_main => clk_main,
|
||||
--
|
||||
-- fb_adr => fb_adr(19 DOWNTO 5),
|
||||
-- FB_CS1n => FB_CSn(1),
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- fb_b0 => fb_b0,
|
||||
-- fb_b1 => fb_b1,
|
||||
--
|
||||
@@ -1028,7 +1030,7 @@ BEGIN
|
||||
-- SD_caRD_DETECT => SD_caRD_DETECT,
|
||||
-- SD_WP => SD_WP,
|
||||
--
|
||||
-- IDE_RDY => IDE_RDY,
|
||||
-- ide_rdy => ide_rdy,
|
||||
-- IDE_WRn => IDE_WRn,
|
||||
-- IDE_RDn => IDE_RDn,
|
||||
-- IDE_CSn => IDE_CSn,
|
||||
@@ -1045,13 +1047,13 @@ BEGIN
|
||||
-- I_DSP: DSP
|
||||
-- PORT MAP(
|
||||
-- CLK_33M => CLK_33M,
|
||||
-- CLK_MAIN => CLK_MAIN,
|
||||
-- clk_main => clk_main,
|
||||
-- FB_OEn => FB_OEn,
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- FB_CS1n => FB_CSn(1),
|
||||
-- FB_CS2n => FB_CSn(2),
|
||||
-- FB_SIZE0 => FB_SIZE(0),
|
||||
-- FB_SIZE1 => FB_SIZE(1),
|
||||
-- fb_size0 => fb_size(0),
|
||||
-- fb_size1 => fb_size(1),
|
||||
-- FB_BURSTn => FB_BURSTn,
|
||||
-- fb_adr => fb_adr,
|
||||
-- resetn => reset_n,
|
||||
@@ -1063,9 +1065,9 @@ BEGIN
|
||||
-- SROEn => DSP_SROEn,
|
||||
-- dsp_int => dsp_int,
|
||||
-- dsp_ta => dsp_ta,
|
||||
-- FB_AD_IN => FB_AD,
|
||||
-- FB_AD_OUT => fb_ad_out_dsp,
|
||||
-- FB_AD_EN => fb_ad_en_dsp,
|
||||
-- fb_ad_IN => fb_ad,
|
||||
-- fb_ad_OUT => fb_ad_out_dsp,
|
||||
-- fb_ad_EN => fb_ad_en_dsp,
|
||||
-- IO_IN => DSP_IO,
|
||||
-- IO_OUT => dsp_io_out,
|
||||
-- IO_EN => dsp_io_en,
|
||||
@@ -1076,7 +1078,7 @@ BEGIN
|
||||
|
||||
-- I_SOUND: WF2149IP_TOP_SOC
|
||||
-- PORT MAP(
|
||||
-- SYS_CLK => CLK_MAIN,
|
||||
-- SYS_CLK => clk_main,
|
||||
-- resetn => reset_n,
|
||||
--
|
||||
-- WAV_CLK => clk_2m0,
|
||||
@@ -1088,7 +1090,7 @@ BEGIN
|
||||
--
|
||||
-- A9n => '0',
|
||||
-- A8 => '1',
|
||||
-- DA_IN => FB_AD(31 DOWNTO 24),
|
||||
-- DA_IN => fb_ad(31 DOWNTO 24),
|
||||
-- DA_OUT => da_out_x,
|
||||
--
|
||||
-- IO_A_IN => x"00", -- All port pINs are dedicated OUTputs.
|
||||
@@ -1097,7 +1099,7 @@ BEGIN
|
||||
-- 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(2) => reserved_1,
|
||||
-- IO_A_OUT(1) => DSA_D,
|
||||
-- IO_A_OUT(0) => FDD_SDSELn,
|
||||
-- -- IO_A_EN => TOUT0n, -- Not required.
|
||||
@@ -1113,16 +1115,16 @@ BEGIN
|
||||
I_MFP: WF68901IP_TOP_SOC
|
||||
PORT MAP(
|
||||
-- System control:
|
||||
CLK => CLK_MAIN,
|
||||
CLK => clk_main,
|
||||
resetn => reset_n,
|
||||
-- Asynchronous bus control:
|
||||
DSn => NOT lds,
|
||||
CSn => NOT mfp_cs,
|
||||
RWn => FB_WRn,
|
||||
RWn => fb_wr_n,
|
||||
DTACKn => dtack_out_mfp_n,
|
||||
-- Data and Adresses:
|
||||
RS => fb_adr(5 DOWNTO 1),
|
||||
DATA_IN => FB_AD(23 DOWNTO 16),
|
||||
DATA_IN => fb_ad(23 DOWNTO 16),
|
||||
DATA_OUT => data_out_mfp,
|
||||
-- DATA_EN => DATA_EN_MFP, -- Not used.
|
||||
GPIP_IN(7) => NOT drq11_dma,
|
||||
@@ -1161,17 +1163,17 @@ BEGIN
|
||||
|
||||
-- I_ACIA_MIDI: WF6850IP_TOP_SOC
|
||||
-- PORT MAP(
|
||||
-- CLK => CLK_MAIN,
|
||||
-- CLK => clk_main,
|
||||
-- resetn => reset_n,
|
||||
--
|
||||
-- CS2n => '0',
|
||||
-- CS1 => fb_adr(2),
|
||||
-- CS0 => acia_cs,
|
||||
-- E => acia_cs,
|
||||
-- RWn => FB_WRN,
|
||||
-- RWn => fb_wr_n,
|
||||
-- RS => fb_adr(1),
|
||||
--
|
||||
-- DATA_IN => FB_AD(31 DOWNTO 24),
|
||||
-- DATA_IN => fb_ad(31 DOWNTO 24),
|
||||
-- DATA_OUT => data_out_acia_iI,
|
||||
-- -- DATA_EN => -- Not used.
|
||||
--
|
||||
@@ -1188,17 +1190,17 @@ BEGIN
|
||||
|
||||
I_ACIA_KEYBOARD: WF6850IP_TOP_SOC
|
||||
PORT MAP(
|
||||
CLK => CLK_MAIN,
|
||||
CLK => clk_main,
|
||||
resetn => reset_n,
|
||||
|
||||
CS2n => fb_adr(2),
|
||||
CS1 => '1',
|
||||
CS0 => acia_cs,
|
||||
E => acia_cs,
|
||||
RWn => FB_WRn,
|
||||
RWn => fb_wr_n,
|
||||
RS => fb_adr(1),
|
||||
|
||||
DATA_IN => FB_AD(31 DOWNTO 24),
|
||||
DATA_IN => fb_ad(31 DOWNTO 24),
|
||||
DATA_OUT => data_out_acia_i,
|
||||
-- DATA_EN => Not used.
|
||||
|
||||
@@ -1295,17 +1297,17 @@ BEGIN
|
||||
|
||||
-- I_RTC: RTC
|
||||
-- PORT MAP(
|
||||
-- CLK_MAIN => CLK_MAIN,
|
||||
-- clk_main => clk_main,
|
||||
-- fb_adr => fb_adr(19 DOWNTO 0),
|
||||
-- FB_CS1n => FB_CSn(1),
|
||||
-- FB_SIZE0 => FB_SIZE(0),
|
||||
-- FB_SIZE1 => FB_SIZE(1),
|
||||
-- FB_WRn => FB_WRn,
|
||||
-- fb_size0 => fb_size(0),
|
||||
-- fb_size1 => fb_size(1),
|
||||
-- fb_wr_n => fb_wr_n,
|
||||
-- FB_OEn => FB_OEn,
|
||||
-- FB_AD_IN => FB_AD(23 DOWNTO 16),
|
||||
-- FB_AD_OUT => fb_ad_out_rtc,
|
||||
-- FB_AD_EN_23_16 => fb_ad_en_rtc,
|
||||
-- PIC_INT => PIC_INT
|
||||
-- fb_ad_IN => fb_ad(23 DOWNTO 16),
|
||||
-- fb_ad_OUT => fb_ad_out_rtc,
|
||||
-- fb_ad_EN_23_16 => fb_ad_en_rtc,
|
||||
-- pic_int => pic_int
|
||||
-- );
|
||||
END ARCHITECTURE;
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ package firebee_pkg is
|
||||
FB_ALE : in std_logic;
|
||||
FB_CSn : in std_logic_vector(3 downto 1);
|
||||
FB_OEn : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_SIZE0 : in std_logic;
|
||||
|
||||
@@ -106,7 +106,7 @@ package firebee_pkg is
|
||||
port(
|
||||
CLK_MAIN : in std_logic;
|
||||
FB_CSn : in std_logic_vector(2 downto 1);
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_SIZE : in std_logic_vector(1 downto 0);
|
||||
FB_ADR : in std_logic_vector(31 downto 0);
|
||||
@@ -159,12 +159,12 @@ package firebee_pkg is
|
||||
CLK_MAIN : in std_logic;
|
||||
DDR_SYNC_66M : in std_logic;
|
||||
FB_ADR : in std_logic_vector(31 downto 0);
|
||||
FB_CS1_n : in std_logic;
|
||||
fb_cs1_n : in std_logic;
|
||||
FB_OE_n : in std_logic;
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_ALE : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FIFO_CLR : in std_logic;
|
||||
video_control_register : in std_logic_vector(15 downto 0);
|
||||
BLITTER_ADR : in std_logic_vector(31 downto 0);
|
||||
@@ -206,7 +206,7 @@ package firebee_pkg is
|
||||
FB_CSn : in std_logic_vector(2 downto 1);
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_AD_IN : in std_logic_vector(31 downto 0);
|
||||
FB_AD_OUT : out std_logic_vector(31 downto 0);
|
||||
@@ -244,7 +244,7 @@ package firebee_pkg is
|
||||
FB_SIZE : in std_logic_vector(1 downto 0);
|
||||
FB_CSn : in std_logic_vector(2 downto 1);
|
||||
FB_OEn : in std_logic;
|
||||
FB_WRn : 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;
|
||||
@@ -294,7 +294,7 @@ package firebee_pkg 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;
|
||||
|
||||
@@ -342,7 +342,7 @@ package firebee_pkg is
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_CSn : in std_logic_vector(3 downto 1);
|
||||
FB_OEn : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
DATA_IN : in std_logic_vector(31 downto 0);
|
||||
DATA_OUT : out std_logic_vector(31 downto 0);
|
||||
DATA_EN : out std_logic;
|
||||
@@ -363,7 +363,7 @@ package firebee_pkg is
|
||||
CLK_33M : in std_logic;
|
||||
CLK_MAIN : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_CS1n : in std_logic;
|
||||
FB_CS2n : in std_logic;
|
||||
FB_SIZE0 : in std_logic;
|
||||
@@ -567,7 +567,7 @@ package firebee_pkg is
|
||||
FB_CS1n : in std_logic;
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_AD_IN : in std_logic_vector(23 downto 16);
|
||||
FB_AD_OUT : out std_logic_vector(23 downto 16);
|
||||
|
||||
@@ -50,7 +50,7 @@ entity VIDEO_CTRL is
|
||||
port(
|
||||
CLK_MAIN : in std_logic;
|
||||
FB_CSn : in std_logic_vector(2 downto 1);
|
||||
FB_WRn : in std_logic;
|
||||
fb_wr_n : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_SIZE : in std_logic_vector(1 downto 0);
|
||||
FB_ADR : in std_logic_vector(31 downto 0);
|
||||
@@ -272,7 +272,7 @@ begin
|
||||
-- Firebee CLUT:
|
||||
FBEE_CLUT_CS <= '1' when FB_CSn(2) = '0' and FB_ADR(27 downto 10) = "000000000000000000" else '0'; -- 0-3FF/1024
|
||||
FBEE_CLUT_RD <= '1' when FBEE_CLUT_CS = '1' and FB_OEn = '0' else '0';
|
||||
FBEE_CLUT_WR <= FB_B when FBEE_CLUT_CS = '1' and FB_WRn = '0' else x"0";
|
||||
FBEE_CLUT_WR <= FB_B when FBEE_CLUT_CS = '1' and fb_wr_n = '0' else x"0";
|
||||
|
||||
P_CLUT_TA : process
|
||||
begin
|
||||
@@ -292,13 +292,13 @@ begin
|
||||
FALCON_CLUT_CS <= '1' when FB_CSn(1) = '0' and FB_ADR(19 downto 10) = "1111100110" else '0'; -- $F9800/$400
|
||||
FALCON_CLUT_RDH <= '1' when FALCON_CLUT_CS = '1' and FB_OEn = '0' and FB_ADR(1) = '0' else '0'; -- High word.
|
||||
FALCON_CLUT_RDL <= '1' when FALCON_CLUT_CS = '1' and FB_OEn = '0' and FB_ADR(1) = '1' else '0'; -- Low word.
|
||||
FALCON_CLUT_WR(1 downto 0) <= FB_16B when FB_ADR(1) = '0' and FALCON_CLUT_CS = '1' and FB_WRn = '0' else "00";
|
||||
FALCON_CLUT_WR(3 downto 2) <= FB_16B when FB_ADR(1) = '1' and FALCON_CLUT_CS = '1' and FB_WRn = '0' else "00";
|
||||
FALCON_CLUT_WR(1 downto 0) <= FB_16B when FB_ADR(1) = '0' and FALCON_CLUT_CS = '1' and fb_wr_n = '0' else "00";
|
||||
FALCON_CLUT_WR(3 downto 2) <= FB_16B when FB_ADR(1) = '1' and FALCON_CLUT_CS = '1' and fb_wr_n = '0' else "00";
|
||||
|
||||
-- ST CLUT:
|
||||
ST_CLUT_CS <= '1' when FB_CSn(1) = '0' and FB_ADR(19 downto 5) = "111110000010010" else '0'; -- $F8240/$2
|
||||
CLUT_ST_RD <= '1' when ST_CLUT_CS = '1' and FB_OEn = '0' else '0';
|
||||
CLUT_ST_WR <= FB_16B when ST_CLUT_CS = '1' and FB_WRn = '0' else "00";
|
||||
CLUT_ST_WR <= FB_16B when ST_CLUT_CS = '1' and fb_wr_n = '0' else "00";
|
||||
|
||||
ST_SHIFT_MODE_CS <= '1' when FB_CSn(1) = '0' and FB_ADR(19 downto 1) = "1111100000100110000" else '0'; -- $F8260/$2.
|
||||
FALCON_SHIFT_MODE_CS <= '1' when FB_CSn(1) = '0' and FB_ADR(19 downto 1) = "1111100000100110011" else '0'; -- $F8266/$2.
|
||||
@@ -311,13 +311,13 @@ begin
|
||||
P_VIDEO_CONTROL : process
|
||||
begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
if ST_SHIFT_MODE_CS = '1' and FB_WRn = '0' and FB_B(0) = '1' then
|
||||
if ST_SHIFT_MODE_CS = '1' and fb_wr_n = '0' and FB_B(0) = '1' then
|
||||
ST_SHIFT_MODE <= DATA_IN(25 downto 24);
|
||||
end if;
|
||||
|
||||
if FALCON_SHIFT_MODE_CS = '1' and FB_WRn = '0' and FB_B(2) = '1' then
|
||||
if FALCON_SHIFT_MODE_CS = '1' and fb_wr_n = '0' and FB_B(2) = '1' then
|
||||
FALCON_SHIFT_MODE(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif FALCON_SHIFT_MODE_CS = '1' and FB_WRn = '0' and FB_B(3) = '1' then
|
||||
elsif FALCON_SHIFT_MODE_CS = '1' and fb_wr_n = '0' and FB_B(3) = '1' then
|
||||
FALCON_SHIFT_MODE(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
@@ -327,72 +327,72 @@ begin
|
||||
-- Bit 6 = FALCON SHIFT MODE, 7 = ST SHIFT MODE, 9..8 = VCLK frequency,
|
||||
-- Bit 15 = SYNC ALLOWED, 31..16 = VIDEO_RAM_CTR,
|
||||
-- Bit 25 = RANDFARBE EINSCHALTEN, 26 = STANDARD ATARI SYNCS.
|
||||
if FBEE_VCTR_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if FBEE_VCTR_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(31 downto 24) <= DATA_IN(31 downto 24);
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif FBEE_VCTR_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(5 downto 0) <= DATA_IN(5 downto 0);
|
||||
end if;
|
||||
|
||||
-- ST or Falcon shift mode: assert when X..shift register:
|
||||
if FALCON_SHIFT_MODE_CS = '1' and FB_WRn = '0' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
if FALCON_SHIFT_MODE_CS = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
end if;
|
||||
if ST_SHIFT_MODE_CS = '1' and FB_WRn = '0' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
if ST_SHIFT_MODE_CS = '1' and fb_wr_n = '0' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
end if;
|
||||
if FBEE_VCTR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' and DATA_IN(0) = '1' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not FB_WRn and not FBEE_VIDEO_ON;
|
||||
if FBEE_VCTR_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' and DATA_IN(0) = '1' then
|
||||
FBEE_VCTR(7) <= FALCON_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
FBEE_VCTR(6) <= ST_SHIFT_MODE_CS and not fb_wr_n and not FBEE_VIDEO_ON;
|
||||
end if;
|
||||
|
||||
-- ATARI ST mode
|
||||
-- Horizontal timing 640x480:
|
||||
if ATARI_HH_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if ATARI_HH_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HH(31 downto 24) <= DATA_IN(31 downto 24);
|
||||
elsif ATARI_HH_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HH_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HH(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif ATARI_HH_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HH_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HH(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif ATARI_HH_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HH_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HH(7 downto 0) <= DATA_IN(7 downto 0);
|
||||
end if;
|
||||
|
||||
-- Vertical timing 640x480:
|
||||
if ATARI_VH_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if ATARI_VH_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VH(31 downto 24) <= DATA_IN(31 downto 24);
|
||||
elsif ATARI_VH_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VH_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VH(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif ATARI_VH_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VH_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VH(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif ATARI_VH_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VH_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VH(7 downto 0) <= DATA_IN(7 downto 0);
|
||||
end if;
|
||||
|
||||
-- Horizontal timing 320x240:
|
||||
if ATARI_HL_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if ATARI_HL_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HL(31 downto 24) <= DATA_IN(31 downto 24);
|
||||
elsif ATARI_HL_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HL_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HL(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif ATARI_HL_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HL_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HL(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif ATARI_HL_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_HL_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
ATARI_HL(7 downto 0) <= DATA_IN(7 downto 0);
|
||||
end if;
|
||||
|
||||
-- Vertical timing 320x240:
|
||||
if ATARI_VL_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if ATARI_VL_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VL(31 downto 24) <= DATA_IN(31 downto 24);
|
||||
elsif ATARI_VL_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VL_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VL(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif ATARI_VL_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VL_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VL(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif ATARI_VL_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif ATARI_VL_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
ATARI_VL(7 downto 0) <= DATA_IN(7 downto 0);
|
||||
end if;
|
||||
end process P_VIDEO_CONTROL;
|
||||
@@ -422,14 +422,14 @@ begin
|
||||
-- VIDEO PLL config and reconfig:
|
||||
VIDEO_PLL_CONFIG_CS <= '1' when FB_CSn(2) = '0' and FB_B(0) = '1' and FB_B(1) = '1' and FB_ADR(27 downto 9) = "0000000000000000011" else '0'; -- $(F)000'0600-7FF -> 6/2 word and long only.
|
||||
VIDEO_PLL_RECONFIG_CS <= '1' when FB_CSn(2) = '0' and FB_B(0) = '1' and FB_ADR(27 downto 0) = x"0000800" else '0'; -- $(F)000'0800.
|
||||
VR_RD_I <= '1' when VIDEO_PLL_CONFIG_CS = '1' and FB_WRn = '0' and VR_BUSY = '0' else '0';
|
||||
VR_RD_I <= '1' when VIDEO_PLL_CONFIG_CS = '1' and fb_wr_n = '0' and VR_BUSY = '0' else '0';
|
||||
|
||||
P_VIDEO_CONFIG: process
|
||||
variable LOCK : boolean;
|
||||
begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
|
||||
if VIDEO_PLL_CONFIG_CS = '1' and FB_WRn = '0' and VR_BUSY = '0' and VR_WR_I = '0' then
|
||||
if VIDEO_PLL_CONFIG_CS = '1' and fb_wr_n = '0' and VR_BUSY = '0' and VR_WR_I = '0' then
|
||||
VR_WR_I <= '1'; -- This is a strobe.
|
||||
else
|
||||
VR_WR_I <= '0';
|
||||
@@ -443,10 +443,10 @@ begin
|
||||
VR_FRQ <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
if VIDEO_PLL_RECONFIG_CS = '1' and FB_WRn = '0' and VR_BUSY = '0' and LOCK = false then
|
||||
if VIDEO_PLL_RECONFIG_CS = '1' and fb_wr_n = '0' and VR_BUSY = '0' and LOCK = false then
|
||||
VIDEO_RECONFIG_I <= '1'; -- This is a strobe.
|
||||
LOCK := true;
|
||||
elsif VIDEO_PLL_RECONFIG_CS = '0' or FB_WRn = '1' or VR_BUSY = '1' then
|
||||
elsif VIDEO_PLL_RECONFIG_CS = '0' or fb_wr_n = '1' or VR_BUSY = '1' then
|
||||
VIDEO_RECONFIG_I <= '0';
|
||||
LOCK := false;
|
||||
else
|
||||
@@ -490,128 +490,128 @@ begin
|
||||
wait until rising_edge(CLK_MAIN);
|
||||
|
||||
-- Colour of video borders
|
||||
if CCR_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
if CCR_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
CCR_I(23 downto 16) <= DATA_IN(23 downto 16);
|
||||
elsif CCR_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
elsif CCR_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
CCR_I(15 downto 8) <= DATA_IN(15 downto 8);
|
||||
elsif CCR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif CCR_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
CCR_I(7 downto 0) <= DATA_IN(7 downto 0);
|
||||
end if;
|
||||
|
||||
-- SYS CTRL:
|
||||
if SYS_CTR_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
if SYS_CTR_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
SYS_CTR <= DATA_IN(22 downto 16);
|
||||
end if;
|
||||
|
||||
--VDL_LOF:
|
||||
if VDL_LOF_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_LOF_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_LOF(15 downto 8) <= DATA_IN(31 downto 24);
|
||||
elsif VDL_LOF_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_LOF_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_LOF(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
--VDL_LWD
|
||||
if VDL_LWD_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_LWD_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_LWD(15 downto 8) <= DATA_IN(31 downto 24);
|
||||
elsif VDL_LWD_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_LWD_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_LWD(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- Horizontal:
|
||||
-- VDL_HHT:
|
||||
if VDL_HHT_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_HHT_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_HHT(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HHT_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HHT_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_HHT(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_HBE:
|
||||
if VDL_HBE_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_HBE_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_HBE(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HBE_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HBE_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_HBE(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_HDB:
|
||||
if VDL_HDB_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_HDB_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_HDB(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HDB_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HDB_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_HDB(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_HDE:
|
||||
if VDL_HDE_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_HDE_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_HDE(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HDE_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HDE_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_HDE(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_HBB:
|
||||
if VDL_HBB_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_HBB_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_HBB(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HBB_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HBB_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_HBB(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_HSS:
|
||||
if VDL_HSS_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_HSS_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_HSS(11 downto 8) <= DATA_IN(27 downto 24);
|
||||
elsif VDL_HSS_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_HSS_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_HSS(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- Vertical:
|
||||
-- VDL_VBE:
|
||||
if VDL_VBE_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_VBE_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_VBE(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VBE_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VBE_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_VBE(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VDB:
|
||||
if VDL_VDB_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_VDB_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_VDB(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VDB_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VDB_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_VDB(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VDE:
|
||||
if VDL_VDE_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_VDE_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_VDE(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VDE_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VDE_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_VDE(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VBB:
|
||||
if VDL_VBB_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_VBB_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_VBB(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VBB_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VBB_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_VBB(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VSS
|
||||
if VDL_VSS_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_VSS_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_VSS(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VSS_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VSS_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_VSS(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VFT
|
||||
if VDL_VFT_CS = '1' and FB_B(2) = '1' and FB_WRn = '0' then
|
||||
if VDL_VFT_CS = '1' and FB_B(2) = '1' and fb_wr_n = '0' then
|
||||
VDL_VFT(10 downto 8) <= DATA_IN(26 downto 24);
|
||||
elsif VDL_VFT_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VFT_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_VFT(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VCT(2): 1 = 32MHz CLK_PIXEL, 0 = 25MHZ; VDL_VCT(0): 1 = linedoubling.
|
||||
if VDL_VCT_CS = '1' and FB_B(0) = '1' and FB_WRn = '0' then
|
||||
if VDL_VCT_CS = '1' and FB_B(0) = '1' and fb_wr_n = '0' then
|
||||
VDL_VCT(8) <= DATA_IN(24);
|
||||
elsif VDL_VCT_CS = '1' and FB_B(1) = '1' and FB_WRn = '0' then
|
||||
elsif VDL_VCT_CS = '1' and FB_B(1) = '1' and fb_wr_n = '0' then
|
||||
VDL_VCT(7 downto 0) <= DATA_IN(23 downto 16);
|
||||
end if;
|
||||
|
||||
-- VDL_VMD(2): 1 = CLK_PIXEL/2.
|
||||
if VDL_VMD_CS = '1' and FB_B(3) = '1' and FB_WRn = '0' then
|
||||
if VDL_VMD_CS = '1' and FB_B(3) = '1' and fb_wr_n = '0' then
|
||||
VDL_VMD <= DATA_IN(19 downto 16);
|
||||
end if;
|
||||
end process P_MISC_CTRL;
|
||||
|
||||
@@ -72,7 +72,7 @@ ENTITY VIDEO_SYSTEM IS
|
||||
FB_ALE : IN STD_LOGIC;
|
||||
FB_CSn : IN STD_LOGIC_VECTOR(3 DOWNTO 1);
|
||||
FB_OEn : IN STD_LOGIC;
|
||||
FB_WRn : IN STD_LOGIC;
|
||||
fb_wr_n : IN STD_LOGIC;
|
||||
FB_SIZE1 : IN STD_LOGIC;
|
||||
FB_SIZE0 : IN STD_LOGIC;
|
||||
|
||||
@@ -502,7 +502,7 @@ BEGIN
|
||||
CLK_MAIN => CLK_MAIN,
|
||||
FB_CSn(1) => FB_CSn(1),
|
||||
FB_CSn(2) => FB_CSn(2),
|
||||
FB_WRn => FB_WRn,
|
||||
fb_wr_n => fb_wr_n,
|
||||
FB_OEn => FB_OEn,
|
||||
FB_SIZE(0) => FB_SIZE0,
|
||||
FB_SIZE(1) => FB_SIZE1,
|
||||
|
||||
@@ -23,17 +23,17 @@
|
||||
---- Copyright (C) 2006 - 2011 Wolfgang Foerster ----
|
||||
---- ----
|
||||
---- This source file may be used and distributed without ----
|
||||
---- restriction provided that this copyright statement is not ----
|
||||
---- restriction provided that this copyright statement IS not ----
|
||||
---- removed from the file and that any derivative work contains ----
|
||||
---- the original copyright notice and the associated disclaimer. ----
|
||||
---- ----
|
||||
---- 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 Lesser General ----
|
||||
---- Public License as published by the Free Software Foundation; ----
|
||||
---- either version 2.1 of the License, or (at your option) any ----
|
||||
---- later version. ----
|
||||
---- ----
|
||||
---- This source is distributed in the hope that it will be ----
|
||||
---- This source 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 Lesser General Public License for more ----
|
||||
@@ -59,131 +59,131 @@
|
||||
-- Introduced a minor RTSn correction.
|
||||
--
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
LIBRARY IEEE;
|
||||
USE IEEE.std_logic_1164.ALL;
|
||||
USE IEEE.numeric_std.ALL;
|
||||
|
||||
entity WF6850IP_TOP_SOC is
|
||||
port (
|
||||
CLK : in std_logic;
|
||||
RESETn : in std_logic;
|
||||
ENTITY WF6850IP_TOP_SOC IS
|
||||
PORT (
|
||||
CLK : IN STD_LOGIC;
|
||||
RESETn : IN STD_LOGIC;
|
||||
|
||||
CS2n, CS1, CS0 : in std_logic;
|
||||
E : in std_logic;
|
||||
RWn : in std_logic;
|
||||
RS : in std_logic;
|
||||
CS2n, CS1, CS0 : IN STD_LOGIC;
|
||||
E : IN STD_LOGIC;
|
||||
RWn : IN STD_LOGIC;
|
||||
RS : IN STD_LOGIC;
|
||||
|
||||
DATA_IN : in std_logic_vector(7 downto 0);
|
||||
DATA_OUT : out std_logic_vector(7 downto 0);
|
||||
DATA_EN : out std_logic;
|
||||
DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
|
||||
DATA_OUT : OUT STD_LOGIC_VECTOR(7 downto 0);
|
||||
DATA_EN : OUT STD_LOGIC;
|
||||
|
||||
TXCLK : in std_logic;
|
||||
RXCLK : in std_logic;
|
||||
RXDATA : in std_logic;
|
||||
CTSn : in std_logic;
|
||||
DCDn : in std_logic;
|
||||
TXCLK : IN STD_LOGIC;
|
||||
RXCLK : IN STD_LOGIC;
|
||||
RXDATA : IN STD_LOGIC;
|
||||
CTSn : IN STD_LOGIC;
|
||||
DCDn : IN STD_LOGIC;
|
||||
|
||||
IRQn : out std_logic;
|
||||
TXDATA : out std_logic;
|
||||
RTSn : out std_logic
|
||||
IRQn : OUT STD_LOGIC;
|
||||
TXDATA : OUT STD_LOGIC;
|
||||
RTSn : OUT STD_LOGIC
|
||||
);
|
||||
end entity WF6850IP_TOP_SOC;
|
||||
END ENTITY WF6850IP_TOP_SOC;
|
||||
|
||||
architecture STRUCTURE of WF6850IP_TOP_SOC is
|
||||
component WF6850IP_CTRL_STATUS
|
||||
port (
|
||||
CLK : in std_logic;
|
||||
RESETn : in std_logic;
|
||||
CS : in std_logic_vector(2 downto 0);
|
||||
E : in std_logic;
|
||||
RWn : in std_logic;
|
||||
RS : in std_logic;
|
||||
DATA_IN : in std_logic_vector(7 downto 0);
|
||||
DATA_OUT : out std_logic_vector(7 downto 0);
|
||||
DATA_EN : out std_logic;
|
||||
RDRF : in std_logic;
|
||||
TDRE : in std_logic;
|
||||
DCDn : in std_logic;
|
||||
CTSn : in std_logic;
|
||||
FE : in std_logic;
|
||||
OVR : in std_logic;
|
||||
PE : in std_logic;
|
||||
MCLR : out std_logic;
|
||||
RTSn : out std_logic;
|
||||
CDS : out std_logic_vector(1 downto 0);
|
||||
WS : out std_logic_vector(2 downto 0);
|
||||
TC : out std_logic_vector(1 downto 0);
|
||||
IRQn : out std_logic
|
||||
ARCHITECTURE STRUCTURE of WF6850IP_TOP_SOC IS
|
||||
COMPONENT WF6850IP_CTRL_STATUS
|
||||
PORT (
|
||||
CLK : IN STD_LOGIC;
|
||||
RESETn : IN STD_LOGIC;
|
||||
CS : IN STD_LOGIC_VECTOR(2 downto 0);
|
||||
E : IN STD_LOGIC;
|
||||
RWn : IN STD_LOGIC;
|
||||
RS : IN STD_LOGIC;
|
||||
DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
|
||||
DATA_OUT : OUT STD_LOGIC_VECTOR(7 downto 0);
|
||||
DATA_EN : OUT STD_LOGIC;
|
||||
RDRF : IN STD_LOGIC;
|
||||
TDRE : IN STD_LOGIC;
|
||||
DCDn : IN STD_LOGIC;
|
||||
CTSn : IN STD_LOGIC;
|
||||
FE : IN STD_LOGIC;
|
||||
OVR : IN STD_LOGIC;
|
||||
PE : IN STD_LOGIC;
|
||||
MCLR : OUT STD_LOGIC;
|
||||
RTSn : OUT STD_LOGIC;
|
||||
CDS : OUT STD_LOGIC_VECTOR(1 downto 0);
|
||||
WS : OUT STD_LOGIC_VECTOR(2 downto 0);
|
||||
TC : OUT STD_LOGIC_VECTOR(1 downto 0);
|
||||
IRQn : OUT STD_LOGIC
|
||||
);
|
||||
end component;
|
||||
END COMPONENT;
|
||||
|
||||
component WF6850IP_RECEIVE
|
||||
port (
|
||||
CLK : in std_logic;
|
||||
RESETn : in std_logic;
|
||||
MCLR : in std_logic;
|
||||
CS : in std_logic_vector(2 downto 0);
|
||||
E : in std_logic;
|
||||
RWn : in std_logic;
|
||||
RS : in std_logic;
|
||||
DATA_OUT : out std_logic_vector(7 downto 0);
|
||||
DATA_EN : out std_logic;
|
||||
WS : in std_logic_vector(2 downto 0);
|
||||
CDS : in std_logic_vector(1 downto 0);
|
||||
RXCLK : in std_logic;
|
||||
RXDATA : in std_logic;
|
||||
RDRF : out std_logic;
|
||||
OVR : out std_logic;
|
||||
PE : out std_logic;
|
||||
FE : out std_logic
|
||||
COMPONENT WF6850IP_RECEIVE
|
||||
PORT (
|
||||
CLK : IN STD_LOGIC;
|
||||
RESETn : IN STD_LOGIC;
|
||||
MCLR : IN STD_LOGIC;
|
||||
CS : IN STD_LOGIC_VECTOR(2 downto 0);
|
||||
E : IN STD_LOGIC;
|
||||
RWn : IN STD_LOGIC;
|
||||
RS : IN STD_LOGIC;
|
||||
DATA_OUT : OUT STD_LOGIC_VECTOR(7 downto 0);
|
||||
DATA_EN : OUT STD_LOGIC;
|
||||
WS : IN STD_LOGIC_VECTOR(2 downto 0);
|
||||
CDS : IN STD_LOGIC_VECTOR(1 downto 0);
|
||||
RXCLK : IN STD_LOGIC;
|
||||
RXDATA : IN STD_LOGIC;
|
||||
RDRF : OUT STD_LOGIC;
|
||||
OVR : OUT STD_LOGIC;
|
||||
PE : OUT STD_LOGIC;
|
||||
FE : OUT STD_LOGIC
|
||||
);
|
||||
end component;
|
||||
END COMPONENT;
|
||||
|
||||
component WF6850IP_TRANSMIT
|
||||
port (
|
||||
CLK : in std_logic;
|
||||
RESETn : in std_logic;
|
||||
MCLR : in std_logic;
|
||||
CS : in std_logic_vector(2 downto 0);
|
||||
E : in std_logic;
|
||||
RWn : in std_logic;
|
||||
RS : in std_logic;
|
||||
DATA_IN : in std_logic_vector(7 downto 0);
|
||||
CTSn : in std_logic;
|
||||
TC : in std_logic_vector(1 downto 0);
|
||||
WS : in std_logic_vector(2 downto 0);
|
||||
CDS : in std_logic_vector(1 downto 0);
|
||||
TXCLK : in std_logic;
|
||||
TDRE : out std_logic;
|
||||
TXDATA : out std_logic
|
||||
COMPONENT WF6850IP_TRANSMIT
|
||||
PORT (
|
||||
CLK : IN STD_LOGIC;
|
||||
RESETn : IN STD_LOGIC;
|
||||
MCLR : IN STD_LOGIC;
|
||||
CS : IN STD_LOGIC_VECTOR(2 downto 0);
|
||||
E : IN STD_LOGIC;
|
||||
RWn : IN STD_LOGIC;
|
||||
RS : IN STD_LOGIC;
|
||||
DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
|
||||
CTSn : IN STD_LOGIC;
|
||||
TC : IN STD_LOGIC_VECTOR(1 downto 0);
|
||||
WS : IN STD_LOGIC_VECTOR(2 downto 0);
|
||||
CDS : IN STD_LOGIC_VECTOR(1 downto 0);
|
||||
TXCLK : IN STD_LOGIC;
|
||||
TDRE : OUT STD_LOGIC;
|
||||
TXDATA : OUT STD_LOGIC
|
||||
);
|
||||
end component;
|
||||
END COMPONENT;
|
||||
|
||||
signal DATA_IN_I : std_logic_vector(7 downto 0);
|
||||
signal DATA_RX : std_logic_vector(7 downto 0);
|
||||
signal DATA_RX_EN : std_logic;
|
||||
signal DATA_CTRL : std_logic_vector(7 downto 0);
|
||||
signal DATA_CTRL_EN : std_logic;
|
||||
signal RDRF_I : std_logic;
|
||||
signal TDRE_I : std_logic;
|
||||
signal FE_I : std_logic;
|
||||
signal OVR_I : std_logic;
|
||||
signal PE_I : std_logic;
|
||||
signal MCLR_I : std_logic;
|
||||
signal CDS_I : std_logic_vector(1 downto 0);
|
||||
signal WS_I : std_logic_vector(2 downto 0);
|
||||
signal TC_I : std_logic_vector(1 downto 0);
|
||||
signal IRQ_In : std_logic;
|
||||
begin
|
||||
SIGNAL DATA_IN_I : STD_LOGIC_VECTOR(7 downto 0);
|
||||
SIGNAL DATA_RX : STD_LOGIC_VECTOR(7 downto 0);
|
||||
SIGNAL DATA_RX_EN : STD_LOGIC;
|
||||
SIGNAL DATA_CTRL : STD_LOGIC_VECTOR(7 downto 0);
|
||||
SIGNAL DATA_CTRL_EN : STD_LOGIC;
|
||||
SIGNAL RDRF_I : STD_LOGIC;
|
||||
SIGNAL TDRE_I : STD_LOGIC;
|
||||
SIGNAL FE_I : STD_LOGIC;
|
||||
SIGNAL OVR_I : STD_LOGIC;
|
||||
SIGNAL PE_I : STD_LOGIC;
|
||||
SIGNAL MCLR_I : STD_LOGIC;
|
||||
SIGNAL CDS_I : STD_LOGIC_VECTOR(1 downto 0);
|
||||
SIGNAL WS_I : STD_LOGIC_VECTOR(2 downto 0);
|
||||
SIGNAL TC_I : STD_LOGIC_VECTOR(1 downto 0);
|
||||
SIGNAL IRQ_In : STD_LOGIC;
|
||||
BEGIN
|
||||
DATA_IN_I <= (DATA_IN);
|
||||
DATA_EN <= DATA_RX_EN or DATA_CTRL_EN;
|
||||
DATA_OUT <= (DATA_RX) when DATA_RX_EN = '1' else
|
||||
(DATA_CTRL) when DATA_CTRL_EN = '1' else (others => '0');
|
||||
DATA_OUT <= (DATA_RX) WHEN DATA_RX_EN = '1' ELSE
|
||||
(DATA_CTRL) WHEN DATA_CTRL_EN = '1' ELSE (others => '0');
|
||||
|
||||
IRQn <= '0' when IRQ_In = '0' else '1';
|
||||
IRQn <= '0' WHEN IRQ_In = '0' ELSE '1';
|
||||
|
||||
I_UART_CTRL_STATUS: WF6850IP_CTRL_STATUS
|
||||
port map(
|
||||
PORT MAP(
|
||||
CLK => CLK,
|
||||
RESETn => RESETn,
|
||||
CS(2) => CS2n,
|
||||
@@ -211,7 +211,7 @@ begin
|
||||
);
|
||||
|
||||
I_UART_RECEIVE: WF6850IP_RECEIVE
|
||||
port map (
|
||||
PORT MAP (
|
||||
CLK => CLK,
|
||||
RESETn => RESETn,
|
||||
MCLR => MCLR_I,
|
||||
@@ -234,7 +234,7 @@ begin
|
||||
);
|
||||
|
||||
I_UART_TRANSMIT: WF6850IP_TRANSMIT
|
||||
port map (
|
||||
PORT MAP (
|
||||
CLK => CLK,
|
||||
RESETn => RESETn,
|
||||
MCLR => MCLR_I,
|
||||
@@ -253,4 +253,4 @@ begin
|
||||
TXCLK => TXCLK,
|
||||
TXDATA => TXDATA
|
||||
);
|
||||
end architecture STRUCTURE;
|
||||
END ARCHITECTURE STRUCTURE;
|
||||
Reference in New Issue
Block a user