hdet/fpga/src/sig/dvi2ddr.vhd

113 lines
3.7 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library work;
use work.dvi_package.all;
library UNISIM;
use UNISIM.Vcomponents.all;
entity dvi2ddr is
port (
clk : in std_logic;
rst : in std_logic;
ctrl_disable_wr : in std_logic;
rx_tmds : in std_logic_vector(3 downto 0);
rx_tmds_n : in std_logic_vector(3 downto 0);
-- memory interface
ddr2_cmd_en_o : out std_logic;
ddr2_cmd_instr_o : out std_logic_vector( 2 downto 0);
ddr2_cmd_bl_o : out std_logic_vector( 5 downto 0);
ddr2_cmd_byte_addr_o : out std_logic_vector(29 downto 0);
ddr2_cmd_empty_i : in std_logic;
ddr2_cmd_full_i : in std_logic;
ddr2_wr_en_o : out std_logic;
ddr2_wr_mask_o : out std_logic_vector( 3 downto 0);
ddr2_wr_data_o : out std_logic_vector(31 downto 0);
ddr2_wr_full_i : in std_logic;
ddr2_wr_empty_i : in std_logic;
ddr2_wr_count_i : in std_logic_vector( 6 downto 0);
ddr2_wr_underrun_i : in std_logic;
ddr2_wr_error_i : in std_logic
);
end dvi2ddr;
architecture dvi2ddr of dvi2ddr is
signal rx_tmds_s : std_logic_vector(3 downto 0);
signal rx_color : color_t(COLOR_CNT-1 downto 0);
signal rx_color_en : std_logic;
signal rx_pll_lckd : std_logic;
signal rx_rst_n : std_logic;
signal rx_pclk : std_logic;
signal rx_hsync : std_logic;
signal rx_vsync : std_logic;
begin
-- ----------------------------------------------------------------------------
-- HDMI to DDR2
-- ----------------------------------------------------------------------------
dvi_decoder_0: entity work.dvi_decoder
port map (
ext_rst => rst,
tmdsclk_p => rx_tmds(3),
tmdsclk_n => rx_tmds_n(3),
din_p => rx_tmds(2 downto 0),
din_n => rx_tmds_n(2 downto 0),
reset_n => rx_rst_n, -- rx reset
pclk_o => rx_pclk, -- regenerated pixel clock
pclkx2_o => open, -- double rate pixel clock
pclkx10_o => open, -- 10x pixel as IOCLK
pll_lckd_o => rx_pll_lckd, -- send pll_lckd out so it can be fed into a different BUFPLL
serdesstrobe_o => open, -- BUFPLL serdesstrobe output
tmdsclk_o => open, -- TMDS cable clock
hsync_o => rx_hsync, -- hsync data
vsync_o => rx_vsync, -- vsync data
valid_o => open,
ready_o => open,
psalgnerr_o => open,
sdout_o => open,
dat_en_o => rx_color_en, -- data enable
color_o => rx_color
);
sig_write_0: entity work.sig_write
generic map (MEM_START_ADR => "00" & x"0000000")
port map (
clk => rx_pclk,
rst_n => rx_rst_n,
ctrl_disable_wr => ctrl_disable_wr,
-- memory interface
ddr2_clk => clk,
ddr2_cmd_en_o => ddr2_cmd_en_o,
ddr2_cmd_instr_o => ddr2_cmd_instr_o,
ddr2_cmd_bl_o => ddr2_cmd_bl_o,
ddr2_cmd_byte_addr_o => ddr2_cmd_byte_addr_o,
ddr2_cmd_empty_i => ddr2_cmd_empty_i,
ddr2_cmd_full_i => ddr2_cmd_full_i,
ddr2_wr_en_o => ddr2_wr_en_o,
ddr2_wr_mask_o => ddr2_wr_mask_o,
ddr2_wr_data_o => ddr2_wr_data_o,
ddr2_wr_full_i => ddr2_wr_full_i,
ddr2_wr_empty_i => ddr2_wr_empty_i,
ddr2_wr_count_i => ddr2_wr_count_i,
ddr2_wr_underrun_i => ddr2_wr_underrun_i,
ddr2_wr_error_i => ddr2_wr_error_i,
-- display output
hsync_i => rx_hsync,
vsync_i => rx_vsync,
color_en_i => rx_color_en,
color_i => rx_color
);
end dvi2ddr;