fixed formatting
This commit is contained in:
@@ -1,15 +1,15 @@
|
|||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
---- ----
|
---- ----
|
||||||
---- This file is part of the 'Firebee' project. ----
|
---- This file is part OF the 'Firebee' project. ----
|
||||||
---- http://acp.atari.org ----
|
---- http://acp.atari.org ----
|
||||||
---- ----
|
---- ----
|
||||||
---- Description: ----
|
---- Description: ----
|
||||||
---- This design unit provides the video toplevel of the 'Firebee'----
|
---- This design unit provides the video toplevel OF the 'Firebee'----
|
||||||
---- computer. It is optimized for the use of an Altera Cyclone ----
|
---- computer. It is optimized FOR the OF an Altera Cyclone ----
|
||||||
---- FPGA (EP3C40F484). This IP-Core is based on the first edi- ----
|
---- FPGA (EP3C40F484). This IP-Core is based on the first edi- ----
|
||||||
---- tion of the Firebee configware originally provided by Fredi ----
|
---- tion OF the Firebee configware originally provided by Fredi ----
|
||||||
---- Ashwanden and Wolfgang Förster. This release is in compa- ----
|
---- Ashwanden and Wolfgang Förster. This release is IN compa- ----
|
||||||
---- rision to the first edition completely written in VHDL. ----
|
---- rision TO the first edition completely written IN VHDL. ----
|
||||||
---- ----
|
---- ----
|
||||||
---- Author(s): ----
|
---- Author(s): ----
|
||||||
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
|
---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
|
||||||
@@ -19,19 +19,19 @@
|
|||||||
---- Copyright (C) 2012 Wolfgang Förster ----
|
---- Copyright (C) 2012 Wolfgang Förster ----
|
||||||
---- ----
|
---- ----
|
||||||
---- This source file is free software; you can redistribute it ----
|
---- This source file is free software; you can redistribute it ----
|
||||||
---- and/or modify it under the terms of the GNU General Public ----
|
---- and/or modify it under the terms OF the GNU General Public ----
|
||||||
---- License as published by the Free Software Foundation; either ----
|
---- License as published by the Free Software Foundation; either ----
|
||||||
---- version 2 of the License, or (at your option) any later ----
|
---- version 2 OF the License, or (at your option) any later ----
|
||||||
---- 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 ----
|
---- ful, 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. ----
|
||||||
---- ----
|
---- ----
|
||||||
@@ -40,361 +40,361 @@
|
|||||||
-- Revision History
|
-- Revision History
|
||||||
--
|
--
|
||||||
-- Revision 2K12B 20120801 WF
|
-- Revision 2K12B 20120801 WF
|
||||||
-- Initial Release of the second edition.
|
-- Initial Release OF the second edition.
|
||||||
-- ST colours enhanced to 4 bit colour mode (STE compatibility).
|
-- ST colours enhanced TO 4 bit colour mode (STE compatibility).
|
||||||
|
|
||||||
library work;
|
LIBRARY work;
|
||||||
use work.firebee_pkg.all;
|
USE work.firebee_pkg.ALL;
|
||||||
|
|
||||||
library ieee;
|
LIBRARY IEEE;
|
||||||
use ieee.std_logic_1164.all;
|
USE IEEE.std_logic_1164.ALL;
|
||||||
use ieee.numeric_std.all;
|
USE IEEE.numeric_std.ALL;
|
||||||
|
|
||||||
entity VIDEO_SYSTEM is
|
ENTITY VIDEO_SYSTEM IS
|
||||||
port(
|
PORT (
|
||||||
CLK_MAIN : in std_logic;
|
CLK_MAIN : IN STD_LOGIC;
|
||||||
CLK_33M : in std_logic;
|
CLK_33M : IN STD_LOGIC;
|
||||||
CLK_25M : in std_logic;
|
CLK_25M : IN STD_LOGIC;
|
||||||
CLK_VIDEO : in std_logic;
|
CLK_VIDEO : IN STD_LOGIC;
|
||||||
CLK_DDR3 : in std_logic;
|
CLK_DDR3 : IN STD_LOGIC;
|
||||||
CLK_DDR2 : in std_logic;
|
CLK_DDR2 : IN STD_LOGIC;
|
||||||
CLK_DDR0 : in std_logic;
|
CLK_DDR0 : IN STD_LOGIC;
|
||||||
CLK_PIXEL : out std_logic;
|
CLK_PIXEL : OUT STD_LOGIC;
|
||||||
|
|
||||||
VR_D : in std_logic_vector(8 downto 0);
|
VR_D : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
|
||||||
VR_BUSY : in std_logic;
|
VR_BUSY : IN STD_LOGIC;
|
||||||
|
|
||||||
FB_ADR : in std_logic_vector(31 downto 0);
|
FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
FB_AD_IN : in std_logic_vector(31 downto 0);
|
FB_AD_IN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
FB_AD_OUT : out std_logic_vector(31 downto 0);
|
FB_AD_OUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
FB_AD_EN_31_16 : out std_logic; -- Hi word.
|
FB_AD_EN_31_16 : OUT STD_LOGIC; -- Hi word.
|
||||||
FB_AD_EN_15_0 : out std_logic; -- Low word.
|
FB_AD_EN_15_0 : OUT STD_LOGIC; -- Low word.
|
||||||
FB_ALE : in std_logic;
|
FB_ALE : IN STD_LOGIC;
|
||||||
FB_CSn : in std_logic_vector(3 downto 1);
|
FB_CSn : IN STD_LOGIC_VECTOR(3 DOWNTO 1);
|
||||||
FB_OEn : in std_logic;
|
FB_OEn : IN STD_LOGIC;
|
||||||
FB_WRn : in std_logic;
|
FB_WRn : IN STD_LOGIC;
|
||||||
FB_SIZE1 : in std_logic;
|
FB_SIZE1 : IN STD_LOGIC;
|
||||||
FB_SIZE0 : in std_logic;
|
FB_SIZE0 : IN STD_LOGIC;
|
||||||
|
|
||||||
VDP_IN : in std_logic_vector(63 downto 0);
|
VDP_IN : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
|
||||||
|
|
||||||
VR_RD : out std_logic;
|
VR_RD : OUT STD_LOGIC;
|
||||||
VR_WR : out std_logic;
|
VR_WR : OUT STD_LOGIC;
|
||||||
VIDEO_RECONFIG : out std_logic;
|
VIDEO_RECONFIG : OUT STD_LOGIC;
|
||||||
|
|
||||||
RED : out std_logic_vector(7 downto 0);
|
RED : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
GREEN : out std_logic_vector(7 downto 0);
|
GREEN : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
BLUE : out std_logic_vector(7 downto 0);
|
BLUE : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
VSYNC : out std_logic;
|
VSYNC : OUT STD_LOGIC;
|
||||||
HSYNC : out std_logic;
|
HSYNC : OUT STD_LOGIC;
|
||||||
SYNCn : out std_logic;
|
SYNCn : OUT STD_LOGIC;
|
||||||
BLANKn : out std_logic;
|
BLANKn : OUT STD_LOGIC;
|
||||||
|
|
||||||
PD_VGAn : out std_logic;
|
PD_VGAn : OUT STD_LOGIC;
|
||||||
VIDEO_MOD_TA : out std_logic;
|
VIDEO_MOD_TA : OUT STD_LOGIC;
|
||||||
|
|
||||||
VD_VZ : out std_logic_vector(127 downto 0);
|
VD_VZ : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
SR_FIFO_WRE : in std_logic;
|
SR_FIFO_WRE : IN STD_LOGIC;
|
||||||
SR_VDMP : in std_logic_vector(7 downto 0);
|
SR_VDMP : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
FIFO_MW : out std_logic_vector(8 downto 0);
|
FIFO_MW : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);
|
||||||
VDM_SEL : in std_logic_vector(3 downto 0);
|
VDM_SEL : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
VIDEO_RAM_CTR : out std_logic_vector(15 downto 0);
|
VIDEO_RAM_CTR : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
|
||||||
FIFO_CLR : out std_logic;
|
FIFO_CLR : OUT STD_LOGIC;
|
||||||
VDM : out std_logic_vector(3 downto 0);
|
VDM : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
|
|
||||||
BLITTER_RUN : in std_logic;
|
BLITTER_RUN : IN STD_LOGIC;
|
||||||
BLITTER_ON : out std_logic
|
BLITTER_ON : OUT STD_LOGIC
|
||||||
);
|
);
|
||||||
end entity VIDEO_SYSTEM;
|
END ENTITY VIDEO_SYSTEM;
|
||||||
|
|
||||||
architecture BEHAVIOUR of VIDEO_SYSTEM is
|
ARCHITECTURE BEHAVIOUR OF VIDEO_SYSTEM is
|
||||||
component lpm_fifo_dc0
|
COMPONENT lpm_fifo_dc0
|
||||||
port(
|
PORT(
|
||||||
aclr : in std_logic := '0';
|
aclr : IN STD_LOGIC := '0';
|
||||||
data : in std_logic_vector (127 downto 0);
|
data : IN STD_LOGIC_VECTOR (127 DOWNTO 0);
|
||||||
rdclk : in std_logic ;
|
rdclk : IN STD_LOGIC ;
|
||||||
rdreq : in std_logic ;
|
rdreq : IN STD_LOGIC ;
|
||||||
wrclk : in std_logic ;
|
wrclk : IN STD_LOGIC ;
|
||||||
wrreq : in std_logic ;
|
wrreq : IN STD_LOGIC ;
|
||||||
q : out std_logic_vector (127 downto 0);
|
q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0);
|
||||||
rdempty : out STD_LOGIC ;
|
rdempty : OUT STD_LOGIC ;
|
||||||
wrusedw : out std_logic_vector (8 downto 0)
|
wrusedw : OUT STD_LOGIC_VECTOR (8 DOWNTO 0)
|
||||||
);
|
);
|
||||||
end component;
|
END COMPONENT;
|
||||||
|
|
||||||
component lpm_fifoDZ is
|
COMPONENT lpm_fifoDZ is
|
||||||
port(
|
PORT(
|
||||||
aclr : in std_logic ;
|
aclr : IN STD_LOGIC ;
|
||||||
clock : in std_logic ;
|
clock : IN STD_LOGIC ;
|
||||||
data : in std_logic_vector (127 downto 0);
|
data : IN STD_LOGIC_VECTOR (127 DOWNTO 0);
|
||||||
rdreq : in std_logic ;
|
rdreq : IN STD_LOGIC ;
|
||||||
wrreq : in std_logic ;
|
wrreq : IN STD_LOGIC ;
|
||||||
q : out std_logic_vector (127 downto 0)
|
q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0)
|
||||||
);
|
);
|
||||||
end component;
|
END COMPONENT;
|
||||||
|
|
||||||
type CLUT_SHIFTREG_TYPE is array(0 to 7) of std_logic_vector(15 downto 0);
|
TYPE CLUT_SHIFTREG_TYPE is ARRAY(0 TO 7) OF STD_LOGIC_VECTOR(15 DOWNTO 0);
|
||||||
type CLUT_ST_TYPE is array(0 to 15) of std_logic_vector(11 downto 0);
|
TYPE CLUT_ST_TYPE is ARRAY(0 TO 15) OF STD_LOGIC_VECTOR(11 DOWNTO 0);
|
||||||
type CLUT_FA_TYPE is array(0 to 255) of std_logic_vector(17 downto 0);
|
TYPE CLUT_FA_TYPE is ARRAY(0 TO 255) OF STD_LOGIC_VECTOR(17 DOWNTO 0);
|
||||||
type CLUT_FBEE_TYPE is array(0 to 255) of std_logic_vector(23 downto 0);
|
TYPE CLUT_FBEE_TYPE is ARRAY(0 TO 255) OF STD_LOGIC_VECTOR(23 DOWNTO 0);
|
||||||
|
|
||||||
signal CLUT_FA : CLUT_FA_TYPE;
|
SIGNAL CLUT_FA : CLUT_FA_TYPE;
|
||||||
signal CLUT_FI : CLUT_FBEE_TYPE;
|
SIGNAL CLUT_FI : CLUT_FBEE_TYPE;
|
||||||
signal CLUT_ST : CLUT_ST_TYPE;
|
SIGNAL CLUT_ST : CLUT_ST_TYPE;
|
||||||
|
|
||||||
signal CLUT_FA_R : std_logic_vector(5 downto 0);
|
SIGNAL CLUT_FA_R : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
||||||
signal CLUT_FA_G : std_logic_vector(5 downto 0);
|
SIGNAL CLUT_FA_G : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
||||||
signal CLUT_FA_B : std_logic_vector(5 downto 0);
|
SIGNAL CLUT_FA_B : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
||||||
signal CLUT_FBEE_R : std_logic_vector(7 downto 0);
|
SIGNAL CLUT_FBEE_R : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CLUT_FBEE_G : std_logic_vector(7 downto 0);
|
SIGNAL CLUT_FBEE_G : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CLUT_FBEE_B : std_logic_vector(7 downto 0);
|
SIGNAL CLUT_FBEE_B : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CLUT_ST_R : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_ST_R : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_ST_G : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_ST_G : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_ST_B : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_ST_B : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
|
|
||||||
signal CLUT_FA_OUT : std_logic_vector(17 downto 0);
|
SIGNAL CLUT_FA_OUT : STD_LOGIC_VECTOR(17 DOWNTO 0);
|
||||||
signal CLUT_FBEE_OUT : std_logic_vector(23 downto 0);
|
SIGNAL CLUT_FBEE_OUT : STD_LOGIC_VECTOR(23 DOWNTO 0);
|
||||||
signal CLUT_ST_OUT : std_logic_vector(11 downto 0);
|
SIGNAL CLUT_ST_OUT : STD_LOGIC_VECTOR(11 DOWNTO 0);
|
||||||
|
|
||||||
signal CLUT_ADR : std_logic_vector(7 downto 0);
|
SIGNAL CLUT_ADR : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CLUT_ADR_A : std_logic_vector(7 downto 0);
|
SIGNAL CLUT_ADR_A : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CLUT_ADR_MUX : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_ADR_MUX : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_SHIFT_IN : std_logic_vector(5 downto 0);
|
SIGNAL CLUT_SHIFT_IN : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
||||||
|
|
||||||
signal CLUT_SHIFT_LOAD : std_logic;
|
SIGNAL CLUT_SHIFT_LOAD : STD_LOGIC;
|
||||||
signal CLUT_OFF : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_OFF : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_FBEE_RD : std_logic;
|
SIGNAL CLUT_FBEE_RD : STD_LOGIC;
|
||||||
signal CLUT_FBEE_WR : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_FBEE_WR : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_FA_RDH : std_logic;
|
SIGNAL CLUT_FA_RDH : STD_LOGIC;
|
||||||
signal CLUT_FA_RDL : std_logic;
|
SIGNAL CLUT_FA_RDL : STD_LOGIC;
|
||||||
signal CLUT_FA_WR : std_logic_vector(3 downto 0);
|
SIGNAL CLUT_FA_WR : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal CLUT_ST_RD : std_logic;
|
SIGNAL CLUT_ST_RD : STD_LOGIC;
|
||||||
signal CLUT_ST_WR : std_logic_vector(1 downto 0);
|
SIGNAL CLUT_ST_WR : STD_LOGIC_VECTOR(1 DOWNTO 0);
|
||||||
|
|
||||||
signal DATA_OUT_VIDEO_CTRL : std_logic_vector(31 downto 0);
|
SIGNAL DATA_OUT_VIDEO_CTRL : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
signal DATA_EN_H_VIDEO_CTRL : std_logic;
|
SIGNAL DATA_EN_H_VIDEO_CTRL : STD_LOGIC;
|
||||||
signal DATA_EN_L_VIDEO_CTRL : std_logic;
|
SIGNAL DATA_EN_L_VIDEO_CTRL : STD_LOGIC;
|
||||||
|
|
||||||
signal COLOR1 : std_logic;
|
SIGNAL COLOR1 : STD_LOGIC;
|
||||||
signal COLOR2 : std_logic;
|
SIGNAL COLOR2 : STD_LOGIC;
|
||||||
signal COLOR4 : std_logic;
|
SIGNAL COLOR4 : STD_LOGIC;
|
||||||
signal COLOR8 : std_logic;
|
SIGNAL COLOR8 : STD_LOGIC;
|
||||||
signal CCR : std_logic_vector(23 downto 0);
|
SIGNAL CCR : STD_LOGIC_VECTOR(23 DOWNTO 0);
|
||||||
signal CC_SEL : std_logic_vector(2 downto 0);
|
SIGNAL CC_SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);
|
||||||
|
|
||||||
signal FIFO_CLR_I : std_logic;
|
SIGNAL FIFO_CLR_I : STD_LOGIC;
|
||||||
signal DOP_FIFO_CLR : std_logic;
|
SIGNAL DOP_FIFO_CLR : STD_LOGIC;
|
||||||
signal FIFO_WRE : std_logic;
|
SIGNAL FIFO_WRE : STD_LOGIC;
|
||||||
|
|
||||||
signal FIFO_RD_REQ_128 : std_logic;
|
SIGNAL FIFO_RD_REQ_128 : STD_LOGIC;
|
||||||
signal FIFO_RD_REQ_512 : std_logic;
|
SIGNAL FIFO_RD_REQ_512 : STD_LOGIC;
|
||||||
signal FIFO_RDE : std_logic;
|
SIGNAL FIFO_RDE : STD_LOGIC;
|
||||||
signal INTER_ZEI : std_logic;
|
SIGNAL INTER_ZEI : STD_LOGIC;
|
||||||
signal FIFO_D_OUT_128 : std_logic_vector(127 downto 0);
|
SIGNAL FIFO_D_OUT_128 : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal FIFO_D_OUT_512 : std_logic_vector(127 downto 0);
|
SIGNAL FIFO_D_OUT_512 : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal FIFO_D_IN_512 : std_logic_vector(127 downto 0);
|
SIGNAL FIFO_D_IN_512 : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal FIFO_D : std_logic_vector(127 downto 0);
|
SIGNAL FIFO_D : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
|
|
||||||
signal VD_VZ_I : std_logic_vector(127 downto 0);
|
SIGNAL VD_VZ_I : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal VDM_A : std_logic_vector(127 downto 0);
|
SIGNAL VDM_A : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal VDM_B : std_logic_vector(127 downto 0);
|
SIGNAL VDM_B : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal VDM_C : std_logic_vector(127 downto 0);
|
SIGNAL VDM_C : STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
signal V_DMA_SEL : std_logic_vector(3 downto 0);
|
SIGNAL V_DMA_SEL : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
signal VDMP : std_logic_vector(7 downto 0);
|
SIGNAL VDMP : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal VDMP_I : std_logic_vector(7 downto 0);
|
SIGNAL VDMP_I : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
signal CC_24 : std_logic_vector(31 downto 0);
|
SIGNAL CC_24 : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
signal CC_16 : std_logic_vector(23 downto 0);
|
SIGNAL CC_16 : STD_LOGIC_VECTOR(23 DOWNTO 0);
|
||||||
signal CLK_PIXEL_I : std_logic;
|
SIGNAL CLK_PIXEL_I : STD_LOGIC;
|
||||||
signal VD_OUT_I : std_logic_vector(31 downto 0);
|
SIGNAL VD_OUT_I : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
signal ZR_C8 : std_logic_vector(7 downto 0);
|
SIGNAL ZR_C8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
|
|
||||||
begin
|
BEGIN
|
||||||
CLK_PIXEL <= CLK_PIXEL_I;
|
CLK_PIXEL <= CLK_PIXEL_I;
|
||||||
FIFO_CLR <= FIFO_CLR_I;
|
FIFO_CLR <= FIFO_CLR_I;
|
||||||
|
|
||||||
P_CLUT_ST_MC: process
|
P_CLUT_ST_MC: PROCESS
|
||||||
-- This is the dual ported ram for the ST colour lookup tables.
|
-- This is the dual ported ram FOR the ST colour lookup tables.
|
||||||
variable clut_fa_index : integer;
|
VARIABLE clut_fa_index : integer;
|
||||||
variable clut_st_index : integer;
|
VARIABLE clut_st_index : integer;
|
||||||
variable clut_fi_index : integer;
|
VARIABLE clut_fi_index : integer;
|
||||||
begin
|
BEGIN
|
||||||
clut_st_index := to_integer(unsigned(FB_ADR(4 downto 1)));
|
clut_st_index := TO_INTEGER(UNSIGNED(FB_ADR(4 DOWNTO 1)));
|
||||||
clut_fa_index := to_integer(unsigned(FB_ADR(9 downto 2)));
|
clut_fa_index := TO_INTEGER(UNSIGNED(FB_ADR(9 DOWNTO 2)));
|
||||||
clut_fi_index := to_integer(unsigned(FB_ADR(9 downto 2)));
|
clut_fi_index := TO_INTEGER(UNSIGNED(FB_ADR(9 DOWNTO 2)));
|
||||||
|
|
||||||
wait until rising_edge(CLK_MAIN);
|
WAIT UNTIL RISING_EDGE(CLK_MAIN);
|
||||||
if CLUT_ST_WR(0) = '1' then
|
IF CLUT_ST_WR(0) = '1' THEN
|
||||||
CLUT_ST(clut_st_index)(11 downto 8) <= FB_AD_IN(27 downto 24);
|
CLUT_ST(clut_st_index)(11 DOWNTO 8) <= FB_AD_IN(27 DOWNTO 24);
|
||||||
end if;
|
END IF;
|
||||||
if CLUT_ST_WR(1) = '1' then
|
IF CLUT_ST_WR(1) = '1' THEN
|
||||||
CLUT_ST(clut_st_index)(7 downto 0) <= FB_AD_IN(23 downto 16);
|
CLUT_ST(clut_st_index)(7 DOWNTO 0) <= FB_AD_IN(23 DOWNTO 16);
|
||||||
end if;
|
END IF;
|
||||||
|
|
||||||
if CLUT_FA_WR(0) = '1' then
|
IF CLUT_FA_WR(0) = '1' THEN
|
||||||
CLUT_FA(clut_fa_index)(17 downto 12) <= FB_AD_IN(31 downto 26);
|
CLUT_FA(clut_fa_index)(17 DOWNTO 12) <= FB_AD_IN(31 DOWNTO 26);
|
||||||
end if;
|
END IF;
|
||||||
if CLUT_FA_WR(1) = '1' then
|
IF CLUT_FA_WR(1) = '1' THEN
|
||||||
CLUT_FA(clut_fa_index)(11 downto 6) <= FB_AD_IN(23 downto 18);
|
CLUT_FA(clut_fa_index)(11 DOWNTO 6) <= FB_AD_IN(23 DOWNTO 18);
|
||||||
end if;
|
END IF;
|
||||||
if CLUT_FA_WR(3) = '1' then
|
IF CLUT_FA_WR(3) = '1' THEN
|
||||||
CLUT_FA(clut_fa_index)(5 downto 0) <= FB_AD_IN(23 downto 18);
|
CLUT_FA(clut_fa_index)(5 DOWNTO 0) <= FB_AD_IN(23 DOWNTO 18);
|
||||||
end if;
|
END IF;
|
||||||
|
|
||||||
if CLUT_FBEE_WR(1) = '1' then
|
IF CLUT_FBEE_WR(1) = '1' THEN
|
||||||
CLUT_FI(clut_fi_index)(23 downto 16) <= FB_AD_IN(23 downto 16);
|
CLUT_FI(clut_fi_index)(23 DOWNTO 16) <= FB_AD_IN(23 DOWNTO 16);
|
||||||
end if;
|
END IF;
|
||||||
if CLUT_FBEE_WR(2) = '1' then
|
IF CLUT_FBEE_WR(2) = '1' THEN
|
||||||
CLUT_FI(clut_fi_index)(15 downto 8) <= FB_AD_IN(15 downto 8);
|
CLUT_FI(clut_fi_index)(15 DOWNTO 8) <= FB_AD_IN(15 DOWNTO 8);
|
||||||
end if;
|
END IF;
|
||||||
if CLUT_FBEE_WR(3) = '1' then
|
IF CLUT_FBEE_WR(3) = '1' THEN
|
||||||
CLUT_FI(clut_fi_index)(7 downto 0) <= FB_AD_IN(7 downto 0);
|
CLUT_FI(clut_fi_index)(7 DOWNTO 0) <= FB_AD_IN(7 DOWNTO 0);
|
||||||
end if;
|
END IF;
|
||||||
--
|
--
|
||||||
CLUT_ST_OUT <= CLUT_ST(clut_st_index);
|
CLUT_ST_OUT <= CLUT_ST(clut_st_index);
|
||||||
CLUT_FA_OUT <= CLUT_FA(clut_fa_index);
|
CLUT_FA_OUT <= CLUT_FA(clut_fa_index);
|
||||||
CLUT_FBEE_OUT <= CLUT_FI(clut_fi_index);
|
CLUT_FBEE_OUT <= CLUT_FI(clut_fi_index);
|
||||||
end process P_CLUT_ST_MC;
|
END PROCESS P_CLUT_ST_MC;
|
||||||
|
|
||||||
P_CLUT_ST_PX: process
|
P_CLUT_ST_PX: PROCESS
|
||||||
variable clut_fa_index : integer;
|
VARIABLE clut_fa_index : integer;
|
||||||
variable clut_st_index : integer;
|
VARIABLE clut_st_index : integer;
|
||||||
variable clut_fi_index : integer;
|
VARIABLE clut_fi_index : integer;
|
||||||
-- This is the dual ported ram for the ST colour lookup tables.
|
-- This is the dual ported ram FOR the ST colour lookup tables.
|
||||||
begin
|
BEGIN
|
||||||
clut_st_index := to_integer(unsigned(CLUT_ADR(3 downto 0)));
|
clut_st_index := TO_INTEGER(UNSIGNED(CLUT_ADR(3 DOWNTO 0)));
|
||||||
clut_fa_index := to_integer(unsigned(CLUT_ADR));
|
clut_fa_index := TO_INTEGER(UNSIGNED(CLUT_ADR));
|
||||||
clut_fi_index := to_integer(unsigned(ZR_C8));
|
clut_fi_index := TO_INTEGER(UNSIGNED(ZR_C8));
|
||||||
|
|
||||||
wait until CLK_PIXEL_I = '1' and CLK_PIXEL_I' event;
|
WAIT UNTIL CLK_PIXEL_I = '1' and CLK_PIXEL_I' event;
|
||||||
|
|
||||||
CLUT_ST_R <= CLUT_ST(clut_st_index)(8) & CLUT_ST(clut_st_index)(11 downto 9);
|
CLUT_ST_R <= CLUT_ST(clut_st_index)(8) & CLUT_ST(clut_st_index)(11 DOWNTO 9);
|
||||||
CLUT_ST_G <= CLUT_ST(clut_st_index)(4) & CLUT_ST(clut_st_index)(7 downto 5);
|
CLUT_ST_G <= CLUT_ST(clut_st_index)(4) & CLUT_ST(clut_st_index)(7 DOWNTO 5);
|
||||||
CLUT_ST_B <= CLUT_ST(clut_st_index)(0) & CLUT_ST(clut_st_index)(3 downto 1);
|
CLUT_ST_B <= CLUT_ST(clut_st_index)(0) & CLUT_ST(clut_st_index)(3 DOWNTO 1);
|
||||||
|
|
||||||
CLUT_FA_R <= CLUT_FA(clut_fa_index)(17 downto 12);
|
CLUT_FA_R <= CLUT_FA(clut_fa_index)(17 DOWNTO 12);
|
||||||
CLUT_FA_G <= CLUT_FA(clut_fa_index)(11 downto 6);
|
CLUT_FA_G <= CLUT_FA(clut_fa_index)(11 DOWNTO 6);
|
||||||
CLUT_FA_B <= CLUT_FA(clut_fa_index)(5 downto 0);
|
CLUT_FA_B <= CLUT_FA(clut_fa_index)(5 DOWNTO 0);
|
||||||
|
|
||||||
CLUT_FBEE_R <= CLUT_FI(clut_fi_index)(23 downto 16);
|
CLUT_FBEE_R <= CLUT_FI(clut_fi_index)(23 DOWNTO 16);
|
||||||
CLUT_FBEE_G <= CLUT_FI(clut_fi_index)(15 downto 8);
|
CLUT_FBEE_G <= CLUT_FI(clut_fi_index)(15 DOWNTO 8);
|
||||||
CLUT_FBEE_B <= CLUT_FI(clut_fi_index)(7 downto 0);
|
CLUT_FBEE_B <= CLUT_FI(clut_fi_index)(7 DOWNTO 0);
|
||||||
end process P_CLUT_ST_PX;
|
END PROCESS P_CLUT_ST_PX;
|
||||||
|
|
||||||
P_VIDEO_OUT: process
|
P_VIDEO_OUT: PROCESS
|
||||||
variable VIDEO_OUT : std_logic_vector(23 downto 0);
|
VARIABLE VIDEO_OUT : STD_LOGIC_VECTOR(23 DOWNTO 0);
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_PIXEL_I);
|
WAIT UNTIL RISING_EDGE(CLK_PIXEL_I);
|
||||||
case CC_SEL is
|
CASE CC_SEL is
|
||||||
when "111" => VIDEO_OUT := CCR; -- Register type video.
|
WHEN "111" => VIDEO_OUT := CCR; -- Register TYPE video.
|
||||||
when "110" => VIDEO_OUT := CC_24(23 downto 0); -- 3 byte FIFO type video.
|
WHEN "110" => VIDEO_OUT := CC_24(23 DOWNTO 0); -- 3 byte FIFO TYPE video.
|
||||||
when "101" => VIDEO_OUT := CC_16; -- 2 byte FIFO type video.
|
WHEN "101" => VIDEO_OUT := CC_16; -- 2 byte FIFO TYPE video.
|
||||||
when "100" => VIDEO_OUT := CLUT_FBEE_R & CLUT_FBEE_G & CLUT_FBEE_B; -- Firebee type video.
|
WHEN "100" => VIDEO_OUT := CLUT_FBEE_R & CLUT_FBEE_G & CLUT_FBEE_B; -- Firebee TYPE video.
|
||||||
when "001" => VIDEO_OUT := CLUT_FA_R & "00" & CLUT_FA_G & "00" & CLUT_FA_B & "00"; -- Falcon type video.
|
WHEN "001" => VIDEO_OUT := CLUT_FA_R & "00" & CLUT_FA_G & "00" & CLUT_FA_B & "00"; -- Falcon TYPE video.
|
||||||
when "000" => VIDEO_OUT := CLUT_ST_R & x"0" & CLUT_ST_G & x"0" & CLUT_ST_B & x"0"; -- ST type video.
|
WHEN "000" => VIDEO_OUT := CLUT_ST_R & x"0" & CLUT_ST_G & x"0" & CLUT_ST_B & x"0"; -- ST TYPE video.
|
||||||
when others => VIDEO_OUT := (others => '0');
|
WHEN OTHERS => VIDEO_OUT := (OTHERS => '0');
|
||||||
end case;
|
END CASE;
|
||||||
RED <= VIDEO_OUT(23 downto 16);
|
RED <= VIDEO_OUT(23 DOWNTO 16);
|
||||||
GREEN <= VIDEO_OUT(15 downto 8);
|
GREEN <= VIDEO_OUT(15 DOWNTO 8);
|
||||||
BLUE <= VIDEO_OUT(7 downto 0);
|
BLUE <= VIDEO_OUT(7 DOWNTO 0);
|
||||||
end process P_VIDEO_OUT;
|
END PROCESS P_VIDEO_OUT;
|
||||||
|
|
||||||
P_CC: process
|
P_CC: PROCESS
|
||||||
variable CC24_I : std_logic_vector(31 downto 0);
|
VARIABLE CC24_I : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||||
variable CC_I : std_logic_vector(15 downto 0);
|
VARIABLE CC_I : STD_LOGIC_VECTOR(15 DOWNTO 0);
|
||||||
variable ZR_C8_I : std_logic_vector(7 downto 0);
|
VARIABLE ZR_C8_I : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
begin
|
BEGIN
|
||||||
wait until CLK_PIXEL_I = '1' and CLK_PIXEL_I' event;
|
WAIT UNTIL CLK_PIXEL_I = '1' and CLK_PIXEL_I' event;
|
||||||
case CLUT_ADR_MUX(1 downto 0) is
|
CASE CLUT_ADR_MUX(1 DOWNTO 0) is
|
||||||
when "11" => CC24_I := FIFO_D(31 downto 0);
|
WHEN "11" => CC24_I := FIFO_D(31 DOWNTO 0);
|
||||||
when "10" => CC24_I := FIFO_D(63 downto 32);
|
WHEN "10" => CC24_I := FIFO_D(63 DOWNTO 32);
|
||||||
when "01" => CC24_I := FIFO_D(95 downto 64);
|
WHEN "01" => CC24_I := FIFO_D(95 DOWNTO 64);
|
||||||
when "00" => CC24_I := FIFO_D(127 downto 96);
|
WHEN "00" => CC24_I := FIFO_D(127 DOWNTO 96);
|
||||||
when others => CC24_I := (others => 'Z');
|
WHEN OTHERS => CC24_I := (OTHERS => 'Z');
|
||||||
end case;
|
END CASE;
|
||||||
--
|
--
|
||||||
CC_24 <= CC24_I;
|
CC_24 <= CC24_I;
|
||||||
--
|
--
|
||||||
case CLUT_ADR_MUX(2 downto 0) is
|
CASE CLUT_ADR_MUX(2 DOWNTO 0) is
|
||||||
when "111" => CC_I := FIFO_D(15 downto 0);
|
WHEN "111" => CC_I := FIFO_D(15 DOWNTO 0);
|
||||||
when "110" => CC_I := FIFO_D(31 downto 16);
|
WHEN "110" => CC_I := FIFO_D(31 DOWNTO 16);
|
||||||
when "101" => CC_I := FIFO_D(47 downto 32);
|
WHEN "101" => CC_I := FIFO_D(47 DOWNTO 32);
|
||||||
when "100" => CC_I := FIFO_D(63 downto 48);
|
WHEN "100" => CC_I := FIFO_D(63 DOWNTO 48);
|
||||||
when "011" => CC_I := FIFO_D(79 downto 64);
|
WHEN "011" => CC_I := FIFO_D(79 DOWNTO 64);
|
||||||
when "010" => CC_I := FIFO_D(95 downto 80);
|
WHEN "010" => CC_I := FIFO_D(95 DOWNTO 80);
|
||||||
when "001" => CC_I := FIFO_D(111 downto 96);
|
WHEN "001" => CC_I := FIFO_D(111 DOWNTO 96);
|
||||||
when "000" => CC_I := FIFO_D(127 downto 112);
|
WHEN "000" => CC_I := FIFO_D(127 DOWNTO 112);
|
||||||
when others => CC_I := (others => 'X');
|
WHEN OTHERS => CC_I := (OTHERS => 'X');
|
||||||
end case;
|
END CASE;
|
||||||
--
|
--
|
||||||
CC_16 <= CC_I(15 downto 11) & "000" & CC_I(10 downto 5) & "00" & CC_I(4 downto 0) & "000";
|
CC_16 <= CC_I(15 DOWNTO 11) & "000" & CC_I(10 DOWNTO 5) & "00" & CC_I(4 DOWNTO 0) & "000";
|
||||||
--
|
--
|
||||||
case CLUT_ADR_MUX(3 downto 0) is
|
CASE CLUT_ADR_MUX(3 DOWNTO 0) is
|
||||||
when x"F" => ZR_C8_I := FIFO_D(7 downto 0);
|
WHEN x"F" => ZR_C8_I := FIFO_D(7 DOWNTO 0);
|
||||||
when x"E" => ZR_C8_I := FIFO_D(15 downto 8);
|
WHEN x"E" => ZR_C8_I := FIFO_D(15 DOWNTO 8);
|
||||||
when x"D" => ZR_C8_I := FIFO_D(23 downto 16);
|
WHEN x"D" => ZR_C8_I := FIFO_D(23 DOWNTO 16);
|
||||||
when x"C" => ZR_C8_I := FIFO_D(31 downto 24);
|
WHEN x"C" => ZR_C8_I := FIFO_D(31 DOWNTO 24);
|
||||||
when x"B" => ZR_C8_I := FIFO_D(39 downto 32);
|
WHEN x"B" => ZR_C8_I := FIFO_D(39 DOWNTO 32);
|
||||||
when x"A" => ZR_C8_I := FIFO_D(47 downto 40);
|
WHEN x"A" => ZR_C8_I := FIFO_D(47 DOWNTO 40);
|
||||||
when x"9" => ZR_C8_I := FIFO_D(55 downto 48);
|
WHEN x"9" => ZR_C8_I := FIFO_D(55 DOWNTO 48);
|
||||||
when x"8" => ZR_C8_I := FIFO_D(63 downto 56);
|
WHEN x"8" => ZR_C8_I := FIFO_D(63 DOWNTO 56);
|
||||||
when x"7" => ZR_C8_I := FIFO_D(71 downto 64);
|
WHEN x"7" => ZR_C8_I := FIFO_D(71 DOWNTO 64);
|
||||||
when x"6" => ZR_C8_I := FIFO_D(79 downto 72);
|
WHEN x"6" => ZR_C8_I := FIFO_D(79 DOWNTO 72);
|
||||||
when x"5" => ZR_C8_I := FIFO_D(87 downto 80);
|
WHEN x"5" => ZR_C8_I := FIFO_D(87 DOWNTO 80);
|
||||||
when x"4" => ZR_C8_I := FIFO_D(95 downto 88);
|
WHEN x"4" => ZR_C8_I := FIFO_D(95 DOWNTO 88);
|
||||||
when x"3" => ZR_C8_I := FIFO_D(103 downto 96);
|
WHEN x"3" => ZR_C8_I := FIFO_D(103 DOWNTO 96);
|
||||||
when x"2" => ZR_C8_I := FIFO_D(111 downto 104);
|
WHEN x"2" => ZR_C8_I := FIFO_D(111 DOWNTO 104);
|
||||||
when x"1" => ZR_C8_I := FIFO_D(119 downto 112);
|
WHEN x"1" => ZR_C8_I := FIFO_D(119 DOWNTO 112);
|
||||||
when x"0" => ZR_C8_I := FIFO_D(127 downto 120);
|
WHEN x"0" => ZR_C8_I := FIFO_D(127 DOWNTO 120);
|
||||||
when others => ZR_C8_I := (others => 'X');
|
WHEN OTHERS => ZR_C8_I := (OTHERS => 'X');
|
||||||
end case;
|
END CASE;
|
||||||
--
|
--
|
||||||
case COLOR1 is
|
CASE COLOR1 is
|
||||||
when '1' => ZR_C8 <= ZR_C8_I;
|
WHEN '1' => ZR_C8 <= ZR_C8_I;
|
||||||
when others => ZR_C8 <= "0000000" & ZR_C8_I(0);
|
WHEN OTHERS => ZR_C8 <= "0000000" & ZR_C8_I(0);
|
||||||
end case;
|
END CASE;
|
||||||
end process P_CC;
|
END PROCESS P_CC;
|
||||||
|
|
||||||
CLUT_SHIFT_IN <= CLUT_ADR_A(6 downto 1) when COLOR4 = '0' and COLOR2 = '0' else
|
CLUT_SHIFT_IN <= CLUT_ADR_A(6 DOWNTO 1) WHEN COLOR4 = '0' and COLOR2 = '0' ELSE
|
||||||
CLUT_ADR_A(7 downto 2) when COLOR4 = '0' and COLOR2 = '1' else
|
CLUT_ADR_A(7 DOWNTO 2) WHEN COLOR4 = '0' and COLOR2 = '1' ELSE
|
||||||
"00" & CLUT_ADR_A(7 downto 4) when COLOR4 = '1' and COLOR2 = '0' else "000000";
|
"00" & CLUT_ADR_A(7 DOWNTO 4) WHEN COLOR4 = '1' and COLOR2 = '0' ELSE "000000";
|
||||||
|
|
||||||
FIFO_RD_REQ_128 <= '1' when FIFO_RDE = '1' and INTER_ZEI = '1' else '0';
|
FIFO_RD_REQ_128 <= '1' WHEN FIFO_RDE = '1' and INTER_ZEI = '1' ELSE '0';
|
||||||
FIFO_RD_REQ_512 <= '1' when FIFO_RDE = '1' and INTER_ZEI = '0' else '0';
|
FIFO_RD_REQ_512 <= '1' WHEN FIFO_RDE = '1' and INTER_ZEI = '0' ELSE '0';
|
||||||
|
|
||||||
FIFO_DMUX: process
|
FIFO_DMUX: PROCESS
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_PIXEL_I);
|
WAIT UNTIL RISING_EDGE(CLK_PIXEL_I);
|
||||||
if FIFO_RDE = '1' and INTER_ZEI = '1' then
|
IF FIFO_RDE = '1' and INTER_ZEI = '1' THEN
|
||||||
FIFO_D <= FIFO_D_OUT_128;
|
FIFO_D <= FIFO_D_OUT_128;
|
||||||
elsif FIFO_RDE = '1' then
|
ELSIF FIFO_RDE = '1' THEN
|
||||||
FIFO_D <= FIFO_D_OUT_512;
|
FIFO_D <= FIFO_D_OUT_512;
|
||||||
end if;
|
END IF;
|
||||||
end process FIFO_DMUX;
|
END PROCESS FIFO_DMUX;
|
||||||
|
|
||||||
CLUT_SHIFTREGS: process
|
CLUT_SHIFTREGS: PROCESS
|
||||||
variable CLUT_SHIFTREG : CLUT_SHIFTREG_TYPE;
|
VARIABLE CLUT_SHIFTREG : CLUT_SHIFTREG_TYPE;
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_PIXEL_I);
|
WAIT UNTIL RISING_EDGE(CLK_PIXEL_I);
|
||||||
CLUT_SHIFT_LOAD <= FIFO_RDE;
|
CLUT_SHIFT_LOAD <= FIFO_RDE;
|
||||||
if CLUT_SHIFT_LOAD = '1' then
|
IF CLUT_SHIFT_LOAD = '1' THEN
|
||||||
for i in 0 to 7 loop
|
FOR i IN 0 TO 7 LOOP
|
||||||
CLUT_SHIFTREG(7 - i) := FIFO_D((i + 1) * 16 - 1 downto i * 16);
|
CLUT_SHIFTREG(7 - i) := FIFO_D((i + 1) * 16 - 1 DOWNTO i * 16);
|
||||||
end loop;
|
END LOOP;
|
||||||
else
|
ELSE
|
||||||
CLUT_SHIFTREG(7) := CLUT_SHIFTREG(7)(14 downto 0) & CLUT_ADR_A(0);
|
CLUT_SHIFTREG(7) := CLUT_SHIFTREG(7)(14 DOWNTO 0) & CLUT_ADR_A(0);
|
||||||
CLUT_SHIFTREG(6) := CLUT_SHIFTREG(6)(14 downto 0) & CLUT_ADR_A(7);
|
CLUT_SHIFTREG(6) := CLUT_SHIFTREG(6)(14 DOWNTO 0) & CLUT_ADR_A(7);
|
||||||
CLUT_SHIFTREG(5) := CLUT_SHIFTREG(5)(14 downto 0) & CLUT_SHIFT_IN(5);
|
CLUT_SHIFTREG(5) := CLUT_SHIFTREG(5)(14 DOWNTO 0) & CLUT_SHIFT_IN(5);
|
||||||
CLUT_SHIFTREG(4) := CLUT_SHIFTREG(4)(14 downto 0) & CLUT_SHIFT_IN(4);
|
CLUT_SHIFTREG(4) := CLUT_SHIFTREG(4)(14 DOWNTO 0) & CLUT_SHIFT_IN(4);
|
||||||
CLUT_SHIFTREG(3) := CLUT_SHIFTREG(3)(14 downto 0) & CLUT_SHIFT_IN(3);
|
CLUT_SHIFTREG(3) := CLUT_SHIFTREG(3)(14 DOWNTO 0) & CLUT_SHIFT_IN(3);
|
||||||
CLUT_SHIFTREG(2) := CLUT_SHIFTREG(2)(14 downto 0) & CLUT_SHIFT_IN(2);
|
CLUT_SHIFTREG(2) := CLUT_SHIFTREG(2)(14 DOWNTO 0) & CLUT_SHIFT_IN(2);
|
||||||
CLUT_SHIFTREG(1) := CLUT_SHIFTREG(1)(14 downto 0) & CLUT_SHIFT_IN(1);
|
CLUT_SHIFTREG(1) := CLUT_SHIFTREG(1)(14 DOWNTO 0) & CLUT_SHIFT_IN(1);
|
||||||
CLUT_SHIFTREG(0) := CLUT_SHIFTREG(0)(14 downto 0) & CLUT_SHIFT_IN(0);
|
CLUT_SHIFTREG(0) := CLUT_SHIFTREG(0)(14 DOWNTO 0) & CLUT_SHIFT_IN(0);
|
||||||
end if;
|
END IF;
|
||||||
--
|
--
|
||||||
for i in 0 to 7 loop
|
FOR i IN 0 TO 7 LOOP
|
||||||
CLUT_ADR_A(i) <= CLUT_SHIFTREG(i)(15);
|
CLUT_ADR_A(i) <= CLUT_SHIFTREG(i)(15);
|
||||||
end loop;
|
END LOOP;
|
||||||
end process CLUT_SHIFTREGS;
|
END PROCESS CLUT_SHIFTREGS;
|
||||||
|
|
||||||
CLUT_ADR(7) <= CLUT_OFF(3) or (CLUT_ADR_A(7) and COLOR8);
|
CLUT_ADR(7) <= CLUT_OFF(3) or (CLUT_ADR_A(7) and COLOR8);
|
||||||
CLUT_ADR(6) <= CLUT_OFF(2) or (CLUT_ADR_A(6) and COLOR8);
|
CLUT_ADR(6) <= CLUT_OFF(2) or (CLUT_ADR_A(6) and COLOR8);
|
||||||
@@ -405,77 +405,77 @@ begin
|
|||||||
CLUT_ADR(1) <= CLUT_ADR_A(1) and (COLOR8 or COLOR4 or COLOR2);
|
CLUT_ADR(1) <= CLUT_ADR_A(1) and (COLOR8 or COLOR4 or COLOR2);
|
||||||
CLUT_ADR(0) <= CLUT_ADR_A(0);
|
CLUT_ADR(0) <= CLUT_ADR_A(0);
|
||||||
|
|
||||||
FB_AD_OUT <= x"0" & CLUT_ST_OUT & x"0000" when CLUT_ST_RD = '1' else
|
FB_AD_OUT <= x"0" & CLUT_ST_OUT & x"0000" WHEN CLUT_ST_RD = '1' ELSE
|
||||||
CLUT_FA_OUT(17 downto 12) & "00" & CLUT_FA_OUT(11 downto 6) & "00" & x"0000" when CLUT_FA_RDH = '1' else
|
CLUT_FA_OUT(17 DOWNTO 12) & "00" & CLUT_FA_OUT(11 DOWNTO 6) & "00" & x"0000" WHEN CLUT_FA_RDH = '1' ELSE
|
||||||
x"00" & CLUT_FA_OUT(5 downto 0) & "00" & x"0000" when CLUT_FA_RDL = '1' else
|
x"00" & CLUT_FA_OUT(5 DOWNTO 0) & "00" & x"0000" WHEN CLUT_FA_RDL = '1' ELSE
|
||||||
x"00" & CLUT_FBEE_OUT when CLUT_FBEE_RD = '1' else
|
x"00" & CLUT_FBEE_OUT WHEN CLUT_FBEE_RD = '1' ELSE
|
||||||
DATA_OUT_VIDEO_CTRL when DATA_EN_H_VIDEO_CTRL = '1' else -- Use upper word.
|
DATA_OUT_VIDEO_CTRL WHEN DATA_EN_H_VIDEO_CTRL = '1' ELSE -- Use upper word.
|
||||||
DATA_OUT_VIDEO_CTRL when DATA_EN_L_VIDEO_CTRL = '1' else (others => '0'); -- Use lower word.
|
DATA_OUT_VIDEO_CTRL WHEN DATA_EN_L_VIDEO_CTRL = '1' ELSE (OTHERS => '0'); -- Use lower word.
|
||||||
|
|
||||||
FB_AD_EN_31_16 <= '1' when CLUT_FBEE_RD = '1' else
|
FB_AD_EN_31_16 <= '1' WHEN CLUT_FBEE_RD = '1' ELSE
|
||||||
'1' when CLUT_FA_RDH = '1' else
|
'1' WHEN CLUT_FA_RDH = '1' ELSE
|
||||||
'1' when DATA_EN_H_VIDEO_CTRL = '1' else '0';
|
'1' WHEN DATA_EN_H_VIDEO_CTRL = '1' ELSE '0';
|
||||||
|
|
||||||
FB_AD_EN_15_0 <= '1' when CLUT_FBEE_RD = '1' else
|
FB_AD_EN_15_0 <= '1' WHEN CLUT_FBEE_RD = '1' ELSE
|
||||||
'1' when CLUT_FA_RDL = '1' else
|
'1' WHEN CLUT_FA_RDL = '1' ELSE
|
||||||
'1' when DATA_EN_L_VIDEO_CTRL = '1' else '0';
|
'1' WHEN DATA_EN_L_VIDEO_CTRL = '1' ELSE '0';
|
||||||
|
|
||||||
VD_VZ <= VD_VZ_I;
|
VD_VZ <= VD_VZ_I;
|
||||||
|
|
||||||
DFF_CLK0: process
|
DFF_CLK0: PROCESS
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_DDR0);
|
WAIT UNTIL RISING_EDGE(CLK_DDR0);
|
||||||
VD_VZ_I <= VD_VZ_I(63 downto 0) & VDP_IN(63 downto 0);
|
VD_VZ_I <= VD_VZ_I(63 DOWNTO 0) & VDP_IN(63 DOWNTO 0);
|
||||||
|
|
||||||
if FIFO_WRE = '1' then
|
IF FIFO_WRE = '1' THEN
|
||||||
VDM_A <= VD_VZ_I;
|
VDM_A <= VD_VZ_I;
|
||||||
VDM_B <= VDM_A;
|
VDM_B <= VDM_A;
|
||||||
end if;
|
END IF;
|
||||||
end process DFF_CLK0;
|
END PROCESS DFF_CLK0;
|
||||||
|
|
||||||
DFF_CLK2: process
|
DFF_CLK2: PROCESS
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_DDR2);
|
WAIT UNTIL RISING_EDGE(CLK_DDR2);
|
||||||
VDMP <= SR_VDMP;
|
VDMP <= SR_VDMP;
|
||||||
end process DFF_CLK2;
|
END PROCESS DFF_CLK2;
|
||||||
|
|
||||||
DFF_CLK3: process
|
DFF_CLK3: PROCESS
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_DDR3);
|
WAIT UNTIL RISING_EDGE(CLK_DDR3);
|
||||||
VDMP_I <= VDMP;
|
VDMP_I <= VDMP;
|
||||||
end process DFF_CLK3;
|
END PROCESS DFF_CLK3;
|
||||||
|
|
||||||
VDM <= VDMP_I(7 downto 4) when CLK_DDR3 = '1' else VDMP_I(3 downto 0);
|
VDM <= VDMP_I(7 DOWNTO 4) WHEN CLK_DDR3 = '1' ELSE VDMP_I(3 DOWNTO 0);
|
||||||
|
|
||||||
SHIFT_CLK0: process
|
SHIFT_CLK0: PROCESS
|
||||||
variable TMP : std_logic_vector(4 downto 0);
|
VARIABLE TMP : STD_LOGIC_VECTOR(4 DOWNTO 0);
|
||||||
begin
|
BEGIN
|
||||||
wait until rising_edge(CLK_DDR0);
|
WAIT UNTIL RISING_EDGE(CLK_DDR0);
|
||||||
TMP := SR_FIFO_WRE & TMP(4 downto 1);
|
TMP := SR_FIFO_WRE & TMP(4 DOWNTO 1);
|
||||||
FIFO_WRE <= TMP(0);
|
FIFO_WRE <= TMP(0);
|
||||||
end process SHIFT_CLK0;
|
END PROCESS SHIFT_CLK0;
|
||||||
|
|
||||||
with VDM_SEL select
|
with VDM_SEL select
|
||||||
VDM_C <= VDM_B when x"0",
|
VDM_C <= VDM_B WHEN x"0",
|
||||||
VDM_B(119 downto 0) & VDM_A(127 downto 120) when x"1",
|
VDM_B(119 DOWNTO 0) & VDM_A(127 DOWNTO 120) WHEN x"1",
|
||||||
VDM_B(111 downto 0) & VDM_A(127 downto 112) when x"2",
|
VDM_B(111 DOWNTO 0) & VDM_A(127 DOWNTO 112) WHEN x"2",
|
||||||
VDM_B(103 downto 0) & VDM_A(127 downto 104) when x"3",
|
VDM_B(103 DOWNTO 0) & VDM_A(127 DOWNTO 104) WHEN x"3",
|
||||||
VDM_B(95 downto 0) & VDM_A(127 downto 96) when x"4",
|
VDM_B(95 DOWNTO 0) & VDM_A(127 DOWNTO 96) WHEN x"4",
|
||||||
VDM_B(87 downto 0) & VDM_A(127 downto 88) when x"5",
|
VDM_B(87 DOWNTO 0) & VDM_A(127 DOWNTO 88) WHEN x"5",
|
||||||
VDM_B(79 downto 0) & VDM_A(127 downto 80) when x"6",
|
VDM_B(79 DOWNTO 0) & VDM_A(127 DOWNTO 80) WHEN x"6",
|
||||||
VDM_B(71 downto 0) & VDM_A(127 downto 72) when x"7",
|
VDM_B(71 DOWNTO 0) & VDM_A(127 DOWNTO 72) WHEN x"7",
|
||||||
VDM_B(63 downto 0) & VDM_A(127 downto 64) when x"8",
|
VDM_B(63 DOWNTO 0) & VDM_A(127 DOWNTO 64) WHEN x"8",
|
||||||
VDM_B(55 downto 0) & VDM_A(127 downto 56) when x"9",
|
VDM_B(55 DOWNTO 0) & VDM_A(127 DOWNTO 56) WHEN x"9",
|
||||||
VDM_B(47 downto 0) & VDM_A(127 downto 48) when x"A",
|
VDM_B(47 DOWNTO 0) & VDM_A(127 DOWNTO 48) WHEN x"A",
|
||||||
VDM_B(39 downto 0) & VDM_A(127 downto 40) when x"B",
|
VDM_B(39 DOWNTO 0) & VDM_A(127 DOWNTO 40) WHEN x"B",
|
||||||
VDM_B(31 downto 0) & VDM_A(127 downto 32) when x"C",
|
VDM_B(31 DOWNTO 0) & VDM_A(127 DOWNTO 32) WHEN x"C",
|
||||||
VDM_B(23 downto 0) & VDM_A(127 downto 24) when x"D",
|
VDM_B(23 DOWNTO 0) & VDM_A(127 DOWNTO 24) WHEN x"D",
|
||||||
VDM_B(15 downto 0) & VDM_A(127 downto 16) when x"E",
|
VDM_B(15 DOWNTO 0) & VDM_A(127 DOWNTO 16) WHEN x"E",
|
||||||
VDM_B(7 downto 0) & VDM_A(127 downto 8) when x"F",
|
VDM_B(7 DOWNTO 0) & VDM_A(127 DOWNTO 8) WHEN x"F",
|
||||||
(others => 'X') when others;
|
(OTHERS => 'X') WHEN OTHERS;
|
||||||
|
|
||||||
I_FIFO_DC0: lpm_fifo_dc0
|
I_FIFO_DC0: lpm_fifo_dc0
|
||||||
port map(
|
PORT map(
|
||||||
aclr => FIFO_CLR_I,
|
aclr => FIFO_CLR_I,
|
||||||
data => VDM_C,
|
data => VDM_C,
|
||||||
rdclk => CLK_PIXEL_I,
|
rdclk => CLK_PIXEL_I,
|
||||||
@@ -483,12 +483,12 @@ begin
|
|||||||
wrclk => CLK_DDR0,
|
wrclk => CLK_DDR0,
|
||||||
wrreq => FIFO_WRE,
|
wrreq => FIFO_WRE,
|
||||||
q => FIFO_D_OUT_512,
|
q => FIFO_D_OUT_512,
|
||||||
--rdempty =>, -- Not used.
|
--rdempty =>, -- Not d.
|
||||||
wrusedw => FIFO_MW
|
wrusedw => FIFO_MW
|
||||||
);
|
);
|
||||||
|
|
||||||
I_FIFO_DZ: lpm_fifoDZ
|
I_FIFO_DZ: lpm_fifoDZ
|
||||||
port map(
|
PORT map(
|
||||||
aclr => DOP_FIFO_CLR,
|
aclr => DOP_FIFO_CLR,
|
||||||
clock => CLK_PIXEL_I,
|
clock => CLK_PIXEL_I,
|
||||||
data => FIFO_D_OUT_512,
|
data => FIFO_D_OUT_512,
|
||||||
@@ -498,7 +498,7 @@ begin
|
|||||||
);
|
);
|
||||||
|
|
||||||
I_VIDEO_CTRL: VIDEO_CTRL
|
I_VIDEO_CTRL: VIDEO_CTRL
|
||||||
port map(
|
PORT map(
|
||||||
CLK_MAIN => CLK_MAIN,
|
CLK_MAIN => CLK_MAIN,
|
||||||
FB_CSn(1) => FB_CSn(1),
|
FB_CSn(1) => FB_CSn(1),
|
||||||
FB_CSn(2) => FB_CSn(2),
|
FB_CSn(2) => FB_CSn(2),
|
||||||
@@ -549,4 +549,4 @@ begin
|
|||||||
DATA_EN_H => DATA_EN_H_VIDEO_CTRL,
|
DATA_EN_H => DATA_EN_H_VIDEO_CTRL,
|
||||||
DATA_EN_L => DATA_EN_L_VIDEO_CTRL
|
DATA_EN_L => DATA_EN_L_VIDEO_CTRL
|
||||||
);
|
);
|
||||||
end architecture;
|
END ARCHITECTURE;
|
||||||
|
|||||||
Reference in New Issue
Block a user