Fix up all known issues with interlaced video modes.
Guidelines are now correct. Audio meters are the correct sice.
This commit is contained in:
parent
26a416de67
commit
49e910957c
5 changed files with 59 additions and 44 deletions
|
|
@ -121,12 +121,6 @@
|
|||
<Attr Name="UsedIn" Val="simulation"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<File Path="$PPRDIR/src/symbol_dump.vhd">
|
||||
<FileInfo>
|
||||
<Attr Name="UsedIn" Val="synthesis"/>
|
||||
<Attr Name="UsedIn" Val="simulation"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<File Path="$PPRDIR/src/pixel_processing.vhd">
|
||||
<FileInfo>
|
||||
<Attr Name="UsedIn" Val="synthesis"/>
|
||||
|
|
@ -145,6 +139,13 @@
|
|||
<Attr Name="UsedIn" Val="simulation"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<File Path="$PPRDIR/src/symbol_dump.vhd">
|
||||
<FileInfo>
|
||||
<Attr Name="AutoDisabled" Val="1"/>
|
||||
<Attr Name="UsedIn" Val="synthesis"/>
|
||||
<Attr Name="UsedIn" Val="simulation"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<Config>
|
||||
<Option Name="DesignMode" Val="RTL"/>
|
||||
<Option Name="TopModule" Val="hdmi_design"/>
|
||||
|
|
|
|||
10
README.txt
10
README.txt
|
|
@ -44,16 +44,10 @@ Known issues:
|
|||
- Does not adjust PLL settings for input clock, so the PLL is run slightly out
|
||||
of spec.
|
||||
|
||||
- Image may re-sync after a few seconds if it receives errors.
|
||||
|
||||
- The audio meters are drawn twice as tall in interlaced modes
|
||||
|
||||
- A false VSYNC pulse is causing the meters to be displayed more than once when
|
||||
some content is shown. Very weird, but I want to leave this in for now so I can
|
||||
find the root cause.
|
||||
- Image may re-sync once after a few seconds if symbol errors are seen.
|
||||
|
||||
- There are timings errors, as generating 148.5MHz HDMI using the Artix-7 chip
|
||||
is actualy out of spec. Expect seven failing paths and about 20ns of negative
|
||||
is actually out of spec. Expect seven failing paths and about 20ns of negative
|
||||
slack.
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ level_proc: process(clk)
|
|||
end if;
|
||||
end if;
|
||||
|
||||
-- Drop the levels once each frame
|
||||
-- Signal to reduce (drop' the levels of the meters once each frame (of field for interlaced sources
|
||||
if last_vsync = '0' and in_vsync = '1' then
|
||||
pending_drop <= '1';
|
||||
drop_index <= (others => '1');
|
||||
|
|
@ -242,13 +242,21 @@ video_proc: process(clk)
|
|||
|
||||
-- The end of active video is used to increment the line count
|
||||
if last_blank = '0' and in_blank = '1' then
|
||||
line_count <= line_count + 1;
|
||||
if is_interlaced = '1' then
|
||||
line_count <= line_count + 2;
|
||||
else
|
||||
line_count <= line_count + 1;
|
||||
end if;
|
||||
col_count <= (others => '0');
|
||||
end if;
|
||||
|
||||
-- Reset the line count on falling vsync
|
||||
if last_vsync = '0' and in_vsync = '1' then
|
||||
line_count <= (others => '0');
|
||||
if last_vsync = '1' and in_vsync = '0' then
|
||||
if is_interlaced = '1' and is_second_field = '1' then
|
||||
line_count <= (0 => '1', others => '0');
|
||||
else
|
||||
line_count <= (others => '0');
|
||||
end if;
|
||||
end if;
|
||||
-- remember the hsync and vsync values
|
||||
last_vsync <= in_vsync;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ process(clk)
|
|||
out_red <= in_red;
|
||||
out_green <= in_green;
|
||||
out_blue <= in_blue;
|
||||
|
||||
|
||||
if enable_feature = '1' then
|
||||
if h_size = 1280 then
|
||||
if hcount = 426 or hcount = 854 then
|
||||
|
|
@ -132,19 +132,26 @@ process(clk)
|
|||
end if;
|
||||
end if;
|
||||
|
||||
-------------------------------------------------------------
|
||||
-- Count the number of lines in a frame (not field!!!)
|
||||
-------------------------------------------------------------
|
||||
if last_blank = '0' and in_blank = '1' then
|
||||
vcount <= vcount + 1;
|
||||
end if;
|
||||
|
||||
-------------------------------------------------------------
|
||||
-- Use the falling edge of VSYNC to to capture the number of
|
||||
-- lines on the screen, as the rising edge is where the
|
||||
-- interaced field is detected and can be a bit unstable.
|
||||
-------------------------------------------------------------
|
||||
if in_vsync = '0' and last_vsync = '1' and is_second_field = '0'then
|
||||
vcount <= (others => '0');
|
||||
v_size <= vcount;
|
||||
end if;
|
||||
|
||||
-------------------------------------------------------------
|
||||
-- Count the width of the frame
|
||||
-------------------------------------------------------------
|
||||
if in_blank = '1' then
|
||||
if hcount /= 0 then
|
||||
h_size <= hcount;
|
||||
|
|
|
|||
|
|
@ -272,12 +272,14 @@ i_hdmi_io: hdmi_io port map (
|
|||
-------------------------------
|
||||
-- VGA data recovered from HDMI
|
||||
-------------------------------
|
||||
in_blank => in_blank,
|
||||
in_hsync => in_hsync,
|
||||
in_vsync => in_vsync,
|
||||
in_red => in_red,
|
||||
in_green => in_green,
|
||||
in_blue => in_blue,
|
||||
in_blank => in_blank,
|
||||
in_hsync => in_hsync,
|
||||
in_vsync => in_vsync,
|
||||
in_red => in_red,
|
||||
in_green => in_green,
|
||||
in_blue => in_blue,
|
||||
is_interlaced => is_interlaced,
|
||||
is_second_field => is_second_field,
|
||||
|
||||
-----------------------------------
|
||||
-- For symbol dump or retransmit
|
||||
|
|
@ -308,17 +310,17 @@ i_processing: pixel_processing Port map (
|
|||
------------------
|
||||
-- Incoming pixels
|
||||
------------------
|
||||
in_blank => in_blank,
|
||||
in_hsync => in_hsync,
|
||||
in_vsync => in_vsync,
|
||||
in_red => in_red,
|
||||
in_green => in_green,
|
||||
in_blue => in_blue,
|
||||
is_interlaced => is_interlaced,
|
||||
in_blank => in_blank,
|
||||
in_hsync => in_hsync,
|
||||
in_vsync => in_vsync,
|
||||
in_red => in_red,
|
||||
in_green => in_green,
|
||||
in_blue => in_blue,
|
||||
is_interlaced => is_interlaced,
|
||||
is_second_field => is_second_field,
|
||||
audio_channel => audio_channel,
|
||||
audio_de => audio_de,
|
||||
audio_sample => audio_sample,
|
||||
audio_channel => audio_channel,
|
||||
audio_de => audio_de,
|
||||
audio_sample => audio_sample,
|
||||
-------------------
|
||||
-- Processed pixels
|
||||
-------------------
|
||||
|
|
@ -330,13 +332,16 @@ i_processing: pixel_processing Port map (
|
|||
out_blue => out_blue
|
||||
);
|
||||
|
||||
i_symbol_dump: symbol_dump port map (
|
||||
clk => pixel_clk,
|
||||
clk100 => clk100,
|
||||
symbol_sync => symbol_sync,
|
||||
symbol_ch0 => symbol_ch0,
|
||||
symbol_ch1 => symbol_ch1,
|
||||
symbol_ch2 => symbol_ch2,
|
||||
rs232_tx => rs232_tx);
|
||||
|
||||
-- Swap to this if you want to capture the HDMI symbols
|
||||
-- and send them up the RS232 port
|
||||
rs232_tx <= '1';
|
||||
--i_symbol_dump: symbol_dump port map (
|
||||
-- clk => pixel_clk,
|
||||
-- clk100 => clk100,
|
||||
-- symbol_sync => symbol_sync,
|
||||
-- symbol_ch0 => symbol_ch0,
|
||||
-- symbol_ch1 => symbol_ch1,
|
||||
-- symbol_ch2 => symbol_ch2,
|
||||
-- rs232_tx => rs232_tx);
|
||||
|
||||
end Behavioral;
|
||||
Loading…
Add table
Add a link
Reference in a new issue