From 7ab3e155746ae4b8fb5965db50f40b8a6dd42e54 Mon Sep 17 00:00:00 2001 From: David Banks Date: Thu, 9 Jan 2020 18:59:18 +0000 Subject: [PATCH] vhdl_YUV: Extend offset to 7 bits and eliminate fixed delay (v8.0) Change-Id: I84e26f1b968cb035c3371ca25812fb0d9bc54c4b --- src/cpld_yuv.c | 17 ++- src/scripts/Profiles/YUV/Spectrum_48K.txt | 2 +- .../cpld_firmware/6bit/YUV_CPLD_v80.xsvf | Bin 0 -> 53289 bytes vhdl_YUV_6bit/RGBtoHDMI.vhdl | 142 ++++++++++-------- vhdl_YUV_6bit/YUV_CPLD_v80.xsvf | Bin 0 -> 53289 bytes vhdl_YUV_6bit/fitting.notes | 11 ++ 6 files changed, 110 insertions(+), 62 deletions(-) create mode 100644 src/scripts/cpld_firmware/6bit/YUV_CPLD_v80.xsvf create mode 100644 vhdl_YUV_6bit/YUV_CPLD_v80.xsvf diff --git a/src/cpld_yuv.c b/src/cpld_yuv.c index b968876b..cdcd53eb 100644 --- a/src/cpld_yuv.c +++ b/src/cpld_yuv.c @@ -71,6 +71,7 @@ static int supports_alt_r = 0; /* Supports R channel inversion on alternate line static int supports_edge = 0; /* Selection of leading rather than trailing edge */ static int supports_clamptype = 0; /* Selection of back porch or sync tip clamping */ static int supports_delay = 0; /* A 0-3 pixel delay */ +static int supports_extended_delay = 0; /* A 0-15 pixel delay */ // invert state (not part of config) static int invert = 0; @@ -197,7 +198,7 @@ static void write_config(config_t *config) { // Use 4 bits of offset and 1 bit of delay sp |= (config->sp_offset & 15) << scan_len; scan_len += 4; - sp |= ((~config->delay >> 1) & 1) << scan_len; + sp |= ((~config->delay >> 1) & 1) << scan_len; scan_len += 1; } else { // Use 3 bits of offset and 2 bit of delay @@ -211,6 +212,11 @@ static void write_config(config_t *config) { scan_len += 4; } + if (supports_extended_delay) { + sp |= ((~config->delay >> 2) & 3) << scan_len; + scan_len += 2; + } + sp |= config->filter_c << scan_len; scan_len++; @@ -326,6 +332,9 @@ static void cpld_init(int version) { // CPLDv4 adds support for chroma subsampling // CPLDv5 adds support for inversion of R on alternative lines // CPLDv4 adds support for sync edge selection and 2-bit pixel delay + if (major >= 8) { + supports_extended_delay = 1; + } if (major >= 7) { supports_clamptype = 1; } @@ -624,7 +633,11 @@ static int cpld_get_divider() { } static int cpld_get_delay() { - return cpld_get_value(DELAY); + if (supports_extended_delay) { + return 0; + } else { + return cpld_get_value(DELAY); + } } static int cpld_frontend_info() { diff --git a/src/scripts/Profiles/YUV/Spectrum_48K.txt b/src/scripts/Profiles/YUV/Spectrum_48K.txt index 388c1eea..118cc29a 100644 --- a/src/scripts/Profiles/YUV/Spectrum_48K.txt +++ b/src/scripts/Profiles/YUV/Spectrum_48K.txt @@ -1,4 +1,4 @@ sampling=7,1,1,0,1,1,2,8,0,108,65,176,125,255,230,0,150 -geometry=52,54,272,200,384,288,1,1,3,8,7000000,448,5000,312,5,0 +geometry=68,54,272,200,384,288,1,1,3,8,7000000,448,5000,312,5,0 palette=Spectrum_48K_9_Col output_invert=2 diff --git a/src/scripts/cpld_firmware/6bit/YUV_CPLD_v80.xsvf b/src/scripts/cpld_firmware/6bit/YUV_CPLD_v80.xsvf new file mode 100644 index 0000000000000000000000000000000000000000..e32d03833a56840e20b2a6fe2315d18f56194345 GIT binary patch literal 53289 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 NEc7dd4pc}t|36e282kVL literal 0 HcmV?d00001 diff --git a/vhdl_YUV_6bit/RGBtoHDMI.vhdl b/vhdl_YUV_6bit/RGBtoHDMI.vhdl index 2455183c..59d5ad1e 100644 --- a/vhdl_YUV_6bit/RGBtoHDMI.vhdl +++ b/vhdl_YUV_6bit/RGBtoHDMI.vhdl @@ -49,31 +49,30 @@ architecture Behavorial of RGBtoHDMI is -- Version number: Design_Major_Minor -- Design: 0 = Normal CPLD, 1 = Alternative CPLD, 2=Atom CPLD, 3=YUV6847 CPLD - constant VERSION_NUM : std_logic_vector(11 downto 0) := x"375"; + constant VERSION_NUM : std_logic_vector(11 downto 0) := x"380"; -- NOTE: the difference between the leading and trailing offsets is -- 256 clks = 32 pixel clocks. - -- Default offset to start sampling at when using the leading edge of sync - constant leading_offset : unsigned(9 downto 0) := to_unsigned(1024 - 512, 10); - - -- Default offset to start sampling at when using the trailing edge of sync - constant trailing_offset : unsigned(9 downto 0) := to_unsigned(1024 - 256, 10); - -- Sampling points - constant INIT_SAMPLING_POINTS : std_logic_vector(12 downto 0) := "0000001100000"; + constant INIT_SAMPLING_POINTS : std_logic_vector(14 downto 0) := "000000110000000"; - -- The sampling counter runs at 8x pixel clock - signal counter : unsigned(9 downto 0); + -- The counter runs at 8x pixel clock and controls all aspects of sampling + signal counter : unsigned(6 downto 0); - signal clamp_counter : unsigned(1 downto 0); - signal start_clamp : std_logic; + -- This used to be the top bit of counter, but it's really logically seperate + -- It controls when psync is active + signal sampling : std_logic; + + -- The misc counter (used for VSYNC detection and Clamp) + signal misc_tick : std_logic; + signal misc_counter : unsigned(2 downto 0); -- Sample point register; - signal sp_reg : std_logic_vector(12 downto 0) := INIT_SAMPLING_POINTS; + signal sp_reg : std_logic_vector(14 downto 0) := INIT_SAMPLING_POINTS; -- Break out of sp_reg - signal offset : unsigned (4 downto 0); + signal offset : unsigned (6 downto 0); signal filter_C : std_logic; signal filter_L : std_logic; signal invert : std_logic; @@ -85,7 +84,6 @@ architecture Behavorial of RGBtoHDMI is -- State to determine whether to invert A signal inv_R : std_logic; - -- R/PA/PB processing pipeline signal AL1 : std_logic; signal AH1 : std_logic; @@ -118,6 +116,8 @@ architecture Behavorial of RGBtoHDMI is signal HS1 : std_logic; signal HS2 : std_logic; signal HS3 : std_logic; + signal HS4 : std_logic; + signal HS5 : std_logic; signal LL_S : std_logic; signal LH_S : std_logic; @@ -125,19 +125,20 @@ architecture Behavorial of RGBtoHDMI is signal sample_L : std_logic; signal sample_AB : std_logic; + signal sample_Q : std_logic; signal HS_counter : unsigned(1 downto 0); begin -- Offset is inverted as we count upwards to 0 - offset <= unsigned(sp_reg(4 downto 0) xor "11111"); - filter_C <= sp_reg(5); - filter_L <= sp_reg(6); - invert <= sp_reg(7); - subsam_C <= sp_reg(8); - alt_R <= sp_reg(9); - edge <= sp_reg(10); - clamp_size <= unsigned(sp_reg(12 downto 11)); + offset <= unsigned(sp_reg(6 downto 0) xor "1111111"); + filter_C <= sp_reg(7); + filter_L <= sp_reg(8); + invert <= sp_reg(9); + subsam_C <= sp_reg(10); + alt_R <= sp_reg(11); + edge <= sp_reg(12); + clamp_size <= unsigned(sp_reg(14 downto 13)); swap_bits <= FS_I when mux = '1' else '0'; @@ -222,31 +223,22 @@ begin end if; HS3 <= HS2; + HS4 <= HS3; + HS5 <= HS4; -- Counter is used to find sampling point for first pixel - if HS3 = '1' and HS2 = '0' then - -- leading edge, reset the counter to measure the sync pulse - counter <= leading_offset or offset; - if alt_R = '1' then - inv_R <= not inv_R; - else - inv_R <= '0'; - end if; - elsif HS3 = '0' and HS2 = '1' and edge = '0' then - -- trailing edge, if edge=0 (trailing) then reset the counter - counter <= trailing_offset or offset; - elsif counter(counter'left) = '1' then - -- if HS remains low of 1FF cycles, we have the Spectrum FS - -- (1FF cycles is 9.125 us) - if HS2 = '0' and "000" & counter(8 downto 0) = x"1FF" then - -- synchronise inv_R to frame sync pulse - if alt_R = '1' then - inv_R <= '1'; - end if; - end if; - counter <= counter + 1; + if (HS3 = '1' and HS2 = '0' and edge = '1') or (HS3 = '0' and HS2 = '1' and edge = '0') then + counter <= offset; else - counter(6 downto 0) <= counter(6 downto 0) + 1; + counter <= counter + 1; + end if; + + if HS3 = '0' and HS2 = '1' then + -- Stop sampling on the trailing edge of HSYNC + sampling <= '0'; + elsif HS2 = '1' and counter = "1111111" then + -- Start sampling when the counter expires + sampling <= '1'; end if; -- Registers for Chroma / Luma Filtering @@ -283,6 +275,12 @@ begin sample_L <= '0'; end if; + if counter(3 downto 0) = "1111" then + sample_Q <= '1'; + else + sample_Q <= '0'; + end if; + -- sample colour signal if sample_AB = '1' then AL <= AL_next; @@ -320,8 +318,8 @@ begin if version = '0' then quad <= VERSION_NUM; psync <= FS_I; - elsif counter(counter'left) = '0' then - if counter(3 downto 0) = "0000" then + elsif sampling = '1' then + if sample_Q = '1' then quad(11 downto 6) <= BL_next & LL_next & AL_next & BH_next & LH_next & AH_next; quad( 5 downto 0) <= BL & LL & AL & BH & LH & AH; end if; @@ -333,28 +331,54 @@ begin psync <= '0'; end if; - if HS3 = '0' and HS2 = '1' then - start_clamp <= '1'; + -- misc_counter has two uses: + -- + -- 1. During HSYNC it measures the duration of HSYNC as a crude + -- VSYNC detector, which is used for PAL inversion + -- 2. After HSYNC it determines the duration of the clamp counter + -- + -- Misc counter deccrements every 128 cycles + -- + -- HSYNC is nominally 4.7us long (~32 pixels == 256 cycles) + -- VSYNC is nominally 256 us long (1792 pixels == 14336 cycles) + + if counter = offset then + misc_tick <= '1'; else - start_clamp <= '0'; + misc_tick <= '0'; end if; - if start_clamp = '1' then - -- start at the trailing edge of HSYNC - clamp_counter <= clamp_size; - elsif clamp_counter /= "00" and counter(6 downto 0) = ("00" & offset) then - clamp_counter <= clamp_counter - 1; + if HS5 = '1' and HS4 = '0' then + -- leading edge, load misc_counter to measure HSYNC duration + misc_counter <= (others => '1'); + elsif HS5 = '0' and HS4 = '1' then + -- trailing edge, load misc_counter to generate clamp + misc_counter <= '0' & clamp_size; + elsif misc_tick = '1' and misc_counter /= 0 then + misc_counter <= misc_counter - 1; end if; - -- generate the clamp output - if clamp_size = "00" then + -- Generate the clamp output + if clamp_size = 0 then clamp <= not(HS1 or HS2); - elsif clamp_counter = "00" then + elsif misc_counter = 0 then clamp <= '0'; - else + elsif HS4 = '1' then clamp <= '1'; end if; + -- PAL Inversion + if alt_R <= '0' then + inv_R <= '0'; + elsif HS5 = '1' and HS4 = '0' then + -- leading edge, toggle PAL inversion if enabled + inv_R <= not inv_R; + elsif HS5 = '0' and misc_counter = 0 then + -- if HSYNC remains low for >= 7 * 128 cycles we have VSYNC + -- synchronise inv_R when VSYNC detected + inv_R <= '1'; + end if; + -- generate the csync output csync <= HS2; diff --git a/vhdl_YUV_6bit/YUV_CPLD_v80.xsvf b/vhdl_YUV_6bit/YUV_CPLD_v80.xsvf new file mode 100644 index 0000000000000000000000000000000000000000..e32d03833a56840e20b2a6fe2315d18f56194345 GIT binary patch literal 53289 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 NEc7dd4pc}t|36e282kVL literal 0 HcmV?d00001 diff --git a/vhdl_YUV_6bit/fitting.notes b/vhdl_YUV_6bit/fitting.notes index 46971f05..00c4332e 100644 --- a/vhdl_YUV_6bit/fitting.notes +++ b/vhdl_YUV_6bit/fitting.notes @@ -118,3 +118,14 @@ FB3 14/18 37/54 88/90 9/ 9* FB4 17/18 36/54 82/90 6/ 7 ----- ----- ----- ----- 66/72 137/216 294/360 29/34 + +Extend offset to 7 bits and eliminate fixed delay (v8.0) + +Function Mcells FB Inps Pterms IO +Block Used/Tot Used/Tot Used/Tot Used/Tot +FB1 18/18* 40/54 55/90 6/ 9 +FB2 18/18* 23/54 35/90 8/ 9 +FB3 17/18 34/54 90/90* 9/ 9* +FB4 17/18 39/54 84/90 6/ 7 + ----- ----- ----- ----- + 70/72 136/216 264/360 29/34