fixed earlier misunderstandings, but still doesn't work

This commit is contained in:
Markus Fröschle
2014-12-26 16:29:40 +00:00
parent 22f39a7414
commit df5164157d
3 changed files with 1172 additions and 1156 deletions

View File

@@ -387,67 +387,6 @@ set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING ON
set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS OFF set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS OFF
set_global_assignment -name RTLV_SIMPLIFIED_LOGIC OFF set_global_assignment -name RTLV_SIMPLIFIED_LOGIC OFF
set_global_assignment -name USE_SIGNALTAP_FILE output_files/stp.stp set_global_assignment -name USE_SIGNALTAP_FILE output_files/stp.stp
set_global_assignment -name SDC_FILE firebee.sdc
set_global_assignment -name SOURCE_FILE firebee.qsf
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/Firebee.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DDR/DDR_CTRL.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/Video_Top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/RTC/rtc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_soc_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_registers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_control.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_tx.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_rx.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_timers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_interrupts.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_gpio.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_transmit.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_receive.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_ctrl_status.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_transceiver.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_registers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_digital_pll.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_crc_logic.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_control.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_am_detector.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_wave.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DSP/DSP.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Peripherals/ide_cf_sd_rom.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/fbee_dma.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Blitter/Blitter_WF.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Interrupt/interrupt.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/VIDEO_CTRL.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/dcfifo1.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/dcfifo0.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/lpm_fifoDZ.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Video/lpm_fifoDZ.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/lpm_fifo_dc0.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Video/lpm_fifo_dc0.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll_reconfig1.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll4.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll3.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll3.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll2.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll2.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll1.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll1.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/Firebee_pkg.vhd
set_global_assignment -name QIP_FILE ../../../rtl/vhdl/Firebee/altpll_reconfig1.qip
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
@@ -684,7 +623,6 @@ set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[2]
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[3] set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[3]
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[4] set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[4]
set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS ON set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS ON
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/io_register.vhd
set_global_assignment -name EDA_TEST_BENCH_NAME firebee_tb -section_id eda_simulation set_global_assignment -name EDA_TEST_BENCH_NAME firebee_tb -section_id eda_simulation
set_global_assignment -name EDA_DESIGN_INSTANCE_NAME firebee_tb -section_id firebee_tb set_global_assignment -name EDA_DESIGN_INSTANCE_NAME firebee_tb -section_id firebee_tb
set_global_assignment -name EDA_TEST_BENCH_RUN_SIM_FOR "10 ms" -section_id firebee_tb set_global_assignment -name EDA_TEST_BENCH_RUN_SIM_FOR "10 ms" -section_id firebee_tb
@@ -696,4 +634,66 @@ set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/ddr_ram_mod
set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/ddr_ctlr_tb.vhd -section_id ddr_ctlr_tb set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/ddr_ctlr_tb.vhd -section_id ddr_ctlr_tb
set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/ddr_ram_model.vhd -section_id firebee_tb set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/ddr_ram_model.vhd -section_id firebee_tb
set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/firebee_tb.vhd -section_id firebee_tb set_global_assignment -name EDA_TEST_BENCH_FILE ../../../testbenches/firebee_tb.vhd -section_id firebee_tb
set_global_assignment -name SDC_FILE firebee.sdc
set_global_assignment -name SOURCE_FILE firebee.qsf
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/Firebee.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DDR/DDR_CTRL.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/Video_Top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/RTC/rtc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_soc_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_registers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF5380/wf5380_control.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_tx.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_rx.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_timers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_interrupts.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_MFP68901_IP/wf68901ip_gpio.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_transmit.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_receive.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_UART6850_IP/wf6850ip_ctrl_status.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_transceiver.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_registers.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_digital_pll.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_crc_logic.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_control.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_FDC1772_IP/wf1772ip_am_detector.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_wave.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_top_soc.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_top.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/WF_SND2149_IP/wf2149ip_pkg.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DSP/DSP.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Peripherals/ide_cf_sd_rom.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/fbee_dma.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Blitter/Blitter_WF.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Interrupt/interrupt.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/VIDEO_CTRL.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/dcfifo1.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/DMA/dcfifo0.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/lpm_fifoDZ.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Video/lpm_fifoDZ.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Video/lpm_fifo_dc0.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Video/lpm_fifo_dc0.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll_reconfig1.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll4.vhd
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll3.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll3.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll2.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll2.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/altpll1.vhd
set_global_assignment -name SOURCE_FILE ../../../rtl/vhdl/Firebee/altpll1.cmp
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/Firebee/Firebee_pkg.vhd
set_global_assignment -name QIP_FILE ../../../rtl/vhdl/Firebee/altpll_reconfig1.qip
set_global_assignment -name VHDL_FILE ../../../rtl/vhdl/io_register.vhd
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

View File

@@ -13,7 +13,7 @@
---- ---- ---- ----
---- Author(s): ---- ---- Author(s): ----
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- ---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
---- K ---- ---- ----
---------------------------------------------------------------------- ----------------------------------------------------------------------
---- ---- ---- ----
---- Copyright (C) 2012 Fredi Aschwanden, Wolfgang Förster ---- ---- Copyright (C) 2012 Fredi Aschwanden, Wolfgang Förster ----
@@ -25,13 +25,13 @@
---- version. ---- ---- 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 ---- ---- useful, but WITHOUT ANY WARRANTY; without even the implied ----
---- warranty of MERCHANTABILITY OR FITNESS FOR A PARTICULAR ---- ---- 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. ---- ---- details. ----
---- ---- ---- ----
---- You should have received a copy of the GNU General Public ---- ---- 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, ---- ---- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ----
---- Boston, MA 02110-1301, USA. ---- ---- Boston, MA 02110-1301, USA. ----
---- ---- ---- ----
@@ -48,50 +48,50 @@ LIBRARY IEEE;
ENTITY DDR_CTRL IS ENTITY DDR_CTRL IS
PORT( PORT(
clk_main : IN STD_LOGIC; clk_main : IN std_logic;
ddr_sync_66m : IN STD_LOGIC; ddr_sync_66m : IN std_logic;
fb_adr : IN UNSIGNED (31 DOWNTO 0); fb_adr : IN unsigned(31 DOWNTO 0);
fb_cs1_n : IN STD_LOGIC; fb_cs1_n : IN std_logic;
fb_oe_n : IN STD_LOGIC; fb_oe_n : IN std_logic;
fb_size0 : IN STD_LOGIC; fb_size0 : IN std_logic;
fb_size1 : IN STD_LOGIC; fb_size1 : IN std_logic;
fb_ale : IN STD_LOGIC; fb_ale : IN std_logic;
fb_wr_n : IN STD_LOGIC; fb_wr_n : IN std_logic;
fifo_clr : IN STD_LOGIC; fifo_clr : IN std_logic;
video_control_register : IN UNSIGNED (15 DOWNTO 0); video_control_register : IN unsigned(15 DOWNTO 0);
blitter_adr : IN UNSIGNED (31 DOWNTO 0); blitter_adr : IN unsigned(31 DOWNTO 0);
blitter_sig : IN STD_LOGIC; blitter_sig : IN std_logic;
blitter_wr : IN STD_LOGIC; blitter_wr : IN std_logic;
ddrclk0 : IN STD_LOGIC; ddrclk0 : IN std_logic;
clk_33m : IN STD_LOGIC; clk_33m : IN std_logic;
fifo_mw : IN UNSIGNED (8 DOWNTO 0); 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 vwe_n : OUT std_logic; -- video memory write enable
vras_n : OUT STD_LOGIC; -- video memory RAS vras_n : OUT std_logic; -- video memory RAS
vcs_n : OUT STD_LOGIC; -- video memory chip SELECT vcs_n : OUT std_logic; -- video memory chip SELECT
vcke : OUT STD_LOGIC; -- video memory clock enable vcke : OUT std_logic; -- video memory clock enable
vcas_n : OUT STD_LOGIC; -- video memory CAS vcas_n : OUT std_logic; -- video memory CAS
fb_le : OUT UNSIGNED (3 DOWNTO 0); fb_le : OUT unsigned(3 DOWNTO 0);
fb_vdoe : OUT UNSIGNED (3 DOWNTO 0); fb_vdoe : OUT unsigned(3 DOWNTO 0);
sr_fifo_wre : OUT STD_LOGIC; sr_fifo_wre : OUT std_logic;
sr_ddr_fb : OUT STD_LOGIC; sr_ddr_fb : OUT std_logic;
sr_ddr_wr : OUT STD_LOGIC; sr_ddr_wr : OUT std_logic;
sr_ddrwr_d_sel : OUT STD_LOGIC; sr_ddrwr_d_sel : OUT std_logic;
sr_vdmp : OUT UNSIGNED (7 DOWNTO 0); sr_vdmp : OUT unsigned(7 DOWNTO 0);
video_ddr_ta : OUT STD_LOGIC; video_ddr_ta : OUT std_logic;
sr_blitter_dack : OUT STD_LOGIC; sr_blitter_dack : OUT std_logic;
ba : OUT UNSIGNED (1 DOWNTO 0); ba : OUT unsigned(1 DOWNTO 0);
ddrwr_d_sel1 : OUT STD_LOGIC; ddrwr_d_sel1 : OUT std_logic;
vdm_sel : OUT UNSIGNED (3 DOWNTO 0); vdm_sel : OUT unsigned(3 DOWNTO 0);
data_in : IN UNSIGNED (31 DOWNTO 0); data_in : IN unsigned(31 DOWNTO 0);
data_out : OUT UNSIGNED (31 DOWNTO 16); data_out : OUT unsigned(31 DOWNTO 16);
data_en_h : OUT STD_LOGIC; data_en_h : OUT std_logic;
data_en_l : OUT STD_LOGIC data_en_l : OUT std_logic
); );
END ENTITY DDR_CTRL; END ENTITY DDR_CTRL;
@@ -101,7 +101,7 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
CONSTANT FIFO_MWM : INTEGER := 200; -- medium water mark CONSTANT FIFO_MWM : INTEGER := 200; -- medium water mark
CONSTANT FIFO_HWM : INTEGER := 500; -- high water mark CONSTANT FIFO_HWM : INTEGER := 500; -- high water mark
-- DDR2 RAM controller bits: -- DDR RAM controller bits:
-- $F0000400: -- $F0000400:
-- BIT 0: vcke; -- BIT 0: vcke;
-- 1: NOT nVC -- 1: NOT nVC
@@ -114,7 +114,7 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
ALIAS vmem_config_enable IS video_control_register(3); ALIAS vmem_config_enable IS video_control_register(3);
ALIAS vmem_fifo_enable IS video_control_register(8); ALIAS vmem_fifo_enable IS video_control_register(8);
TYPE access_width_t IS (long_access, word_access, byte_access); TYPE access_width_t IS (long_access, word_access, byte_access, line_access);
TYPE ddr_access_t IS (ddr_access_cpu, ddr_access_fifo, ddr_access_blitter, ddr_access_none); TYPE ddr_access_t IS (ddr_access_cpu, ddr_access_fifo, ddr_access_blitter, ddr_access_none);
TYPE fb_regddr_t IS (fr_wait, fr_s0, fr_s1, fr_s2, fr_s3); TYPE fb_regddr_t IS (fr_wait, fr_s0, fr_s1, fr_s2, fr_s3);
TYPE ddr_sm_t IS (ds_t1, ds_t2a, ds_t2b, ds_t3, ds_n5, ds_n6, ds_n7, ds_n8, -- Start (normal 8 cycles total = 60ns). TYPE ddr_sm_t IS (ds_t1, ds_t2a, ds_t2b, ds_t3, ds_n5, ds_n6, ds_n7, ds_n8, -- Start (normal 8 cycles total = 60ns).
@@ -131,86 +131,92 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
SIGNAL ddr_access : ddr_access_t; SIGNAL ddr_access : ddr_access_t;
SIGNAL ddr_state : ddr_sm_t; SIGNAL ddr_state : ddr_sm_t;
SIGNAL ddr_next_state : ddr_sm_t; SIGNAL ddr_next_state : ddr_sm_t;
SIGNAL byte_sel : UNSIGNED (3 DOWNTO 0); SIGNAL byte_sel : unsigned(3 DOWNTO 0);
SIGNAL sr_fifo_wre_i : STD_LOGIC; SIGNAL sr_fifo_wre_i : std_logic;
SIGNAL vcas : STD_LOGIC; SIGNAL vcas : std_logic;
SIGNAL vras : STD_LOGIC; SIGNAL vras : std_logic;
SIGNAL vwe : STD_LOGIC; SIGNAL vwe : std_logic;
SIGNAL mcs : UNSIGNED (1 DOWNTO 0); SIGNAL mcs : unsigned(1 DOWNTO 0);
SIGNAL bus_cyc : STD_LOGIC; SIGNAL bus_cyc : std_logic;
SIGNAL bus_cyc_end : STD_LOGIC; SIGNAL bus_cyc_end : std_logic;
SIGNAL blitter_req : STD_LOGIC; SIGNAL blitter_req : std_logic;
SIGNAL blitter_row_adr : UNSIGNED (12 DOWNTO 0); SIGNAL blitter_row_adr : unsigned(12 DOWNTO 0);
SIGNAL blitter_ba : UNSIGNED (1 DOWNTO 0); SIGNAL blitter_ba : unsigned(1 DOWNTO 0);
SIGNAL blitter_col_adr : UNSIGNED (9 DOWNTO 0); SIGNAL blitter_col_adr : unsigned(9 DOWNTO 0);
SIGNAL cpu_ddr_sync : STD_LOGIC; SIGNAL cpu_ddr_sync : std_logic;
SIGNAL cpu_row_adr : UNSIGNED (12 DOWNTO 0); SIGNAL cpu_row_adr : unsigned(12 DOWNTO 0);
SIGNAL cpu_ba : UNSIGNED (1 DOWNTO 0); SIGNAL cpu_ba : unsigned(1 DOWNTO 0);
SIGNAL cpu_col_adr : UNSIGNED (9 DOWNTO 0); SIGNAL cpu_col_adr : unsigned(9 DOWNTO 0);
SIGNAL cpu_req : STD_LOGIC; SIGNAL cpu_req : std_logic;
SIGNAL ddr_sel : STD_LOGIC; SIGNAL ddr_sel : std_logic;
SIGNAL ddr_cs : STD_LOGIC; SIGNAL ddr_cs : std_logic;
SIGNAL fifo_req : STD_LOGIC; SIGNAL fifo_req : std_logic;
SIGNAL fifo_row_adr : UNSIGNED (12 DOWNTO 0); SIGNAL fifo_row_adr : unsigned(12 DOWNTO 0);
SIGNAL fifo_ba : UNSIGNED (1 DOWNTO 0); SIGNAL fifo_ba : unsigned(1 DOWNTO 0);
SIGNAL fifo_col_adr : UNSIGNED(9 DOWNTO 0); SIGNAL fifo_col_adr : UNSIGNED(9 DOWNTO 0);
SIGNAL fifo_clr_sync : STD_LOGIC; SIGNAL fifo_clr_sync : std_logic;
SIGNAL vdm_sel_i : UNSIGNED (3 DOWNTO 0); SIGNAL vdm_sel_i : unsigned(3 DOWNTO 0);
SIGNAL clear_fifo_cnt : STD_LOGIC; SIGNAL clear_fifo_cnt : std_logic;
SIGNAL stop : STD_LOGIC; SIGNAL stop : std_logic;
SIGNAL fifo_bank_ok : STD_LOGIC; SIGNAL fifo_bank_ok : std_logic;
SIGNAL ddr_refresh_cnt : UNSIGNED(10 DOWNTO 0) := "00000000000"; SIGNAL ddr_refresh_cnt : UNSIGNED(10 DOWNTO 0) := "00000000000";
SIGNAL ddr_refresh_req : STD_LOGIC; SIGNAL ddr_refresh_req : std_logic;
SIGNAL ddr_refresh_sig : UNSIGNED(3 DOWNTO 0); SIGNAL ddr_refresh_sig : UNSIGNED(3 DOWNTO 0);
SIGNAL need_refresh : STD_LOGIC; SIGNAL need_refresh : std_logic;
SIGNAL video_base_l_d : UNSIGNED (7 DOWNTO 0); SIGNAL video_base_l_d : unsigned(7 DOWNTO 0);
SIGNAL video_base_l : STD_LOGIC; SIGNAL video_base_l : std_logic;
SIGNAL video_base_m_d : UNSIGNED (7 DOWNTO 0); SIGNAL video_base_m_d : unsigned(7 DOWNTO 0);
SIGNAL video_base_m : STD_LOGIC; SIGNAL video_base_m : std_logic;
SIGNAL video_base_h_d : UNSIGNED (7 DOWNTO 0); SIGNAL video_base_h_d : unsigned(7 DOWNTO 0);
SIGNAL video_base_h : STD_LOGIC; SIGNAL video_base_h : std_logic;
SIGNAL video_base_x_d : UNSIGNED (2 DOWNTO 0); SIGNAL video_base_x_d : unsigned(2 DOWNTO 0);
SIGNAL video_adr_cnt : UNSIGNED(22 DOWNTO 0); SIGNAL video_adr_cnt : UNSIGNED(22 DOWNTO 0);
SIGNAL video_cnt_l : STD_LOGIC; SIGNAL video_cnt_l : std_logic;
SIGNAL video_cnt_m : STD_LOGIC; SIGNAL video_cnt_m : std_logic;
SIGNAL video_cnt_h : STD_LOGIC; SIGNAL video_cnt_h : std_logic;
SIGNAL video_base_adr : UNSIGNED (22 DOWNTO 0); SIGNAL video_base_adr : unsigned(22 DOWNTO 0);
SIGNAL video_act_adr : UNSIGNED (26 DOWNTO 0); SIGNAL video_act_adr : unsigned(26 DOWNTO 0);
SIGNAL fb_adr_i : UNSIGNED (32 DOWNTO 0); SIGNAL fb_adr_i : unsigned(32 DOWNTO 0);
SIGNAL va_s : UNSIGNED (12 DOWNTO 0); SIGNAL va_s : unsigned(12 DOWNTO 0);
SIGNAL va_p : UNSIGNED (12 DOWNTO 0); SIGNAL va_p : unsigned(12 DOWNTO 0);
SIGNAL ba_s : UNSIGNED (1 DOWNTO 0) ; SIGNAL ba_s : unsigned(1 DOWNTO 0) ;
SIGNAL ba_p : UNSIGNED (1 DOWNTO 0); SIGNAL ba_p : unsigned(1 DOWNTO 0);
SIGNAL tsiz : UNSIGNED (1 DOWNTO 0);
BEGIN BEGIN
tsiz <= fb_size1 & fb_size0; access_width <= long_access WHEN fb_size1 = '0' AND fb_size0 = '0' ELSE
WITH tsiz SELECT word_access WHEN fb_size1 = '1' AND fb_size0 = '0' ELSE
access_width <= long_access WHEN "11", byte_access WHEN fb_size1 = '0' AND fb_size0 = '1' ELSE
word_access WHEN "00", line_access;
byte_access WHEN OTHERS;
-- Byte selectors: -- Byte selectors:
byte_sel(0) <= '1' WHEN access_width = long_access OR access_width = word_access ELSE byte_sel(0) <= '1' WHEN fb_adr(1 DOWNTO 0) = "00" OR
'1' WHEN fb_adr(1 DOWNTO 0) = "00" ELSE '0'; -- Byte 0. access_width = line_access OR
access_width = long_access
ELSE '0';
byte_sel(1) <= '1' WHEN access_width = long_access OR access_width = word_access ELSE byte_sel(1) <= '1' WHEN fb_adr(1 DOWNTO 0) = "01" OR
'1' WHEN access_width = byte_access AND fb_adr(1) = '0' ELSE -- High word_access. (access_width = word_access AND fb_adr(1) = '0') OR
'1' WHEN fb_adr(1 DOWNTO 0) = "01" ELSE '0'; -- Byte 1. access_width = line_access OR
access_width = long_access
ELSE '0';
byte_sel(2) <= '1' WHEN access_width = long_access OR access_width = word_access ELSE byte_sel(2) <= '1' WHEN fb_adr(1 DOWNTO 0) = "10" OR
'1' WHEN fb_adr(1 DOWNTO 0) = "10" ELSE '0'; -- Byte 2. access_width = line_access OR
access_width = long_access
ELSE '0';
byte_sel(3) <= '1' WHEN access_width = long_access OR access_width = word_access ELSE byte_sel(3) <= '1' WHEN fb_adr(1 DOWNTO 0) = "11" OR
'1' WHEN access_width = byte_access AND fb_adr(1) = '1' ELSE -- Low word_access. (access_width = word_access AND fb_adr(1) = '1') OR
'1' WHEN fb_adr(1 DOWNTO 0) = "11" ELSE '0'; -- Byte 3. access_width = line_access OR
access_width = long_access
ELSE '0';
--------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------ ddr_access_cpu READ (REG DDR => ddr_access_cpu) AND WRITE (ddr_access_cpu => REG DDR) --------------------------------------------------------------------- ------------------------------------ ddr_access_cpu READ (REG DDR => ddr_access_cpu) AND WRITE (ddr_access_cpu => REG DDR) ---------------------------------------------------------------------
fbctrl_reg : PROCESS fbctrl_reg : PROCESS
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(clk_33m); WAIT UNTIL rising_edge(clk_main);
fb_regddr <= fb_regddr_next; fb_regddr <= fb_regddr_next;
END PROCESS FBCTRL_REG; END PROCESS FBCTRL_REG;
@@ -283,12 +289,12 @@ BEGIN
------------------------------------------------------ DDR State Machine -------------------------------------------------------------------------------------- ------------------------------------------------------ DDR State Machine --------------------------------------------------------------------------------------
ddr_state_reg: PROCESS ddr_state_reg: PROCESS
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(ddrclk0); WAIT UNTIL rising_edge(ddrclk0);
ddr_state <= ddr_next_state; ddr_state <= ddr_next_state;
END PROCESS ddr_state_reg; END PROCESS ddr_state_reg;
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, 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) fifo_mw, cpu_req, video_adr_cnt, ddr_sel, data_in, fifo_ba, ddr_refresh_sig)
BEGIN BEGIN
CASE ddr_state IS CASE ddr_state IS
WHEN ds_t1 => WHEN ds_t1 =>
@@ -304,7 +310,7 @@ BEGIN
ddr_next_state <= ds_t1; -- Synchronize. ddr_next_state <= ds_t1; -- Synchronize.
END IF; END IF;
WHEN ds_t2a => -- Fast access, IN this CASE page IS always NOT ok. WHEN ds_t2a => -- Fast access, in this case page is always not ok.
ddr_next_state <= ds_t3; ddr_next_state <= ds_t3;
WHEN ds_t2b => WHEN ds_t2b =>
@@ -330,7 +336,7 @@ BEGIN
ddr_next_state <= ds_t5r; ddr_next_state <= ds_t5r;
WHEN ds_t5r => WHEN ds_t5r =>
IF fifo_req = '1' AND fifo_bank_ok = '1' THEN -- Insert ddr_access_fifo read, WHEN bank ok. IF fifo_req = '1' AND fifo_bank_ok = '1' THEN -- Insert ddr_access_fifo read, when bank ok.
ddr_next_state <= ds_t6f; ddr_next_state <= ds_t6f;
ELSE ELSE
ddr_next_state <= ds_cb6; ddr_next_state <= ds_cb6;
@@ -401,7 +407,7 @@ BEGIN
END IF; END IF;
WHEN ds_t10f => WHEN ds_t10f =>
IF ddr_sel = '1' AND (fb_wr_n = '1' OR tsiz /= "11") AND data_in(13 DOWNTO 12) /= fifo_ba THEN IF ddr_sel = '1' AND (fb_wr_n = '1' OR access_width = line_access) AND data_in(13 DOWNTO 12) /= fifo_ba THEN
ddr_next_state <= ds_t3; ddr_next_state <= ds_t3;
ELSE ELSE
ddr_next_state <= ds_t7f; ddr_next_state <= ds_t7f;
@@ -474,7 +480,7 @@ BEGIN
p_clk0 : PROCESS p_clk0 : PROCESS
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(ddrclk0); WAIT UNTIL rising_edge(ddrclk0);
-- Default assignments; -- Default assignments;
ddr_access <= ddr_access_none; ddr_access <= ddr_access_none;
@@ -592,7 +598,7 @@ BEGIN
va_s(9 DOWNTO 0) <= cpu_col_adr; va_s(9 DOWNTO 0) <= cpu_col_adr;
ba_s <= cpu_ba; ba_s <= cpu_ba;
ELSIF vmem_fifo_enable = '1' THEN ELSIF vmem_fifo_enable = '1' THEN
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr); va_s(9 DOWNTO 0) <= unsigned(fifo_col_adr);
ba_s <= fifo_ba; ba_s <= fifo_ba;
ELSIF ddr_access = ddr_access_blitter THEN ELSIF ddr_access = ddr_access_blitter THEN
va_s(9 DOWNTO 0) <= blitter_col_adr; va_s(9 DOWNTO 0) <= blitter_col_adr;
@@ -607,7 +613,7 @@ BEGIN
END IF; END IF;
ELSIF ddr_state = ds_t5r AND fifo_req = '1' AND fifo_bank_ok = '1' THEN ELSIF ddr_state = ds_t5r AND fifo_req = '1' AND fifo_bank_ok = '1' THEN
va_s(10) <= '0'; va_s(10) <= '0';
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr); va_s(9 DOWNTO 0) <= unsigned(fifo_col_adr);
ba_s <= fifo_ba; ba_s <= fifo_ba;
ELSIF ddr_state = ds_t5r THEN ELSIF ddr_state = ds_t5r THEN
va_s(10) <= '1'; va_s(10) <= '1';
@@ -646,7 +652,7 @@ BEGIN
sr_ddrwr_d_sel <= '1'; sr_ddrwr_d_sel <= '1';
ELSIF ddr_state = ds_t9w AND fifo_req = '1' AND fifo_bank_ok = '1' THEN ELSIF ddr_state = ds_t9w AND fifo_req = '1' AND fifo_bank_ok = '1' THEN
va_s(10) <= '0'; va_s(10) <= '0';
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr); va_s(9 DOWNTO 0) <= unsigned(fifo_col_adr);
ba_s <= fifo_ba; ba_s <= fifo_ba;
ELSIF ddr_state = ds_t9w THEN ELSIF ddr_state = ds_t9w THEN
va_s(10) <= '0'; va_s(10) <= '0';
@@ -656,7 +662,7 @@ BEGIN
va_s(10) <= '1'; va_s(10) <= '1';
ELSIF ddr_state = ds_t5f AND fifo_req = '1' THEN ELSIF ddr_state = ds_t5f AND fifo_req = '1' THEN
va_s(10) <= '0'; va_s(10) <= '0';
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr + "100"); va_s(9 DOWNTO 0) <= unsigned(fifo_col_adr + "100");
ba_s <= fifo_ba; ba_s <= fifo_ba;
ELSIF ddr_state = ds_t5f THEN ELSIF ddr_state = ds_t5f THEN
va_s(10) <= '0'; va_s(10) <= '0';
@@ -668,7 +674,7 @@ BEGIN
va_s(10) <= '1'; va_s(10) <= '1';
ELSIF ddr_state = ds_t7f AND fifo_req = '1' THEN ELSIF ddr_state = ds_t7f AND fifo_req = '1' THEN
va_s(10) <= '0'; va_s(10) <= '0';
va_s(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr + "100"); va_s(9 DOWNTO 0) <= unsigned(fifo_col_adr + "100");
ba_s <= fifo_ba; ba_s <= fifo_ba;
ELSIF ddr_state = ds_t7f THEN ELSIF ddr_state = ds_t7f THEN
va_s(10) <= '1'; va_s(10) <= '1';
@@ -676,7 +682,7 @@ BEGIN
va_s(10) <= '1'; va_s(10) <= '1';
ELSIF ddr_state = ds_t9f AND fifo_req = '1' THEN ELSIF ddr_state = ds_t9f AND fifo_req = '1' THEN
va_p(10) <= '0'; va_p(10) <= '0';
va_p(9 DOWNTO 0) <= UNSIGNED (fifo_col_adr + "100"); va_p(9 DOWNTO 0) <= unsigned(fifo_col_adr + "100");
ba_p <= fifo_ba; ba_p <= fifo_ba;
ELSIF ddr_state = ds_t9f THEN ELSIF ddr_state = ds_t9f THEN
va_s(10) <= '1'; va_s(10) <= '1';
@@ -705,7 +711,7 @@ BEGIN
p_ddr_cs: PROCESS p_ddr_cs: PROCESS
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(clk_main); WAIT UNTIL rising_edge(clk_main);
IF fb_ale = '1' THEN IF fb_ale = '1' THEN
ddr_cs <= ddr_sel; ddr_cs <= ddr_sel;
END IF; END IF;
@@ -713,7 +719,7 @@ BEGIN
p_cpu_req: PROCESS p_cpu_req: PROCESS
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(ddr_sync_66m); WAIT UNTIL rising_edge(ddr_sync_66m);
IF ddr_sel = '1' AND fb_wr_n = '1' AND vmem_config_enable = '0' THEN IF ddr_sel = '1' AND fb_wr_n = '1' AND vmem_config_enable = '0' THEN
cpu_req <= '1'; cpu_req <= '1';
@@ -732,12 +738,22 @@ BEGIN
-- Refresh: Always 8 at a time every 7.8us. -- Refresh: Always 8 at a time every 7.8us.
-- 7.8us x 8 = 62.4us = 2059 -> 2048 @ 33MHz. -- 7.8us x 8 = 62.4us = 2059 -> 2048 @ 33MHz.
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(clk_33m); WAIT UNTIL rising_edge(clk_33m);
ddr_refresh_cnt <= ddr_refresh_cnt + 1; -- Count from 0 to 2047 ddr_refresh_cnt <= ddr_refresh_cnt + 1; -- Count from 0 to 2047
END PROCESS p_refresh; END PROCESS p_refresh;
sr_fifo_wre <= sr_fifo_wre_i; sr_fifo_wre <= sr_fifo_wre_i;
-- IF ddr_sel = '1' AND (fb_wr_n = '1' OR access_width = line_access) THEN
-- BEGIN
-- vras <= '1';
-- va <= data_in(26 DOWNTO 14);
-- ba <= data_in(13 DOWNTO 12);
-- va_s(10) <= '1';
-- ELSE
-- -- vras = (fifo_ac )
-- END;
va <= data_in(26 DOWNTO 14) WHEN ddr_state = ds_t2a AND ddr_sel = '1' AND fb_wr_n = '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 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 va_p WHEN ddr_state = ds_t2a ELSE
@@ -815,7 +831,7 @@ BEGIN
p_video_regs : PROCESS p_video_regs : PROCESS
-- Video registers. -- Video registers.
BEGIN BEGIN
WAIT UNTIL RISING_EDGE(clk_33m); WAIT UNTIL rising_edge(clk_main);
IF video_base_l = '1' AND fb_wr_n = '0' AND byte_sel(1) = '1' THEN 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 borders video_base_l_d <= data_in(23 DOWNTO 16); -- 16 byte borders
END IF; END IF;

View File

@@ -48,194 +48,194 @@ LIBRARY IEEE;
ENTITY video_ctrl IS ENTITY video_ctrl IS
PORT( PORT(
clk_main : IN STD_LOGIC; clk_main : IN std_logic;
fb_cs_n : IN STD_LOGIC_VECTOR (2 DOWNTO 1); fb_cs_n : IN std_logic_vector(2 DOWNTO 1);
fb_wr_n : IN STD_LOGIC; fb_wr_n : IN std_logic;
fb_oe_n : IN STD_LOGIC; fb_oe_n : IN std_logic;
fb_size : IN STD_LOGIC_VECTOR (1 DOWNTO 0); fb_size : IN std_logic_vector(1 DOWNTO 0);
fb_adr : IN STD_LOGIC_VECTOR (31 DOWNTO 0); fb_adr : IN std_logic_vector(31 DOWNTO 0);
clk33m : IN STD_LOGIC; clk33m : IN std_logic;
clk25m : IN STD_LOGIC; clk25m : IN std_logic;
blitter_run : IN STD_LOGIC; blitter_run : IN std_logic;
clk_video : IN STD_LOGIC; clk_video : IN std_logic;
vr_d : IN UNSIGNED (8 DOWNTO 0); vr_d : IN unsigned(8 DOWNTO 0);
vr_busy : IN STD_LOGIC; vr_busy : IN std_logic;
color8 : OUT STD_LOGIC; color8 : OUT std_logic;
fbee_clut_rd : OUT STD_LOGIC; fbee_clut_rd : OUT std_logic;
COLOR1 : OUT STD_LOGIC; COLOR1 : OUT std_logic;
falcon_clut_rdh : OUT STD_LOGIC; falcon_clut_rdh : OUT std_logic;
falcon_clut_rdl : OUT STD_LOGIC; falcon_clut_rdl : OUT std_logic;
falcon_clut_wr : OUT UNSIGNED (3 DOWNTO 0); falcon_clut_wr : OUT unsigned(3 DOWNTO 0);
clut_st_rd : OUT STD_LOGIC; clut_st_rd : OUT std_logic;
clut_st_wr : OUT UNSIGNED (1 DOWNTO 0); clut_st_wr : OUT unsigned(1 DOWNTO 0);
clut_mux_adr : OUT UNSIGNED (3 DOWNTO 0); clut_mux_adr : OUT unsigned(3 DOWNTO 0);
hsync : OUT STD_LOGIC; hsync : OUT std_logic;
vsync : OUT STD_LOGIC; vsync : OUT std_logic;
blank_n : OUT STD_LOGIC; blank_n : OUT std_logic;
sync_n : OUT STD_LOGIC; sync_n : OUT std_logic;
pd_vga_n : OUT STD_LOGIC; pd_vga_n : OUT std_logic;
fifo_rde : OUT STD_LOGIC; fifo_rde : OUT std_logic;
color2 : OUT STD_LOGIC; color2 : OUT std_logic;
color4 : OUT STD_LOGIC; color4 : OUT std_logic;
clk_pixel : OUT STD_LOGIC; clk_pixel : OUT std_logic;
clut_off : OUT UNSIGNED (3 DOWNTO 0); clut_off : OUT unsigned(3 DOWNTO 0);
blitter_on : OUT STD_LOGIC; blitter_on : OUT std_logic;
video_ram_ctr : OUT UNSIGNED (15 DOWNTO 0); video_ram_ctr : OUT unsigned(15 DOWNTO 0);
video_mod_ta : OUT STD_LOGIC; video_mod_ta : OUT std_logic;
ccr : OUT UNSIGNED (23 DOWNTO 0); ccr : OUT unsigned(23 DOWNTO 0);
ccsel : OUT UNSIGNED (2 DOWNTO 0); ccsel : OUT unsigned(2 DOWNTO 0);
fbee_clut_wr : OUT UNSIGNED (3 DOWNTO 0); fbee_clut_wr : OUT unsigned(3 DOWNTO 0);
inter_zei : OUT STD_LOGIC; inter_zei : OUT std_logic;
dop_fifo_clr : OUT STD_LOGIC; dop_fifo_clr : OUT std_logic;
video_reconfig : OUT STD_LOGIC; video_reconfig : OUT std_logic;
vr_wr : OUT STD_LOGIC; vr_wr : OUT std_logic;
vr_rd : OUT STD_LOGIC; vr_rd : OUT std_logic;
fifo_clr : OUT STD_LOGIC; fifo_clr : OUT std_logic;
data_in : IN UNSIGNED (31 DOWNTO 0); data_in : IN unsigned(31 DOWNTO 0);
data_out : OUT UNSIGNED (31 DOWNTO 0); data_out : OUT unsigned(31 DOWNTO 0);
data_en_h : OUT STD_LOGIC; data_en_h : OUT std_logic;
data_en_l : OUT STD_LOGIC data_en_l : OUT std_logic
); );
END ENTITY video_ctrl; END ENTITY video_ctrl;
ARCHITECTURE behaviour OF video_ctrl IS ARCHITECTURE behaviour OF video_ctrl IS
SIGNAL clk17m : STD_LOGIC; SIGNAL clk17m : std_logic;
SIGNAL clk13m : STD_LOGIC; SIGNAL clk13m : std_logic;
SIGNAL fbee_clut_cs : STD_LOGIC; SIGNAL fbee_clut_cs : std_logic;
SIGNAL fbee_clut : STD_LOGIC; SIGNAL fbee_clut : std_logic;
SIGNAL video_pll_config_cs : STD_LOGIC; SIGNAL video_pll_config_cs : std_logic;
SIGNAL vr_wr_i : STD_LOGIC; SIGNAL vr_wr_i : std_logic;
SIGNAL vr_dout : UNSIGNED (8 DOWNTO 0); SIGNAL vr_dout : unsigned(8 DOWNTO 0);
SIGNAL vr_frq : UNSIGNED (7 DOWNTO 0); SIGNAL vr_frq : unsigned(7 DOWNTO 0);
SIGNAL video_pll_reconfig_cs : STD_LOGIC; SIGNAL video_pll_reconfig_cs : std_logic;
SIGNAL video_reconfig_i : STD_LOGIC; SIGNAL video_reconfig_i : std_logic;
SIGNAL falcon_clut_cs : STD_LOGIC; SIGNAL falcon_clut_cs : std_logic;
SIGNAL falcon_clut : STD_LOGIC; SIGNAL falcon_clut : std_logic;
SIGNAL st_clut_cs : STD_LOGIC; SIGNAL st_clut_cs : std_logic;
SIGNAL st_clut : STD_LOGIC; SIGNAL st_clut : std_logic;
SIGNAL fb_b : UNSIGNED (3 DOWNTO 0); SIGNAL fb_b : unsigned(3 DOWNTO 0);
SIGNAL fb_16b : UNSIGNED (1 DOWNTO 0); SIGNAL fb_16b : unsigned(1 DOWNTO 0);
SIGNAL st_shift_mode : UNSIGNED (1 DOWNTO 0); SIGNAL st_shift_mode : unsigned(1 DOWNTO 0);
SIGNAL st_shift_mode_cs : STD_LOGIC; SIGNAL st_shift_mode_cs : std_logic;
SIGNAL falcon_shift_mode : UNSIGNED (10 DOWNTO 0); SIGNAL falcon_shift_mode : unsigned(10 DOWNTO 0);
SIGNAL falcon_shift_mode_cs : STD_LOGIC; SIGNAL falcon_shift_mode_cs : std_logic;
SIGNAL clut_mux_av_1 : UNSIGNED (3 DOWNTO 0); SIGNAL clut_mux_av_1 : unsigned(3 DOWNTO 0);
SIGNAL clut_mux_av_0 : UNSIGNED (3 DOWNTO 0); SIGNAL clut_mux_av_0 : unsigned(3 DOWNTO 0);
SIGNAL fbee_vctr_cs : STD_LOGIC; SIGNAL fbee_vctr_cs : std_logic;
SIGNAL fbee_vctr : UNSIGNED (31 DOWNTO 0); SIGNAL fbee_vctr : unsigned(31 DOWNTO 0);
SIGNAL ccr_cs : STD_LOGIC; SIGNAL ccr_cs : std_logic;
SIGNAL ccr_i : UNSIGNED (23 DOWNTO 0); SIGNAL ccr_i : unsigned(23 DOWNTO 0);
SIGNAL fbee_video_on : STD_LOGIC; SIGNAL fbee_video_on : std_logic;
SIGNAL sys_ctr : UNSIGNED (6 DOWNTO 0); SIGNAL sys_ctr : unsigned(6 DOWNTO 0);
SIGNAL sys_ctr_cs : STD_LOGIC; SIGNAL sys_ctr_cs : std_logic;
SIGNAL vdl_lof : UNSIGNED (15 DOWNTO 0); SIGNAL vdl_lof : unsigned(15 DOWNTO 0);
SIGNAL vdl_lof_cs : STD_LOGIC; SIGNAL vdl_lof_cs : std_logic;
SIGNAL VDL_LWD : UNSIGNED (15 DOWNTO 0); SIGNAL VDL_LWD : unsigned(15 DOWNTO 0);
SIGNAL VDL_LWD_CS : STD_LOGIC; SIGNAL VDL_LWD_CS : std_logic;
-- Miscellaneous control registers: -- Miscellaneous control registers:
SIGNAL clut_ta : STD_LOGIC; -- Requires one wait state. SIGNAL clut_ta : std_logic; -- Requires one wait state.
SIGNAL hsync_i : UNSIGNED (7 DOWNTO 0); SIGNAL hsync_i : unsigned(7 DOWNTO 0);
SIGNAL hsync_len : UNSIGNED (7 DOWNTO 0); -- Length of a hsync pulse IN clk_pixel cycles. SIGNAL hsync_len : unsigned(7 DOWNTO 0); -- Length of a hsync pulse IN clk_pixel cycles.
SIGNAL hsync_start : STD_LOGIC; SIGNAL hsync_start : std_logic;
SIGNAL last : STD_LOGIC; -- Last pixel of a line indicator. SIGNAL last : std_logic; -- Last pixel of a line indicator.
SIGNAL vsync_start : STD_LOGIC; SIGNAL vsync_start : std_logic;
SIGNAL vsync_i : UNSIGNED (2 DOWNTO 0); SIGNAL vsync_i : unsigned(2 DOWNTO 0);
SIGNAL blank_i_n : STD_LOGIC; SIGNAL blank_i_n : std_logic;
SIGNAL disp_on : STD_LOGIC; SIGNAL disp_on : std_logic;
SIGNAL dpo_zl : STD_LOGIC; SIGNAL dpo_zl : std_logic;
SIGNAL dpo_on : STD_LOGIC; SIGNAL dpo_on : std_logic;
SIGNAL dpo_off : STD_LOGIC; SIGNAL dpo_off : std_logic;
SIGNAL vdtron : STD_LOGIC; SIGNAL vdtron : std_logic;
SIGNAL vdo_zl : STD_LOGIC; SIGNAL vdo_zl : std_logic;
SIGNAL vdo_on : STD_LOGIC; SIGNAL vdo_on : std_logic;
SIGNAL vdo_off : STD_LOGIC; SIGNAL vdo_off : std_logic;
SIGNAL vhcnt : UNSIGNED (11 DOWNTO 0); SIGNAL vhcnt : unsigned(11 DOWNTO 0);
SIGNAL sub_pixel_cnt : UNSIGNED (6 DOWNTO 0); SIGNAL sub_pixel_cnt : unsigned(6 DOWNTO 0);
SIGNAL vvcnt : UNSIGNED (10 DOWNTO 0); SIGNAL vvcnt : unsigned(10 DOWNTO 0);
SIGNAL verz_2 : UNSIGNED (9 DOWNTO 0); SIGNAL verz_2 : unsigned(9 DOWNTO 0);
SIGNAL verz_1 : UNSIGNED (9 DOWNTO 0); SIGNAL verz_1 : unsigned(9 DOWNTO 0);
SIGNAL verz_0 : UNSIGNED (9 DOWNTO 0); SIGNAL verz_0 : unsigned(9 DOWNTO 0);
SIGNAL border : UNSIGNED (6 DOWNTO 0); SIGNAL border : unsigned(6 DOWNTO 0);
SIGNAL border_on : STD_LOGIC; SIGNAL border_on : std_logic;
SIGNAL start_zeile : STD_LOGIC; SIGNAL start_zeile : std_logic;
SIGNAL sync_pix : STD_LOGIC; SIGNAL sync_pix : std_logic;
SIGNAL sync_pix1 : STD_LOGIC; SIGNAL sync_pix1 : std_logic;
SIGNAL sync_pix2 : STD_LOGIC; SIGNAL sync_pix2 : std_logic;
-- Legacy ATARI resolutions: -- Legacy ATARI resolutions:
SIGNAL atari_sync : STD_LOGIC; SIGNAL atari_sync : std_logic;
SIGNAL atari_hh : UNSIGNED (31 DOWNTO 0); -- Horizontal timing 640x480. SIGNAL atari_hh : unsigned(31 DOWNTO 0); -- Horizontal timing 640x480.
SIGNAL atari_hh_cs : STD_LOGIC; SIGNAL atari_hh_cs : std_logic;
SIGNAL atari_vh : UNSIGNED (31 DOWNTO 0); -- Vertical timing 640x480. SIGNAL atari_vh : unsigned(31 DOWNTO 0); -- Vertical timing 640x480.
SIGNAL atari_vh_cs : STD_LOGIC; SIGNAL atari_vh_cs : std_logic;
SIGNAL atari_hl : UNSIGNED (31 DOWNTO 0); -- Horizontal timing 320x240. SIGNAL atari_hl : unsigned(31 DOWNTO 0); -- Horizontal timing 320x240.
SIGNAL atari_hl_cs : STD_LOGIC; SIGNAL atari_hl_cs : std_logic;
SIGNAL atari_vl : UNSIGNED (31 DOWNTO 0); -- Vertical timing 320x240. SIGNAL atari_vl : unsigned(31 DOWNTO 0); -- Vertical timing 320x240.
SIGNAL atari_vl_cs : STD_LOGIC; SIGNAL atari_vl_cs : std_logic;
-- Horizontal stuff: -- Horizontal stuff:
SIGNAL border_left : UNSIGNED (11 DOWNTO 0); SIGNAL border_left : unsigned(11 DOWNTO 0);
SIGNAL hdis_start : UNSIGNED (11 DOWNTO 0); SIGNAL hdis_start : unsigned(11 DOWNTO 0);
SIGNAL hdis_end : UNSIGNED (11 DOWNTO 0); SIGNAL hdis_end : unsigned(11 DOWNTO 0);
SIGNAL border_right : UNSIGNED (11 DOWNTO 0); SIGNAL border_right : unsigned(11 DOWNTO 0);
SIGNAL hs_start : UNSIGNED (11 DOWNTO 0); SIGNAL hs_start : unsigned(11 DOWNTO 0);
SIGNAL h_total : UNSIGNED (11 DOWNTO 0); SIGNAL h_total : unsigned(11 DOWNTO 0);
SIGNAL hdis_len : UNSIGNED (11 DOWNTO 0); SIGNAL hdis_len : unsigned(11 DOWNTO 0);
SIGNAL mulf : UNSIGNED (5 DOWNTO 0); SIGNAL mulf : unsigned(5 DOWNTO 0);
SIGNAL vdl_hht : UNSIGNED (11 DOWNTO 0); SIGNAL vdl_hht : unsigned(11 DOWNTO 0);
SIGNAL vdl_hht_cs : STD_LOGIC; SIGNAL vdl_hht_cs : std_logic;
SIGNAL vdl_hbe : UNSIGNED (11 DOWNTO 0); SIGNAL vdl_hbe : unsigned(11 DOWNTO 0);
SIGNAL vdl_hbe_cs : STD_LOGIC; SIGNAL vdl_hbe_cs : std_logic;
SIGNAL vdl_hdb : UNSIGNED (11 DOWNTO 0); SIGNAL vdl_hdb : unsigned(11 DOWNTO 0);
SIGNAL vdl_hdb_cs : STD_LOGIC; SIGNAL vdl_hdb_cs : std_logic;
SIGNAL VDL_HDE : UNSIGNED (11 DOWNTO 0); SIGNAL VDL_HDE : unsigned(11 DOWNTO 0);
SIGNAL vdl_hde_cs : STD_LOGIC; SIGNAL vdl_hde_cs : std_logic;
SIGNAL vdl_hbb : UNSIGNED (11 DOWNTO 0); SIGNAL vdl_hbb : unsigned(11 DOWNTO 0);
SIGNAL vdl_hbb_cs : STD_LOGIC; SIGNAL vdl_hbb_cs : std_logic;
SIGNAL vdl_hss : UNSIGNED (11 DOWNTO 0); SIGNAL vdl_hss : unsigned(11 DOWNTO 0);
SIGNAL vdl_hss_cs : STD_LOGIC; SIGNAL vdl_hss_cs : std_logic;
-- Vertical stuff: -- Vertical stuff:
SIGNAL border_top : UNSIGNED (10 DOWNTO 0); SIGNAL border_top : unsigned(10 DOWNTO 0);
SIGNAL vdis_start : UNSIGNED (10 DOWNTO 0); SIGNAL vdis_start : unsigned(10 DOWNTO 0);
SIGNAL vdis_end : UNSIGNED (10 DOWNTO 0); SIGNAL vdis_end : unsigned(10 DOWNTO 0);
SIGNAL border_bottom : UNSIGNED (10 DOWNTO 0); SIGNAL border_bottom : unsigned(10 DOWNTO 0);
SIGNAL vs_start : UNSIGNED (10 DOWNTO 0); SIGNAL vs_start : unsigned(10 DOWNTO 0);
SIGNAL v_total : UNSIGNED (10 DOWNTO 0); SIGNAL v_total : unsigned(10 DOWNTO 0);
SIGNAL falcon_video : STD_LOGIC; SIGNAL falcon_video : std_logic;
SIGNAL st_video : STD_LOGIC; SIGNAL st_video : std_logic;
SIGNAL inter_zei_i : STD_LOGIC; SIGNAL inter_zei_i : std_logic;
SIGNAL dop_zei : STD_LOGIC; SIGNAL dop_zei : std_logic;
SIGNAL vdl_vbe : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vbe : unsigned(10 DOWNTO 0);
SIGNAL vdl_vbe_cs : STD_LOGIC; SIGNAL vdl_vbe_cs : std_logic;
SIGNAL vdl_vdb : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vdb : unsigned(10 DOWNTO 0);
SIGNAL VDL_VDB_CS : STD_LOGIC; SIGNAL VDL_VDB_CS : std_logic;
SIGNAL vdl_vde : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vde : unsigned(10 DOWNTO 0);
SIGNAL vdl_vde_cs : STD_LOGIC; SIGNAL vdl_vde_cs : std_logic;
SIGNAL vdl_vbb : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vbb : unsigned(10 DOWNTO 0);
SIGNAL vdl_vbb_cs : STD_LOGIC; SIGNAL vdl_vbb_cs : std_logic;
SIGNAL vdl_vss : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vss : unsigned(10 DOWNTO 0);
SIGNAL vdl_vss_cs : STD_LOGIC; SIGNAL vdl_vss_cs : std_logic;
SIGNAL vdl_vft : UNSIGNED (10 DOWNTO 0); SIGNAL vdl_vft : unsigned(10 DOWNTO 0);
SIGNAL vdl_vft_cs : STD_LOGIC; SIGNAL vdl_vft_cs : std_logic;
SIGNAL vdl_vct : UNSIGNED (8 DOWNTO 0); SIGNAL vdl_vct : unsigned(8 DOWNTO 0);
SIGNAL vdl_vct_cs : STD_LOGIC; SIGNAL vdl_vct_cs : std_logic;
SIGNAL vdl_vmd : UNSIGNED (3 DOWNTO 0); SIGNAL vdl_vmd : unsigned(3 DOWNTO 0);
SIGNAL vdl_vmd_cs : STD_LOGIC; SIGNAL vdl_vmd_cs : std_logic;
SIGNAL color1_i : STD_LOGIC; SIGNAL color1_i : std_logic;
SIGNAL color2_i : STD_LOGIC; SIGNAL color2_i : std_logic;
SIGNAL color4_i : STD_LOGIC; SIGNAL color4_i : std_logic;
SIGNAL color8_i : STD_LOGIC; SIGNAL color8_i : std_logic;
SIGNAL color16_i : STD_LOGIC; SIGNAL color16_i : std_logic;
SIGNAL color24_i : STD_LOGIC; SIGNAL color24_i : std_logic;
SIGNAL video_mod_ta_i : STD_LOGIC; SIGNAL video_mod_ta_i : std_logic;
SIGNAL vr_rd_i : STD_LOGIC; SIGNAL vr_rd_i : std_logic;
SIGNAL clk_pixel_i : STD_LOGIC; SIGNAL clk_pixel_i : std_logic;
SIGNAL mul1 : UNSIGNED (16 DOWNTO 0); SIGNAL mul1 : unsigned(16 DOWNTO 0);
SIGNAL mul2 : UNSIGNED (16 DOWNTO 0); SIGNAL mul2 : unsigned(16 DOWNTO 0);
SIGNAL mul3 : UNSIGNED (16 DOWNTO 0) := (OTHERS => 'Z'); SIGNAL mul3 : unsigned(16 DOWNTO 0) := (OTHERS => 'Z');
BEGIN BEGIN
vr_wr <= vr_wr_i; vr_wr <= vr_wr_i;
video_reconfig <= video_reconfig_i; video_reconfig <= video_reconfig_i;