📄 moving_object.vhd
字号:
LIBRARY ieee ;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY moving_object IS PORT
( clk : IN std_logic;
vcount : IN std_logic_vector(10 DOWNTO 0);
hcount : IN std_logic_vector(10 DOWNTO 0);
clken_fcount: IN std_logic;
pattern: IN std_logic_vector(4 DOWNTO 0);
out_r_e : OUT std_logic_vector(7 DOWNTO 0);
out_g_e : OUT std_logic_vector(7 DOWNTO 0);
out_b_e : OUT std_logic_vector(7 DOWNTO 0);
out_r_o : OUT std_logic_vector(7 DOWNTO 0);
out_g_o : OUT std_logic_vector(7 DOWNTO 0);
out_b_o : OUT std_logic_vector(7 DOWNTO 0)
);
CONSTANT HAC:integer:=512; -- horizontal active pixels 1448*1151
CONSTANT HFP:integer:=12; -- horizontal front porch
CONSTANT HSY:integer:=68; -- horizontal sync width (negative polarity)
CONSTANT HBP:integer:=80; -- horizontal back porch
CONSTANT HTOT:integer:=672;
CONSTANT VAC:integer:=768; -- vertical active pixels
CONSTANT VFP:integer:=3; -- vertical front porch
CONSTANT VSY:integer:=6; -- vertical sync width (negative polarity)
CONSTANT VBP:integer:=29; -- vertical back porch
CONSTANT VTOT:integer:=806; -- vertical total lines (in 60 Hz field
end moving_object;
ARCHITECTURE rtl OF moving_object IS
SIGNAL speed : STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL nn : std_logic_vector(10 DOWNTO 0);
SIGNAL color : std_logic;
BEGIN
PROCESS(clk)
BEGIN
IF clk'event AND clk='1' THEN
CASE pattern IS
WHEN "00001"=>speed<="00000001000";
WHEN "00010"=>speed<="00000010000";
WHEN "00011"=>speed<="00000011000";
WHEN "00100"=>speed<="00000100000";
WHEN "00101"=>speed<="00000101000";
WHEN OTHERS =>speed<="00000000000";
END CASE;
END IF;
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'event AND clk='1' THEN
IF vcount>=334+VBP+VSY AND vcount<434+VBP+VSY AND hcount>=nn+HBP+HSY-50 AND hcount<(nn+HBP+HSY)
THEN color<='1';
ELSE color<='0';
END IF;
END IF;
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'event AND clk='1' THEN
IF clken_fcount='1' THEN
IF nn>=HAC+50 THEN
nn<="00000000000";
ELSE
nn<=(nn+speed);
END IF;
END IF;
END IF;
END PROCESS;
out_r_e<="00000000" when color='0' ELSE "11111111";
out_g_e<="00000000" when color='0' ELSE "11111111";
out_b_e<="00000000" when color='0' ELSE "11111111";
out_r_o<="00000000" when color='0' ELSE "11111111";
out_g_o<="00000000" when color='0' ELSE "11111111";
out_b_o<="00000000" when color='0' ELSE "11111111";
END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -