BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / see / #39221同步于 2010/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SEE机器人发帖

大三数电实验有无学长学姐做过“贪食蛇”这个题目?求指导

lazydog616
2010/12/22镜像同步21 回复
蛇的移位是怎么实现的,用循环移位貌似不好实现。我编了大半发现自己的思想不能实现,VHDL还是比较难理解的啊。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
lazydog616机器人#1 · 2010/12/22
附上我的程序: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.std_logic_1164.all; ENTITY move IS PORT ( grom,gcol:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); gradeout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); up,down,r,l: IN STD_LOGIC; reset:IN STD_LOGIC; clk:IN STD_LOGIC ); END move; ARCHITECTURE snake_move of move IS --TYPE BIT_VECTOR_8 IS ARRAY (0 TO 7) OF BIT; --TYPE BIT_VECTOR_4 IS ARRAY (O TO 3) OF BIT; --COMPONENT rorr --PORT( --s: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --ss:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --END COMPONENT; --COMPONENT roll --PORT( --l: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --ll:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --END COMPONENT; SIGNAL tx:STD_LOGIC_VECTOR(1 DOWNTO 0);--up:00;down:11;r:01;l:10 SIGNAL srom1,scol1,srom2,scol2,srom3,scoL3,srom4,scol4:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL wallrom,wallcol:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL grade: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL rom,col:STD_LOGIC_VECTOR(7 DOWNTO 0);--是否碰壁的判定 SIGNAL sign: STD_LOGIC; --是否碰壁的判断(直接) SIGNAL timecount: INTEGER RANGE 4 DOWNTO 0; SIGNAL stime: INTEGER RANGE 19 DOWNTO 0; SIGNAL foodrom,foodcol :STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL temprom,tempcol:STD_LOGIC; BEGIN move:PROCESS(clk,reset) BEGIN IF reset='1' THEN srom1<="01111111"; scol1<="10000000"; srom2<="01111111"; scol2<="01000000"; srom3<="01111111"; scol3<="00100000"; srom4<="01111111"; scol4<="00010000"; wallrom<="11101111"; wallcol<="00111100"; ELSE srom4<=srom3; scol4<=scol3; srom3<=srom2; scol3<=scol2; srom2<=srom1; scol2<=scol1; IF up'event and up='1' THEN IF tx="11" THEN --此时状态为down srom1<=srom1; tempcol<=scol1(0); scol1(0)<=scol1(1); scol1(1)<=scol1(2); scol1(2)<=scol1(3); scol1(3)<=scol1(4); scol1(4)<=scol1(5); scol1(5)<=scol1(6); scol1(6)<=scol1(7); scol1(7)<=tempcol;--DOWN ror tx<="11"; ELSE srom1<=srom1; tempcol<=scol1(7); scol1(7)<=scol1(6); scol1(6)<=scol1(5); scol1(5)<=scol1(4); scol1(4)<=scol1(3); scol1(3)<=scol1(2); scol1(2)<=scol1(1); scol1(1)<=scol1(0); scol1(0)<=tempcol;--UP rol tx<="00"; END IF; ELSIF down' event and down ='1' THEN IF tx="00" THEN --此时状态为up srom1<=srom1; tempcol<=scol1(7); scol1(7)<=scol1(6); scol1(6)<=scol1(5); scol1(5)<=scol1(4); scol1(4)<=scol1(3); scol1(3)<=scol1(2); scol1(2)<=scol1(1); scol1(1)<=scol1(0); scol1(0)<=tempcol;--UP rol tx<="00"; ELSE srom1<=srom1; tempcol<=scol1(0); scol1(0)<=scol1(1); scol1(1)<=scol1(2); scol1(2)<=scol1(3); scol1(3)<=scol1(4); scol1(4)<=scol1(5); scol1(5)<=scol1(6); scol1(6)<=scol1(7); scol1(7)<=tempcol;--DOWN ror tx<="11"; END IF; ELSIF r'event and r='1' THEN IF tx="10" THEN --此时状态为left temprom<=srom1(0); srom1(0)<=srom1(1); srom1(1)<=srom1(2); srom1(2)<=srom1(3); srom1(3)<=srom1(4); srom1(5)<=srom1(6); srom1(6)<=srom1(7); srom1(7)<=temprom;--left ror scol1<=scol1; tx<="10"; ELSE temprom<=srom1(7); srom1(7)<=srom1(6); srom1(6)<=srom1(5); srom1(5)<=srom1(4); srom1(4)<=srom1(3); srom1(3)<=srom1(2); srom1(2)<=srom1(1); srom1(1)<=srom1(0); srom1(0)<=temprom;--RIGHT rol scol1<=scol1; tx<="01"; END IF; ELSIF l'event and l='1' THEN IF tx="01" THEN --此时状态为right temprom<=srom1(7); srom1(7)<=srom1(6); srom1(6)<=srom1(5); srom1(5)<=srom1(4); srom1(4)<=srom1(3); srom1(3)<=srom1(2); srom1(2)<=srom1(1); srom1(1)<=srom1(0); srom1(0)<=temprom;--RIGHT rol scol1<=scol1; tx<="01"; ELSE temprom<=srom1(0); srom1(0)<=srom1(1); srom1(1)<=srom1(2); srom1(2)<=srom1(3); srom1(3)<=srom1(4); srom1(5)<=srom1(6); srom1(6)<=srom1(7); srom1(7)<=temprom;--left ror scol1<=scol1; tx<="10"; END IF; ELSIF up='0' AND down='0' AND r='0' AND l='0' THEN --如果没有控制信息 IF tx="00" THEN --STATE IS UP NOW srom1<=srom1; tempcol<=scol1(7); scol1(7)<=scol1(6); scol1(6)<=scol1(5); scol1(5)<=scol1(4); scol1(4)<=scol1(3); scol1(3)<=scol1(2); scol1(2)<=scol1(1); scol1(1)<=scol1(0); scol1(0)<=tempcol;--UP rol tx<="00"; ELSIF tx="11" THEN --STATE IS DOWN NOW srom1<=srom1; tempcol<=scol1(0); scol1(0)<=scol1(1); scol1(1)<=scol1(2); scol1(2)<=scol1(3); scol1(3)<=scol1(4); scol1(4)<=scol1(5); scol1(5)<=scol1(6); scol1(6)<=scol1(7); scol1(7)<=tempcol;--DOWN ror tx<="11"; ELSIF tx="01" THEN --STATS IS RIGHT NOW temprom<=srom1(7); srom1(7)<=srom1(6); srom1(6)<=srom1(5); srom1(5)<=srom1(4); srom1(4)<=srom1(3); srom1(3)<=srom1(2); srom1(2)<=srom1(1); srom1(1)<=srom1(0); srom1(0)<=temprom;--RIGHT rol scol1<=scol1; tx<="01"; ELSIF tx="10" THEN --STATE IS LEFT NOW temprom<=srom1(0); srom1(0)<=srom1(1); srom1(1)<=srom1(2); srom1(2)<=srom1(3); srom1(3)<=srom1(4); srom1(5)<=srom1(6); srom1(6)<=srom1(7); srom1(7)<=temprom;--left ror scol1<=scol1; tx<="10"; END IF; END IF; END IF; END PROCESS move; gradecount: PROCESS(clk,reset) VARIABLE g: INTEGER RANGE 7 DOWNTO 0; BEGIN IF reset='1' THEN foodrom<="11101111"; foodcol<="01000000"; grade<="0000"; timecount<=4; stime<=19; ELSE stime<=stime-1; IF stime>=0 THEN IF (srom1!=foodrom OR scol1!=foodcol) THEN timecount<=timecount-1; IF timecount=0 THEN timecount<=4; foodrom<=foodrom-'1'; foodcol<=foodcol; END IF; ELSIF srom1=foodrom AND scol1=foodcol THEN foodrom<=foodrom+'1'; foodcol<=foodcol; timecount<=4; IF grade<="0100" THEN grade<=grade+'1'; ELSIF grade="0101" THEN srom1<="00000000"; srom2<="00000000"; srom3<="00000000"; srom4<="00000000"; scol1<="11111111"; scol2<="11111111"; scol3<="11111111"; scol4<="11111111"; foodrom<="00000000"; foodcol<="11111111"; wallrom<="00000000"; wallcol<="11111111";--light all END IF; ELSIF stime< 0 THEN srom1<="11111111"; srom2<="11111111"; srom3<="11111111"; srom4<="11111111"; scol1<="00000000"; scol2<="00000000"; scol3<="00000000"; scol4<="00000000"; foodrom<="11111111"; foodcol<="00000000"; wallrom<="11111111"; wallcol<="00000000";--dark ,TIMEOUT LOSE END IF; END IF; END PROCESS gradecount; grom<=srom1 or srom2 or srom3 or srom4 or foodrom or wallrom; gcol<=scol1 or scol2 or scol3 or scol4 or foodcol or wallcol; gradeout<=grade; END snake_move;
lazydog616机器人#2 · 2010/12/22
编程思想是通过循环移位来实现蛇的移动,有源代码更好哈~~
baiyixk机器人#3 · 2010/12/22
这个。我只能帮顶了 【 在 lazydog616 (lazydog616) 的大作中提到: 】 : 蛇的移位是怎么实现的,用循环移位貌似不好实现。我编了大半发现自己的思想不能实现,VHDL还是比较难理解的啊。。
Hov机器人#4 · 2010/12/22
copy下来,以后大三可以用。。 【 在 lazydog616 (lazydog616) 的大作中提到: 】 : 蛇的移位是怎么实现的,用循环移位貌似不好实现。我编了大半发现自己的思想不能实现,VHDL还是比较难理解的啊。。
zezeha机器人#5 · 2010/12/22
真棒 【 在 Hov (信号挂了) 的大作中提到: 】 : copy下来,以后大三可以用。。
baiyixk机器人#6 · 2010/12/23
真1+1 【 在 Hov (信号挂了) 的大作中提到: 】 : copy下来,以后大三可以用。。
catzby机器人#7 · 2010/12/23
用的时候我会去找你们的。我就不copy了 【 在 baiyixk (白衣侠客) 的大作中提到: 】 : 真1+1
Hov机器人#8 · 2010/12/23
你精华呗,多好 【 在 baiyixk (白衣侠客) 的大作中提到: 】 : 真1+1
baiyixk机器人#9 · 2010/12/23
他还没说这个程序对不对呢 【 在 Hov (信号挂了) 的大作中提到: 】 : 你精华呗,多好