📄 moving_object.vhd
字号:
LIBRARY ieee ;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;ENTITY moving_object IS PORT( clk : IN std_logic; vcount : IN std_logic_vector(11 DOWNTO 0); hcount : IN std_logic_vector(10 DOWNTO 0); clken_fcount: IN std_logic; pattern : IN std_logic_vector(3 DOWNTO 0); distance:IN std_logic_vector(3 DOWNTO 0); wren : IN std_logic; mode : in std_logic; time : IN std_logic_vector(3 DOWNTO 0); back : IN std_logic_vector(7 DOWNTO 0); front : IN std_logic_vector(7 DOWNTO 0); address : IN std_logic_vector(7 DOWNTO 0); data_r : IN std_logic_vector(7 DOWNTO 0); data_g : IN std_logic_vector(7 DOWNTO 0); data_b : 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:=684; -- horizontal active pixels 1448*1151CONSTANT HSY:integer:=16; -- horizontal sync width (negative polarity)CONSTANT HBP:integer:=40; -- horizontal back porchCONSTANT VAC:integer:=768; -- vertical active pixelsCONSTANT VSY:integer:=5; -- vertical sync width (negative polarity)CONSTANT VBP:integer:=15; -- vertical back porchEND moving_object;ARCHITECTURE rtl OF moving_object IS SIGNAL nn,speed,dist,count,countmax: integer; SIGNAL color,tou : std_logic_vector(1 DOWNTO 0); signal bi: std_logic; SIGNAL address_a: STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL address_b: STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL address1_a: STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL address1_b: STD_LOGIC_VECTOR(10 DOWNTO 0); signal ada:STD_LOGIC_VECTOR(7 DOWNTO 0); signal adb:STD_LOGIC_VECTOR(7 DOWNTO 0); signal count1:STD_LOGIC_VECTOR(6 DOWNTO 0); signal ad1a:STD_LOGIC_VECTOR(6 DOWNTO 0); signal ad1b:STD_LOGIC_VECTOR(6 DOWNTO 0); signal wdata:STD_LOGIC_VECTOR(7 DOWNTO 0); signal ada1:STD_LOGIC_VECTOR(12 DOWNTO 0); signal adb1:STD_LOGIC_VECTOR(12 DOWNTO 0); SIGNAL barcolor:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_r_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_r_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_g_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_g_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_b_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q_b_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q1_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q1_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL r_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL r_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL r_a_1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL r_b_1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_a_1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_b_1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_a_1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_b_1:STD_LOGIC_VECTOR(7 DOWNTO 0); signal K1:STD_LOGIC_VECTOR(5 DOWNTO 0); signal K2:STD_LOGIC_VECTOR(5 DOWNTO 0); signal K3:STD_LOGIC_VECTOR(5 DOWNTO 0); signal K4:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL r_a_2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL r_b_2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_a_2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL g_b_2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_a_2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b_b_2:STD_LOGIC_VECTOR(7 DOWNTO 0); signal wdata1:STD_LOGIC_VECTOR(7 DOWNTO 0); signal wdata2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q2_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q2_b:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q3_a:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL q3_b:STD_LOGIC_VECTOR(7 DOWNTO 0);COMPONENT ram1 IS PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; rden_a : IN STD_LOGIC := '1'; rden_b : IN STD_LOGIC := '1'; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT;component ram5 PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (6 DOWNTO 0); wren : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component ram8 PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (6 DOWNTO 0); wren : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component ram9 PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (6 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (6 DOWNTO 0); wren : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component ram6 PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren : IN STD_LOGIC := '1'; rden_a : IN STD_LOGIC := '1'; rden_b : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component ram7 PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren : IN STD_LOGIC := '1'; rden_a : IN STD_LOGIC := '1'; rden_b : IN STD_LOGIC := '1'; clock : IN STD_LOGIC ; qa : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); qb : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom1 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (12 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom2 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (12 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom3 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (12 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom4 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (5 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom5 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (5 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;component rom6 PORT ( clock : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (5 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;BEGINu0: ram5port map( data=>wdata,wraddress=>count1,rdaddress_a=>ad1a,rdaddress_b=>ad1b,wren=>'1',clock=>clk,qa=>q1_a,qb=>q1_b);u1: ram8port map( data=>wdata1,wraddress=>count1,rdaddress_a=>ad1a,rdaddress_b=>ad1b,wren=>'1',clock=>clk,qa=>q2_a,qb=>q2_b);u2: ram9port map( data=>wdata2,wraddress=>count1,rdaddress_a=>ad1a,rdaddress_b=>ad1b,wren=>'1',clock=>clk,qa=>q3_a,qb=>q3_b);--u1: ram1--port map--( --data=>data_r,--wraddress=>address,--rdaddress_a=>ada,--rdaddress_b=>adb,--wren=>wren,--rden_a=>not wren, --rden_b=>not wren, --clock=>clk,--qa=>q_r_a,--qb=>q_r_b--);--u2: ram6--port map--( --data=>data_g,--wraddress=>address,--rdaddress_a=>ada,--rdaddress_b=>adb,--wren=>wren,--rden_a=>not wren, --rden_b=>not wren, --clock=>clk,--qa=>q_g_a,--qb=>q_g_b--);--u3: ram7--port map--( --data=>data_b,--wraddress=>address,--rdaddress_a=>ada,--rdaddress_b=>adb,--wren=>wren,--rden_a=>not wren, ---rden_b=>not wren, --clock=>clk,--qa=>q_b_a,--qb=>q_b_b--);u4: rom1port map( address_a=>ada1,address_b=>adb1,clock=>clk,q_a=>r_a,q_b=>r_b);u5: rom2port map( address_a=>ada1,address_b=>adb1,clock=>clk,q_a=>g_a,q_b=>g_b);u6: rom3port map( address_a=>ada1,address_b=>adb1,clock=>clk,q_a=>b_a,q_b=>b_b);u7: rom4port map( address_a=>K1,address_b=>K2,clock=>clk,q_a=>r_a_1,q_b=>r_b_1);u8: rom5port map( address_a=>K1,address_b=>K2,clock=>clk,q_a=>g_a_1,q_b=>g_b_1);u9: rom6port map( address_a=>K1,address_b=>K2,clock=>clk,q_a=>b_a_1,q_b=>b_b_1);u10: rom4port map( address_a=>K3,address_b=>K4,clock=>clk,q_a=>r_a_2,q_b=>r_b_2);u11: rom5port map( address_a=>K3,address_b=>K4,clock=>clk,q_a=>g_a_2,q_b=>g_b_2);u12: rom6port map( address_a=>K3,address_b=>K4,clock=>clk,q_a=>b_a_2,q_b=>b_b_2);PROCESS(clk)BEGINIF clk'event AND clk='1' THENcount1<=count1+1;end if;end process;process(clk)BEGINIF clk'event AND clk='1' THENif count1<100 thenwdata<=r_a_1;wdata1<=g_a_1;wdata2<=b_a_1;elsewdata<=r_a_2;wdata1<=g_a_2;wdata2<=b_a_2;end if;end if;end process;PROCESS(distance)BEGINCASE distance IS WHEN "0000"=>dist<=25; WHEN "0001"=>dist<=50; WHEN "0010"=>dist<=75; WHEN "0011"=>dist<=100; WHEN "0100"=>dist<=125; WHEN "0101"=>dist<=150; WHEN "0110"=>dist<=175; WHEN "0111"=>dist<=200; WHEN "1000"=>dist<=225; WHEN "1001"=>dist<=250; When others =>dist<=0;END CASE;END PROCESS;barcolor<="00100000";PROCESS(clk)BEGINIF clk'event AND clk='1' THENif hcount>=292+HBP+HSY and hcount<392+HBP+HSYthenaddress_a<=hcount+hcount-HBP-HSY-HBP-HSY-584;address_b<=hcount+hcount-HBP-HSY-HBP-HSY-583;elseaddress_a<="00000000000";address_b<="00000000000";end if;end if;end process;ada<=address_a(7 downto 0);adb<=address_b(7 downto 0);ada1<=address(4 downto 0)&address_a(7 downto 0);adb1<=address(4 downto 0)&address_b(7 downto 0);K1<=address(4 downto 0)&"1";K2<=address(4 downto 0)&"1";K3<=address(4 downto 0)&"0";K4<=address(4 downto 0)&"0";speed<=conv_integer(data_r);countmax<=conv_integer(time)*30;address1_a<=(hcount+hcount-HBP-HSY-HBP-HSY-nn);address1_b<=(hcount+hcount-HBP-HSY-HBP-HSY-nn+1);Process(clk,address1_a)BEGINIF clk'event AND clk='1' THENif address1_a<100then ad1a<=address1_a(6 downto 0);else ad1a<="1111111";end if;end if;end process;Process(clk,address1_b)BEGINIF clk'event AND clk='1' THENif address1_b<100then ad1b<=address1_b(6 downto 0);else ad1b<="1111111";end if;end if;end process;PROCESS(clk)BEGINIF clk'event AND clk='1' THENIF vcount>=284+VBP+VSY-25 AND vcount<384+VBP+VSY-25 thenif (hcount>=262-dist+HBP+HSY and hcount<267-dist+HBP+HSY) or (hcount>=417+dist+HBP+HSY and hcount<422+dist+HBP+HSY)then color<="11";elsif hcount>=267-dist+HBP+HSY AND hcount<(417+dist+HBP+HSY) thencolor<="01";elsecolor<="00";end if;elsif (vcount>=384+VBP+VSY-25 AND vcount<384+VBP+VSY+25) or vcount>=484+VBP+VSY+25 or vcount<284+VBP+VSY-25 then if (hcount>=262-dist+HBP+HSY and hcount<267-dist+HBP+HSY) or (hcount>=417+dist+HBP+HSY and hcount<422+dist+HBP+HSY)then color<="11";else color<="00";end if;elsif vcount>=384+VBP+VSY+25 AND vcount<484+VBP+VSY+25 then if hcount>=267-dist+HBP+HSY AND hcount<(417+dist+HBP+HSY) then color<="10";elsif (hcount>=262-dist+HBP+HSY and hcount<267-dist+HBP+HSY) or (hcount>=417+dist+HBP+HSY and hcount<422+dist+HBP+HSY)thencolor<="11";else color<="00";end if;else color<="00";END IF;END IF;END PROCESS;PROCESS(clk)BEGINIF clk'event AND clk='1' THENIF clken_fcount='1' THENIF nn>=834+dist+dist THEN if count=countmaxthennn<=434-dist-dist;count<=0;else count<=count+1;nn<=834+dist+dist;end if;ELSEnn<=(nn+speed);END IF;END IF;END IF;END PROCESS;PROCESS(clk)BEGINIF clk'event AND clk='1' THENif mode='0' thenIF color="01" THENout_r_e<=r_a;out_g_e<=g_a;out_b_e<=b_a;out_r_o<=r_b;out_g_o<=g_b;out_b_o<=b_b;ELSIF color="10" THENout_r_e<=q1_a;out_g_e<=q2_a;out_b_e<=q3_a;out_r_o<=q1_b;out_g_o<=q2_b;out_b_o<=q3_b;ELSIF color="11" THENout_r_e<=barcolor;out_g_e<=barcolor;out_b_e<=barcolor;out_r_o<=barcolor;out_g_o<=barcolor;out_b_o<=barcolor;elseout_r_e<=r_a_2;out_g_e<=g_a_2;out_b_e<=b_a_2;out_r_o<=r_b_2;out_g_o<=g_b_2;out_b_o<=b_b_2;end if;elsIF color="10" THENout_r_e<=r_a;out_g_e<=g_a;out_b_e<=b_a;out_r_o<=r_b;out_g_o<=g_b;out_b_o<=b_b;ELSIF color="01" THENout_r_e<=q1_a;out_g_e<=q2_a;out_b_e<=q3_a;out_r_o<=q1_b;out_g_o<=q2_b;out_b_o<=q3_b;ELSIF color="11" THENout_r_e<=barcolor;out_g_e<=barcolor;out_b_e<=barcolor;out_r_o<=barcolor;out_g_o<=barcolor;out_b_o<=barcolor;elseout_r_e<=r_a_2;out_g_e<=g_a_2;out_b_e<=b_a_2;out_r_o<=r_b_2;out_g_o<=g_b_2;out_b_o<=b_b_2;END IF;END IF;END PROCESS;END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -