summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--spartan6/hp_lcd_driver/Makefile31
-rw-r--r--spartan6/hp_lcd_driver/hp_lcd_driver.ucf19
-rw-r--r--spartan6/hp_lcd_driver/hp_lcd_driver.vhdl77
-rw-r--r--spartan6/hp_lcd_driver/input_formatter.vhdl113
-rw-r--r--spartan6/hp_lcd_driver/output_formatter.vhdl2
-rw-r--r--spartan6/hp_lcd_driver/output_stage.vhdl6
-rw-r--r--spartan6/hp_lcd_driver/pll_50_80.xco269
-rw-r--r--spartan6/hp_lcd_driver/pll_50_p10_p2_p.xco269
-rw-r--r--spartan6/hp_lcd_driver/tmds_output.vhdl26
9 files changed, 137 insertions, 675 deletions
diff --git a/spartan6/hp_lcd_driver/Makefile b/spartan6/hp_lcd_driver/Makefile
index 39963a2..e1beea7 100644
--- a/spartan6/hp_lcd_driver/Makefile
+++ b/spartan6/hp_lcd_driver/Makefile
@@ -1,14 +1,17 @@
include relpath.mk
+XILNXD_LICENSE_FILE:=${PWD}/xilinx_ise_vivado_license.lic
+export XILINXD_LICENSE_FILE
PART=xc6slx9-2-tqg144
TOP=hp_lcd_driver
BUILD=build
-VSRCS=synchronizer.vhdl debounce.vhdl edge_det.vhdl input_formatter.vhdl input_stage.vhdl output_formatter.vhdl output_analog.vhdl serdes_n_to_1.vhdl tmds_encoder.vhdl tmds_phy.vhdl tmds_output.vhdl output_stage.vhdl hp_lcd_driver.vhdl
+VSRCS=synchronizer.vhdl debounce.vhdl edge_det.vhdl input_formatter.vhdl input_stage.vhdl output_formatter.vhdl output_analog.vhdl serdes_n_to_1.vhdl tmds_encoder.vhdl tmds_phy.vhdl tmds_output.vhdl output_stage.vhdl clkgen.vhdl hp_lcd_driver.vhdl
UCF=hp_lcd_driver.ucf
UT=hp_lcd_driver.ut
-IPSRCS= pll_50_80.xco pll_50_p10_p2_p.xco vram.xco
+IPSRCS=vram.xco
DESIGN_NAME=${TOP}
-ISE_HOME=/software/apps/xilinx/ISE/14.7/ISE_DS/ISE
+DS_HOME=/software/apps/xilinx/ISE/14.7/ISE_DS
+ISE_HOME=${DS_HOME}/ISE
ISE_BINDIR_32=${ISE_HOME}/bin/lin
ISE_BINDIR_64=${ISE_HOME}/bin/lin64
INTSTYLE=
@@ -36,6 +39,8 @@ TWR=${BASE}.twr
TWX=${BASE}.twx
BIT=${BASE}.bit
SVF=${BASE}.svf
+PA=${BUILD}/pa
+PAT=${PA}/script.tcl
XST_TMPDIR=xst/projnav.tmp
XST_DIR=xst
@@ -97,6 +102,26 @@ ${BUILD}/%.vhd:%.xco
(cd ${BUILD} && touch empty.prj && ${ISE_BINDIR_32}/coregen -b $(call relpath,$<,${BUILD}) -p empty.prj)
+planahead: ${NGC} ${TWX}
+ rm -rf ${PA}
+ mkdir -p ${PA}
+ echo 'create_project -name ${TOP} -dir "$(abspath ${PA})" -part ${PART}' >> ${PAT}
+ echo 'set srcset [get_property srcset [current_run -impl]]' >> ${PAT}
+ echo 'set_property design_mode GateLvl $$srcset' >> ${PAT}
+ echo 'set_property top ${TOP} [current_fileset]' >> ${PAT}
+ echo 'set_property edif_top_file "$(abspasth ${NGC})" [ get_property srcset [ current_run ] ]' >> ${PAT}
+ echo 'add_files -norecurse { {$(abspath ${BUILD})} }' >> ${PAT}
+ echo 'set_property target_constrs_file "$(abspath ${UCF})" [current_fileset -constrset]' >> ${PAT}
+ echo 'add_files [list {$(abspath ${UCF})}] -fileset [get_property constrset [current_run]]' >> ${PAT}
+ echo 'link_design' >> ${PAT}
+ echo 'read_xdl -file "$(abspath ${NCD})"' >> ${PAT}
+ echo 'if {[catch {read_twx -name results_1 -file "$(abspath ${TWX})"} eInfo]} {' >> ${PAT}
+ echo 'puts "WARNING: there was a problem importing \"$(abspath ${TWX})\": $$eInfo"' >> ${PAT}
+ echo '}' >> ${PAT}
+ (cd ${PA} && ${DS_HOME}/PlanAhead/bin/planAhead -log $(abspath ${PA}/pa.log) -journal $(abspath ${PA}/pa.jou) -source $(abspath ${PAT}))
+
+
+
tidy:
git diff --exit-code -s ${VSRCS}
for i in ${VSRCS}; do /bin/cp -f $$i $$i.orig && scripts/vhdl-pretty < $$i.orig > $$i; done
diff --git a/spartan6/hp_lcd_driver/hp_lcd_driver.ucf b/spartan6/hp_lcd_driver/hp_lcd_driver.ucf
index 4864b7c..c30e6e3 100644
--- a/spartan6/hp_lcd_driver/hp_lcd_driver.ucf
+++ b/spartan6/hp_lcd_driver/hp_lcd_driver.ucf
@@ -3,8 +3,8 @@
NET "clk_50m" IOSTANDARD = LVCMOS33;
NET "sys_rst_n" IOSTANDARD = LVCMOS33;
-NET "video(0)" IOSTANDARD = LVCMOS33;
-NET "video(1)" IOSTANDARD = LVCMOS33;
+NET "video[0]" IOSTANDARD = LVCMOS33;
+NET "video[1]" IOSTANDARD = LVCMOS33;
NET "hsync_in" IOSTANDARD = LVCMOS33;
NET "vsync_in" IOSTANDARD = LVCMOS33;
NET "r_out" IOSTANDARD = LVCMOS33;
@@ -14,10 +14,21 @@ NET "hsync_out" IOSTANDARD = LVCMOS33;
NET "vsync_out" IOSTANDARD = LVCMOS33;
-INST "pll" LOC = "PLL_ADV_X0Y1";
-INST "ioclk_buf" LOC = "BUFPLL_X1Y0";
+INST "clkgen/pll" LOC = PLL_ADV_X0Y1;
+INST "output0/tmds/ioclk_buf" LOC = BUFPLL_X1Y5;
+NET "hdmi_c_p" LOC = P144;
+NET "hdmi_c_n" LOC = P143;
+NET "hdmi_r_p" LOC = P142;
+NET "hdmi_r_n" LOC = P141;
+NET "hdmi_g_p" LOC = P140;
+NET "hdmi_g_n" LOC = P139;
+
+
+NET "clk_50m" PERIOD = 20 ns;
+NET "hdmi_b_p" LOC = P138;
+NET "hdmi_b_n" LOC = P137;
diff --git a/spartan6/hp_lcd_driver/hp_lcd_driver.vhdl b/spartan6/hp_lcd_driver/hp_lcd_driver.vhdl
index ba0c460..d37db58 100644
--- a/spartan6/hp_lcd_driver/hp_lcd_driver.vhdl
+++ b/spartan6/hp_lcd_driver/hp_lcd_driver.vhdl
@@ -71,78 +71,30 @@ architecture Behavioral of hp_lcd_driver is
signal b : std_logic_vector(7 downto 0);
+ signal clk_locked : std_logic;
+
signal i_clk : std_logic;
- signal o_clk_locked : std_logic;
signal o_clk : std_logic;
signal o_clk_x2 : std_logic;
signal o_clk_x10 : std_logic;
- signal serdesstrobe : std_logic;
-
- signal clkfbout : std_logic;
- signal clk_200m : std_logic;
- signal clk_80m : std_logic;
- signal clk_40m : std_logic;
- signal clk_20m : std_logic;
- signal pll_locked : std_logic;
- signal pll_locked_n : std_logic;
-
signal sys_rst : std_logic;
begin
-
-
- pll : PLL_BASE generic map (
- CLKIN_PERIOD => 20.0,
- CLKFBOUT_MULT => 8,
- CLKOUT0_DIVIDE => 2,
- CLKOUT1_DIVIDE => 5,
- CLKOUT2_DIVIDE => 10,
- CLKOUT3_DIVIDE => 20,
- COMPENSATION => "INTERNAL")
- port map (
- CLKFBOUT => clkfbout,
- CLKOUT0 => clk_200m,
- CLKOUT1 => clk_80m,
- CLKOUT2 => clk_40m,
- CLKOUT3 => clk_20m,
- LOCKED => pll_locked,
- CLKFBIN => clkfbout,
- CLKIN => clk_50m,
- RST => pll_locked_n);
-
- pll_locked_n <= not pll_locked;
-
-
-
-
- ioclk_buf : BUFPLL generic map (DIVIDE => 5)
- port map (
- PLLIN => clk_200m,
- GCLK => o_clk_x2,
- LOCKED => pll_locked,
- IOCLK => o_clk_x10,
- SERDESSTROBE => serdesstrobe,
- LOCK => o_clk_locked);
-
- o_clk_buf : BUFG port map (
- I =>clk_20m,
- O =>o_clk);
-
-
- o_clk_x2_buf : BUFG port map (
- I =>clk_40m,
- O =>o_clk_x2);
-
-
- i_clk_buf : BUFG port map (
- I =>clk_80m,
- O =>i_clk);
-
-
+ clkgen: entity work.clkgen
+ port map (
+ sys_rst_n => sys_rst_n,
+ clk_in => clk_50m,
+ i_clk => i_clk,
+ o_clk => o_clk,
+ o_clk_x2 => o_clk_x2,
+ o_clk_x10 => o_clk_x10,
+ locked => clk_locked
+
+ );
input0 : entity work.input_stage
generic map(
@@ -207,11 +159,10 @@ begin
v_stride => 384
)
port map(
- clk_locked => o_clk_locked,
+ clk_locked => clk_locked,
clk => o_clk,
clk_x2 => o_clk_x2,
clk_x10 => o_clk_x10,
- serdesstrobe => serdesstrobe,
sys_rst_n => sys_rst_n,
vsync_in => vsync_in,
r_in => r,
diff --git a/spartan6/hp_lcd_driver/input_formatter.vhdl b/spartan6/hp_lcd_driver/input_formatter.vhdl
index ef1cc0d..ecde480 100644
--- a/spartan6/hp_lcd_driver/input_formatter.vhdl
+++ b/spartan6/hp_lcd_driver/input_formatter.vhdl
@@ -33,11 +33,13 @@ architecture beh of input_formatter is
signal addr : std_logic_vector(addr_width-1 downto 0);
signal wren : std_logic;
- signal hsync_pe : std_logic;
signal hsync_ne : std_logic;
- signal fp_counter : natural;
- signal active_counter : natural;
+ signal v_fp_counter : natural;
+ signal v_active_counter : natural;
+ signal h_fp_counter : natural;
+ signal h_active_counter : natural;
+ signal h_div:natural;
begin
@@ -47,64 +49,63 @@ begin
port map(
clk => clk,
sig => hsync,
- pe => hsync_pe,
+ e => open,
+ pe => open,
ne => hsync_ne);
- addr <= (others => '0');
addr_out <= addr;
- wren_out <= '0';
-
-
----- horizontal state machine
---
--- process (sys_rst_n,p_clk,d_hsync,d_vsync) begin
--- if sys_rst_n = '0' then
--- row_addr<=(others =>'0');
--- addr<=(others =>'0');
--- p_clk_div<=p_clk_multiple;
--- active_counter <=0;
--- fp_counter <=0;
--- elsif rising_edge(p_clk) then
--- if d_vsync='1' then
--- row_addr<=(others => '0');
--- addr<=(others => '0');
--- fp_counter <= front_porch;
--- active_counter <=hres;
--- p_clk_div <=p_clk_multiple;
--- elsif pe_gsync ='1' then
--- row_addr <= std_logic_vector(unsigned(row_addr)+1);
--- elsif ne_hsync='1' then
--- fp_counter <= front_porch;
--- active_counter <=hres;
--- p_clk_div <=p_clk_multiple;
--- addr<=row_addr;
--- elsif fp_counter /= 0 then
--- fp_counter <= fp_counter -1;
--- elsif active_counter /= 0 then
--- if p_clk_div = 0 then
--- p_clk_div <=p_clk_multiple;
--- active_counter <= active_counter -1;
--- addr <= std_logic_vector(unsigned(addr)+vres);
--- else
--- p_clk_div <= p_clk_div - 1;
--- end if;
--- else
--- p_clk_div <=p_clk_multiple;
--- end if;
--- end if;
--- end process;
---
---
--- wren <= '1' when p_clk_div=2 else '0';
---
--- addr_out <= addr;
--- video_out <= (s_video, s_bright);
--- wren_out <= wren;
---
--- p_clk_out <= p_clk;
---
+
+
+ process (sys_rst_n,clk,hsync_ne,vsync) begin
+ if sys_rst_n = '0' then
+ row_addr<=(others =>'0');
+ addr<=(others =>'0');
+ h_div <=0;
+ h_active_counter <=0;
+ h_fp_counter <=0;
+ v_active_counter <=0;
+ v_fp_counter <=0;
+ elsif rising_edge(clk) then
+ if hsync_ne = '1' then
+ if vsync='1' then
+ row_addr<=(others =>'0');
+ v_fp_counter <= v_front_porch;
+ v_active_counter <= v_active;
+ elsif v_fp_counter /= 0 then
+ v_fp_counter <= v_fp_counter -1;
+ elsif v_active_counter /= 0 then
+ v_active_counter <=v_active_counter -1;
+
+ h_fp_counter <= h_front_porch * clk_multiple + phase;
+ h_active_counter <= h_active;
+ h_div <=0;
+
+ addr<=row_addr;
+ row_addr<=std_logic_vector(unsigned(row_addr)+v_stride);
+ end if;
+ elsif h_fp_counter /= 0 then
+ h_fp_counter <= h_fp_counter -1;
+ elsif h_active_counter /= 0 then
+
+ if h_div = 0 then
+ wren <='1';
+ h_div <= clk_multiple -1;
+ elsif h_div =clk_multiple -1 then
+ wren <='0';
+ h_active_counter <= h_active_counter -1;
+ addr<=std_logic_vector(unsigned(addr)+h_stride);
+ h_div <=clk_multiple -1;
+ else
+ h_div <=clk_multiple -1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ addr_out <= addr;
+ wren_out <= wren;
end beh;
diff --git a/spartan6/hp_lcd_driver/output_formatter.vhdl b/spartan6/hp_lcd_driver/output_formatter.vhdl
index 4f35e35..4969b8a 100644
--- a/spartan6/hp_lcd_driver/output_formatter.vhdl
+++ b/spartan6/hp_lcd_driver/output_formatter.vhdl
@@ -53,6 +53,8 @@ begin
port map(
clk => clk,
sig => vsync_in,
+ e => open,
+ pe => open,
ne => vsync_in_ne);
process (clk, vsync_in_ne, sys_rst_n)
diff --git a/spartan6/hp_lcd_driver/output_stage.vhdl b/spartan6/hp_lcd_driver/output_stage.vhdl
index d4b3d9f..0b04de0 100644
--- a/spartan6/hp_lcd_driver/output_stage.vhdl
+++ b/spartan6/hp_lcd_driver/output_stage.vhdl
@@ -28,7 +28,6 @@ entity output_stage is
clk : in std_logic;
clk_x2 : in std_logic;
clk_x10 : in std_logic;
- serdesstrobe : in std_logic;
sys_rst_n : in std_logic;
vsync_in : in std_logic;
@@ -117,7 +116,7 @@ begin
addr_out <= addr;
- output_analog : entity work.output_analog
+ analog : entity work.output_analog
port map(
sys_rst_n => sys_rst_n,
@@ -139,14 +138,13 @@ begin
- output_tmds : entity work.tmds_output
+ tmds : entity work.tmds_output
port map (
sys_rst_n => sys_rst_n,
pclk_locked => clk_locked,
pclk => clk,
pclk_x2 => clk_x2,
pclk_x10 => clk_x10,
- serdesstrobe => serdesstrobe,
r_in => r_in,
g_in => g_in,
diff --git a/spartan6/hp_lcd_driver/pll_50_80.xco b/spartan6/hp_lcd_driver/pll_50_80.xco
deleted file mode 100644
index b175ef8..0000000
--- a/spartan6/hp_lcd_driver/pll_50_80.xco
+++ /dev/null
@@ -1,269 +0,0 @@
-##############################################################
-#
-# Xilinx Core Generator version 14.7
-# Date: Sat Apr 26 17:50:20 2025
-#
-##############################################################
-#
-# This file contains the customisation parameters for a
-# Xilinx CORE Generator IP GUI. It is strongly recommended
-# that you do not manually alter this file as it may cause
-# unexpected and unsupported behavior.
-#
-##############################################################
-#
-# Generated from component: xilinx.com:ip:clk_wiz:3.6
-#
-##############################################################
-#
-# BEGIN Project Options
-SET addpads = false
-SET asysymbol = true
-SET busformat = BusFormatAngleBracketNotRipped
-SET createndf = false
-SET designentry = VHDL
-SET device = xc6slx9
-SET devicefamily = spartan6
-SET flowvendor = Other
-SET formalverification = false
-SET foundationsym = false
-SET implementationfiletype = Ngc
-SET package = tqg144
-SET removerpms = false
-SET simulationfiles = Behavioral
-SET speedgrade = -2
-SET verilogsim = false
-SET vhdlsim = true
-# END Project Options
-# BEGIN Select
-SELECT Clocking_Wizard xilinx.com:ip:clk_wiz:3.6
-# END Select
-# BEGIN Parameters
-CSET calc_done=DONE
-CSET clk_in_sel_port=CLK_IN_SEL
-CSET clk_out1_port=clk_80_out
-CSET clk_out1_use_fine_ps_gui=false
-CSET clk_out2_port=CLK_OUT2
-CSET clk_out2_use_fine_ps_gui=false
-CSET clk_out3_port=CLK_OUT3
-CSET clk_out3_use_fine_ps_gui=false
-CSET clk_out4_port=CLK_OUT4
-CSET clk_out4_use_fine_ps_gui=false
-CSET clk_out5_port=CLK_OUT5
-CSET clk_out5_use_fine_ps_gui=false
-CSET clk_out6_port=CLK_OUT6
-CSET clk_out6_use_fine_ps_gui=false
-CSET clk_out7_port=CLK_OUT7
-CSET clk_out7_use_fine_ps_gui=false
-CSET clk_valid_port=CLK_VALID
-CSET clkfb_in_n_port=CLKFB_IN_N
-CSET clkfb_in_p_port=CLKFB_IN_P
-CSET clkfb_in_port=CLKFB_IN
-CSET clkfb_in_signaling=SINGLE
-CSET clkfb_out_n_port=CLKFB_OUT_N
-CSET clkfb_out_p_port=CLKFB_OUT_P
-CSET clkfb_out_port=CLKFB_OUT
-CSET clkfb_stopped_port=CLKFB_STOPPED
-CSET clkin1_jitter_ps=200.0
-CSET clkin1_ui_jitter=0.010
-CSET clkin2_jitter_ps=100.0
-CSET clkin2_ui_jitter=0.010
-CSET clkout1_drives=BUFG
-CSET clkout1_requested_duty_cycle=50.000
-CSET clkout1_requested_out_freq=80.000
-CSET clkout1_requested_phase=0.000
-CSET clkout2_drives=BUFG
-CSET clkout2_requested_duty_cycle=50.000
-CSET clkout2_requested_out_freq=100.000
-CSET clkout2_requested_phase=0.000
-CSET clkout2_used=false
-CSET clkout3_drives=BUFG
-CSET clkout3_requested_duty_cycle=50.000
-CSET clkout3_requested_out_freq=100.000
-CSET clkout3_requested_phase=0.000
-CSET clkout3_used=false
-CSET clkout4_drives=BUFG
-CSET clkout4_requested_duty_cycle=50.000
-CSET clkout4_requested_out_freq=100.000
-CSET clkout4_requested_phase=0.000
-CSET clkout4_used=false
-CSET clkout5_drives=BUFG
-CSET clkout5_requested_duty_cycle=50.000
-CSET clkout5_requested_out_freq=100.000
-CSET clkout5_requested_phase=0.000
-CSET clkout5_used=false
-CSET clkout6_drives=BUFG
-CSET clkout6_requested_duty_cycle=50.000
-CSET clkout6_requested_out_freq=100.000
-CSET clkout6_requested_phase=0.000
-CSET clkout6_used=false
-CSET clkout7_drives=BUFG
-CSET clkout7_requested_duty_cycle=50.000
-CSET clkout7_requested_out_freq=100.000
-CSET clkout7_requested_phase=0.000
-CSET clkout7_used=false
-CSET clock_mgr_type=AUTO
-CSET component_name=pll_50_80
-CSET daddr_port=DADDR
-CSET dclk_port=DCLK
-CSET dcm_clk_feedback=1X
-CSET dcm_clk_out1_port=CLKFX
-CSET dcm_clk_out2_port=CLK0
-CSET dcm_clk_out3_port=CLK0
-CSET dcm_clk_out4_port=CLK0
-CSET dcm_clk_out5_port=CLK0
-CSET dcm_clk_out6_port=CLK0
-CSET dcm_clkdv_divide=2.0
-CSET dcm_clkfx_divide=5
-CSET dcm_clkfx_multiply=8
-CSET dcm_clkgen_clk_out1_port=CLKFX
-CSET dcm_clkgen_clk_out2_port=CLKFX
-CSET dcm_clkgen_clk_out3_port=CLKFX
-CSET dcm_clkgen_clkfx_divide=1
-CSET dcm_clkgen_clkfx_md_max=0.000
-CSET dcm_clkgen_clkfx_multiply=4
-CSET dcm_clkgen_clkfxdv_divide=2
-CSET dcm_clkgen_clkin_period=10.000
-CSET dcm_clkgen_notes=None
-CSET dcm_clkgen_spread_spectrum=NONE
-CSET dcm_clkgen_startup_wait=false
-CSET dcm_clkin_divide_by_2=false
-CSET dcm_clkin_period=20.000
-CSET dcm_clkout_phase_shift=NONE
-CSET dcm_deskew_adjust=SYSTEM_SYNCHRONOUS
-CSET dcm_notes=None
-CSET dcm_phase_shift=0
-CSET dcm_pll_cascade=NONE
-CSET dcm_startup_wait=false
-CSET den_port=DEN
-CSET din_port=DIN
-CSET dout_port=DOUT
-CSET drdy_port=DRDY
-CSET dwe_port=DWE
-CSET feedback_source=FDBK_AUTO
-CSET in_freq_units=Units_MHz
-CSET in_jitter_units=Units_UI
-CSET input_clk_stopped_port=INPUT_CLK_STOPPED
-CSET jitter_options=UI
-CSET jitter_sel=No_Jitter
-CSET locked_port=LOCKED
-CSET mmcm_bandwidth=OPTIMIZED
-CSET mmcm_clkfbout_mult_f=4.000
-CSET mmcm_clkfbout_phase=0.000
-CSET mmcm_clkfbout_use_fine_ps=false
-CSET mmcm_clkin1_period=10.000
-CSET mmcm_clkin2_period=10.000
-CSET mmcm_clkout0_divide_f=4.000
-CSET mmcm_clkout0_duty_cycle=0.500
-CSET mmcm_clkout0_phase=0.000
-CSET mmcm_clkout0_use_fine_ps=false
-CSET mmcm_clkout1_divide=1
-CSET mmcm_clkout1_duty_cycle=0.500
-CSET mmcm_clkout1_phase=0.000
-CSET mmcm_clkout1_use_fine_ps=false
-CSET mmcm_clkout2_divide=1
-CSET mmcm_clkout2_duty_cycle=0.500
-CSET mmcm_clkout2_phase=0.000
-CSET mmcm_clkout2_use_fine_ps=false
-CSET mmcm_clkout3_divide=1
-CSET mmcm_clkout3_duty_cycle=0.500
-CSET mmcm_clkout3_phase=0.000
-CSET mmcm_clkout3_use_fine_ps=false
-CSET mmcm_clkout4_cascade=false
-CSET mmcm_clkout4_divide=1
-CSET mmcm_clkout4_duty_cycle=0.500
-CSET mmcm_clkout4_phase=0.000
-CSET mmcm_clkout4_use_fine_ps=false
-CSET mmcm_clkout5_divide=1
-CSET mmcm_clkout5_duty_cycle=0.500
-CSET mmcm_clkout5_phase=0.000
-CSET mmcm_clkout5_use_fine_ps=false
-CSET mmcm_clkout6_divide=1
-CSET mmcm_clkout6_duty_cycle=0.500
-CSET mmcm_clkout6_phase=0.000
-CSET mmcm_clkout6_use_fine_ps=false
-CSET mmcm_clock_hold=false
-CSET mmcm_compensation=ZHOLD
-CSET mmcm_divclk_divide=1
-CSET mmcm_notes=None
-CSET mmcm_ref_jitter1=0.010
-CSET mmcm_ref_jitter2=0.010
-CSET mmcm_startup_wait=false
-CSET num_out_clks=1
-CSET override_dcm=false
-CSET override_dcm_clkgen=false
-CSET override_mmcm=false
-CSET override_pll=false
-CSET platform=lin
-CSET pll_bandwidth=OPTIMIZED
-CSET pll_clk_feedback=CLKFBOUT
-CSET pll_clkfbout_mult=4
-CSET pll_clkfbout_phase=0.000
-CSET pll_clkin_period=10.000
-CSET pll_clkout0_divide=1
-CSET pll_clkout0_duty_cycle=0.500
-CSET pll_clkout0_phase=0.000
-CSET pll_clkout1_divide=1
-CSET pll_clkout1_duty_cycle=0.500
-CSET pll_clkout1_phase=0.000
-CSET pll_clkout2_divide=1
-CSET pll_clkout2_duty_cycle=0.500
-CSET pll_clkout2_phase=0.000
-CSET pll_clkout3_divide=1
-CSET pll_clkout3_duty_cycle=0.500
-CSET pll_clkout3_phase=0.000
-CSET pll_clkout4_divide=1
-CSET pll_clkout4_duty_cycle=0.500
-CSET pll_clkout4_phase=0.000
-CSET pll_clkout5_divide=1
-CSET pll_clkout5_duty_cycle=0.500
-CSET pll_clkout5_phase=0.000
-CSET pll_compensation=SYSTEM_SYNCHRONOUS
-CSET pll_divclk_divide=1
-CSET pll_notes=None
-CSET pll_ref_jitter=0.010
-CSET power_down_port=POWER_DOWN
-CSET prim_in_freq=50.000
-CSET prim_in_jitter=0.010
-CSET prim_source=No_buffer
-CSET primary_port=clk_50_in
-CSET primitive=MMCM
-CSET primtype_sel=PLL_BASE
-CSET psclk_port=PSCLK
-CSET psdone_port=PSDONE
-CSET psen_port=PSEN
-CSET psincdec_port=PSINCDEC
-CSET relative_inclk=REL_PRIMARY
-CSET reset_port=RESET
-CSET secondary_in_freq=100.000
-CSET secondary_in_jitter=0.010
-CSET secondary_port=CLK_IN2
-CSET secondary_source=Single_ended_clock_capable_pin
-CSET ss_mod_freq=250
-CSET ss_mode=CENTER_HIGH
-CSET status_port=STATUS
-CSET summary_strings=empty
-CSET use_clk_valid=false
-CSET use_clkfb_stopped=false
-CSET use_dyn_phase_shift=false
-CSET use_dyn_reconfig=false
-CSET use_freeze=false
-CSET use_freq_synth=true
-CSET use_inclk_stopped=false
-CSET use_inclk_switchover=false
-CSET use_locked=true
-CSET use_max_i_jitter=false
-CSET use_min_o_jitter=false
-CSET use_min_power=false
-CSET use_phase_alignment=true
-CSET use_power_down=false
-CSET use_reset=true
-CSET use_spread_spectrum=false
-CSET use_spread_spectrum_1=false
-CSET use_status=false
-# END Parameters
-# BEGIN Extra information
-MISC pkg_timestamp=2012-05-10T12:44:55Z
-# END Extra information
-GENERATE
-# CRC: fe735cf8
diff --git a/spartan6/hp_lcd_driver/pll_50_p10_p2_p.xco b/spartan6/hp_lcd_driver/pll_50_p10_p2_p.xco
deleted file mode 100644
index 9d75f11..0000000
--- a/spartan6/hp_lcd_driver/pll_50_p10_p2_p.xco
+++ /dev/null
@@ -1,269 +0,0 @@
-##############################################################
-#
-# Xilinx Core Generator version 14.7
-# Date: Sat Apr 26 23:17:11 2025
-#
-##############################################################
-#
-# This file contains the customisation parameters for a
-# Xilinx CORE Generator IP GUI. It is strongly recommended
-# that you do not manually alter this file as it may cause
-# unexpected and unsupported behavior.
-#
-##############################################################
-#
-# Generated from component: xilinx.com:ip:clk_wiz:3.6
-#
-##############################################################
-#
-# BEGIN Project Options
-SET addpads = false
-SET asysymbol = true
-SET busformat = BusFormatAngleBracketNotRipped
-SET createndf = false
-SET designentry = VHDL
-SET device = xc6slx9
-SET devicefamily = spartan6
-SET flowvendor = Other
-SET formalverification = false
-SET foundationsym = false
-SET implementationfiletype = Ngc
-SET package = tqg144
-SET removerpms = false
-SET simulationfiles = Behavioral
-SET speedgrade = -2
-SET verilogsim = false
-SET vhdlsim = true
-# END Project Options
-# BEGIN Select
-SELECT Clocking_Wizard xilinx.com:ip:clk_wiz:3.6
-# END Select
-# BEGIN Parameters
-CSET calc_done=DONE
-CSET clk_in_sel_port=CLK_IN_SEL
-CSET clk_out1_port=pclk_x10_out
-CSET clk_out1_use_fine_ps_gui=false
-CSET clk_out2_port=pclk_x2_out
-CSET clk_out2_use_fine_ps_gui=false
-CSET clk_out3_port=pclk_out
-CSET clk_out3_use_fine_ps_gui=false
-CSET clk_out4_port=CLK_OUT4
-CSET clk_out4_use_fine_ps_gui=false
-CSET clk_out5_port=CLK_OUT5
-CSET clk_out5_use_fine_ps_gui=false
-CSET clk_out6_port=CLK_OUT6
-CSET clk_out6_use_fine_ps_gui=false
-CSET clk_out7_port=CLK_OUT7
-CSET clk_out7_use_fine_ps_gui=false
-CSET clk_valid_port=CLK_VALID
-CSET clkfb_in_n_port=CLKFB_IN_N
-CSET clkfb_in_p_port=CLKFB_IN_P
-CSET clkfb_in_port=CLKFB_IN
-CSET clkfb_in_signaling=SINGLE
-CSET clkfb_out_n_port=CLKFB_OUT_N
-CSET clkfb_out_p_port=CLKFB_OUT_P
-CSET clkfb_out_port=CLKFB_OUT
-CSET clkfb_stopped_port=CLKFB_STOPPED
-CSET clkin1_jitter_ps=200.0
-CSET clkin1_ui_jitter=0.010
-CSET clkin2_jitter_ps=100.0
-CSET clkin2_ui_jitter=0.010
-CSET clkout1_drives=BUFG
-CSET clkout1_requested_duty_cycle=50.000
-CSET clkout1_requested_out_freq=91.667
-CSET clkout1_requested_phase=0.000
-CSET clkout2_drives=BUFG
-CSET clkout2_requested_duty_cycle=50.000
-CSET clkout2_requested_out_freq=36.667
-CSET clkout2_requested_phase=0.000
-CSET clkout2_used=true
-CSET clkout3_drives=BUFG
-CSET clkout3_requested_duty_cycle=50.000
-CSET clkout3_requested_out_freq=18.333
-CSET clkout3_requested_phase=0.000
-CSET clkout3_used=true
-CSET clkout4_drives=BUFG
-CSET clkout4_requested_duty_cycle=50.000
-CSET clkout4_requested_out_freq=100.000
-CSET clkout4_requested_phase=0.000
-CSET clkout4_used=false
-CSET clkout5_drives=BUFG
-CSET clkout5_requested_duty_cycle=50.000
-CSET clkout5_requested_out_freq=100.000
-CSET clkout5_requested_phase=0.000
-CSET clkout5_used=false
-CSET clkout6_drives=BUFG
-CSET clkout6_requested_duty_cycle=50.000
-CSET clkout6_requested_out_freq=100.000
-CSET clkout6_requested_phase=0.000
-CSET clkout6_used=false
-CSET clkout7_drives=BUFG
-CSET clkout7_requested_duty_cycle=50.000
-CSET clkout7_requested_out_freq=100.000
-CSET clkout7_requested_phase=0.000
-CSET clkout7_used=false
-CSET clock_mgr_type=AUTO
-CSET component_name=pll_50_p10_p2_p
-CSET daddr_port=DADDR
-CSET dclk_port=DCLK
-CSET dcm_clk_feedback=2X
-CSET dcm_clk_out1_port=CLKFX
-CSET dcm_clk_out2_port=CLKDV
-CSET dcm_clk_out3_port=CLK2X
-CSET dcm_clk_out4_port=CLK0
-CSET dcm_clk_out5_port=CLK0
-CSET dcm_clk_out6_port=CLK0
-CSET dcm_clkdv_divide=15.0
-CSET dcm_clkfx_divide=6
-CSET dcm_clkfx_multiply=11
-CSET dcm_clkgen_clk_out1_port=CLKFX
-CSET dcm_clkgen_clk_out2_port=CLKFX
-CSET dcm_clkgen_clk_out3_port=CLKFX
-CSET dcm_clkgen_clkfx_divide=1
-CSET dcm_clkgen_clkfx_md_max=0.000
-CSET dcm_clkgen_clkfx_multiply=4
-CSET dcm_clkgen_clkfxdv_divide=2
-CSET dcm_clkgen_clkin_period=10.000
-CSET dcm_clkgen_notes=None
-CSET dcm_clkgen_spread_spectrum=NONE
-CSET dcm_clkgen_startup_wait=false
-CSET dcm_clkin_divide_by_2=false
-CSET dcm_clkin_period=20.000
-CSET dcm_clkout_phase_shift=NONE
-CSET dcm_deskew_adjust=SYSTEM_SYNCHRONOUS
-CSET dcm_notes=None
-CSET dcm_phase_shift=0
-CSET dcm_pll_cascade=NONE
-CSET dcm_startup_wait=false
-CSET den_port=DEN
-CSET din_port=DIN
-CSET dout_port=DOUT
-CSET drdy_port=DRDY
-CSET dwe_port=DWE
-CSET feedback_source=FDBK_AUTO
-CSET in_freq_units=Units_MHz
-CSET in_jitter_units=Units_UI
-CSET input_clk_stopped_port=INPUT_CLK_STOPPED
-CSET jitter_options=UI
-CSET jitter_sel=No_Jitter
-CSET locked_port=LOCKED
-CSET mmcm_bandwidth=OPTIMIZED
-CSET mmcm_clkfbout_mult_f=4.000
-CSET mmcm_clkfbout_phase=0.000
-CSET mmcm_clkfbout_use_fine_ps=false
-CSET mmcm_clkin1_period=10.000
-CSET mmcm_clkin2_period=10.000
-CSET mmcm_clkout0_divide_f=4.000
-CSET mmcm_clkout0_duty_cycle=0.500
-CSET mmcm_clkout0_phase=0.000
-CSET mmcm_clkout0_use_fine_ps=false
-CSET mmcm_clkout1_divide=1
-CSET mmcm_clkout1_duty_cycle=0.500
-CSET mmcm_clkout1_phase=0.000
-CSET mmcm_clkout1_use_fine_ps=false
-CSET mmcm_clkout2_divide=1
-CSET mmcm_clkout2_duty_cycle=0.500
-CSET mmcm_clkout2_phase=0.000
-CSET mmcm_clkout2_use_fine_ps=false
-CSET mmcm_clkout3_divide=1
-CSET mmcm_clkout3_duty_cycle=0.500
-CSET mmcm_clkout3_phase=0.000
-CSET mmcm_clkout3_use_fine_ps=false
-CSET mmcm_clkout4_cascade=false
-CSET mmcm_clkout4_divide=1
-CSET mmcm_clkout4_duty_cycle=0.500
-CSET mmcm_clkout4_phase=0.000
-CSET mmcm_clkout4_use_fine_ps=false
-CSET mmcm_clkout5_divide=1
-CSET mmcm_clkout5_duty_cycle=0.500
-CSET mmcm_clkout5_phase=0.000
-CSET mmcm_clkout5_use_fine_ps=false
-CSET mmcm_clkout6_divide=1
-CSET mmcm_clkout6_duty_cycle=0.500
-CSET mmcm_clkout6_phase=0.000
-CSET mmcm_clkout6_use_fine_ps=false
-CSET mmcm_clock_hold=false
-CSET mmcm_compensation=ZHOLD
-CSET mmcm_divclk_divide=1
-CSET mmcm_notes=None
-CSET mmcm_ref_jitter1=0.010
-CSET mmcm_ref_jitter2=0.010
-CSET mmcm_startup_wait=false
-CSET num_out_clks=3
-CSET override_dcm=false
-CSET override_dcm_clkgen=false
-CSET override_mmcm=false
-CSET override_pll=false
-CSET platform=lin
-CSET pll_bandwidth=OPTIMIZED
-CSET pll_clk_feedback=CLKFBOUT
-CSET pll_clkfbout_mult=11
-CSET pll_clkfbout_phase=0.000
-CSET pll_clkin_period=20.000
-CSET pll_clkout0_divide=6
-CSET pll_clkout0_duty_cycle=0.500
-CSET pll_clkout0_phase=0.000
-CSET pll_clkout1_divide=15
-CSET pll_clkout1_duty_cycle=0.500
-CSET pll_clkout1_phase=0.000
-CSET pll_clkout2_divide=30
-CSET pll_clkout2_duty_cycle=0.500
-CSET pll_clkout2_phase=0.000
-CSET pll_clkout3_divide=1
-CSET pll_clkout3_duty_cycle=0.500
-CSET pll_clkout3_phase=0.000
-CSET pll_clkout4_divide=1
-CSET pll_clkout4_duty_cycle=0.500
-CSET pll_clkout4_phase=0.000
-CSET pll_clkout5_divide=1
-CSET pll_clkout5_duty_cycle=0.500
-CSET pll_clkout5_phase=0.000
-CSET pll_compensation=SYSTEM_SYNCHRONOUS
-CSET pll_divclk_divide=1
-CSET pll_notes=None
-CSET pll_ref_jitter=0.010
-CSET power_down_port=POWER_DOWN
-CSET prim_in_freq=50.000
-CSET prim_in_jitter=0.010
-CSET prim_source=No_buffer
-CSET primary_port=clk_50_in
-CSET primitive=MMCM
-CSET primtype_sel=PLL_BASE
-CSET psclk_port=PSCLK
-CSET psdone_port=PSDONE
-CSET psen_port=PSEN
-CSET psincdec_port=PSINCDEC
-CSET relative_inclk=REL_PRIMARY
-CSET reset_port=RESET
-CSET secondary_in_freq=100.000
-CSET secondary_in_jitter=0.010
-CSET secondary_port=CLK_IN2
-CSET secondary_source=Single_ended_clock_capable_pin
-CSET ss_mod_freq=250
-CSET ss_mode=CENTER_HIGH
-CSET status_port=STATUS
-CSET summary_strings=empty
-CSET use_clk_valid=false
-CSET use_clkfb_stopped=false
-CSET use_dyn_phase_shift=false
-CSET use_dyn_reconfig=false
-CSET use_freeze=false
-CSET use_freq_synth=true
-CSET use_inclk_stopped=false
-CSET use_inclk_switchover=false
-CSET use_locked=true
-CSET use_max_i_jitter=false
-CSET use_min_o_jitter=false
-CSET use_min_power=false
-CSET use_phase_alignment=true
-CSET use_power_down=false
-CSET use_reset=true
-CSET use_spread_spectrum=false
-CSET use_spread_spectrum_1=false
-CSET use_status=false
-# END Parameters
-# BEGIN Extra information
-MISC pkg_timestamp=2012-05-10T12:44:55Z
-# END Extra information
-GENERATE
-# CRC: d987c511
diff --git a/spartan6/hp_lcd_driver/tmds_output.vhdl b/spartan6/hp_lcd_driver/tmds_output.vhdl
index 8f413b8..ba095ef 100644
--- a/spartan6/hp_lcd_driver/tmds_output.vhdl
+++ b/spartan6/hp_lcd_driver/tmds_output.vhdl
@@ -13,7 +13,6 @@ entity tmds_output is
pclk : in std_logic;
pclk_x2 : in std_logic;
pclk_x10 : in std_logic;
- serdesstrobe : in std_logic;
r_in : in std_logic_vector(7 downto 0);
g_in : in std_logic_vector(7 downto 0);
b_in : in std_logic_vector(7 downto 0);
@@ -40,8 +39,11 @@ architecture beh of tmds_output is
signal b_p10 : std_logic_vector(9 downto 0);
signal phy_reset : std_logic;
- signal bufpll_lock : std_logic;
signal upper : std_logic;
+ signal pll_locked: std_logic;
+ signal ioclk: std_logic;
+ signal serdesstrobe : std_logic;
+
begin
@@ -84,9 +86,9 @@ begin
);
- phy_reset <= not sys_rst_n or not bufpll_lock;
+ phy_reset <= not sys_rst_n or not pll_locked;
- process (pclk_x2)
+ process (pclk_x2,phy_reset)
begin
if phy_reset = '1' then
upper <= '1';
@@ -96,12 +98,22 @@ begin
end process;
+ ioclk_buf : BUFPLL generic map (DIVIDE => 5)
+ port map (
+ PLLIN => pclk_x10,
+ GCLK => pclk_x2,
+ LOCKED => pclk_locked,
+ IOCLK => ioclk,
+ SERDESSTROBE => serdesstrobe,
+ LOCK => pll_locked);
+
+
phy_c : entity work.tmds_phy
port map (
reset => phy_reset,
pclk_x2 => pclk_x2,
serdesstrobe => serdesstrobe,
- ioclk => pclk_x10,
+ ioclk => ioclk,
upper => upper,
din => "1111100000",
tmds_out_p => tmds_c_out_p,
@@ -113,7 +125,7 @@ begin
reset => phy_reset,
pclk_x2 => pclk_x2,
serdesstrobe => serdesstrobe,
- ioclk => pclk_x10,
+ ioclk => ioclk,
upper => upper,
din => r_p10,
tmds_out_p => tmds_r_out_p,
@@ -126,7 +138,7 @@ begin
reset => phy_reset,
pclk_x2 => pclk_x2,
serdesstrobe => serdesstrobe,
- ioclk => pclk_x10,
+ ioclk => ioclk,
upper => upper,
din => g_p10,
tmds_out_p => tmds_g_out_p,