repo2/eclaireXL_ITX/atari800core_eclaireXLproto.vhd
479 | markw | ---------------------------------------------------------------------------
|
|
-- (c) 2013 mark watson
|
|||
-- I am happy for anyone to use this for non-commercial use.
|
|||
-- If my vhdl files are used commercially or otherwise sold,
|
|||
-- please contact me for explicit permission at scrameta (gmail).
|
|||
-- This applies for source and binary form and derived works.
|
|||
---------------------------------------------------------------------------
|
|||
LIBRARY ieee;
|
|||
USE ieee.std_logic_1164.all;
|
|||
use ieee.numeric_std.all;
|
|||
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
|
|||
LIBRARY work;
|
|||
ENTITY atari800core_eclaireXLproto IS
|
|||
GENERIC
|
|||
(
|
|||
hdmiOnGPIO : integer := 0;
|
|||
internal_rom : integer := 1; -- if 0 expects it in sdram,is 1:16k os+basic, is 2:... TODO
|
|||
internal_ram : integer := 16384 -- at start of memory map
|
|||
);
|
|||
PORT
|
|||
(
|
|||
CLOCK_5 : IN STD_LOGIC;
|
|||
PS2CLK : IN STD_LOGIC;
|
|||
PS2DAT : IN STD_LOGIC;
|
|||
GPIOA : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0);
|
|||
GPIOB : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0);
|
|||
GPIOC: INOUT STD_LOGIC_VECTOR(35 DOWNTO 0);
|
|||
DRAM_BA_0 : OUT STD_LOGIC;
|
|||
DRAM_BA_1 : OUT STD_LOGIC;
|
|||
DRAM_CS_N : OUT STD_LOGIC;
|
|||
DRAM_RAS_N : OUT STD_LOGIC;
|
|||
DRAM_CAS_N : OUT STD_LOGIC;
|
|||
DRAM_WE_N : OUT STD_LOGIC;
|
|||
DRAM_LDQM : OUT STD_LOGIC;
|
|||
DRAM_UDQM : OUT STD_LOGIC;
|
|||
DRAM_CLK : OUT STD_LOGIC;
|
|||
DRAM_CKE : OUT STD_LOGIC;
|
|||
DRAM_ADDR : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
|
|||
DRAM_DQ : INOUT STD_LOGIC_VECTOR(15 DOWNTO 0);
|
|||
SD_WRITEPROTECT : IN STD_LOGIC;
|
|||
SD_DETECT : IN STD_LOGIC;
|
|||
SD_DAT1 : OUT STD_LOGIC;
|
|||
SD_DAT0 : IN STD_LOGIC;
|
|||
SD_CLK : OUT STD_LOGIC;
|
|||
SD_CMD : OUT STD_LOGIC;
|
|||
SD_DAT3 : OUT STD_LOGIC;
|
|||
SD_DAT2 : OUT STD_LOGIC;
|
|||
VGA_VS : OUT STD_LOGIC;
|
|||
VGA_HS : OUT STD_LOGIC;
|
|||
VGA_B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
VGA_G : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
VGA_R : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
VGA_BLANK_N : OUT STD_LOGIC;
|
|||
VGA_CLK : OUT STD_LOGIC;
|
|||
AUDIO_LEFT : OUT STD_LOGIC;
|
|||
AUDIO_RIGHT : OUT STD_LOGIC;
|
|||
USB2DM: INOUT STD_LOGIC;
|
|||
USB2DP: INOUT STD_LOGIC;
|
|||
USB1DM: INOUT STD_LOGIC;
|
|||
USB1DP: INOUT STD_LOGIC;
|
|||
ADC_SDA: INOUT STD_LOGIC;
|
|||
ADC_SCL: INOUT STD_LOGIC
|
|||
);
|
|||
END atari800core_eclaireXLproto;
|
|||
ARCHITECTURE vhdl OF atari800core_eclaireXLproto IS
|
|||
component pll_gclk
|
|||
port (
|
|||
refclk : in std_logic := '0'; -- refclk.clk
|
|||
rst : in std_logic := '0'; -- reset.reset
|
|||
outclk_0 : out std_logic -- outclk0.clk
|
|||
);
|
|||
end component;
|
|||
signal ADAPTCLOCK_50 : std_logic;
|
|||
signal POTRESET : std_logic;
|
|||
signal TRIG : std_logic_vector(1 downto 0);
|
|||
signal POTIN : std_logic_vector(3 downto 0);
|
|||
signal VGA_Rint : std_logic_vector(7 downto 0);
|
|||
signal VGA_Bint : std_logic_vector(7 downto 0);
|
|||
BEGIN
|
|||
newboard : work.atari800core_eclaireXL
|
|||
GENERIC MAP
|
|||
(
|
|||
internal_rom => internal_rom,
|
|||
internal_ram => internal_ram
|
|||
)
|
|||
PORT MAP
|
|||
(
|
|||
CLOCK_50 => ADAPTCLOCK_50,
|
|||
GPIOA => open,
|
|||
EXP => open,
|
|||
PBI_A(15) => GPIOB(31),
|
|||
PBI_A(14) => GPIOB(30),
|
|||
PBI_A(13) => GPIOB(29),
|
|||
PBI_A(12) => GPIOB(11),
|
|||
PBI_A(11) => GPIOB(5),
|
|||
PBI_A(10) => GPIOB(4),
|
|||
PBI_A(9) => GPIOB(13),
|
|||
PBI_A(8) => GPIOB(15),
|
|||
PBI_A(7) => GPIOB(17),
|
|||
PBI_A(6) => GPIOB(19),
|
|||
PBI_A(5) => GPIOB(21),
|
|||
PBI_A(4) => GPIOB(23),
|
|||
PBI_A(3) => GPIOB(25),
|
|||
PBI_A(2) => GPIOB(24),
|
|||
PBI_A(1) => GPIOB(22),
|
|||
PBI_A(0) => GPIOB(20),
|
|||
PBI_D(7) => GPIOB(7),
|
|||
PBI_D(6) => GPIOB(8),
|
|||
PBI_D(5) => GPIOB(16),
|
|||
PBI_D(4) => GPIOB(18),
|
|||
PBI_D(3) => GPIOB(9),
|
|||
PBI_D(2) => GPIOB(14),
|
|||
PBI_D(1) => GPIOB(12),
|
|||
PBI_D(0) => GPIOB(10),
|
|||
PBI_CLK => GPIOB(1),
|
|||
PBI_RW_N => GPIOB(3),
|
|||
PBI_EXTSEL_N => GPIOB(28),
|
|||
PBI_MPD_N => GPIOB(32),
|
|||
PBI_REF_N => GPIOB(33),
|
|||
PBI_IRQ_N => GPIOB(34),
|
|||
PBI_RST_N => GPIOB(35),
|
|||
CART_S4_N => GPIOB(27),
|
|||
CART_S5_N => GPIOB(6),
|
|||
CART_RD4 => GPIOB(26),
|
|||
CART_RD5 => GPIOB(2),
|
|||
CART_CCTL_N => GPIOB(0),
|
|||
SIO_CLOCKIN => GPIOA(7),
|
|||
SIO_CLOCKOUT => GPIOA(6),
|
|||
SIO_IN => GPIOA(5),
|
|||
SIO_IRQ => GPIOA(0),
|
|||
SIO_OUT => GPIOA(4),
|
|||
SIO_COMMAND => GPIOA(1),
|
|||
SIO_PROCEED => GPIOA(2),
|
|||
SIO_MOTOR_RAW => GPIOA(3),
|
|||
SER_CMD => open,
|
|||
SER_TX => open,
|
|||
SER_RX => '1',
|
|||
PORTA(7) => GPIOA(8),
|
|||
PORTA(6) => GPIOA(9),
|
|||
PORTA(5) => GPIOA(10),
|
|||
PORTA(4) => GPIOA(11),
|
|||
PORTA(3) => GPIOA(17),
|
|||
PORTA(2) => GPIOA(18),
|
|||
PORTA(1) => GPIOA(19),
|
|||
PORTA(0) => GPIOA(20),
|
|||
TRIG => TRIG,
|
|||
POTIN => POTIN,
|
|||
POTRESET => POTRESET,
|
|||
DRAM_BA_0 => DRAM_BA_0,
|
|||
DRAM_BA_1 => DRAM_BA_1,
|
|||
DRAM_CS_N => DRAM_CS_N,
|
|||
DRAM_RAS_N => DRAM_RAS_N,
|
|||
DRAM_CAS_N => DRAM_CAS_N,
|
|||
DRAM_WE_N => DRAM_WE_N,
|
|||
DRAM_LDQM => DRAM_LDQM,
|
|||
DRAM_UDQM => DRAM_UDQM,
|
|||
DRAM_CLK => DRAM_CLK,
|
|||
DRAM_CKE => DRAM_CKE,
|
|||
DRAM_ADDR => DRAM_ADDR,
|
|||
DRAM_DQ => DRAM_DQ,
|
|||
SD_WRITEPROTECT => SD_WRITEPROTECT,
|
|||
SD_DETECT => SD_DETECT,
|
|||
SD_DAT1 => SD_DAT1,
|
|||
SD_DAT0 => SD_DAT0,
|
|||
SD_CLK => SD_CLK,
|
|||
SD_CMD => SD_CMD,
|
|||
SD_DAT3 => SD_DAT3,
|
|||
SD_DAT2 => SD_DAT2,
|
|||
VGA_VS => VGA_VS,
|
|||
VGA_HS => VGA_HS,
|
|||
VGA_B => VGA_Bint,
|
|||
VGA_G => VGA_G,
|
|||
VGA_R => VGA_Rint,
|
|||
VGA_BLANK_N => VGA_BLANK_N,
|
|||
VGA_CLK => VGA_CLK,
|
|||
AUDIO_LEFT => AUDIO_LEFT,
|
|||
AUDIO_RIGHT => AUDIO_RIGHT,
|
|||
USB2DM => USB2DM,
|
|||
USB2DP => USB2DP,
|
|||
USB1DM => USB1DM,
|
|||
USB1DP => USB1DP,
|
|||
ADC_SDA => open,
|
|||
ADC_SCL => open
|
|||
);
|
|||
TRIG <= GPIOA(12)&GPIOA(21);
|
|||
GPIOA(12) <= 'Z';
|
|||
GPIOA(21) <= 'Z';
|
|||
POTIN <= GPIOA(13)&GPIOA(14)&GPIOA(15)&GPIOA(16);
|
|||
GPIOA(16 downto 13) <= "0000" when POTRESET='1' else "ZZZZ";
|
|||
gen_no_hdmi : if hdmiOnGPIO=0 generate
|
|||
VGA_R <= VGA_Rint;
|
|||
VGA_B <= VGA_Bint;
|
|||
end generate gen_no_hdmi;
|
|||
gen_hdmi : if hdmiOnGPIO=1 generate
|
|||
VGA_R(7) <= VGA_Rint(7);
|
|||
VGA_R(6) <= VGA_Rint(6);
|
|||
VGA_R(5) <= VGA_Rint(5);
|
|||
--VGA_R(4) <= VGA_Rint(4);
|
|||
--VGA_R(3) <= VGA_Rint(3);
|
|||
VGA_R(2) <= VGA_Rint(2);
|
|||
--VGA_R(1) <= VGA_Rint(1);
|
|||
--VGA_R(0) <= VGA_Rint(0);
|
|||
VGA_B(7) <= VGA_Bint(7);
|
|||
--VGA_B(6) <= VGA_Bint(6);
|
|||
--VGA_B(5) <= VGA_Bint(5);
|
|||
--VGA_B(4) <= VGA_Bint(4);
|
|||
VGA_B(3) <= VGA_Bint(3);
|
|||
VGA_B(2) <= VGA_Bint(2);
|
|||
--VGA_B(1) <= VGA_Bint(1);
|
|||
VGA_B(0) <= VGA_Bint(0);
|
|||
GPIOC(1) <= VGA_Rint(0); -- D2P
|
|||
GPIOC(2) <= VGA_Rint(1); -- D2N
|
|||
GPIOC(3) <= VGA_Rint(4); -- D1P
|
|||
GPIOC(4) <= VGA_Rint(3); -- D1N
|
|||
GPIOC(12) <= VGA_Bint(1); -- D0N
|
|||
GPIOC(13) <= VGA_Bint(4); -- D0P
|
|||
GPIOC(14) <= VGA_Bint(5); -- C N
|
|||
GPIOC(15) <= VGA_Bint(6); -- C P
|
|||
end generate gen_hdmi;
|
|||
pll_gclk_inst : pll_gclk -- upscale clock from 5 to 50MHz and put on global clock line - so we can use more plls and fractional features!
|
|||
PORT MAP(refclk => CLOCK_5,
|
|||
outclk_0 => ADAPTCLOCK_50);
|
|||
END vhdl;
|