📄 moving.vhd
字号:
LIBRARY ieee ;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY moving IS PORT( clk : IN std_logic; clken_fcount: IN std_logic; de_out :IN std_logic; pattern: IN std_logic_vector(2 DOWNTO 0); brightness: IN std_logic_vector(7 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:=640; -- horizontal active pixelsEND moving;ARCHITECTURE rtl OF moving IS SIGNAL m1countreg:std_logic_vector(10 DOWNTO 0); SIGNAL m2countreg:std_logic_vector(10 DOWNTO 0); SIGNAL pm_temp: std_logic; SIGNAL speed : STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL back: std_logic_vector(7 DOWNTO 0); SIGNAL front: std_logic_vector(7 DOWNTO 0);BEGINPROCESS(clk)BEGINIF clk'event AND clk='1' THENCASE brightness(7 downto 4) IS WHEN "0001"=>front<="10000000"; WHEN "0010"=>front<="01000000"; WHEN "0011"=>front<="00100000"; WHEN "0100"=>front<="00010000"; WHEN "0101"=>front<="00001000"; WHEN "0110"=>front<="00000000"; WHEN OTHERS =>front<="11111111";END CASE;END IF;END PROCESS;PROCESS(clk)BEGINIF clk'event AND clk='1' THENCASE brightness(3 downto 0) IS WHEN "0001"=>back<="00001000"; WHEN "0010"=>back<="00010000"; WHEN "0011"=>back<="00100000"; WHEN "0100"=>back<="01000000"; WHEN "0101"=>back<="10000000"; WHEN "0110"=>back<="11111111"; WHEN OTHERS =>back<="00000000";END CASE;END IF;END PROCESS;A:PROCESS(clk)BEGINIF clk'event AND clk='1' THENCASE pattern IS WHEN "001"=>speed<="00000000100"; WHEN "010"=>speed<="00000000101"; WHEN "011"=>speed<="00000001000"; WHEN "100"=>speed<="00000001010"; WHEN "101"=>speed<="00000010000"; WHEN OTHERS =>speed<="00000000000";END CASE;END IF;END PROCESS;B:PROCESS(clk,clken_fcount,m1countreg)BEGINIF(clken_fcount='0') THENm1countreg<=m1countreg;ELSIF clk'event AND clk='1' THENIF m1countreg>=HAC THENm1countreg<=(OTHERS=>'0');ELSEm1countreg<=m1countreg+speed;END IF;END IF;END PROCESS;C:PROCESS(clk,pm_temp)BEGINIF (pm_temp='1') THENm2countreg<=(OTHERS=>'0');ELSIF clk'event AND clk='1' THENIF de_out='1' THENm2countreg<=m2countreg+1;END IF;END IF;END PROCESS;pm_temp<='1' when m2countreg=HAC ELSE '0';out_r_e<=back when m2countreg<m1countreg ELSE front;out_g_e<=back when m2countreg<m1countreg ELSE front;out_b_e<=back when m2countreg<m1countreg ELSE front;out_r_o<=back when m2countreg<m1countreg ELSE front;out_g_o<=back when m2countreg<m1countreg ELSE front;out_b_o<=back when m2countreg<m1countreg ELSE front;END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -