📄 horizontal_filter.vhd
字号:
------------------------------------------------------------------------------
-- Project : Video Capture Control
-- Programmer : Byungchan Son
-- Function : 荐乞 鞘磐
-- Language : VHDL
------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity horizontal_filter is
port(
-- system signal
reset : in std_logic;
clock : in std_logic;
-- command receiver
filter_depth : in std_logic_vector(1 downto 0);
-- external signal
vpo : in std_logic_vector(7 downto 0);
h_sync_in : in std_logic;
-- video contorl
vpo_filtering : out std_logic_vector(7 downto 0)
);
end horizontal_filter;
architecture horizontal_filter_a of horizontal_filter is
-- new type
type yuv_signal is(
y1,
u,
v,
y2
);
signal yuv_pos : yuv_signal;
-- data signal
signal clk_hsync : std_logic;
signal m_hsync : std_logic;
-- Y 脚龋 N 努钒 瘤楷 矫弊朝
signal y_m5 : std_logic_vector(7 downto 0);
signal y_m4 : std_logic_vector(7 downto 0);
signal y_m3 : std_logic_vector(7 downto 0);
signal y_m2 : std_logic_vector(7 downto 0);
signal y_m1 : std_logic_vector(7 downto 0);
signal y_c0 : std_logic_vector(7 downto 0);
signal y_p1 : std_logic_vector(7 downto 0);
signal y_p2 : std_logic_vector(7 downto 0);
signal y_p3 : std_logic_vector(7 downto 0);
signal y_p4 : std_logic_vector(7 downto 0);
-- U 脚龋 N 努钒 瘤楷 矫弊朝
signal u_m2 : std_logic_vector(7 downto 0);
signal u_m1 : std_logic_vector(7 downto 0);
signal u_c0 : std_logic_vector(7 downto 0);
signal u_p1 : std_logic_vector(7 downto 0);
signal u_p2 : std_logic_vector(7 downto 0);
-- V 脚龋 N 努钒 瘤楷 矫弊朝
signal v_m2 : std_logic_vector(7 downto 0);
signal v_m1 : std_logic_vector(7 downto 0);
signal v_c0 : std_logic_vector(7 downto 0);
signal v_p1 : std_logic_vector(7 downto 0);
signal v_p2 : std_logic_vector(7 downto 0);
-- multiply and accumulate data
signal y_data : std_logic_vector(7 downto 0);
signal y1_data : std_logic_vector(10 downto 0);
signal u_data : std_logic_vector(7 downto 0);
signal v_data : std_logic_vector(7 downto 0);
begin
process(
reset,
clock,
vpo
)
begin
if(reset = '1')then
-- stste mschine
-- main control signal
-- osd control signal
-- internal signal
elsif(clock'event and clock = '1')then
clk_hsync <= h_sync_in;
m_hsync <= clk_hsync;
-- yuv 困摹 捞悼
if(m_hsync = '0' and clk_hsync = '1')then
yuv_pos <= u;
else
if(yuv_pos = u)then
u_m2 <= vpo;
u_m1 <= u_m2;
u_c0 <= u_m1;
u_p1 <= u_c0;
u_p2 <= u_p1;
yuv_pos <= y1;
vpo_filtering <= y_data;
elsif(yuv_pos = y1)then
y_m5 <= vpo;
y_m4 <= y_m5;
y_m3 <= y_m4;
y_m2 <= y_m3;
y_m1 <= y_m2;
y_c0 <= y_m1;
y_p1 <= y_c0;
y_p2 <= y_p1;
y_p3 <= y_p2;
y_p4 <= y_p3;
yuv_pos <= v;
if(v_data < "00010000")then
vpo_filtering <= "00010000";
elsif(v_data > "11101011")then
elsif(v_data > "11110000")then
vpo_filtering <= "11110000";
else
vpo_filtering <= v_data;
end if;
elsif(yuv_pos = v)then
v_m2 <= vpo;
v_m1 <= v_m2;
v_c0 <= v_m1;
v_p1 <= v_c0;
v_p2 <= v_p1;
yuv_pos <= y2;
vpo_filtering <= y_data;
else
y_m5 <= vpo;
y_m4 <= y_m5;
y_m3 <= y_m4;
y_m2 <= y_m3;
y_m1 <= y_m2;
y_c0 <= y_m1;
y_p1 <= y_c0;
y_p2 <= y_p1;
y_p3 <= y_p2;
y_p4 <= y_p3;
yuv_pos <= u;
if(u_data < "00010000")then
vpo_filtering <= "00010000";
elsif(u_data > "11110000")then
vpo_filtering <= "11110000";
else
vpo_filtering <= u_data;
end if;
end if;
end if;
-- 鞘磐傅
if(filter_depth = "01")then
u_data <= ("0" & u_m1(7 downto 1)) +
("0" & u_c0(7 downto 1));
v_data <= ("0" & v_m1(7 downto 1)) +
("0" & v_c0(7 downto 1));
y_data <= ("00" & y_m1(7 downto 2)) +
("0" & y_c0(7 downto 1)) +
("00" & y_p1(7 downto 2));
elsif(filter_depth = "10")then
u_data <= ("00" & u_m1(7 downto 2)) +
("0" & u_c0(7 downto 1)) +
("00" & u_p1(7 downto 2));
v_data <= ("00" & v_m1(7 downto 2)) +
("0" & v_c0(7 downto 1)) +
("00" & v_p1(7 downto 2));
y_data <= ("00" & y_m2(7 downto 2)) +
("00" & y_m1(7 downto 2)) +
("00" & y_c0(7 downto 2)) +
("00" & y_p1(7 downto 2));
else
u_data <= ("00" & u_m2(7 downto 2)) +
("00" & u_m1(7 downto 2)) +
("00" & u_c0(7 downto 2)) +
("00" & u_p1(7 downto 2));
v_data <= ("00" & v_m2(7 downto 2)) +
("00" & v_m1(7 downto 2)) +
("00" & v_c0(7 downto 2)) +
("00" & v_p1(7 downto 2));
y_data <= ("00" & y_m2(7 downto 2)) +
("00" & y_m1(7 downto 2)) +
("00" & y_c0(7 downto 2)) +
("00" & y_p1(7 downto 2));
-- else
-- u_data <= ("00" & u_m2(7 downto 2)) +
-- ("00" & u_m1(7 downto 2)) +
-- ("00" & u_c0(7 downto 2)) +
-- ("00" & u_p1(7 downto 2));
-- v_data <= ("00" & v_m2(7 downto 2)) +
-- ("00" & v_m1(7 downto 2)) +
-- ("00" & v_c0(7 downto 2)) +
-- ("00" & v_p1(7 downto 2));
-- y1_data <= ("000" & y_m3) +
-- ("000" & y_m2) +
-- ("000" & y_m1) +
-- ("000" & y_c0) +
-- ("000" & y_p1) +
-- ("000" & y_p2);
-- y_data <= y1_data(10 downto 3) +
-- ("00" & y1_data(10 downto 5)) +
-- ("0000" & y1_data(10 downto 7)) +
-- ("000000" & y1_data(10 downto 9));
end if;
end if;
end process;
end horizontal_filter_a;
----------------------------------------------------
-- coefficient for Y signal
-- 0.0295 7.552 00001000
-- -0.0524 13.4144 00001101
-- -0.118 30.208 00011111
-- 0.472 120.832 01111001
-- 1.0 256.0
-- 0.472 120.832 01111001
-- -0.118 30.208 00011111
-- -0.0524 13.4144 00001101
-- 0.0295 7.552 00001000
----------------------------------------------------
-- coefficient for I and Q signal
-- 0.00474 1.21344 00000001
-- 0.01739 4.45184 00000100
-- 0.0295 7.552 00001000
-- 0.02743 7.02208 00000111
-- 0.0 0.0 00000000
-- -0.0524 13.4144 00001101
-- -0.1123 28.7488 00011101
-- -0.1467 37.5552 00100110
-- -0.118 30.208 00011111
-- 0.0 0.0 00000000
-- 0.20746 53.10976 00110101
-- 0.472 120.832 01111001
-- 0.73489 188.15488 01101100
-- 0.92867 237.73952 11101110
-- 1.0 256.0
-- 0.92867 237.73952 11101110
-- 0.73489 188.15488 01101100
-- 0.472 120.832 01111001
-- 0.20746 53.10976 00110101
-- 0.0 0.0 00000000
-- -0.118 30.208 00011111
-- -0.1467 37.5552 00100110
-- -0.1123 28.7488 00011101
-- -0.0524 13.4144 00001101
-- 0.0 0.0 00000000
-- 0.02743 7.02208 00000111
-- 0.0295 7.552 00001000
-- 0.01739 4.45184 00000100
-- 0.00474 1.21344 00000001
----------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -