⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 horizontal_filter.vhd

📁 infra pen controller, cmos sensor control and sdram control
💻 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 + -