diff options
author | root <root@new-fish.medaka.james.internal> | 2025-04-30 23:31:35 +0100 |
---|---|---|
committer | root <root@new-fish.medaka.james.internal> | 2025-04-30 23:31:35 +0100 |
commit | cff444eb1bd7bc498bc50dca506b745317bc3494 (patch) | |
tree | bc48b69e520f66f73eddefed6d430c03dc118b21 /fpga/hp_lcd_driver | |
parent | 655dfad152b35b26f97db45b6723bfe7c91961f2 (diff) | |
download | hp_instrument_lcds-cff444eb1bd7bc498bc50dca506b745317bc3494.tar.gz hp_instrument_lcds-cff444eb1bd7bc498bc50dca506b745317bc3494.tar.bz2 hp_instrument_lcds-cff444eb1bd7bc498bc50dca506b745317bc3494.zip |
move fpga to fpga directory
Diffstat (limited to 'fpga/hp_lcd_driver')
38 files changed, 4433 insertions, 0 deletions
diff --git a/fpga/hp_lcd_driver/.gitignore b/fpga/hp_lcd_driver/.gitignore new file mode 100644 index 0000000..8cdd988 --- /dev/null +++ b/fpga/hp_lcd_driver/.gitignore @@ -0,0 +1,3 @@ +build_spartan6/ +build_ep4ce15/ +build_ep4ce6/ diff --git a/fpga/hp_lcd_driver/Makefile b/fpga/hp_lcd_driver/Makefile new file mode 100644 index 0000000..693085b --- /dev/null +++ b/fpga/hp_lcd_driver/Makefile @@ -0,0 +1,17 @@ +TARGETS= ep4ce15 spartan6 #ep4ce6 +fish:ep4ce15 +default: ${TARGETS:%=build_%/hp_lcd_driver.svf} + +ep4ce15: build_ep4ce15/hp_lcd_driver.svf +ep4ce6hp: build_ep4ce6/hp_lcd_driver.svf +spartan6: build_spartan6/hp_lcd_driver.svf + +build_%/hp_lcd_driver.svf: dummy + ${MAKE} -f ${@:build_%/hp_lcd_driver.svf=%}.mk + +clean: + for i in ${TARGETS}; do ${MAKE} -f $$i.mk $@; done + + + +dummy: diff --git a/fpga/hp_lcd_driver/clkgen_cyclone4.vhdl b/fpga/hp_lcd_driver/clkgen_cyclone4.vhdl new file mode 100644 index 0000000..0c5b28f --- /dev/null +++ b/fpga/hp_lcd_driver/clkgen_cyclone4.vhdl @@ -0,0 +1,63 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.NUMERIC_STD.all; +use work.all; + +entity clkgen is + port ( + sys_rst_n : in std_logic; + clk_in : in std_logic; + i_clk : out std_logic; + o_clk : out std_logic; + o_clk_x2 : out std_logic; + o_clk_phy : out std_logic; + locked : out std_logic + ); +end clkgen; +architecture Behavioural of clkgen is + + signal clkfbout : std_logic; + signal clk_100m : std_logic; + signal clk_80m : std_logic; + signal clk_40m : std_logic; + signal clk_20m : std_logic; + signal pll_locked : std_logic; + + signal reset : std_logic; +begin + + clkgen_impl0 : entity work.clkgen_cyclone4_impl + port map ( + areset => not sys_rst_n, + inclk0 => clk_in, + c0 => clk_100m, + c1 => clk_80m, + c2 => clk_40m, + c3 => clk_20m, + locked => pll_locked); + + o_clk <= clk_20m; +-- o_clk_buf : BUFG port map ( +-- I => clk_20m, +-- O => o_clk); +-- + + o_clk_x2 <= clk_40m; + +-- o_clk_x2_buf : BUFG port map ( +-- I => clk_40m, +-- O => o_clk_x2); +-- + + i_clk <= clk_80m; +-- i_clk_buf : BUFG port map ( +-- I => clk_80m, +-- O => i_clk); +-- + + o_clk_phy <= clk_100m; + + locked <= pll_locked; + + +end Behavioural; diff --git a/fpga/hp_lcd_driver/clkgen_cyclone4_impl.vhdl b/fpga/hp_lcd_driver/clkgen_cyclone4_impl.vhdl new file mode 100644 index 0000000..5a60e85 --- /dev/null +++ b/fpga/hp_lcd_driver/clkgen_cyclone4_impl.vhdl @@ -0,0 +1,461 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: clkgen_cyclone4_impl.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2013 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY clkgen_cyclone4_impl IS + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END clkgen_cyclone4_impl; + + +ARCHITECTURE SYN OF clkgen_cyclone4_impl IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + self_reset_on_loss_lock : STRING; + width_clock : NATURAL + ); + PORT ( + areset : IN STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + locked : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + sub_wire8_bv(0 DOWNTO 0) <= "0"; + sub_wire8 <= To_stdlogicvector(sub_wire8_bv); + sub_wire5 <= sub_wire0(2); + sub_wire4 <= sub_wire0(0); + sub_wire2 <= sub_wire0(3); + sub_wire1 <= sub_wire0(1); + c1 <= sub_wire1; + c3 <= sub_wire2; + locked <= sub_wire3; + c0 <= sub_wire4; + c2 <= sub_wire5; + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire8(0 DOWNTO 0) & sub_wire6; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 5, + clk0_duty_cycle => 50, + clk0_multiply_by => 12, + clk0_phase_shift => "0", + clk1_divide_by => 5, + clk1_duty_cycle => 50, + clk1_multiply_by => 8, + clk1_phase_shift => "0", + clk2_divide_by => 25, + clk2_duty_cycle => 50, + clk2_multiply_by => 24, + clk2_phase_shift => "0", + clk3_divide_by => 25, + clk3_duty_cycle => 50, + clk3_multiply_by => 12, + clk3_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 20000, + intended_device_family => "Cyclone IV E", + lpm_hint => "CBX_MODULE_PREFIX=clkgen_cyclone4_impl", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_USED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_USED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_USED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + self_reset_on_loss_lock => "ON", + width_clock => 5 + ) + PORT MAP ( + areset => areset, + inclk => sub_wire7, + clk => sub_wire0, + locked => sub_wire3 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "120.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "80.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "48.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "24.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "deg" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "120.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "80.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "48.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "24.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "clkgen_cyclone4_impl.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "1" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "12" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "8" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "25" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "24" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "25" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "12" +-- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "ON" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL clkgen_cyclone4_impl_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/fpga/hp_lcd_driver/clkgen_spartan6.vhdl b/fpga/hp_lcd_driver/clkgen_spartan6.vhdl new file mode 100644 index 0000000..7240abc --- /dev/null +++ b/fpga/hp_lcd_driver/clkgen_spartan6.vhdl @@ -0,0 +1,73 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.NUMERIC_STD.all; +use work.all; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity clkgen is + port ( + sys_rst_n : in std_logic; + clk_in : in std_logic; + i_clk : out std_logic; + o_clk : out std_logic; + o_clk_x2 : out std_logic; + o_clk_phy : out std_logic; + locked : out std_logic + ); +end clkgen; +architecture Behavioural of clkgen is + + 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 reset : 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_in, + RST => reset); + + reset <= (not pll_locked) or (not sys_rst_n); + + + + 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); + + o_clk_phy <= clk_200m; + + locked <= pll_locked; + +end Behavioural; diff --git a/fpga/hp_lcd_driver/debounce.vhdl b/fpga/hp_lcd_driver/debounce.vhdl new file mode 100644 index 0000000..286367d --- /dev/null +++ b/fpga/hp_lcd_driver/debounce.vhdl @@ -0,0 +1,32 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +entity debounce is + generic (stages : natural := 1); + port (clk : in std_logic; + i : in std_logic; + o : out std_logic); +end debounce; + +architecture Behavioral of debounce is + signal flipflops : std_logic_vector(stages-1 downto 0) := (others => '0'); + constant zero : std_logic_vector(stages-1 downto 0) := (others => '0'); + constant one : std_logic_vector(stages-1 downto 0) := (others => '1'); + signal output : std_logic := '0'; +begin + + o <= output; + + process (clk, flipflops, i) + begin + if rising_edge(clk) then + flipflops <= flipflops(flipflops'high-1 downto 0) & i; + if flipflops = one and i = '1' then + output <= '1'; + elsif flipflops = zero and i = '0' then + output <= '0'; + end if; + end if; + end process; + +end architecture; diff --git a/fpga/hp_lcd_driver/edge_det.vhdl b/fpga/hp_lcd_driver/edge_det.vhdl new file mode 100644 index 0000000..2a592a5 --- /dev/null +++ b/fpga/hp_lcd_driver/edge_det.vhdl @@ -0,0 +1,28 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +entity edge_det is + port (clk : in std_logic; + sig : in std_logic; + pe : out std_logic; + ne : out std_logic; + e : out std_logic + ); +end edge_det; + +architecture Behavioral of edge_det is + signal last : std_logic := '0'; +begin + + process(clk, last, sig) + begin + if rising_edge(clk) then + last <= sig; + end if; + end process; + + pe <= '1' when sig = '1' and last = '0' else '0'; + ne <= '1' when sig = '0' and last = '1' else '0'; + + e <= sig xor last; +end Behavioral; diff --git a/fpga/hp_lcd_driver/ep4ce15.cfg b/fpga/hp_lcd_driver/ep4ce15.cfg new file mode 100644 index 0000000..39925e2 --- /dev/null +++ b/fpga/hp_lcd_driver/ep4ce15.cfg @@ -0,0 +1,10 @@ + +set CHIPNAME ep4ce15 +set FPGA_TAPID 0x020f20dd + +jtag newtap $CHIPNAME tap -irlen 10 -ircapture 0x01 -irmask 0x3 -expected-id $FPGA_TAPID + +init +scan_chain +svf -tap $CHIPNAME.tap ./build_ep4ce15/hp_lcd_driver.svf +exit diff --git a/fpga/hp_lcd_driver/ep4ce15.mk b/fpga/hp_lcd_driver/ep4ce15.mk new file mode 100644 index 0000000..982934b --- /dev/null +++ b/fpga/hp_lcd_driver/ep4ce15.mk @@ -0,0 +1,126 @@ +include relpath.mk + +FAMILY=Cyclone IV E +PART=EP4CE15F23C8 +TOP=hp_lcd_driver +BUILD=build_ep4ce15 +OF=output_files + +PROJECT = hp_lcd_driver +VSRCS =synchronizer.vhdl debounce.vhdl edge_det.vhdl input_formatter.vhdl input_stage.vhdl output_formatter.vhdl output_analog.vhdl tmds_encoder.vhdl tmds_encode.vhdl tmds_phy_cyclone4.vhdl tmds_output_cyclone4.vhdl output_stage.vhdl clkgen_cyclone4.vhdl vram_cyclone4.vhdl hp_lcd_driver.vhdl +IPS= vram_cyclone4_impl.vhdl clkgen_cyclone4_impl.vhdl input_pll.vhdl + +DESIGN_NAME=${TOP} + +MAP_ARGS = --smart +FIT_ARGS = +ASM_ARGS = +STA_ARGS = +CPF_ARGS = -c -q 1MHZ -g 3.3 -n p + +GEN_VSRCS=${IPS:%.vhdl=${BUILD}/%.vhd} +QIP=${GEN_VSRCS:%.vhd=%.qip} + +BASE=${BUILD}/${DESIGN_NAME} +QSF=${BASE}.qsf +QPF=${BASE}.qpf +MAP=${BUILD}/${OF}/$(PROJECT).map.rpt +FIT=${BUILD}/${OF}/$(PROJECT).fit.rpt +ASM=${BUILD}/${OF}/$(PROJECT).asm.rpt +ASM=${BUILD}/${OF}/$(PROJECT).sta.rpt +SOF=${BUILD}/${OF}/${PROJECT}.sof +SVF=${BUILD}/${PROJECT}.svf + +default:${SVF} + + +${BUILD}/%.vhd ${BUILD}/%.qip:%.vhdl + cat $< > ${BUILD}/${<:%.vhdl=%.vhd} + (cd ${BUILD} && run_quartus qmegawiz -silent $(call relpath,${BUILD}/${<:%.vhdl=%.vhd},${BUILD})) + + +${QSF}: ${PRJ} ${DESIGN_NAME}.ep4ce15_qsft + mkdir -p ${BUILD} + rm -f $@ + echo 'set_global_assignment -name TOP_LEVEL_ENTITY ${TOP}' >> $@ + echo 'set_global_assignment -name FAMILY "${FAMILY}"' >> $@ + echo 'set_global_assignment -name PROJECT_OUTPUT_DIRECTORY ${OF}' >> $@ + echo 'set_global_assignment -name DEVICE ${PART}' >> $@ + cat ${DESIGN_NAME}.ep4ce15_qsft >> $@ + for file in ${GEN_VSRCS} ${VSRCS}; do \ + echo "set_global_assignment -name VHDL_FILE $$(realpath -m --relative-to=${BUILD} $${file})" >> $@; \ + done + + + +${QPF}: + mkdir -p ${BUILD} + rm -f $@ + echo 'PROJECT_REVISION = "${TOP}"' > $@ + + +map: ${MAP} +${MAP}: ${VSRCS} ${QPF} ${QSF} ${GEN_VSRCS} ${QIP} + (cd ${BUILD} && run_quartus quartus_map $(MAP_ARGS) ${PROJECT}) + +fit: ${FIT} +${FIT}:${MAP} + (cd ${BUILD} && run_quartus quartus_fit $(FIT_ARGS) $(PROJECT)) + +asm: ${ASM} +sof: ${ASM} +${SOF} ${ASM}:${FIT} + (cd ${BUILD} && run_quartus quartus_asm $(ASM_ARGS) $(PROJECT)) + +sta: ${STA} +${STA}:${FIT} + (cd ${BUILD} && run_quartus quartus_sta $(STA_ARGS) $(PROJECT)) + + +svf:${SVF} +${SVF}:${SOF} + (cd ${BUILD} && run_quartus quartus_cpf ${CPF_ARGS} $(call relpath,$<,${BUILD}) $(call relpath,$@,${BUILD}) ) + + + +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 + + + +# +# +##OPENOCD=openocd -f interface/altera-usb-blaster.cfg -f cpld/altera-epm240.cfg +# +#FIT_ARGS = +#ASM_ARGS = +# +#SVF=${PROJECT}.svf +# +# +# +#default: ${SVF} +# +#${SVF}: ${BUILD}/${PROJECT}.svf +# cat $< > $@ || /bin/rm -f $@ +# +#program: ${SVF} +# ${OPENOCD} -c "init; svf $<; exit" +# +#all: ${BUILD}/$(PROJECT).asm.rpt ${BUILD}/$(PROJECT).sta.rpt ${BUILD}/${PROJECT}.svf +# +clean: + rm -rf db ${BUILD} *.orig *.bak incremental_db db + +# +# +# +# +# +# + +#tidy: +# for i in ${SOURCE_FILES}; do /bin/cp -f $$i $$i.orig && scripts/vhdl-pretty < $$i.orig > $$i; done +# +# diff --git a/fpga/hp_lcd_driver/ep4ce6.mk b/fpga/hp_lcd_driver/ep4ce6.mk new file mode 100644 index 0000000..f758f9c --- /dev/null +++ b/fpga/hp_lcd_driver/ep4ce6.mk @@ -0,0 +1,126 @@ +include relpath.mk + +FAMILY=Cyclone IV E +PART=EP4CE6E22C8 +TOP=hp_lcd_driver +BUILD=build_ep4ce6 +OF=output_files + +PROJECT = hp_lcd_driver +VSRCS =synchronizer.vhdl debounce.vhdl edge_det.vhdl input_formatter.vhdl input_stage.vhdl output_formatter.vhdl output_analog.vhdl tmds_encoder.vhdl tmds_encode.vhdl tmds_phy_cyclone4.vhdl tmds_output_cyclone4.vhdl output_stage.vhdl clkgen_cyclone4.vhdl vram_cyclone4.vhdl hp_lcd_driver.vhdl +IPS= vram_cyclone4_impl.vhdl clkgen_cyclone4_impl.vhdl + +DESIGN_NAME=${TOP} + +MAP_ARGS = --smart +FIT_ARGS = +ASM_ARGS = +STA_ARGS = +CPF_ARGS = -c -q 1MHZ -g 3.3 -n p + +GEN_VSRCS=${IPS:%.vhdl=${BUILD}/%.vhd} +QIP=${GEN_VSRCS:%.vhd=%.qip} + +BASE=${BUILD}/${DESIGN_NAME} +QSF=${BASE}.qsf +QPF=${BASE}.qpf +MAP=${BUILD}/${OF}/$(PROJECT).map.rpt +FIT=${BUILD}/${OF}/$(PROJECT).fit.rpt +ASM=${BUILD}/${OF}/$(PROJECT).asm.rpt +ASM=${BUILD}/${OF}/$(PROJECT).sta.rpt +SOF=${BUILD}/${OF}/${PROJECT}.sof +SVF=${BUILD}/${PROJECT}.svf + +default:${SVF} + + +${BUILD}/%.vhd ${BUILD}/%.qip:%.vhdl + cat $< > ${BUILD}/${<:%.vhdl=%.vhd} + (cd ${BUILD} && run_quartus qmegawiz -silent $(call relpath,${BUILD}/${<:%.vhdl=%.vhd},${BUILD})) + + +${QSF}: ${PRJ} ${DESIGN_NAME}.ep4ce6_qsft + mkdir -p ${BUILD} + rm -f $@ + echo 'set_global_assignment -name TOP_LEVEL_ENTITY ${TOP}' >> $@ + echo 'set_global_assignment -name FAMILY "${FAMILY}"' >> $@ + echo 'set_global_assignment -name PROJECT_OUTPUT_DIRECTORY ${OF}' >> $@ + echo 'set_global_assignment -name DEVICE ${PART}' >> $@ + cat ${DESIGN_NAME}.ep4ce6_qsft >> $@ + for file in ${GEN_VSRCS} ${VSRCS}; do \ + echo "set_global_assignment -name VHDL_FILE $$(realpath -m --relative-to=${BUILD} $${file})" >> $@; \ + done + + + +${QPF}: + mkdir -p ${BUILD} + rm -f $@ + echo 'PROJECT_REVISION = "${TOP}"' > $@ + + +map: ${MAP} +${MAP}: ${VSRCS} ${QPF} ${QSF} ${GEN_VSRCS} ${QIP} + (cd ${BUILD} && run_quartus quartus_map $(MAP_ARGS) ${PROJECT}) + +fit: ${FIT} +${FIT}:${MAP} + (cd ${BUILD} && run_quartus quartus_fit $(FIT_ARGS) $(PROJECT)) + +asm: ${ASM} +sof: ${ASM} +${SOF} ${ASM}:${FIT} + (cd ${BUILD} && run_quartus quartus_asm $(ASM_ARGS) $(PROJECT)) + +sta: ${STA} +${STA}:${FIT} + (cd ${BUILD} && run_quartus quartus_sta $(STA_ARGS) $(PROJECT)) + + +svf:${SVF} +${SVF}:${SOF} + (cd ${BUILD} && run_quartus quartus_cpf ${CPF_ARGS} $(call relpath,$<,${BUILD}) $(call relpath,$@,${BUILD}) ) + + + +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 + + + +# +# +##OPENOCD=openocd -f interface/altera-usb-blaster.cfg -f cpld/altera-epm240.cfg +# +#FIT_ARGS = +#ASM_ARGS = +# +#SVF=${PROJECT}.svf +# +# +# +#default: ${SVF} +# +#${SVF}: ${BUILD}/${PROJECT}.svf +# cat $< > $@ || /bin/rm -f $@ +# +#program: ${SVF} +# ${OPENOCD} -c "init; svf $<; exit" +# +#all: ${BUILD}/$(PROJECT).asm.rpt ${BUILD}/$(PROJECT).sta.rpt ${BUILD}/${PROJECT}.svf +# +clean: + rm -rf db ${BUILD} *.orig *.bak incremental_db db + +# +# +# +# +# +# + +#tidy: +# for i in ${SOURCE_FILES}; do /bin/cp -f $$i $$i.orig && scripts/vhdl-pretty < $$i.orig > $$i; done +# +# diff --git a/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce15_qsft b/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce15_qsft new file mode 100644 index 0000000..e22c246 --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce15_qsft @@ -0,0 +1,87 @@ +#set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1" +#set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:47:00 APRIL 20, 2025" +#set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" + +set_parameter -name target "cyclone4" + +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 +set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V +set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +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_COLOR 16764057 -section_id Top +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVCMOS" + +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF + +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top + +set_location_assignment PIN_T22 -to clk_50m +set_location_assignment PIN_U20 -to sys_rst_n + +set_location_assignment PIN_AB17 -to vsync_out +set_location_assignment PIN_AA18 -to hsync_out + +set_location_assignment PIN_J21 -to r_out +set_instance_assignment -name IO_STANDARD "2.5 V" -to r_out +#set_location_assignment PIN_K21 -to rgb[14] +#set_location_assignment PIN_L22 -to rgb[13] +#set_location_assignment PIN_L21 -to rgb[12] +#set_location_assignment PIN_M22 -to rgb[11] +set_location_assignment PIN_M21 -to g_out +#set_location_assignment PIN_N21 -to rgb[9] +#set_location_assignment PIN_N20 -to rgb[8] +#set_location_assignment PIN_U22 -to rgb[7] +#set_location_assignment PIN_U21 -to rgb[6] +#set_location_assignment PIN_W20 -to rgb[5] +set_location_assignment PIN_W19 -to b_out +#set_location_assignment PIN_Y21 -to rgb[3] +#set_location_assignment PIN_AB19 -to rgb[2] +#set_location_assignment PIN_AA19 -to rgb[1] +#set_location_assignment PIN_AB18 -to rgb[0] + + + +set_location_assignment PIN_H21 -to hdmi_c_p +set_location_assignment PIN_H22 -to hdmi_c_n +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_c_p +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_c_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_c_p +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_c_n + +set_location_assignment PIN_F21 -to hdmi_b_p +set_location_assignment PIN_F22 -to hdmi_b_n +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_b_p +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_b_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_b_p +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_b_n + +set_location_assignment PIN_E21 -to hdmi_g_p +set_location_assignment PIN_E22 -to hdmi_g_n +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_g_p +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_g_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_g_p +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_g_n + +set_location_assignment PIN_D21 -to hdmi_r_p +set_location_assignment PIN_D22 -to hdmi_r_n +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_r_p +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_r_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_r_p +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to hdmi_r_n + + +set_location_assignment PIN_AA14 -to hsync_in +set_location_assignment PIN_W14 -to vsync_in +set_location_assignment PIN_AA15 -to video[0] +set_location_assignment PIN_V15 -to video[1] +set_location_assignment PIN_W7 -to i_clk_out + + + + diff --git a/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce6_qsft b/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce6_qsft new file mode 100644 index 0000000..e3bc6c5 --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.ep4ce6_qsft @@ -0,0 +1,144 @@ +#set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1" +#set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:47:00 APRIL 20, 2025" +#set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" + +set_parameter -name target "cyclone4" + +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 +set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V +set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +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_COLOR 16764057 -section_id Top +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVCMOS" + +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top + + +# use the beeper for this! +set_location_assignment PIN_85 -to sys_rst_n + +#key 3 +set_location_assignment PIN_89 -to video(0) +#key 4 +set_location_assignment PIN_90 -to video(1) + +set_location_assignment PIN_98 -to hsync_in +set_location_assignment PIN_99 -to vsync_in + +#lies - it's 48 +set_location_assignment PIN_24 -to clk_50m + +set_location_assignment PIN_100 -to hsync_out +#set_location_assignment PIN_101 -to vsync_out + +set_location_assignment PIN_126 -to r_out +set_location_assignment PIN_110 -to b_out +set_location_assignment PIN_119 -to g_out + +set_location_assignment PIN_133 -to hdmi_c_p +set_location_assignment PIN_135 -to hdmi_c_n +set_location_assignment PIN_136 -to hdmi_r_p +set_location_assignment PIN_137 -to hdmi_r_n +set_location_assignment PIN_138 -to hdmi_g_p +set_location_assignment PIN_142 -to hdmi_g_n +set_location_assignment PIN_143 -to hdmi_b_p +set_location_assignment PIN_144 -to hdmi_b_n + + + +# bank 1 +# +#set_location_assignment PIN_141 -to led_5 +#set_location_assignment PIN_1 -to led_4 +#set_location_assignment PIN_2 -to led_3 +#set_location_assignment PIN_3 -to led_2 +# +#set_location_assignment PIN_7 -to flash_di +#set_location_assignment PIN_10 -to flash_clk +#set_location_assignment PIN_11 -to flash_ncs +#set_location_assignment PIN_23 -to flash_do +#set_location_assignment PIN_25 -to tmp1 +## +##bank 2 +#set_location_assignment PIN_28 -to dram_dq[1] +#set_location_assignment PIN_30 -to dram_dq[0] +#set_location_assignment PIN_31 -to dram_dq[3] +#set_location_assignment PIN_32 -to dram_dq[2] +#set_location_assignment PIN_33 -to dram_dq[4] +#set_location_assignment PIN_34 -to dram_dq[5] +# +##bank 3 +#set_location_assignment PIN_38 -to dram_dq[6] +#set_location_assignment PIN_39 -to dram_dq[7] +#set_location_assignment PIN_42 -to dram_ldqm +#set_location_assignment PIN_43 -to dram_we_n +#set_location_assignment PIN_44 -to dram_cas_n +#set_location_assignment PIN_46 -to dram_ras_n +#set_location_assignment PIN_49 -to dram_dq[15] +#set_location_assignment PIN_50 -to dram_dq[14] +#set_location_assignment PIN_51 -to dram_dq[13] +#set_location_assignment PIN_52 -to dram_dq[12] +#set_location_assignment PIN_53 -to dram_dq[11] +# +##bank 4 +#set_location_assignment PIN_54 -to dram_dq[10] +#set_location_assignment PIN_55 -to dram_dq[9] +#set_location_assignment PIN_58 -to dram_dq[8] +#set_location_assignment PIN_59 -to dram_udqm +#set_location_assignment PIN_60 -to dram_clk +#set_location_assignment PIN_64 -to dram_cke +#set_location_assignment PIN_65 -to dram_addr[12] +#set_location_assignment PIN_66 -to dram_addr[11] +#set_location_assignment PIN_67 -to dram_addr[9] +#set_location_assignment PIN_68 -to dram_addr[8] +#set_location_assignment PIN_69 -to dram_addr[7] +#set_location_assignment PIN_70 -to dram_addr[6] +#set_location_assignment PIN_71 -to dram_addr[5] +#set_location_assignment PIN_72 -to dram_addr[4] +# +## bank 5 +#set_location_assignment PIN_73 -to dram_ba_0 +#set_location_assignment PIN_74 -to dram_cs_n +#set_location_assignment PIN_75 -to dram_ba_1 +#set_location_assignment PIN_76 -to dram_addr[10] +#set_location_assignment PIN_77 -to dram_addr[0] +#set_location_assignment PIN_80 -to dram_addr[1] +#set_location_assignment PIN_83 -to dram_addr[2] +#set_location_assignment PIN_84 -to dram_addr[3] +#set_location_assignment PIN_86 -to uart_txd +#set_location_assignment PIN_87 -to uart_rxd +## +## clocks 2 +#set_location_assignment PIN_88 -to key_2 +#set_location_assignment PIN_89 -to key_3 +#set_location_assignment PIN_90 -to key_4 +#set_location_assignment PIN_91 -to key_1 +# +## bank 6 +#set_location_assignment PIN_103 -to vga_b[0] +#set_location_assignment PIN_104 -to vga_b[1] +#set_location_assignment PIN_105 -to vga_b[2] +#set_location_assignment PIN_106 -to vga_b[3] +## +##bank 7 +#set_location_assignment PIN_111 -to vga_g[0] +#set_location_assignment PIN_112 -to vga_g[1] +#set_location_assignment PIN_113 -to vga_g[2] +#set_location_assignment PIN_114 -to vga_g[3] +#set_location_assignment PIN_115 -to vga_g[4] +#set_location_assignment PIN_120 -to vga_r[0] +#set_location_assignment PIN_121 -to vga_r[1] +#set_location_assignment PIN_121 -to vga_r[2] +#set_location_assignment PIN_125 -to vga_r[3] +#set_location_assignment PIN_127 -to adc_clk +# +##bank 8 +#set_location_assignment PIN_128 -to adc_dat +#set_location_assignment PIN_129 -to adc_ncs +#set_location_assignment PIN_132 -to ir diff --git a/fpga/hp_lcd_driver/hp_lcd_driver.ucf b/fpga/hp_lcd_driver/hp_lcd_driver.ucf new file mode 100644 index 0000000..ae00a1b --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.ucf @@ -0,0 +1,34 @@ +#NET "hdmi_r" IOSTANDARD = LVCMOS33; +#NET "hdmi_b" LOC = P67; + +NET "clk_50m" IOSTANDARD = LVCMOS33; +NET "sys_rst_n" 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; +NET "b_out" IOSTANDARD = LVCMOS33; +NET "g_out" IOSTANDARD = LVCMOS33; +NET "hsync_out" IOSTANDARD = LVCMOS33; +NET "vsync_out" IOSTANDARD = LVCMOS33; + + +INST "clkgen/pll" LOC = PLL_ADV_X0Y1; +INST "output0/tmds_o/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/fpga/hp_lcd_driver/hp_lcd_driver.ut b/fpga/hp_lcd_driver/hp_lcd_driver.ut new file mode 100644 index 0000000..ea9319f --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.ut @@ -0,0 +1,30 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g Reset_on_err:No +-g ConfigRate:2 +-g ProgPin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g ExtMasterCclk_en:No +-g SPI_buswidth:1 +-g TIMER_CFG:0xFFFF +-g multipin_wakeup:No +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:None +-g DonePipe:No +-g DriveDone:No +-g en_sw_gsr:No +-g drive_awake:No +-g sw_clk:Startupclk +-g sw_gwe_cycle:5 +-g sw_gts_cycle:4 diff --git a/fpga/hp_lcd_driver/hp_lcd_driver.vhdl b/fpga/hp_lcd_driver/hp_lcd_driver.vhdl new file mode 100644 index 0000000..a8cf948 --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.vhdl @@ -0,0 +1,221 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.NUMERIC_STD.all; +use work.all; + +entity hp_lcd_driver is + generic (video_width : natural := 2; + addr_width : natural := 18; + phase_slip : natural := 320; + target : string := "spartan6"); + port (clk_50m : in std_logic; + sys_rst_n : in std_logic; + video : in std_logic_vector(video_width-1 downto 0); + hsync_in : in std_logic; + vsync_in : in std_logic; + r_out : out std_logic; + b_out : out std_logic; + g_out : out std_logic; + hsync_out : out std_logic; + vsync_out : out std_logic; + hdmi_c_p : out std_logic; + hdmi_c_n : out std_logic; + hdmi_r_p : out std_logic; + hdmi_r_n : out std_logic; + hdmi_g_p : out std_logic; + hdmi_g_n : out std_logic; + hdmi_b_p : out std_logic; + hdmi_b_n : out std_logic; + i_clk_out : out std_logic); + +end hp_lcd_driver; + +architecture Behavioral of hp_lcd_driver is + + signal wr_addr : std_logic_vector(addr_width-1 downto 0); + signal wr_data : std_logic_vector(video_width-1 downto 0); + signal wr_en : std_logic; + + signal rd_addr : std_logic_vector(addr_width-1 downto 0); + signal rd_data : std_logic_vector(video_width-1 downto 0); + + signal r : std_logic_vector(7 downto 0); + signal g : std_logic_vector(7 downto 0); + signal b : std_logic_vector(7 downto 0); + + + signal clk_locked : std_logic; + + signal i_clk : std_logic; + + signal o_clk : std_logic; + signal o_clk_x2 : std_logic; + signal o_clk_phy : std_logic; + signal sys_rst : std_logic; + + signal pa : natural; + signal epk : std_logic; + signal ic : natural; + + + +begin + + +-- clocking: +-- i_clk is 4*20MHz to give us 4 choices of sampling position +-- o_clk is the output pixel clock +-- o_clk_x2 is used by the spartan serdes +-- o_clk_phy is used the the hdmi phy (cylone4 it's o_clk x5, spartan 6 it's o_clk x 10) + + i_clkgen : entity work.input_pll + port map ( + areset => open, + inclk0 => clk_50m, + c0 => i_clk, + locked => open); + + + process (i_clk, sys_rst_n) + begin + if sys_rst_n = '0' then + ic <= 0; + pa <= phase_slip; + epk <= '0'; + elsif rising_edge(i_clk) then + + if ic = 0 then + epk <= '1'; + if pa = 0 then + pa <= phase_slip; + ic <= 4; + else + ic <= 3; + pa <= pa -1; + end if; + else + if epk = '1' then + epk <= '0'; + end if; + ic <= ic-1; + end if; + end if; + end process; + + + i_clk_out <= epk; + + clkgen : entity work.clkgen + port map ( + sys_rst_n => sys_rst_n, + clk_in => clk_50m, + i_clk => open, + o_clk => o_clk, + o_clk_x2 => o_clk_x2, + o_clk_phy => o_clk_phy, + locked => clk_locked + ); + + --i_clk_out <= i_clk; + + input0 : entity work.input_stage + generic map( + video_width => video_width, + addr_width => addr_width, + clk_multiple => 4, + phase => 3, + h_front_porch => 208, + h_active => 592, + v_front_porch => 2, + v_active => 384, + frame_start => 380, + h_stride => 384, + v_stride => 262143, + phase_slip => phase_slip + ) + port map ( + sys_rst_n => sys_rst_n, + clk => i_clk, + video_in => video, + hsync_in => hsync_in, + vsync_in => vsync_in, + + video_out => wr_data, + addr_out => wr_addr, + wren_out => wr_en); + + + vram0 : entity work.vram + generic map ( + video_width => video_width, + addr_width => addr_width + ) + port map ( + wr_clk => i_clk, + wr_en => wr_en, + wr_addr => wr_addr, + wr_data => wr_data, + rd_clk => o_clk, + rd_addr => rd_addr, + rd_data => rd_data + ); + + + r <= x"ff" when rd_data(1) = '1' else + x"00"; + g <= x"ff" when rd_data(0) = '1' else + x"ff" when rd_data(1) = '1' else + x"00"; + b <= x"ff" when rd_data(1) = '1' else + x"00"; + + + + output0 : entity work.output_stage + +-- didn't work for me from this thing, only from mac, works at 60Hz xrandr --newmode "$M" 18.24 384 400 440 600 592 593 596 613 -HSync +Vsync +-- Modeline "384x592_80.00" 25.40 384 408 448 512 592 593 596 620 -HSync +Vsync + + generic map ( + target => target, + addr_width => addr_width, + h_active => 384, + h_sync_start => 400, + h_sync_end => 440, + h_total => 620, + v_active => 592, + v_sync_start => 593, + v_sync_end => 596, + v_total => 613, + h_stride => 1, + v_stride => 384 + ) + port map( + clk_locked => clk_locked, + clk => o_clk, + clk_x2 => o_clk_x2, + clk_phy => o_clk_phy, + sys_rst_n => sys_rst_n, + vsync_in => vsync_in, + r_in => r, + g_in => g, + b_in => b, + addr_out => rd_addr, + r_out => r_out, + g_out => g_out, + b_out => b_out, + hsync_out => hsync_out, + vsync_out => vsync_out, + hdmi_c_p => hdmi_c_p, + hdmi_c_n => hdmi_c_n, + hdmi_r_p => hdmi_r_p, + hdmi_r_n => hdmi_r_n, + hdmi_g_p => hdmi_g_p, + hdmi_g_n => hdmi_g_n, + hdmi_b_p => hdmi_b_p, + hdmi_b_n => hdmi_b_n + ); + + +end Behavioral; + diff --git a/fpga/hp_lcd_driver/hp_lcd_driver.xst_template b/fpga/hp_lcd_driver/hp_lcd_driver.xst_template new file mode 100644 index 0000000..b5f39c1 --- /dev/null +++ b/fpga/hp_lcd_driver/hp_lcd_driver.xst_template @@ -0,0 +1,46 @@ +run +-ofmt NGC +-opt_mode Speed +-opt_level 1 +-power NO +-iuc NO +-keep_hierarchy No +-netlist_hierarchy As_Optimized +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case Maintain +-slice_utilization_ratio 100 +-bram_utilization_ratio 100 +-dsp_utilization_ratio 100 +-lc Auto +-reduce_control_sets Auto +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style LUT +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-shreg_extract YES +-rom_style Auto +-auto_bram_packing NO +-resource_sharing YES +-async_to_sync NO +-shreg_min_size 2 +-use_dsp48 Auto +-iobuf YES +-max_fanout 100000 +-bufg 16 +-register_duplication YES +-register_balancing No +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob Auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/fpga/hp_lcd_driver/input_formatter.vhdl b/fpga/hp_lcd_driver/input_formatter.vhdl new file mode 100644 index 0000000..9c04493 --- /dev/null +++ b/fpga/hp_lcd_driver/input_formatter.vhdl @@ -0,0 +1,142 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +-- i_clk is 78.704625 +-- the scope's pixel clock is 19.660819 +-- ratio is 4.003120 +-- 1/0.003120 is 320 + + + +entity input_formatter is + generic ( + addr_width : natural := 17; + clk_multiple : natural := 4; + phase : natural := 2; + h_front_porch : natural := 208; + h_active : natural := 592; + v_front_porch : natural := 2; + v_active : natural := 384; + frame_start : natural := 0; + h_stride : natural := 384; + v_stride : natural := 1; + phase_slip : natural := 320); + port + ( + sys_rst_n : in std_logic; + clk : in std_logic; + hsync : in std_logic; + vsync : in std_logic; + addr_out : out std_logic_vector(addr_width-1 downto 0); + wren_out : out std_logic; + h_grid : out std_logic; + v_grid : out std_logic + ); + +end input_formatter; + + +architecture beh of input_formatter is + + signal row_addr : std_logic_vector(addr_width-1 downto 0); + signal addr : std_logic_vector(addr_width-1 downto 0); + signal wren : std_logic; + + signal hsync_ne : std_logic; + signal hsync_pe : std_logic; + + signal v_fp_counter : natural; + signal v_active_counter : natural; + signal h_fp_counter : natural; + signal h_active_counter : natural; + signal h_div : natural; + + signal phase_accum : natural; + + +begin + + + hsync_ed : entity work.edge_det + port map( + clk => clk, + sig => hsync, + e => open, + ne => hsync_ne, + pe => hsync_pe); + + + + + addr_out <= addr; + + + process (sys_rst_n, clk, hsync_pe, 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; + phase_accum <= 0; + elsif rising_edge(clk) then + if hsync_pe = '1' then + --if v_active_counter = 0 and v_fp_counter=0 then + if vsync = '1' then + row_addr <= std_logic_vector(to_unsigned(frame_start, addr_width)); + 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; + phase_accum <= phase_slip; + 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'; + if phase_accum = 0 then + phase_accum <= phase_slip; + h_div <= clk_multiple; + else + phase_accum <= phase_accum-1; + h_div <= clk_multiple -1; + end if; + else + if wren = '1' then + wren <= '0'; + h_active_counter <= h_active_counter -1; + addr <= std_logic_vector(unsigned(addr)+h_stride); + end if; + h_div <= h_div -1; + end if; + end if; + end if; + end process; + + addr_out <= addr; + wren_out <= wren; + + + h_grid <= '1' when (h_active_counter mod 8) = 0 + else '0'; + + v_grid <= '1' when (v_active_counter mod 8) = 0 + else '0'; + + +end beh; diff --git a/fpga/hp_lcd_driver/input_stage.vhdl b/fpga/hp_lcd_driver/input_stage.vhdl new file mode 100644 index 0000000..e9a7549 --- /dev/null +++ b/fpga/hp_lcd_driver/input_stage.vhdl @@ -0,0 +1,142 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +entity input_stage is + generic (debounce_stages : natural := 2; + sync_stages : natural := 2; + video_width : natural := 2; + addr_width : natural := 17; + clk_multiple : natural := 4; + phase : natural := 2; + h_front_porch : natural := 208; + h_active : natural := 592; + v_front_porch : natural := 2; + v_active : natural := 384; + frame_start : natural := 0; + h_stride : natural := 384; + v_stride : natural := 1; + phase_slip : natural := 320); + port + ( + clk : in std_logic; + sys_rst_n : in std_logic; + + video_in : in std_logic_vector(video_width -1 downto 0); + + hsync_in : in std_logic; + vsync_in : in std_logic; + + video_out : out std_logic_vector(video_width-1 downto 0); + addr_out : out std_logic_vector(addr_width - 1 downto 0); + wren_out : out std_logic + ); +end input_stage; + + +architecture beh of input_stage is + + signal s_hsync : std_logic; + signal d_hsync : std_logic; + + signal s_vsync : std_logic; + signal d_vsync : std_logic; + + signal s_video : std_logic_vector(video_width-1 downto 0); + + signal addr : std_logic_vector(addr_width - 1 downto 0); + signal wren : std_logic; + + signal h_grid : std_logic; + signal v_grid : std_logic; + + signal addr_test : std_logic_vector(addr_width - 1 downto 0); + +begin + + video_sync_for : for b in 0 to video_width -1 generate + sync : entity work.synchronizer + generic map(stages => sync_stages + debounce_stages) + port map ( + clk => clk, + i => video_in(b), + o => s_video(b) + ); + end generate; + + + + hsync_sync : entity work.synchronizer + generic map(stages => sync_stages) + port map ( + clk => clk, + i => hsync_in, + o => s_hsync + ); + + vsync_sync : entity work.synchronizer + generic map(stages => sync_stages) + port map ( + clk => clk, + i => vsync_in, + o => s_vsync + ); + + hsync_debounce : entity work.debounce + generic map(stages => debounce_stages) + port map( + clk => clk, + i => s_hsync, + o => d_hsync); + + + + vsync_debounce : entity work.debounce + generic map(stages => debounce_stages) + port map( + clk => clk, + i => s_vsync, + o => d_vsync); + + + input_formatter : entity work.input_formatter + generic map( + -- 20.000 592 608 680 816 384 385 400 402 + addr_width => addr_width, + clk_multiple => clk_multiple, + phase => phase, + h_front_porch => h_front_porch, + h_active => h_active, + v_front_porch => v_front_porch, + v_active => v_active, + frame_start => frame_start, + h_stride => h_stride, + v_stride => v_stride, + phase_slip => phase_slip) + port map ( + sys_rst_n => sys_rst_n, + clk => clk, + hsync => d_hsync, + vsync => d_vsync, + addr_out => addr, + wren_out => wren, + h_grid => h_grid, + v_grid => v_grid + ); + + +--wren_out <='1'; + +--video_out(0) <='1'; +--video_out(1) <='1'; + + addr_out <= addr; + wren_out <= wren; + + video_out <= s_video; + + --video_out(0) <= h_grid; + --video_out(1) <= v_grid; + + +end beh; diff --git a/fpga/hp_lcd_driver/output_analog.vhdl b/fpga/hp_lcd_driver/output_analog.vhdl new file mode 100644 index 0000000..af9eb71 --- /dev/null +++ b/fpga/hp_lcd_driver/output_analog.vhdl @@ -0,0 +1,82 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + + +entity output_analog is + port + ( + clk : in std_logic; + sys_rst_n : in std_logic; + + r_in : in std_logic; + g_in : in std_logic; + b_in : in std_logic; + hsync_in : in std_logic; + vsync_in : in std_logic; + blank_in : in std_logic; + + r_out : out std_logic; + g_out : out std_logic; + b_out : out std_logic; + hsync_out : out std_logic; + vsync_out : out std_logic + ); +end output_analog; + + +architecture beh of output_analog is + + + signal r_r : std_logic; + signal g_r : std_logic; + signal b_r : std_logic; + + signal hsync_r : std_logic; + signal vsync_r : std_logic; + signal blank_r : std_logic; + + + +begin + + process (sys_rst_n, clk) + begin + if sys_rst_n = '0' then + r_r <= '0'; + g_r <= '0'; + b_r <= '0'; + hsync_r <= '0'; + vsync_r <= '0'; + blank_r <= '0'; + elsif rising_edge(clk) then + r_r <= r_in; + g_r <= g_in; + b_r <= b_in; + hsync_r <= hsync_in; + vsync_r <= vsync_in; + blank_r <= blank_in; + + end if; + end process; + + + process (sys_rst_n, clk) + begin + if sys_rst_n = '0' then + r_out <= '0'; + g_out <= '0'; + b_out <= '0'; + hsync_out <= '0'; + vsync_out <= '0'; + elsif rising_edge(clk) then + r_out <= r_r and not blank_r; + g_out <= g_r and not blank_r; + b_out <= b_r and not blank_r; + hsync_out <= hsync_r; + vsync_out <= vsync_r; + end if; + end process; + + +end beh; diff --git a/fpga/hp_lcd_driver/output_formatter.vhdl b/fpga/hp_lcd_driver/output_formatter.vhdl new file mode 100644 index 0000000..96964ed --- /dev/null +++ b/fpga/hp_lcd_driver/output_formatter.vhdl @@ -0,0 +1,137 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + + + +entity output_formatter is + generic (addr_width : natural := 17; + h_front_porch : natural := 208; + h_active : natural := 384; + h_sync_start : natural := 400; + h_sync_end : natural := 440; + h_total : natural := 600; + v_active : natural := 592; + v_sync_start : natural := 593; + v_sync_end : natural := 596; + v_total : natural := 614; + h_stride : natural := 1; + v_stride : natural := 384 + ); + port ( + sys_rst_n : in std_logic; + clk : in std_logic; + vsync_in : in std_logic; + addr_out : out std_logic_vector(addr_width -1 downto 0); + blank_out : out std_logic; + vsync_out : out std_logic; + hsync_out : out std_logic; + h_grid : out std_logic; + v_grid : out std_logic + ); +end output_formatter; + + +architecture beh of output_formatter is + + signal row_addr : std_logic_vector(addr_width-1 downto 0); + signal addr : std_logic_vector(addr_width-1 downto 0); + + signal vsync_in_ne : std_logic; + + signal h : natural; + signal v : natural; + + + signal blank : std_logic; + signal vblank : std_logic; + signal vsync : std_logic; + signal hsync : std_logic; + + +begin + + vsync_ed : entity work.edge_det + port map( + clk => clk, + sig => vsync_in, + e => open, + pe => open, + ne => vsync_in_ne); + + process (clk, vsync_in_ne, sys_rst_n) + begin + if sys_rst_n = '0' then + h <= 0; + v <= 0; + elsif rising_edge(clk) then + if h /= (h_total-1) then + h <= h+1; + else + if v /= (v_total-1) then + v <= v+1; + h <= 0; + else --if vsync_in_ne = '1' then + h <= 0; + v <= 0; + end if; + end if; + end if; + end process; + + + process (clk, h, h, sys_rst_n) + begin + if sys_rst_n = '0' then + row_addr <= (others => '0'); + addr <= (others => '0'); + blank <= '1'; + vsync <= '0'; + hsync <= '0'; + elsif rising_edge(clk) then + + if h = 0 then + if v = 0 then + row_addr <= (others => '0'); + addr <= (others => '0'); + blank <= '0'; + vblank <= '0'; + elsif v = v_active then + vblank <= '1'; + elsif v = v_sync_start then + vsync <= '1'; + elsif v = v_sync_end then + vsync <= '0'; + else + blank <= vblank; + row_addr <= std_logic_vector(unsigned(row_addr)+v_stride); + addr <= row_addr; + end if; + elsif h = h_active then + blank <= '1'; + elsif h = h_sync_start then + hsync <= '1'; + elsif h = h_sync_end then + hsync <= '0'; + else + addr <= std_logic_vector(unsigned(addr)+h_stride); + end if; + end if; + end process; + + h_grid <= '1' when (h mod 8) = 0 + else '0'; + + v_grid <= '1' when (v mod 8) = 0 + else '0'; + + + addr_out <= addr; + blank_out <= blank; + hsync_out <= hsync; + vsync_out <= vsync; + +end beh; + + + diff --git a/fpga/hp_lcd_driver/output_stage.vhdl b/fpga/hp_lcd_driver/output_stage.vhdl new file mode 100644 index 0000000..831e9f8 --- /dev/null +++ b/fpga/hp_lcd_driver/output_stage.vhdl @@ -0,0 +1,213 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +entity output_stage is + generic (target : string := "spartan6"; + debounce_stages : natural := 2; + sync_stages : natural := 2; + addr_width : natural := 17; + h_front_porch : natural := 208; + h_active : natural := 384; + h_sync_start : natural := 400; + h_sync_end : natural := 440; + h_total : natural := 600; + v_active : natural := 592; + v_sync_start : natural := 593; + v_sync_end : natural := 596; + v_total : natural := 614; + h_stride : natural := 1; + v_stride : natural := 384 + ); + port + ( + clk_locked : in std_logic; + clk : in std_logic; + clk_x2 : in std_logic; + clk_phy : in std_logic; + sys_rst_n : in std_logic; + + vsync_in : in std_logic; + + addr_out : out std_logic_vector(addr_width - 1 downto 0); + + 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); + + + r_out : out std_logic; + g_out : out std_logic; + b_out : out std_logic; + hsync_out : out std_logic; + vsync_out : out std_logic; + + hdmi_c_p : out std_logic; + hdmi_c_n : out std_logic; + hdmi_r_p : out std_logic; + hdmi_r_n : out std_logic; + hdmi_g_p : out std_logic; + hdmi_g_n : out std_logic; + hdmi_b_p : out std_logic; + hdmi_b_n : out std_logic + ); +end output_stage; + + +architecture beh of output_stage is + + + signal s_vsync_in : std_logic; + signal d_vsync_in : std_logic; + + signal blank : std_logic; + + signal hsync : std_logic; + signal vsync : std_logic; + + signal addr : std_logic_vector(addr_width - 1 downto 0); + + signal r : std_logic_vector(7 downto 0); + signal g : std_logic_vector(7 downto 0); + signal b : std_logic_vector(7 downto 0); + + signal h_grid : std_logic; + signal v_grid : std_logic; + + signal r_p10 : std_logic_vector(9 downto 0); + signal g_p10 : std_logic_vector(9 downto 0); + signal b_p10 : std_logic_vector(9 downto 0); + signal c_p10 : std_logic_vector(9 downto 0); + + +begin + + + vsync_sync : entity work.synchronizer + generic map(stages => sync_stages) + port map ( + clk => clk, + i => vsync_in, + o => s_vsync_in + ); + + vsync_debounce : entity work.debounce + generic map(stages => debounce_stages) + port map( + clk => clk, + i => s_vsync_in, + o => d_vsync_in); + + + output_formatter : entity work.output_formatter + generic map( + addr_width => addr_width, + h_active => h_active, + h_sync_start => h_sync_start, + h_sync_end => h_sync_end, + h_total => h_total, + v_active => v_active, + v_sync_start => v_sync_start, + v_sync_end => v_sync_end, + v_total => v_total, + h_stride => h_stride, + v_stride => v_stride + ) + port map ( + sys_rst_n => sys_rst_n, + clk => clk, + vsync_in => d_vsync_in, + addr_out => addr, + blank_out => blank, + vsync_out => vsync, + hsync_out => hsync, + h_grid => h_grid, + v_grid => v_grid + ); + + + addr_out <= addr; + + + r <=r_in; + g <=g_in; + b <=b_in; + + +-- r<=x"00" when h_grid='0' +-- else x"ff"; + +-- g<=x"00" when v_grid='0' +-- else x"ff"; + + + + + + analog : entity work.output_analog + port map( + sys_rst_n => sys_rst_n, + + clk => clk, + + hsync_in => hsync, + vsync_in => vsync, + blank_in => blank, + r_in => g(7), + g_in => r(7), + b_in => b(7), + + r_out => r_out, + g_out => g_out, + b_out => b_out, + hsync_out => hsync_out, + vsync_out => vsync_out + ); + + + tmds_e : entity work.tmds_encode port map ( + sys_rst_n => sys_rst_n, + pclk => clk, + + r_in => r, + g_in => g, + b_in => b, + hsync => hsync, + vsync => vsync, + blank => blank, + + r_p10 => r_p10, + g_p10 => g_p10, + b_p10 => b_p10, + c_p10 => c_p10 + + ); + + + tmds_o : entity work.tmds_output + port map ( + sys_rst_n => sys_rst_n, + pclk_locked => clk_locked, + pclk => clk, + pclk_x2 => clk_x2, + pclk_phy => clk_phy, + + r_p10 => r_p10, + g_p10 => g_p10, + b_p10 => b_p10, + c_p10 => c_p10, + + tmds_c_out_p => hdmi_c_p, + tmds_c_out_n => hdmi_c_n, + tmds_r_out_p => hdmi_r_p, + tmds_r_out_n => hdmi_r_n, + tmds_g_out_p => hdmi_g_p, + tmds_g_out_n => hdmi_g_n, + tmds_b_out_p => hdmi_b_p, + tmds_b_out_n => hdmi_b_n + ); + + + + +end beh; diff --git a/fpga/hp_lcd_driver/prog b/fpga/hp_lcd_driver/prog new file mode 100755 index 0000000..c0e433c --- /dev/null +++ b/fpga/hp_lcd_driver/prog @@ -0,0 +1,6 @@ +#!/bin/bash + + +OPENOCD="/root/projects/hp_instrument_lcds/fpga/prefix/bin/openocd -f interface/altera-usb-blaster.cfg -f ep4ce15.cfg" +${OPENOCD} -c quit + diff --git a/fpga/hp_lcd_driver/relpath.mk b/fpga/hp_lcd_driver/relpath.mk new file mode 100644 index 0000000..ee42901 --- /dev/null +++ b/fpga/hp_lcd_driver/relpath.mk @@ -0,0 +1,35 @@ +override define \s := +$() $() +endef + +ifndef $(\s) +override $(\s) := +else +$(error Defined special variable '$(\s)': reserved for internal use) +endif + +override define dirname +$(patsubst %/,%,$(dir $(patsubst %/,%,$1))) +endef + +override define prefix_1 +$(if $(or $\ +$(patsubst $(abspath $3)%,,$(abspath $1)),$\ +$(patsubst $(abspath $3)%,,$(abspath $2))),$\ +$(strip $(call prefix_1,$1,$2,$(call dirname,$3))),$\ +$(strip $(abspath $3))) +endef + +override define prefix +$(call prefix_1,$1,$2,$1) +endef + +override define relpath_1 +$(patsubst /%,%,$(subst $(\s),/,$(patsubst %,..,$(subst /,$(\s),$\ +$(patsubst $3%,%,$(abspath $2)))))$\ +$(patsubst $3%,%,$(abspath $1))) +endef + +override define relpath +$(call relpath_1,$1,$2,$(call prefix,$1,$2)) +endef diff --git a/fpga/hp_lcd_driver/scripts/vhdl-pretty b/fpga/hp_lcd_driver/scripts/vhdl-pretty new file mode 100755 index 0000000..c514b85 --- /dev/null +++ b/fpga/hp_lcd_driver/scripts/vhdl-pretty @@ -0,0 +1,60 @@ +#! /bin/sh +":"; exec emacs --no-site-file --script "$0" -- "$0" "$@" # -*-emacs-lisp-*- +; vim: noai:ts=4:sw=4:syntax=lisp + +(setq arg0 (file-truename (car (cdr argv)))) +(setq args (cdr (cdr argv))) +(setq argv nil) + +; Parse the command line arguments, +; --xxx -> ("xxx" t) +; --no-xxx -> ("xxx" nil) +; --xxx=123 -> ("xxx" 123) +; --xxx=abc -> ("xxx" "abc") +; --xxx='abc 123' -> ("xxx" "abc 123") +; --xxx=abc=123 -> ("xxx" "abc=123") +(setq args + (mapcar + (lambda (arg) + (cond + ((string-match "^--no-\\([^=]*\\)$" arg) + (list (intern (match-string 1 arg)) nil)) + ((string-match "^--\\([^=]*\\)$" arg) + (list (intern (match-string 1 arg)) t)) + ((string-match "^--\\([^=]*\\)=\\([\"']?\\)\\([0-9]+\\)\\2$" arg) + (list (intern (match-string 1 arg)) (string-to-number (match-string 3 arg)))) + ((string-match "^--\\([^=]*\\)=\\([\"']?\\)\\(.+?\\)\\2$" arg) + (list (intern (match-string 1 arg)) (match-string 3 arg))) + (t nil) + )) + args)) + +; Read stdin into buffer +(defun insert-standard-input () + "insert contents from standard input" + (condition-case nil + (let (line) + (while (setq line (read-from-minibuffer "")) + (insert line "\n"))) + (error nil))) + +(insert-standard-input) +(goto-char (point-min)) + +; Load library +(setq basedir (concat (file-name-directory arg0) "vhdl-mode")) +(setq load-path (cons basedir load-path)) +(load-library "vhdl-mode") + +; Default customisation +(vhdl-set-style "IEEE") + +; Customisation from cmdline +(mapc (lambda (arg) (customize-set-variable (car arg) (car (cdr arg)))) args) + +; Turn on mode and beautify +(vhdl-mode) +(vhdl-beautify-region (point-min) (point-max)) + +; Output buffer to stdout +(princ (buffer-string)) diff --git a/fpga/hp_lcd_driver/serdes_n_to_1_spartan6.vhdl b/fpga/hp_lcd_driver/serdes_n_to_1_spartan6.vhdl new file mode 100644 index 0000000..01fc578 --- /dev/null +++ b/fpga/hp_lcd_driver/serdes_n_to_1_spartan6.vhdl @@ -0,0 +1,118 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +library UNISIM; +use UNISIM.vcomponents.all; + + +entity serdes_n_to_1_spartan6 is + generic ( + SF : natural := 8 + ); + port ( + + ioclk : in std_logic; + serdesstrobe : in std_logic; + reset : in std_logic; + gclk : in std_logic; + datain : in std_logic_vector(SF-1 downto 0); + iob_data_out : out std_logic + ); +end serdes_n_to_1_spartan6; + + +architecture beh of serdes_n_to_1_spartan6 is + + signal cascade_di : std_logic; + signal cascade_do : std_logic; + signal cascade_ti : std_logic; + signal cascade_to : std_logic; + signal mdatain : std_logic_vector(8 downto 0); + +begin + + datain_for_1 : for b in 0 to SF -1 generate + mdatain(b) <= datain(b); + end generate; + + datain_for_2 : for b in SF to 8 generate + mdatain(b) <= '0'; + end generate; + +-- mdatain <= ( SF-1 downto 0 => datain, others =>'0'); + + oserdes_m : OSERDES2 + generic map ( + DATA_WIDTH => SF, + DATA_RATE_OQ => "SDR", + DATA_RATE_OT => "SDR", + SERDES_MODE => "MASTER", + OUTPUT_MODE => "DIFFERENTIAL" + ) + port map ( + OQ => iob_data_out, + OCE => '1', + CLK0 => ioclk, + CLK1 => '0', + IOCE => serdesstrobe, + RST => reset, + CLKDIV => gclk, + D4 => mdatain(7), + D3 => mdatain(6), + D2 => mdatain(5), + D1 => mdatain(4), +-- TQ => , + T1 => '0', + T2 => '0', + T3 => '0', + T4 => '0', + TRAIN => '0', + TCE => '1', + SHIFTIN1 => '1', -- Dummy input in Master + SHIFTIN2 => '1', -- Dummy input in Master + SHIFTIN3 => cascade_do, -- Cascade output D data from slave + SHIFTIN4 => cascade_to, -- Cascade output T data from slave + SHIFTOUT1 => cascade_di, -- Cascade input D data to slave + SHIFTOUT2 => cascade_ti -- Cascade input T data to slave +-- SHIFTOUT3 => , -- Dummy output in Master +-- SHIFTOUT4 => -- Dummy output in Master + ); + + oserdes_s : OSERDES2 + generic map ( + DATA_WIDTH => SF, -- SERDES word width. This should match the setting is BUFPLL + DATA_RATE_OQ => "SDR", -- <SDR>, DDR + DATA_RATE_OT => "SDR", -- <SDR>, DDR + SERDES_MODE => "SLAVE", -- <DEFAULT>, MASTER, SLAVE + OUTPUT_MODE => "DIFFERENTIAL" + ) + port map ( +-- OQ => , + OCE => '1', + CLK0 => ioclk, + CLK1 => '0', + IOCE => serdesstrobe, + RST => reset, + CLKDIV => gclk, + D4 => mdatain(3), + D3 => mdatain(2), + D2 => mdatain(1), + D1 => mdatain(0), +-- TQ => , + T1 => '0', + T2 => '0', + T3 => '0', + T4 => '0', + TRAIN => '0', + TCE => '1', + SHIFTIN1 => cascade_di, -- Cascade input D from Master + SHIFTIN2 => cascade_ti, -- Cascade input T from Master + SHIFTIN3 => '1', -- Dummy input in Slave + SHIFTIN4 => '1', -- Dummy input in Slave +-- SHIFTOUT1 => , -- Dummy output in Slave +-- SHIFTOUT2 => , -- Dummy output in Slave + SHIFTOUT3 => cascade_do, -- Cascade output D data to Master + SHIFTOUT4 => cascade_to); -- Cascade output T data to Master + +end beh; diff --git a/fpga/hp_lcd_driver/spartan6.mk b/fpga/hp_lcd_driver/spartan6.mk new file mode 100644 index 0000000..0d0f90e --- /dev/null +++ b/fpga/hp_lcd_driver/spartan6.mk @@ -0,0 +1,129 @@ +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_spartan6 +VSRCS=synchronizer.vhdl debounce.vhdl edge_det.vhdl input_formatter.vhdl input_stage.vhdl output_formatter.vhdl output_analog.vhdl serdes_n_to_1_spartan6.vhdl tmds_encoder.vhdl tmds_phy_spartan6.vhdl tmds_encode.vhdl tmds_output_spartan6.vhdl vram_spartan6.vhdl output_stage.vhdl clkgen_spartan6.vhdl hp_lcd_driver.vhdl +UCF=hp_lcd_driver.ucf +UT=hp_lcd_driver.ut +IPSRCS=vram_spartan6_impl.xco +DESIGN_NAME=${TOP} +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= + +XST_FLAGS=${INTSTYLE} +NGDBUILD_FLAGS=${INTSTYLE} -p ${PART} -dd _ngo -nt timestamp +MAP_FLAGS=${INTSTYLE} -p ${PART} -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off -pr off -lc off -power off +PAR_FLAGS=${INTSTYLE} -w -ol high -mt off +TRCE_FLAGS=${INTSTYLE} -v 3 -s 2 -n 3 -fastpaths +BITGEN_FLAGS=${INTSTYLE} + + + +GEN_VSRCS=${IPSRCS:%.xco=${BUILD}/%.vhd} +BASE=${BUILD}/${DESIGN_NAME} +XST=${BASE}.xst +PRJ=${BASE}.prj +SYR=${BASE}.syr +NGC=${BASE}.ngc +NGD=${BASE}.ngd +MAP_NCD=${BASE}_map.ncd +NCD=${BASE}.ncd +PCF=${BASE}.pcf +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 + + + +default: ${NCD} ${TWR} ${TWX} ${BIT} ${SVF} + +clean: + /bin/rm -rf ${BUILD} *.orig *~ + +${PRJ}: ${VSRCS} ${GEN_VSRCS} + mkdir -p ${BUILD} + rm -f $@ + for file in $(GEN_VSRCS) ${VSRCS}; do \ + echo "vhdl work $$(realpath -m --relative-to=${BUILD} $${file})" >> $@ ; \ + done ; + +${NGC}:${XST} + (cd ${BUILD} && mkdir -p ${XST_DIR} ${XST_TMPDIR} && ${ISE_BINDIR_64}/xst ${XST_FLAGS} -ifn $(call relpath,$<,${BUILD}) -ofn $(call relpath,${SYR},${BUILD})) + +${XST}: ${PRJ} ${DESIGN_NAME}.xst_template + rm -f $@ + echo 'set -tmpdir "${XST_TMPDIR}"' >> $@ + echo 'set -xsthdpdir "${XST_DIR}"' >> $@ + cat ${DESIGN_NAME}.xst_template >> $@ + echo "-ifn $(call relpath,${PRJ},${BUILD})" >> $@ + echo "-ofn $(call relpath,${BASE},${BUILD})" >> $@ + echo "-p ${PART}" >> $@ + echo "-top ${TOP}" >> $@ + +${NGD}:${NGC} ${UCF} + (cd ${BUILD} && ${ISE_BINDIR_64}/ngdbuild $(NGDBUILD_FLAGS) -uc $(call relpath,${UCF},${BUILD}) $(call relpath,${NGC},${BUILD}) $(call relpath,$@,${BUILD})) + +${MAP_NCD} ${PCF}:${NGD} + (cd ${BUILD} && ${ISE_BINDIR_64}/map $(MAP_FLAGS) -o $(call relpath,${MAP_NCD},${BUILD}) $(call relpath,${NGD},${BUILD}) $(call relpath,${PCF},${BUILD})) + +${NCD}: ${MAP_NCD} ${PCF} + (cd ${BUILD} && ${ISE_BINDIR_64}/par $(PAR_FLAGS) $(call relpath,${MAP_NCD},${BUILD}) $(call relpath,${NCD},${BUILD}) $(call relpath,${PCF},${BUILD})) + +${TWR} ${TWX}: ${NCD} ${PCF} + (cd ${BUILD} && ${ISE_BINDIR_64}/trce ${TRCE_FLAGS} -xml $(call relpath,${TWX},${BUILD}) $(call relpath,${NCD},${BUILD}) -o $(call relpath,${TWR},${BUILD}) $(call relpath,${PCF},${BUILD})) + +${BIT}:${NCD} ${UT} + (cd ${BUILD} && ${ISE_BINDIR_64}/bitgen ${BITGEN_FLAGS} -f $(call relpath,${UT},${BUILD}) $(call relpath,${NCD},${BUILD})) + +${SVF}:${BIT} + ( cd ${BUILD} && \ + echo -e "setMode -bs \n\ + setCable -p svf -file \"$(call relpath,${SVF},${BUILD})\" \n\ + addDevice -p 1 -file \"$(call relpath,${BIT},${BUILD})\" \n\ + program -p 1 \n\ + quit \n" > impact.run &&\ + ${ISE_BINDIR_64}/impact -batch impact.run) + + +${BUILD}/%.vhd:%.xco + mkdir -p ${BUILD} + (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/fpga/hp_lcd_driver/synchronizer.vhdl b/fpga/hp_lcd_driver/synchronizer.vhdl new file mode 100644 index 0000000..302cef9 --- /dev/null +++ b/fpga/hp_lcd_driver/synchronizer.vhdl @@ -0,0 +1,26 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +entity synchronizer is + generic (stages : natural := 2); + port (clk : in std_logic; + i : in std_logic; + o : out std_logic); +end synchronizer; + +architecture Behavioral of synchronizer is + signal flipflops : std_logic_vector(stages-1 downto 0) := (others => '0'); + attribute ASYNC_REG : string; + attribute ASYNC_REG of flipflops : signal is "true"; +begin + + o <= flipflops(flipflops'high); + + clk_proc : process(clk, flipflops, i) + begin + if rising_edge(clk) then + flipflops <= flipflops(flipflops'high-1 downto 0) & i; + end if; + end process; + +end Behavioral; diff --git a/fpga/hp_lcd_driver/tmds_encode.vhdl b/fpga/hp_lcd_driver/tmds_encode.vhdl new file mode 100644 index 0000000..fe69a56 --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_encode.vhdl @@ -0,0 +1,73 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + + +entity tmds_encode is + port ( + sys_rst_n : in std_logic; + pclk : 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); + hsync : in std_logic; + vsync : in std_logic; + blank : in std_logic; + + + r_p10 : out std_logic_vector(9 downto 0); + g_p10 : out std_logic_vector(9 downto 0); + b_p10 : out std_logic_vector(9 downto 0); + c_p10 : out std_logic_vector(9 downto 0) + + ); +end tmds_encode; + + +architecture beh of tmds_encode is + signal ctrl : std_logic_vector(1 downto 0); + +begin + + c_p10 <= "1111100000"; + + ctrl <= vsync & hsync; + + + enc_r : entity work.tmds_encoder + port map ( + sys_rst_n => sys_rst_n, + clk => pclk, + ctrl => ctrl, + blank => blank, + din => r_in, + dout => r_p10 + ); + + enc_g : entity work.tmds_encoder + port map ( + sys_rst_n => sys_rst_n, + clk => pclk, + ctrl => "11", + blank => blank, + din => g_in, + dout => g_p10 + ); + + + + enc_b : entity work.tmds_encoder + port map ( + sys_rst_n => sys_rst_n, + clk => pclk, + ctrl => "11", + blank => blank, + din => b_in, + dout => b_p10 + ); + + +end beh; + + diff --git a/fpga/hp_lcd_driver/tmds_encoder.vhdl b/fpga/hp_lcd_driver/tmds_encoder.vhdl new file mode 100644 index 0000000..40f8dd4 --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_encoder.vhdl @@ -0,0 +1,117 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity tmds_encoder is + port ( + clk : in std_logic; + sys_rst_n : in std_logic; + blank : in std_logic; + ctrl : in std_logic_vector(1 downto 0); + din : in std_logic_vector(7 downto 0); + dout : out std_logic_vector(9 downto 0) + ); +end tmds_encoder; + +architecture beh of tmds_encoder is + signal n_ones_din : integer range 0 to 8; + + signal xored, xnored : std_logic_vector(8 downto 0); + signal q_m : std_logic_vector(8 downto 0); + + -- a positive value represents the excess number of 1's that have been transmitted + -- a negative value represents the excess number of 0's that have been transmitted + signal disparity : signed(3 downto 0) := to_signed(0, 4); + -- difference between 1's and 0's (/2 since the last bit is never used) + signal diff : signed(3 downto 0) := to_signed(0, 4); + +begin + + -- ones counter for input data + process(din) is + variable c : integer range 0 to 8; + begin + c := 0; + for i in 0 to 7 loop + if din(i) = '1' then + c := c + 1; + end if; + end loop; + n_ones_din <= c; + end process; + + -- create xor encodings + xored(0) <= din(0); + encode_xor : for i in 1 to 7 generate + begin + xored(i) <= din(i) xor xored(i - 1); + end generate; + xored(8) <= '1'; + + -- create xnor encodings + xnored(0) <= din(0); + encode_xnor : for i in 1 to 7 generate + begin + xnored(i) <= din(i) xnor xnored(i - 1); + end generate; + xnored(8) <= '0'; + + -- use xnored or xored data based on the ones + q_m <= xnored when n_ones_din > 4 or (n_ones_din = 4 and din(0) = '0') else xored; + + -- ones counter for internal data + process(q_m) is + variable c : integer range 0 to 8; + begin + c := 0; + for i in 0 to 7 loop + if q_m(i) = '1' then + c := c + 1; + end if; + end loop; + diff <= to_signed(c-4, 4); + end process; + + process(clk) is + begin + if rising_edge(clk) then + if blank = '1' then + case ctrl is + when "00" => dout <= "1101010100"; + when "01" => dout <= "0010101011"; + when "10" => dout <= "0101010100"; + when others => dout <= "1010101011"; + end case; + disparity <= (others => '0'); + else + if disparity = 0 or diff = 0 then + -- xnored data + if q_m(8) = '0' then + dout <= "10" & not q_m(7 downto 0); + disparity <= disparity - diff; + -- xored data + else + dout <= "01" & q_m(7 downto 0); + disparity <= disparity + diff; + end if; + elsif (diff(diff'left) = '0' and disparity(disparity'left) = '0') or + (diff(diff'left) = '1' and disparity(disparity'left) = '1') then + dout <= '1' & q_m(8) & not q_m(7 downto 0); + if q_m(8) = '1' then + disparity <= disparity + 1 - diff; + else + disparity <= disparity - diff; + end if; + else + dout <= '0' & q_m; + if q_m(8) = '1' then + disparity <= disparity + diff; + else + disparity <= disparity - 1 + diff; + end if; + end if; + end if; + end if; + end process; +end beh; + diff --git a/fpga/hp_lcd_driver/tmds_output_cyclone4.vhdl b/fpga/hp_lcd_driver/tmds_output_cyclone4.vhdl new file mode 100644 index 0000000..8d71bd8 --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_output_cyclone4.vhdl @@ -0,0 +1,95 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +entity tmds_output is + port ( + sys_rst_n : in std_logic; + pclk_locked : in std_logic; + pclk : in std_logic; + pclk_x2 : in std_logic; + pclk_phy : in std_logic; + + r_p10 : in std_logic_vector(9 downto 0); + g_p10 : in std_logic_vector(9 downto 0); + b_p10 : in std_logic_vector(9 downto 0); + c_p10 : in std_logic_vector(9 downto 0); + + + tmds_c_out_p : out std_logic; + tmds_c_out_n : out std_logic; + tmds_r_out_p : out std_logic; + tmds_r_out_n : out std_logic; + tmds_g_out_p : out std_logic; + tmds_g_out_n : out std_logic; + tmds_b_out_p : out std_logic; + tmds_b_out_n : out std_logic + ); +end tmds_output; + + +architecture beh of tmds_output is + + signal b : natural := 0; + +begin + + + + process (pclk_phy, b, sys_rst_n) + begin + if sys_rst_n = '0' then + b <= 0; + elsif rising_edge(pclk_phy) then + if b = 4 then + b <= 0; + else + b <= b+1; + end if; + end if; + end process; + + + phy_c : entity work.tmds_phy_cyclone4 + port map ( + sys_rst_n => sys_rst_n, + pclk_phy => pclk_phy, + b => b, + din => c_p10, + tmds_out_p => tmds_c_out_p, + tmds_out_n => tmds_c_out_n + ); + + phy_r : entity work.tmds_phy_cyclone4 + port map ( + sys_rst_n => sys_rst_n, + pclk_phy => pclk_phy, + b => b, + din => r_p10, + tmds_out_p => tmds_r_out_p, + tmds_out_n => tmds_r_out_n + ); + + + phy_g : entity work.tmds_phy_cyclone4 + port map ( + sys_rst_n => sys_rst_n, + pclk_phy => pclk_phy, + b => b, + din => g_p10, + tmds_out_p => tmds_g_out_p, + tmds_out_n => tmds_g_out_n + ); + + + phy_b : entity work.tmds_phy_cyclone4 + port map ( + sys_rst_n => sys_rst_n, + pclk_phy => pclk_phy, + b => b, + din => b_p10, + tmds_out_p => tmds_b_out_p, + tmds_out_n => tmds_b_out_n + ); + +end beh; diff --git a/fpga/hp_lcd_driver/tmds_output_spartan6.vhdl b/fpga/hp_lcd_driver/tmds_output_spartan6.vhdl new file mode 100644 index 0000000..9307563 --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_output_spartan6.vhdl @@ -0,0 +1,121 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +library UNISIM; +use UNISIM.vcomponents.all; + + +entity tmds_output is + port ( + sys_rst_n : in std_logic; + pclk_locked : in std_logic; + pclk : in std_logic; + pclk_x2 : in std_logic; + pclk_phy : in std_logic; + + r_p10 : in std_logic_vector(9 downto 0); + g_p10 : in std_logic_vector(9 downto 0); + b_p10 : in std_logic_vector(9 downto 0); + c_p10 : in std_logic_vector(9 downto 0); + + + tmds_c_out_p : out std_logic; + tmds_c_out_n : out std_logic; + tmds_r_out_p : out std_logic; + tmds_r_out_n : out std_logic; + tmds_g_out_p : out std_logic; + tmds_g_out_n : out std_logic; + tmds_b_out_p : out std_logic; + tmds_b_out_n : out std_logic + ); +end tmds_output; + + +architecture beh of tmds_output is + + + signal phy_reset : std_logic; + signal upper : std_logic; + signal pll_locked : std_logic; + signal ioclk : std_logic; + signal serdesstrobe : std_logic; + +begin + phy_reset <= not sys_rst_n or not pll_locked; + + process (pclk_x2, phy_reset) + begin + if phy_reset = '1' then + upper <= '1'; + elsif rising_edge(pclk_x2) then + upper <= not upper; + end if; + end process; + + + ioclk_buf : BUFPLL generic map (DIVIDE => 5) + port map ( + PLLIN => pclk_phy, + GCLK => pclk_x2, + LOCKED => pclk_locked, + IOCLK => ioclk, + SERDESSTROBE => serdesstrobe, + LOCK => pll_locked); + + + phy_c : entity work.tmds_phy_spartan6 + port map ( + reset => phy_reset, + pclk_x2 => pclk_x2, + serdesstrobe => serdesstrobe, + ioclk => ioclk, + upper => upper, + din => c_p10, + tmds_out_p => tmds_c_out_p, + tmds_out_n => tmds_c_out_n + ); + + phy_r : entity work.tmds_phy_spartan6 + port map ( + reset => phy_reset, + pclk_x2 => pclk_x2, + serdesstrobe => serdesstrobe, + ioclk => ioclk, + upper => upper, + din => r_p10, + tmds_out_p => tmds_r_out_p, + tmds_out_n => tmds_r_out_n + ); + + + phy_g : entity work.tmds_phy_spartan6 + port map ( + reset => phy_reset, + pclk_x2 => pclk_x2, + serdesstrobe => serdesstrobe, + ioclk => ioclk, + upper => upper, + din => g_p10, + tmds_out_p => tmds_g_out_p, + tmds_out_n => tmds_g_out_n + ); + + + phy_b : entity work.tmds_phy_spartan6 + port map ( + reset => phy_reset, + pclk_x2 => pclk_x2, + serdesstrobe => serdesstrobe, + ioclk => pclk_phy, + upper => upper, + din => b_p10, + tmds_out_p => tmds_b_out_p, + tmds_out_n => tmds_b_out_n + ); + + + + + +end beh; diff --git a/fpga/hp_lcd_driver/tmds_phy_cyclone4.vhdl b/fpga/hp_lcd_driver/tmds_phy_cyclone4.vhdl new file mode 100644 index 0000000..6160636 --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_phy_cyclone4.vhdl @@ -0,0 +1,91 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +library altera_mf; +use altera_mf.altera_mf_components.all; + +entity tmds_phy_cyclone4 is + port ( + sys_rst_n : in std_logic; + pclk_phy : in std_logic; + b : natural; + din : in std_logic_vector(9 downto 0); + tmds_out_p : out std_logic; + tmds_out_n : out std_logic + ); +end tmds_phy_cyclone4; + + +architecture beh of tmds_phy_cyclone4 is + + + signal d_rise : std_logic_vector(4 downto 0); + signal d_fall : std_logic_vector(4 downto 0); + + signal out_p : std_logic_vector(0 downto 0); + signal out_n : std_logic_vector(0 downto 0); + + signal bb : natural; + +begin + + + process (pclk_phy) + begin + if rising_edge(pclk_phy) then + if b = 4 then + d_rise <= (4 => din(8), 3 => din(6), 2 => din(4), 1 => din(2), 0 => din(0)); + d_fall <= (4 => din(9), 3 => din(7), 2 => din(5), 1 => din(3), 0 => din(1)); + --d_rise <= (4 => din(1), 3 => din(3), 2 => din(5), 1 => din(7), 0 => din(9)); + --d_fall <= (4 => din(0), 3 => din(2), 2 => din(4), 1 => din(6), 0 => din(8)); + else + d_rise(3 downto 0) <= d_rise(4 downto 1); + d_fall(3 downto 0) <= d_fall(4 downto 1); + end if; + end if; + end process; + + + obuf_p : ALTDDIO_OUT + generic map ( + extend_oe_disable => "OFF", + intended_device_family => "Cyclone IV E", + invert_output => "OFF", + lpm_hint => "UNUSED", + lpm_type => "altddio_out", + oe_reg => "UNREGISTERED", + power_up_high => "OFF", + width => 1 + ) + port map ( + aclr => not sys_rst_n, + datain_h => d_rise(0 downto 0), + datain_l => d_fall(0 downto 0), + outclock => not pclk_phy, + dataout => out_p + ); + tmds_out_p <= out_p(0); + + obuf_n : ALTDDIO_OUT + generic map ( + extend_oe_disable => "OFF", + intended_device_family => "Cyclone IV E", + invert_output => "OFF", + lpm_hint => "UNUSED", + lpm_type => "altddio_out", + oe_reg => "UNREGISTERED", + power_up_high => "OFF", + width => 1 + ) + port map ( + aclr => not sys_rst_n, + datain_h => not d_rise(0 downto 0), + datain_l => not d_fall(0 downto 0), + outclock => not pclk_phy, + dataout => out_n + ); + tmds_out_n <= out_n(0); + + +end beh; diff --git a/fpga/hp_lcd_driver/tmds_phy_spartan6.vhdl b/fpga/hp_lcd_driver/tmds_phy_spartan6.vhdl new file mode 100644 index 0000000..1f3d77e --- /dev/null +++ b/fpga/hp_lcd_driver/tmds_phy_spartan6.vhdl @@ -0,0 +1,67 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.all; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity tmds_phy_spartan6 is + port ( + reset : in std_logic; + pclk_x2 : in std_logic; + ioclk : in std_logic; + serdesstrobe : in std_logic; + din : in std_logic_vector(9 downto 0); + upper : in std_logic; + tmds_out_p : out std_logic; + tmds_out_n : out std_logic + ); +end tmds_phy_spartan6; + + +architecture beh of tmds_phy_spartan6 is + + signal din_s : std_logic_vector(9 downto 0); + signal p5_n : std_logic_vector(4 downto 0); + signal p5 : std_logic_vector(4 downto 0); + signal s : std_logic; + + + +begin + + process (pclk_x2) + begin + if rising_edge(pclk_x2) then + if upper = '1' then + din_s <= din; + p5 <= din_s(9 downto 5); + p5_n <= din_s(4 downto 0); + else + p5 <= p5_n; + end if; + end if; + end process; + + + serdes : entity work.serdes_n_to_1_spartan6 + generic map(SF => 5) + port map ( + ioclk => ioclk, + serdesstrobe => serdesstrobe, + reset => reset, + gclk => pclk_x2, + datain => p5, + iob_data_out => s + ); + + obuf : OBUFDS + generic map (IOSTANDARD => "TMDS_33") + port map ( + I => s, + O => tmds_out_p, + OB => tmds_out_n + ); + + +end beh; diff --git a/fpga/hp_lcd_driver/vram_cyclone4.vhdl b/fpga/hp_lcd_driver/vram_cyclone4.vhdl new file mode 100644 index 0000000..bafb6b5 --- /dev/null +++ b/fpga/hp_lcd_driver/vram_cyclone4.vhdl @@ -0,0 +1,35 @@ +library ieee; +use ieee.std_logic_1164.all; + +entity vram is + generic ( + addr_width : natural := 17; + video_width : natural := 2 + ); + port ( + wr_clk : in std_logic; + wr_en : in std_logic; + wr_addr : in std_logic_vector(addr_width-1 downto 0); + wr_data : in std_logic_vector(video_width-1 downto 0); + rd_clk : in std_logic; + rd_addr : in std_logic_vector(addr_width-1 downto 0); + rd_data : out std_logic_vector(video_width-1 downto 0) + ); +end vram; + +architecture beh of vram is +begin + + + + vram_impl0 : entity work.vram_cyclone4_impl + port map ( + wrclock => wr_clk, + wren => wr_en, + wraddress => wr_addr, + data => wr_data, + rdclock => rd_clk, + q => rd_data, + rdaddress => rd_addr + ); +end beh; diff --git a/fpga/hp_lcd_driver/vram_cyclone4_impl.vhdl b/fpga/hp_lcd_driver/vram_cyclone4_impl.vhdl new file mode 100644 index 0000000..aea5b80 --- /dev/null +++ b/fpga/hp_lcd_driver/vram_cyclone4_impl.vhdl @@ -0,0 +1,231 @@ +-- megafunction wizard: %RAM: 2-PORT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: vram_cyclone4_impl.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2013 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY vram_cyclone4_impl IS + PORT + ( + data : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + rdaddress : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + rdclock : IN STD_LOGIC ; + wraddress : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + wrclock : IN STD_LOGIC := '1'; + wren : IN STD_LOGIC := '0'; + q : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END vram_cyclone4_impl; + + +ARCHITECTURE SYN OF vram_cyclone4_impl IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (1 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + address_aclr_b : STRING; + address_reg_b : STRING; + clock_enable_input_a : STRING; + clock_enable_input_b : STRING; + clock_enable_output_b : STRING; + intended_device_family : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + numwords_b : NATURAL; + operation_mode : STRING; + outdata_aclr_b : STRING; + outdata_reg_b : STRING; + power_up_uninitialized : STRING; + widthad_a : NATURAL; + widthad_b : NATURAL; + width_a : NATURAL; + width_b : NATURAL; + width_byteena_a : NATURAL + ); + PORT ( + address_a : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + clock0 : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); + wren_a : IN STD_LOGIC ; + address_b : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + clock1 : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(1 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_aclr_b => "NONE", + address_reg_b => "CLOCK1", + clock_enable_input_a => "BYPASS", + clock_enable_input_b => "BYPASS", + clock_enable_output_b => "BYPASS", + intended_device_family => "Cyclone IV E", + lpm_type => "altsyncram", + numwords_a => 228096, + numwords_b => 228096, + operation_mode => "DUAL_PORT", + outdata_aclr_b => "NONE", + outdata_reg_b => "UNREGISTERED", + power_up_uninitialized => "FALSE", + widthad_a => 18, + widthad_b => 18, + width_a => 2, + width_b => 2, + width_byteena_a => 1 + ) + PORT MAP ( + address_a => wraddress, + clock0 => wrclock, + data_a => data, + wren_a => wren, + address_b => rdaddress, + clock1 => rdclock, + q_b => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLRdata NUMERIC "0" +-- Retrieval info: PRIVATE: CLRq NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrren NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwren NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "1" +-- Retrieval info: PRIVATE: Clock_A NUMERIC "0" +-- Retrieval info: PRIVATE: Clock_B NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "456192" +-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "" +-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3" +-- Retrieval info: PRIVATE: REGdata NUMERIC "1" +-- Retrieval info: PRIVATE: REGq NUMERIC "1" +-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGrren NUMERIC "1" +-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGwren NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +-- Retrieval info: PRIVATE: VarWidth NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "2" +-- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "2" +-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "2" +-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "2" +-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: enable NUMERIC "0" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "228096" +-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "228096" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED" +-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "18" +-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "18" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "2" +-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "2" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: USED_PORT: data 0 0 2 0 INPUT NODEFVAL "data[1..0]" +-- Retrieval info: USED_PORT: q 0 0 2 0 OUTPUT NODEFVAL "q[1..0]" +-- Retrieval info: USED_PORT: rdaddress 0 0 18 0 INPUT NODEFVAL "rdaddress[17..0]" +-- Retrieval info: USED_PORT: rdclock 0 0 0 0 INPUT NODEFVAL "rdclock" +-- Retrieval info: USED_PORT: wraddress 0 0 18 0 INPUT NODEFVAL "wraddress[17..0]" +-- Retrieval info: USED_PORT: wrclock 0 0 0 0 INPUT VCC "wrclock" +-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren" +-- Retrieval info: CONNECT: @address_a 0 0 18 0 wraddress 0 0 18 0 +-- Retrieval info: CONNECT: @address_b 0 0 18 0 rdaddress 0 0 18 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 wrclock 0 0 0 0 +-- Retrieval info: CONNECT: @clock1 0 0 0 0 rdclock 0 0 0 0 +-- Retrieval info: CONNECT: @data_a 0 0 2 0 data 0 0 2 0 +-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 2 0 @q_b 0 0 2 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL vram_cyclone4_impl.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vram_cyclone4_impl.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vram_cyclone4_impl.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vram_cyclone4_impl.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vram_cyclone4_impl.vhd FALSE diff --git a/fpga/hp_lcd_driver/vram_spartan6.vhdl b/fpga/hp_lcd_driver/vram_spartan6.vhdl new file mode 100644 index 0000000..801cc0a --- /dev/null +++ b/fpga/hp_lcd_driver/vram_spartan6.vhdl @@ -0,0 +1,36 @@ +library ieee; +use ieee.std_logic_1164.all; + +entity vram is + generic ( + addr_width : natural := 17; + video_width : natural := 2 + ); + port ( + wr_clk : in std_logic; + wr_en : in std_logic; + wr_addr : in std_logic_vector(addr_width-1 downto 0); + wr_data : in std_logic_vector(video_width-1 downto 0); + rd_clk : in std_logic; + rd_addr : in std_logic_vector(addr_width-1 downto 0); + rd_data : out std_logic_vector(video_width-1 downto 0) + ); +end vram; + +architecture beh of vram is + signal wr_en_v : std_logic_vector(0 downto 0); +begin + + wr_en_v(0) <= wr_en; + + vram_impl0 : entity work.vram_spartan6_impl + port map ( + clka => wr_clk, + wea => wr_en_v, + addra => wr_addr, + dina => wr_data, + clkb => rd_clk, + doutb => rd_data, + addrb => rd_addr + ); +end beh; diff --git a/fpga/hp_lcd_driver/vram_spartan6_impl.xco b/fpga/hp_lcd_driver/vram_spartan6_impl.xco new file mode 100644 index 0000000..131955a --- /dev/null +++ b/fpga/hp_lcd_driver/vram_spartan6_impl.xco @@ -0,0 +1,108 @@ +############################################################## +# +# Xilinx Core Generator version 14.7 +# Date: Mon Apr 28 10:29:36 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:blk_mem_gen:7.3 +# +############################################################## +# +# 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 Block_Memory_Generator xilinx.com:ip:blk_mem_gen:7.3 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=false +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=vram_spartan6_impl +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_32bit_address=false +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=false +CSET mem_file=no_Mem_file_loaded +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=2 +CSET read_width_b=2 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_bram_block=Stand_Alone +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=228096 +CSET write_width_a=2 +CSET write_width_b=2 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2012-11-19T16:22:25Z +# END Extra information +GENERATE +# CRC: 10ea0a8c diff --git a/fpga/hp_lcd_driver/xilinx_ise_vivado_license.lic b/fpga/hp_lcd_driver/xilinx_ise_vivado_license.lic new file mode 100644 index 0000000..7bbf3f3 --- /dev/null +++ b/fpga/hp_lcd_driver/xilinx_ise_vivado_license.lic @@ -0,0 +1,868 @@ + +INCREMENT VIVADO_HLS xilinxd 2037.05 permanent uncounted AF3E86892AA2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER="Xilinx \ + Inc" START=19-May-2016 TS_OK +INCREMENT Vivado_System_Edition xilinxd 2037.05 permanent uncounted \ + A1074C37F742 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER="Xilinx Inc" START=19-May-2016 TS_OK +PACKAGE Vivado_System_Edition xilinxd 2037.05 DFF4A65E0A68 \ + COMPONENTS="ISIM ChipScopePro_SIOTK PlanAhead ChipscopePro XPS \ + ISE HLS_Synthesis AccelDSP Vivado Rodin_Synthesis \ + Rodin_Implementation Rodin_SystemBuilder \ + PartialReconfiguration AUTOESL_FLOW AUTOESL_CC AUTOESL_OPT \ + AUTOESL_SC AUTOESL_XILINX petalinux_arch_ppc \ + petalinux_arch_microblaze petalinux_arch_zynq ap_sdsoc SDK \ + SysGen Simulation Implementation Analyzer HLS Synthesis \ + VIVADO_HLS" OPTIONS=SUITE + + +# 2037年之前的任何ISE_Vivado版本(包括HLS、AccelDSP、System Generator、软硬CPU、SOC、嵌入式Linux、重配置等等功能)都是永久使用。使用本license文件时要改名,文件名不能有汉字和空格。 + +#MAIN +INCREMENT System_Edition xilinxd 2025.01 permanent uncounted \ + 6C8EE4B2A5BE \ + VENDOR_STRING=something@my.door,System_Edition,software,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT Web_Package xilinxd 2025.01 permanent uncounted \ + 4CB6784CF723 \ + VENDOR_STRING=something@my.door,Web_Package,software,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +PACKAGE System_Edition xilinxd 2025.01 51F6657975B5 COMPONENTS="SDK \ + ChipScopePro_SIOTK ChipscopePro ISE ISIM PlanAhead SysGen XPS" \ + OPTIONS=SUITE +PACKAGE Web_Package xilinxd 2025.01 D1C67FF037CB \ + COMPONENTS="PlanAhead WebPACK" OPTIONS=SUITE +#EDK +FEATURE apu_fpu_v2 xilinxd 1.0 permanent uncounted 49CB1C5D466A \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE apu_fpu_virtex5_v1 xilinxd 1.0 permanent uncounted \ + D41053462B13 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE plbv46_pci_v1 xilinxd 1.0 permanent uncounted 56FD6B9024B2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE plbv46_pcie_v3 xilinxd 1.0 permanent uncounted 3F39D2AE803E \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE soft_temac_wrap_v1 xilinxd 1.0 permanent uncounted \ + 45D636F49F20 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE soft_temac_wrap_v2 xilinxd 1.0 permanent uncounted \ + 37A8FB9B23BB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_can_v1 xilinxd 1.0 permanent uncounted 8E1B02F8CB45 \ + VENDOR_STRING=License_Type:Design_Linking HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_can_v2 xilinxd 1.0 permanent uncounted 77ABB39C3ADF \ + VENDOR_STRING=License_Type:Design_Linking HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_ethernetlite_v1 xilinxd 1.0 permanent uncounted \ + 0DCC01521040 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_flexray_v1 xilinxd 1.0 permanent uncounted AA37F2812760 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_iic_v1 xilinxd 1.0 permanent uncounted EED8E0E0018C \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_iic_v2 xilinxd 1.0 permanent uncounted 63E02FDD85DD \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_ll_temac_v1 xilinxd 1.0 permanent uncounted 7E111B83BB69 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_ll_temac_v2 xilinxd 1.0 permanent uncounted 88BD20FC443A \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_most_nic_v1 xilinxd 1.0 permanent uncounted BA4709E5F490 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_uart16550_v1 xilinxd 1.0 permanent uncounted 0C6D10C38436 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_usb2_device_v1 xilinxd 1.0 permanent uncounted \ + 141B341EFE6A VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_usb2_device_v2 xilinxd 1.0 permanent uncounted \ + D92DB54D5681 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_usb_host_v1 xilinxd 1.0 permanent uncounted 6F1DA718F354 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT apu_fpu xilinxd 2010.12 permanent uncounted 2C6A6D42FC89 \ + VENDOR_STRING=License_Type:Bought;ipman,apu_fpu,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT apu_fpu_virtex5 xilinxd 2010.12 permanent uncounted \ + 8AA0D8A0A339 \ + VENDOR_STRING=License_Type:Bought;ipman,apu_fpu_virtex5,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_can xilinxd 2010.12 permanent uncounted B4A7C19BD640 \ + VENDOR_STRING=License_Type:Bought;ipman,axi_can,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_avb xilinxd 2010.12 permanent uncounted \ + 6AA937C38B65 \ + VENDOR_STRING=License_Type:Bought;ipman,axi_ethernet_avb,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_soft_10_100 xilinxd 2010.12 permanent \ + uncounted D1C592DFD090 \ + VENDOR_STRING=License_Type:Bought;ipman,axi_ethernet_soft_10_100,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_soft_tri_mode xilinxd 2010.12 permanent \ + uncounted 8AFAD52B3C3A \ + VENDOR_STRING=License_Type:Bought;ipman,axi_ethernet_soft_tri_mode,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_usb2_device xilinxd 2010.12 permanent uncounted \ + B72B1D505BFB \ + VENDOR_STRING=License_Type:Bought;ipman,axi_usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plbv46_pci xilinxd 2010.12 permanent uncounted 7BC0367205FB \ + VENDOR_STRING=License_Type:Bought;ipman,plbv46_pci,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plbv46_pcie xilinxd 2010.12 permanent uncounted \ + F313A29B6200 \ + VENDOR_STRING=License_Type:Bought;ipman,plbv46_pcie,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT soft_temac_wrap xilinxd 2010.12 permanent uncounted \ + 2E4EA3E01CCA \ + VENDOR_STRING=License_Type:Bought;ipman,soft_temac_wrap,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_can xilinxd 2010.12 permanent uncounted 8C06535606A5 \ + VENDOR_STRING=License_Type:Design_Linking;ipman,xps_can,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_ethernetlite xilinxd 2010.12 permanent uncounted \ + 98C63ECABD43 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_ethernetlite,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_flexray xilinxd 2010.12 permanent uncounted \ + 2FB61CC9BFE3 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_flexray,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_iic xilinxd 2010.12 permanent uncounted 7792183B7803 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_iic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_ll_temac xilinxd 2010.12 permanent uncounted \ + 9E0A2391B893 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_ll_temac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_most_nic xilinxd 2010.12 permanent uncounted \ + 5B82136421A9 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_most_nic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_uart16550 xilinxd 2010.12 permanent uncounted \ + 74B573AFD22C \ + VENDOR_STRING=License_Type:Bought;ipman,xps_uart16550,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_usb2_device xilinxd 2010.12 permanent uncounted \ + F4141DA8D544 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_usb_host xilinxd 2010.12 permanent uncounted \ + DD8B0EB760B3 \ + VENDOR_STRING=License_Type:Bought;ipman,xps_usb_host,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +#IP CORES +FEATURE 10_100_mb_eth_mac xilinxd 1.0 permanent uncounted \ + C155278E954B VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE apu_fpu_v2 xilinxd 1.0 permanent uncounted 49CB1C5D466A \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE apu_fpu_virtex5_v1 xilinxd 1.0 permanent uncounted \ + D41053462B13 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE aurora_64b66b_v1 xilinxd 1.0 permanent uncounted A87221E7C7B8 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE aurora_64b66b_v2 xilinxd 1.0 permanent uncounted 7596D93CA4DD \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE aurora_8b10b_v4 xilinxd 1.0 permanent uncounted AF06E0CF5751 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE aurora_v2 xilinxd 1.0 permanent uncounted 48434BC22B38 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE aurora_v3 xilinxd 1.0 permanent uncounted CF62F4C7210F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE dvb_s2_fec_encoder_v1 xilinxd 1.0 permanent uncounted \ + B957BB3FC6C6 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE eth_avb_endpoint_v1 xilinxd 1.0 permanent uncounted \ + 641124009D45 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ethernet_statistics_v1 xilinxd 1.0 permanent uncounted \ + 0F85FE160A70 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ethernet_statistics_v2 xilinxd 1.0 permanent uncounted \ + C0BDA2E3CEA8 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ethernet_statistics_v3 xilinxd 1.0 permanent uncounted \ + 81A7AE68EE34 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v10 xilinxd 1.0 permanent uncounted \ + 679ADFFD1E3C VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v3_0 xilinxd 1.0 permanent uncounted \ + BE9B7A7C8FD7 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v4_0 xilinxd 1.0 permanent uncounted \ + 4B0F1F06CC87 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v5_0 xilinxd 1.0 permanent uncounted \ + 1BCF1420A98F VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v6 xilinxd 1.0 permanent uncounted \ + 9F483E2C0758 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v7 xilinxd 1.0 permanent uncounted \ + 856FCB2B4F7F VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v8 xilinxd 1.0 permanent uncounted \ + 3750281AF3EA VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE gig_eth_pcs_pma_v9 xilinxd 1.0 permanent uncounted \ + 700C9DB10351 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE most_nic_v1 xilinxd 1.0 permanent uncounted A5FF4D552CAC \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1 xilinxd 1.0 permanent uncounted 184072BBFE41 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1_00_j xilinxd 1.0 permanent uncounted \ + 134290B8334B VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1_00_k xilinxd 1.0 permanent uncounted \ + B5642988E8CE VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1_00_l xilinxd 1.0 permanent uncounted \ + F96E4AA4695D VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1_00_m xilinxd 1.0 permanent uncounted \ + FAE3832C7680 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernet_v1_01_a xilinxd 1.0 permanent uncounted \ + F63FE6F2AD60 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernetlite_v1 xilinxd 1.0 permanent uncounted \ + 8D06BF0FF2CB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_ethernetlite_v1_00_a xilinxd 1.0 permanent uncounted \ + AD438F704CA3 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_iic_v1 xilinxd 1.0 permanent uncounted 4457C1305EE4 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_iic_v1_01_a xilinxd 1.0 permanent uncounted 8B7E0B5925E9 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_iic_v1_01_b xilinxd 1.0 permanent uncounted BD6D3456C21E \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_pci_v1 xilinxd 1.0 permanent uncounted 2F7FE7722B7F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_pci_v1_00_a xilinxd 1.0 permanent uncounted D96660173AC3 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_pci_v1_00_b xilinxd 1.0 permanent uncounted 4F108D0CAF24 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_pci_v1_00_c xilinxd 1.0 permanent uncounted 36659A25B03D \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_uart16550_v1 xilinxd 1.0 permanent uncounted 4727022880BD \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE opb_uart16550_v1_00_c xilinxd 1.0 permanent uncounted \ + CA1CF007709B VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE opb_usb2_device_v1 xilinxd 1.0 permanent uncounted \ + 456AFEF10E09 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE pci32_sp_v3_0 xilinxd 1.0 permanent uncounted 3569A6CA93F9 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci32_sp_v3_1 xilinxd 1.0 permanent uncounted 002DEAFC109C \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci32_v4 xilinxd 1.0 permanent uncounted 1B7B5C5454FA \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci32_vx_v3_0 xilinxd 1.0 permanent uncounted 5DA21C837B61 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci32_vx_v3_1 xilinxd 1.0 permanent uncounted 2197482D4A2E \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_sp_v3_0 xilinxd 1.0 permanent uncounted F48202EAA461 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_sp_v3_1 xilinxd 1.0 permanent uncounted 33A18EF8F930 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_v3_0 xilinxd 1.0 permanent uncounted 820C2FFB2D7B \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_v3_1 xilinxd 1.0 permanent uncounted 42CC9AF42DE4 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_v4 xilinxd 1.0 permanent uncounted DF558BE27D63 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_vx_v3_0 xilinxd 1.0 permanent uncounted 866F0C4B54B5 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci64_vx_v3_1 xilinxd 1.0 permanent uncounted 26AD3021DBFE \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pci_express_v3 xilinxd 1.0 permanent uncounted 411DF26D12AC \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcie_blk_plus_v1 xilinxd 1.0 permanent uncounted A0F69789D453 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcie_pipe_v1 xilinxd 1.0 permanent uncounted 4718088F9ED0 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcix64_v5_0 xilinxd 1.0 permanent uncounted 6D318519D8A7 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcix64_v5_1 xilinxd 1.0 permanent uncounted D0989320B8AD \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcix_v6 xilinxd 1.0 permanent uncounted C3D5C1B1832F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pcix_v6 xilinxd 1.0 permanent uncounted C3D5C1B1832F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_lite_v3 xilinxd 1.0 permanent uncounted B8111115AB1F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_lite_v4 xilinxd 1.0 permanent uncounted 3954CB3063E1 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v6 xilinxd 1.0 permanent uncounted 7FF4667FB12C \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v7_0 xilinxd 1.0 permanent uncounted 0FF066DE534B \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v7_1 xilinxd 1.0 permanent uncounted EF9E3283CCA8 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v7_2 xilinxd 1.0 permanent uncounted 581C3664E14D \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v7_3 xilinxd 1.0 permanent uncounted 5B895A813AE2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v7_4 xilinxd 1.0 permanent uncounted CC056E528F67 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v8 xilinxd 1.0 permanent uncounted AE85EE354D70 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE pl4_v9 xilinxd 1.0 permanent uncounted 6A65864AD564 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE plb_ethernet_v1 xilinxd 1.0 permanent uncounted DAB487807E2C \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE plb_ethernet_v1_00_a xilinxd 1.0 permanent uncounted \ + AFAA62330628 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE plb_pci_v1 xilinxd 1.0 permanent uncounted 78DFC23D19A7 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE plb_temac_v1 xilinxd 1.0 permanent uncounted 23DAFBF08E01 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE plb_uart16550_v1_00_b xilinxd 1.0 permanent uncounted \ + E5601D14673E VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE plb_uart16550_v1_00_c xilinxd 1.0 permanent uncounted \ + 7E98F1EA2A1B VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE plbv46_pci_v1 xilinxd 1.0 permanent uncounted 56FD6B9024B2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rach_3gpp_v1 xilinxd 1.0 permanent uncounted 92A5C704F378 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rio_log_io_v3 xilinxd 1.0 permanent uncounted 28AF836971F0 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rio_log_io_v4 xilinxd 1.0 permanent uncounted 32A3975FB68F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rio_log_io_v5 xilinxd 1.0 permanent uncounted 4834D359A3B2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_decoder_v4_0 xilinxd 1.0 permanent uncounted F16B5F2BDBD0 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_decoder_v4_1 xilinxd 1.0 permanent uncounted C6E6BCAC888D \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_decoder_v5_0 xilinxd 1.0 permanent uncounted 5C72ED9FEE3B \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_decoder_v5_1 xilinxd 1.0 permanent uncounted B7EEFEA4C3C4 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_decoder_v6 xilinxd 1.0 permanent uncounted 5DE6AA5A935B \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_encoder_v4_0 xilinxd 1.0 permanent uncounted 84728CBDBE09 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_encoder_v4_1 xilinxd 1.0 permanent uncounted 76D6F3A40130 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_encoder_v5_0 xilinxd 1.0 permanent uncounted 227AA68D35A0 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE rs_encoder_v6 xilinxd 1.0 permanent uncounted 799525121092 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE s6_pcie_v1 xilinxd 1.0 permanent uncounted E9E23E29A077 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE searcher_3gpp_v1 xilinxd 1.0 permanent uncounted 267795F52001 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE sid_v3_0 xilinxd 1.0 permanent uncounted 91826E4DCAC5 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE sid_v3_1 xilinxd 1.0 permanent uncounted 98269EF471E8 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE sid_v4_0 xilinxd 1.0 permanent uncounted D4C022AC0485 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE sid_v5 xilinxd 1.0 permanent uncounted 2D591CC91654 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE soft_temac_wrap_v2 xilinxd 1.0 permanent uncounted \ + 37A8FB9B23BB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE soft_temac_wrap_v2 xilinxd 1.0 permanent uncounted \ + 37A8FB9B23BB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE soft_temac_wrap_v2 xilinxd 1.0 permanent uncounted \ + 37A8FB9B23BB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE spi3_link_v4 xilinxd 1.0 permanent uncounted 6550AE2CC217 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE spi3_link_v5 xilinxd 1.0 permanent uncounted 22535DFC8904 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE srio_phy_v3 xilinxd 1.0 permanent uncounted 34E2C6A82394 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE srio_phy_v4 xilinxd 1.0 permanent uncounted 261404DFFBD2 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE srio_phy_v5 xilinxd 1.0 permanent uncounted F945D29A3318 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE tcc_dec_802_16e_v3 xilinxd 1.0 permanent uncounted \ + FC46344344AC VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_decoder_3gpp_v1 xilinxd 1.0 permanent uncounted \ + 761B026F8431 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_decoder_3gpp_v2 xilinxd 1.0 permanent uncounted \ + 220CD044F00B VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_decoder_3gpp_v3 xilinxd 1.0 permanent uncounted \ + C277560D4485 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_decoder_v1_0 xilinxd 1.0 permanent uncounted B3CD1B8D082D \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE tcc_decoder_v2 xilinxd 1.0 permanent uncounted 78B087547630 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE tcc_enc_802_16e_v1 xilinxd 1.0 permanent uncounted \ + B13AE37DF0F3 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_enc_802_16e_v2 xilinxd 1.0 permanent uncounted \ + A8110686F018 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_enc_802_16e_v3 xilinxd 1.0 permanent uncounted \ + 5542B94784B9 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpp2_v2 xilinxd 1.0 permanent uncounted \ + 55E5506FF871 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpp_v1 xilinxd 1.0 permanent uncounted \ + 7E9021CF8A68 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpp_v2 xilinxd 1.0 permanent uncounted \ + 37DAC3400AE6 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpp_v3 xilinxd 1.0 permanent uncounted \ + D05CED8DEA04 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpplte_v1 xilinxd 1.0 permanent uncounted \ + FA954EDC6644 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpplte_v2 xilinxd 1.0 permanent uncounted \ + AF13A26D2A84 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_3gpplte_v3 xilinxd 1.0 permanent uncounted \ + B8AEC6BA9228 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tcc_encoder_v1_0 xilinxd 1.0 permanent uncounted 10A6DCAD9032 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE tcc_encoder_v2 xilinxd 1.0 permanent uncounted C6303E8E8AB7 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v3_0 xilinxd 1.0 permanent uncounted \ + FE7FA96DC209 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v4_0 xilinxd 1.0 permanent uncounted \ + 3D78BE7FFB09 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v5_0 xilinxd 1.0 permanent uncounted \ + D9F32B313CF9 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v6 xilinxd 1.0 permanent uncounted \ + 52B1F49A5E44 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v7 xilinxd 1.0 permanent uncounted \ + 54D45175AACB VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v8 xilinxd 1.0 permanent uncounted \ + CF5B3E18723E VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE ten_gig_eth_mac_v9 xilinxd 1.0 permanent uncounted \ + D7585BCBE6BD VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tri_mode_eth_mac_v1_1 xilinxd 1.0 permanent uncounted \ + C7CEA08BDCFC VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tri_mode_eth_mac_v2 xilinxd 1.0 permanent uncounted \ + ABE76A88CA6E VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tri_mode_eth_mac_v3 xilinxd 1.0 permanent uncounted \ + 5CDF9C53F240 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE tri_mode_eth_mac_v4 xilinxd 1.0 permanent uncounted \ + 7D33C6DEFA42 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE usb2_device_v1 xilinxd 1.0 permanent uncounted 413A962BB3B5 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v4_emac_v4 xilinxd 1.0 permanent uncounted E8CD590D5F95 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v5_emac_v1 xilinxd 1.0 permanent uncounted 6B43DBDEA624 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v6_emac_v1 xilinxd 1.0 permanent uncounted 3389D292C586 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v6_pcie_v1 xilinxd 1.0 permanent uncounted 66C26376108D \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_ccm_v1 xilinxd 1.0 permanent uncounted FC78EA17EC44 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_cfa_v1 xilinxd 1.0 permanent uncounted CCE695B50743 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_gamma_v1 xilinxd 1.0 permanent uncounted 7D443B085222 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_manr_v1_0 xilinxd 1.0 permanent uncounted B69F9899DF26 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_osd_v1_0 xilinxd 1.0 permanent uncounted 922B5A27966E \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_rgb2ycrcb_v2 xilinxd 1.0 permanent uncounted 5A9EC2D65098 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_scaler_v1_0 xilinxd 1.0 permanent uncounted 839E598E6B7E \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_spc_v1 xilinxd 1.0 permanent uncounted AEDBBF85573B \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_stats xilinxd 1.0 permanent uncounted 45D5B2867638 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_vdma_v1_0 xilinxd 1.0 permanent uncounted 6D2FE7B1C430 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE v_ycrcb2rgb_v2 xilinxd 1.0 permanent uncounted 2199142CE967 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE viterbi_v3_0 xilinxd 1.0 permanent uncounted 1C1BD96E4B3F \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE viterbi_v4_0 xilinxd 1.0 permanent uncounted 80C17A0C8067 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE viterbi_v5 xilinxd 1.0 permanent uncounted 7CB89938A6A7 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE viterbi_v6 xilinxd 1.0 permanent uncounted 4BB4AA973E36 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE viterbi_v7 xilinxd 1.0 permanent uncounted CD72C7F24265 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v3_0 xilinxd 1.0 permanent uncounted 84FF2CB438C8 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v4_0 xilinxd 1.0 permanent uncounted 1A3375A18383 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v5_0 xilinxd 1.0 permanent uncounted 73A816BAEAD6 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v6 xilinxd 1.0 permanent uncounted 0A133CCB48BE \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v7 xilinxd 1.0 permanent uncounted ABE4EFB22B11 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xaui_v8 xilinxd 1.0 permanent uncounted 95611EC9AE30 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_ethernetlite_v1 xilinxd 1.0 permanent uncounted \ + 0DCC01521040 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_iic_v1 xilinxd 1.0 permanent uncounted EED8E0E0018C \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_iic_v2 xilinxd 1.0 permanent uncounted 63E02FDD85DD \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_ll_temac_v1 xilinxd 1.0 permanent uncounted 7E111B83BB69 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_ll_temac_v2 xilinxd 1.0 permanent uncounted 88BD20FC443A \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_most_nic_v1 xilinxd 1.0 permanent uncounted BA4709E5F490 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_uart16550_v1 xilinxd 1.0 permanent uncounted 0C6D10C38436 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +FEATURE xps_usb2_device_v1 xilinxd 1.0 permanent uncounted \ + 141B341EFE6A VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_usb2_device_v2 xilinxd 1.0 permanent uncounted \ + D92DB54D5681 VENDOR_STRING=License_Type:Bought HOSTID=ANY \ + ISSUER=TBE TS_OK +FEATURE xps_usb_host_v1 xilinxd 1.0 permanent uncounted 6F1DA718F354 \ + VENDOR_STRING=License_Type:Bought HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT 10_100_mb_eth_mac xilinxd 2025.01 permanent uncounted \ + 530B99880011 \ + VENDOR_STRING=License_Type:Bought;something@my.door,10_100_mb_eth_mac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT apu_fpu_sp xilinxd 2025.01 permanent uncounted 90804736A408 \ + VENDOR_STRING=License_Type:Bought;something@my.door,apu_fpu_sp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT aurora xilinxd 2025.01 permanent uncounted 565A2C0C7C2A \ + VENDOR_STRING=License_Type:Bought;something@my.door,aurora,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT aurora_64b66b xilinxd 2025.01 permanent uncounted \ + 591AA0BA6328 \ + VENDOR_STRING=License_Type:Bought;something@my.door,aurora_64b66b,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT aurora_8b10b xilinxd 2025.01 permanent uncounted \ + 727E982720ED \ + VENDOR_STRING=License_Type:Bought;something@my.door,aurora_8b10b,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_avb xilinxd 2025.01 permanent uncounted \ + 39CB8CC302D3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,axi_ethernet_avb,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_soft_10_100 xilinxd 2025.01 permanent \ + uncounted 16BEB38BF8D3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,axi_ethernet_soft_10_100,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_ethernet_soft_tri_mode xilinxd 2025.01 permanent \ + uncounted 989C71D32E5A \ + VENDOR_STRING=License_Type:Bought;something@my.door,axi_ethernet_soft_tri_mode,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT axi_usb2_device xilinxd 2025.01 permanent uncounted \ + 9EB8203C9277 \ + VENDOR_STRING=License_Type:Bought;something@my.door,axi_usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT displayport xilinxd 2025.01 permanent uncounted \ + D667271F21FE \ + VENDOR_STRING=License_Type:Bought;something@my.door,displayport,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT dvb_s2_fec_encoder xilinxd 2025.01 permanent uncounted \ + 57185A1B59B9 \ + VENDOR_STRING=License_Type:Bought;something@my.door,dvb_s2_fec_encoder,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT eth_avb_endpoint xilinxd 2025.01 permanent uncounted \ + 89D4AEC801FA \ + VENDOR_STRING=License_Type:Bought;something@my.door,eth_avb_endpoint,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT ethernet_statistics xilinxd 2025.01 permanent uncounted \ + C7EF53BEE7E4 \ + VENDOR_STRING=License_Type:Bought;something@my.door,ethernet_statistics,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT gig_eth_pcs_pma xilinxd 2025.01 permanent uncounted \ + 22DFD29A428C \ + VENDOR_STRING=License_Type:Bought;something@my.door,gig_eth_pcs_pma,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT most_nic xilinxd 2025.01 permanent uncounted 16479405C7AB \ + VENDOR_STRING=License_Type:Bought;something@my.door,most_nic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_ethernet xilinxd 2025.01 permanent uncounted \ + 18DF3A8D91C0 \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_ethernet,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_ethernetlite xilinxd 2025.01 permanent uncounted \ + 1D4861BF7952 \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_ethernetlite,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_iic xilinxd 2025.01 permanent uncounted CEB24EBEE09C \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_iic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_pci xilinxd 2025.01 permanent uncounted D3F0B6E440EC \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_pci,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_uart16550 xilinxd 2025.01 permanent uncounted \ + 586CAB028EB2 \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_uart16550,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT opb_usb2_device xilinxd 2025.01 permanent uncounted \ + 136E687A284D \ + VENDOR_STRING=License_Type:Bought;something@my.door,opb_usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci32 xilinxd 2025.01 permanent uncounted A19660B1DB76 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci32,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci32_sp xilinxd 2025.01 permanent uncounted 7BE9110B4E9F \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci32_sp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci32_spng xilinxd 2025.01 permanent uncounted E20287D573B4 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci32_spng,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci32_vx xilinxd 2025.01 permanent uncounted 7747B83629D8 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci32_vx,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci64 xilinxd 2025.01 permanent uncounted 977B6022A12C \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci64,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci64_sp xilinxd 2025.01 permanent uncounted 5DC2AE9517C3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci64_sp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci64_vx xilinxd 2025.01 permanent uncounted B69DB7C2BAA8 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci64_vx,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pci_express xilinxd 2025.01 permanent uncounted \ + 6B3F1FF99514 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pci_express,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pcie_blk_plus xilinxd 2025.01 permanent uncounted \ + E72DFF1F5861 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pcie_blk_plus,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pcie_pipe xilinxd 2025.01 permanent uncounted 225F733BB141 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pcie_pipe,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pcix xilinxd 2025.01 permanent uncounted 23DE4C46E618 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pcix,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pcix64 xilinxd 2025.01 permanent uncounted EA7B350C665D \ + VENDOR_STRING=License_Type:Bought;something@my.door,pcix64,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pl4 xilinxd 2025.01 permanent uncounted 8106EA66CAE8 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pl4,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT pl4_lite xilinxd 2025.01 permanent uncounted 995F5573B6F6 \ + VENDOR_STRING=License_Type:Bought;something@my.door,pl4_lite,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plb_ethernet xilinxd 2025.01 permanent uncounted \ + 007A7B1D125D \ + VENDOR_STRING=License_Type:Bought;something@my.door,plb_ethernet,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plb_pci xilinxd 2025.01 permanent uncounted 32EC1D310E24 \ + VENDOR_STRING=License_Type:Bought;something@my.door,plb_pci,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plb_temac xilinxd 2025.01 permanent uncounted CBE222B89778 \ + VENDOR_STRING=License_Type:Bought;something@my.door,plb_temac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plb_uart16550 xilinxd 2025.01 permanent uncounted \ + 7015A7B42C58 \ + VENDOR_STRING=License_Type:Bought;something@my.door,plb_uart16550,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT plbv46_pci xilinxd 2025.01 permanent uncounted 3048B0E79082 \ + VENDOR_STRING=License_Type:Bought;something@my.door,plbv46_pci,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT rach_3gpp xilinxd 2025.01 permanent uncounted D4E3EEF966F9 \ + VENDOR_STRING=License_Type:Bought;something@my.door,rach_3gpp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT rio_log_io xilinxd 2025.01 permanent uncounted D03DCAAD36DF \ + VENDOR_STRING=License_Type:Bought;something@my.door,rio_log_io,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT rs_decoder xilinxd 2025.01 permanent uncounted 323D14438FEA \ + VENDOR_STRING=License_Type:Bought;something@my.door,rs_decoder,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT rs_encoder xilinxd 2025.01 permanent uncounted 270050C8EE93 \ + VENDOR_STRING=License_Type:Bought;something@my.door,rs_encoder,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT rxaui xilinxd 2025.01 permanent uncounted 52919CF58879 \ + VENDOR_STRING=License_Type:Bought;something@my.door,rxaui,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT s6_pcie xilinxd 2025.01 permanent uncounted 727B47881BC5 \ + VENDOR_STRING=License_Type:Bought;something@my.door,s6_pcie,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT searcher_3gpp xilinxd 2025.01 permanent uncounted \ + A65E15863F63 \ + VENDOR_STRING=License_Type:Bought;something@my.door,searcher_3gpp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT sid xilinxd 2025.01 permanent uncounted DD18B1416F16 \ + VENDOR_STRING=License_Type:Bought;something@my.door,sid,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT soft_temac_wrap xilinxd 2025.01 permanent uncounted \ + C20E0610E84C \ + VENDOR_STRING=License_Type:Bought;something@my.door,soft_temac_wrap,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT spi3_link xilinxd 2025.01 permanent uncounted A17BEC2CF1A1 \ + VENDOR_STRING=License_Type:Bought;something@my.door,spi3_link,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT srio_phy xilinxd 2025.01 permanent uncounted 66BC4648C9E1 \ + VENDOR_STRING=License_Type:Bought;something@my.door,srio_phy,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_dec_802_16e xilinxd 2025.01 permanent uncounted \ + C77D9486CA92 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_dec_802_16e,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_decoder xilinxd 2025.01 permanent uncounted \ + 536133697041 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_decoder,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_decoder_3gpp xilinxd 2025.01 permanent uncounted \ + 7C7749FC55D3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_decoder_3gpp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_enc_802_16e xilinxd 2025.01 permanent uncounted \ + F62DF6802691 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_enc_802_16e,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_encoder xilinxd 2025.01 permanent uncounted \ + 86740946E9B5 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_encoder,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_encoder_3gpp xilinxd 2025.01 permanent uncounted \ + 1A29EB794DE3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_encoder_3gpp,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_encoder_3gpp2 xilinxd 2025.01 permanent uncounted \ + 4C9F3033B817 \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_encoder_3gpp2,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tcc_encoder_3gpplte xilinxd 2025.01 permanent uncounted \ + 40068708EF3E \ + VENDOR_STRING=License_Type:Bought;something@my.door,tcc_encoder_3gpplte,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT ten_gig_eth_mac xilinxd 2025.01 permanent uncounted \ + 1FAAC4242080 \ + VENDOR_STRING=License_Type:Bought;something@my.door,ten_gig_eth_mac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT ten_gig_eth_pcs_pma xilinxd 2025.01 permanent uncounted \ + 97D1736C43D5 \ + VENDOR_STRING=License_Type:Bought;something@my.door,ten_gig_eth_pcs_pma,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tri_mode_eth_mac xilinxd 2025.01 permanent uncounted \ + BCE4C86624FE \ + VENDOR_STRING=License_Type:Bought;something@my.door,tri_mode_eth_mac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT tri_mode_eth_mac xilinxd 2025.01 permanent uncounted \ + BCE4C86624FE \ + VENDOR_STRING=License_Type:Bought;something@my.door,tri_mode_eth_mac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT usb2_device xilinxd 2025.01 permanent uncounted \ + B492256307F9 \ + VENDOR_STRING=License_Type:Bought;something@my.door,usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v4_emac xilinxd 2025.01 permanent uncounted 09145472B2AC \ + VENDOR_STRING=License_Type:Bought;something@my.door,v4_emac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v5_emac xilinxd 2025.01 permanent uncounted B6F1D74BCB8A \ + VENDOR_STRING=License_Type:Bought;something@my.door,v5_emac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v6_emac xilinxd 2025.01 permanent uncounted BD5156D8047C \ + VENDOR_STRING=License_Type:Bought;something@my.door,v6_emac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v6_pcie xilinxd 2025.01 permanent uncounted E9D666E705A1 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v6_pcie,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_ccm xilinxd 2025.01 permanent uncounted 7AD010DD28C0 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_ccm,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_cfa xilinxd 2025.01 permanent uncounted 9F715C28A85E \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_cfa,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_enhance xilinxd 2025.01 permanent uncounted E574A01CAEA2 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_enhance,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_gamma xilinxd 2025.01 permanent uncounted 25C9831933DC \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_gamma,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_ic xilinxd 2025.01 permanent uncounted 7D9B9C609F81 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_ic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_manr xilinxd 2025.01 permanent uncounted 4DEFCA0501FC \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_manr,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_noise xilinxd 2025.01 permanent uncounted AB4E3E6EFB2A \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_noise,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_osd xilinxd 2025.01 permanent uncounted 0081DED1457C \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_osd,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_rgb2ycrcb xilinxd 2025.01 permanent uncounted \ + 72C4AD19C087 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_rgb2ycrcb,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_scaler xilinxd 2025.01 permanent uncounted B8AC427C142E \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_scaler,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_spc xilinxd 2025.01 permanent uncounted 8987C422925A \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_spc,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_stats xilinxd 2025.01 permanent uncounted 5B29F97906AE \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_stats,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_timebase xilinxd 2025.01 permanent uncounted F0A664DD3BC1 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_timebase,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_vdma xilinxd 2025.01 permanent uncounted A1178EBC0A71 \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_vdma,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT v_ycrcb2rgb xilinxd 2025.01 permanent uncounted \ + 275D6501AAFF \ + VENDOR_STRING=License_Type:Bought;something@my.door,v_ycrcb2rgb,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT viterbi xilinxd 2025.01 permanent uncounted F1CE3A4935FB \ + VENDOR_STRING=License_Type:Bought;something@my.door,viterbi,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xaui xilinxd 2025.01 permanent uncounted 3F7D423C5949 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xaui,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_ethernetlite xilinxd 2025.01 permanent uncounted \ + 1F541E037D3B \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_ethernetlite,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_iic xilinxd 2025.01 permanent uncounted ECE50E8A14D2 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_iic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_ll_temac xilinxd 2025.01 permanent uncounted \ + 9916DCBF4FFE \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_ll_temac,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_most_nic xilinxd 2025.01 permanent uncounted \ + 808EB27FFF20 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_most_nic,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_uart16550 xilinxd 2025.01 permanent uncounted \ + CA0CCA55C2E3 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_uart16550,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_usb2_device xilinxd 2025.01 permanent uncounted \ + 21D83A343890 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_usb2_device,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK +INCREMENT xps_usb_host xilinxd 2025.01 permanent uncounted \ + 2170DE459192 \ + VENDOR_STRING=License_Type:Bought;something@my.door,xps_usb_host,ip,permanent,_0_0_0 \ + HOSTID=ANY ISSUER=TBE TS_OK |