欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    猫和老鼠游戏实验报告.docx

    • 资源ID:224935       资源大小:210.25KB        全文页数:24页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    猫和老鼠游戏实验报告.docx

    信息与通信工程学院班级:2009211120班姓名:李川学号:09210591题目:经典数学游戏一.任务要求实验内容:一个人要将1只狗,1只猫,1只老鼠渡过河,独木舟一次只能装载和一只动物,但猫和狗不能单独在一起,而猫和老鼠也不能友好相处,试模拟这个人将三只动物安全渡过河的过程。用发光二极管亮点的移动模拟独木舟渡河的过程,选中渡河的动物及两岸的动物都应有显示,若选错应有报警显示,且游戏失败,按复位键游戏重新开始。当三只动物均安全度过河时,游戏成功,并显示此次游戏独木舟往返渡河的次数。提高要求:游戏难度可设置,选错动物允许有一次修改机会。二.系统设计设计思路:用4个按钮分别用来选择人,狗,猫,鼠,8个LED来表示人和动物的状态,左边4个代表左岸状态,右边4个代表右岸状态,船用点阵上的LED灯表示,灯右移代表船从左岸划到右岸,左移代表船从右岸划到左岸,失败和成功另外用点阵上的2个点表示。总体框图及分块设计:系统结构总框系统结构图(模块划分和传递关系)逻辑划分框图MDS图控制逻辑图(画在预习报告中,无法复制,截屏)三.仿真波形及仿真分析Dps163.84us327.§8us491.52us655us819.2us98394us1.邛ms1.31ms1.4Jms1.64ms1.8as1.97m;17.55ns2ms时钟分频仿真图,clkl周期为lms,是自己所需的,证明计算的分频的数字正确,4Hz的clk2周期太长,就不进行仿真ns420.0ns440.0ns460.0ns480.0ns500.pns520.0ns540.pnsManeValueat16.98 nsmanB 1catB 1elkB 0clklB 0dogB 0enterB 1 plB Hll PrB OooOratB 0rstB 0successB 0failB 0court .BO)PS335.542671.09 ms1.01 s16.975 ns-TnTT0101'模拟渡河的一步(错误的一步,报错fail=l),f.pJU.UJNlWJYCll3J.,NfW*.I80.RSA1V、Valueat-1J!16.98ns之之*88之>331B1BOBOBOB1BHllBOOOOBOBOBOBOOKn复位,reset=1,pl="111,pr='0000',各自复位仿真图后面随便乱加的,因为我觉得此实验仿真过程较为复杂,还不如直接下载到板子上来找问题方便直接,故仿真图很粗糙。四.源程序-过河游戏-libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityghlisport(clock:instdOgic;-时钟信号,50MHzmank,dogk,catk,ratk:instdOgic;-人,狗,猫,老鼠的开关信号enterk:instd_logic;-确认开关信号resetk:instd_logic;-复位开关信号pl,pr:outstdOgiC_VeCtor(3downtoO);-河两岸动物的状态boat:outstd_logic_vector(13downtoO);-船灯信号lose,win:outstd_logic;-失败、成功的信号steph,stepl:outstd_logic_vector(6downto0);-数码管的驱动信号-顶层模块end;architecturejgofghliscomponentfenpinport(cp:instd_logic;cpl,cp2:outStdJogic);endcomponent;-调用分频器模块componentfangdouport(elk,key:inStdJogic;q:outstd_logic);endcomponent;-调用防抖动模块。componentshumaguan-调用译码显示模块。port(num:instd_logic_vector(3downto0);step:outstd_logic_vector(6downto0);endcomponent;componentguohe-调用过河控制模块。port(elk,elk1:instd_logic;man,dog,cat,rat:inStdJogic;enter:inStdJogic;reset:instd_logic;pl,pr:outstd_logic_vector(3downtoO);counth,countl:outstd_logic_vector(3downtoO);boats:outstd_logic_vector(13downtoO);fail,success:outstdOgiC);endcomponent;signaltemp1,temp2,temp3,c1,c2:std_logic;signaltemp4,temp5,temp6:std_logic;signalcoh,col:std_logic_vector(3downtoO);beginul:fenpinportmap(clock,cl,c2);u2:fangdouportmap(c1,mank,temp1);u3:fangdouportmap(c1,dogk,temp2);u4:fangdouportmap(c1,catk,temp3);u5:fangdouportmap(c1,ratk,temp4);u6:fangdouportmap(c1,enterk,temp5);u7:fangdouportmap(c1,resetk,temp6);u8:guoheportmap(cl,c2,temp1,temp2,temp3,temp4,temp5,temp6,pl,pr,coh,col,boat,lose,win);u9:shumaguanportmap(coh,steph);ul:shumaguanportmap(col,stepl);endjg;-防抖模块libraryieee;useieee.std_logic_1164.all;entityfangdouisport(clk:instdOgic;-时钟信号,1kHz。key:inStdJogic;-有抖动的开关信号。q:outStdJogic);-防抖动电路输出的无抖动信号。end;architecturefangdou1offangdouissignalcp:std_logic;signaljsp:integerrangeOto3;beginprocess(clk,cp)beginif(clk,eventandclk=,0')thenifkey='1,thenifjsp=3thenjsp<=jsp;elsejsp<=jsp+l;endif;ifjsp=lthencp<-;elsecp<=,0,;endif;elsejsp<=O;endif;endif;q<=cp;endprocess;end;-分频模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityfenpinisport(cp:instd_logic;-时钟信号,50MHZcp1,cp2:outstdOgiC);-lkHz、2.5Hz的信号endfenpin;architecturestructoffenpinissignalclkl,clk2,clk3:StdJogic;signaltemp:std_logic_vector(6downtoO);signaltempi:std_logic_vector(8downtoO);signaltemp2:std_logic_vector(8downtoO);beginfpkprocess(cp)beginifrising_edge(cp)thenif(temp="llOOO1,)thenclkl<=notclkl;temp<="0000000"elsetemp<=temp+1;endif;endif;endprocessfp1;fp2:process(clkl)beginifrising_edge(clk1)thenif(templ=',11110111,)thenclk2<=notclk2;templ<="000000000;elsetempl<=temp1+1;endif;endif;endprocessfp2;fp3:process(clk2)beginifrising_edge(clk2)thenif(temp2="l1000111,)thenclk3<=notclk3;temp2<="000000000;elsetemp2<=temp2+l;endif;endif;endprocessfp3;cpl<=clk2;cp2<=clk3;endstruct;-过河控制模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityguoheis-人、狗、猫和鼠的开-确认开关信号。-复位开关信号。河两岸动物的状态。port(clk,clkkinstdogic;man,dogman,dog,cat,rat:inStdJogic;关动作信号enter:inStdJogic;reset:instd_logic;pl,pr:outstd_logic_vector(3downtoO);counth,countl:outstd_logic_vector(3downto0);-过河次数。boats:outstd_logic_vector(13downto0);-船灯信号。fail,success:outstd_logic);endguohe;architecturestructofguoheissignalch,cl:std_logic_vector(3downto0);signalstate:std_logic_vector(3downto0);signalenable:std_logic;signalriver,river1:std_logic;signalside:std_logic;signalboat:std_logic_vector(1:signalfirst:stdOgic;signalms,ds,cs,rs:std_logic;beginpl:process(clk)beginif(rising_edge(clk)thenif(reset=*1,)thenstate<=OOOO*'左边状态全为T。fail<='O'success<=,O'enable<=,O'ch<="OOOO,;cl<=OOOO;ms<=,0,;ds<='O,;cs<='O'rs<=,O,;riverl<='0,;side<=,O'first<=,O'elseif(river=,O,andriverl=10,)thenif(enable=,O,)thenif(man='l,)thenstate(3)<=notstate(3);ms<=notms;first<=,;endif;if(dog-)thenstate(2)<=notstate(2);ds<=notds;first<=,:-成功、警告信号。-复位信号有效。-右边状态全为'0',同时-若不处于运输过程。-按下表示人的开关。-人的状态改变。endif;if(cat='l,)thenstate(1)<=notstate(1);cs<=notcs;first<='endif;if(rat='l,)thenstate(0)<=notstate(0);rs<=notrs;first<=,;endif;-有确认信号。if(enter=,)then- -对过河次数的处理。if(cl="100()thenif(ch=n100,)thench<=ch;cl<=cl;fail<=,1enable<=,;- -若过河次数的高位也计到9,则判为失败。elsech<=ch+l;cl<=,'0000"endif;elsecl<=cl+l;endif;side<=notside;river1<='- -失败和成功的判断。if(ms-0,)thenfail<='1,;enable<='1'river1<=,0,;-人没有上船,过河失败。- 人和动物在河的两边却同时上船的失败判断。elsif(ds='andstate(3)=,andstate(2)='0,)thenfail<="r;enable<='r;river1<=,0'elsif(ds='andstate(3)='O,andstate(2),1')thenfail<='1,ienable<=*lriverl<-0,;elsif(cs-andstate(3)=,andstate(1)=,O,)thenfail<,l'enable<='riverl<-O"elsif(cs=,l,andstate(3)='O,andstate(l)-l,)thenfail<="r;enable<=,l'riverl<-0'elsif(rs-1'andstate(3)=,l,andstate(O)=,O,)thenfail<='1'enable<='1'river1<-0,;elsif(rs='andstate(3)=,O,andState(O)-)thenfail<="r;enable<=,r;riverl<-0'elsif(dsandcs)=,thenfail<='r;enable<='I'riverl<-0,;elsif(csandrs)=,thenfail<=,lenable<=,lriverl<=,0'elsif(dsandrs)=,thenfail<="r;enable<=,l'river1<=,O'elsif(state=1001orState=nIlOOorState=nOO1,orstate="0110orstate="011lorstate=1000)thenfail<=,1enable<,1'river1<='0,;elseif(state=n111,)thensuccess<=*l'enable<=,;endif;endif;ms<=,0ds<=,0cs<=,0rs<=<0'endif;endif;-运输过程。elseif(side='andboat(0)='l,)thenriverl<=,0,;-若从左往右运输且右边的船灯已经亮,则运输过程结束。elsif(side='O'andboat(2)-l')thenriverl<='0,;-若从右往左运输且左边的船灯已经亮,则运输过程结束。endif;endif;endif;endif;endprocesspl;p2:process(clk1,cl,ch)-第一次运输开始前。-左边的船灯-人在左边。-左边的船灯beginif(cl<="OOOOandch<=OOOO")thenboat<=OOO111011111000;亮。elseif(rising_edge(clk1)thenif(riverl=,0,)thenif(enable=,0,)thenif(side=,O,)thenboat<=00011IOll11100"凫。elsif(side-l')thenboat<=0001110111100,;endif;elseboat<=boat;endif;elseif(side-)then-从左往右运输。boat(0)<=boat(1);boat(1)<=boat(2);boat(2)<='0,;船灯从左往右依次亮。if(boat(l)=,)thenriver<='0,;endif;elseboat(2)<=boat(l);boat(1)<=boat(0);boat(0)<=,0,;if(boat(l)=,)thenriver<=,0,;endif;endif;endif;endif;endif;endprocessp2;p3:process(clkl,first)-初始状态。-左边的状态全为T,右边全为-从左往右运输且左边的船灯亮,即运beginif(first=,O,)thenforiin0to3looppl(i)<=,r(i)<=O;endloop;elseif(rising_edge(clk1)thenif(side='andboat(2)=,l,)then输刚开始。foriin0to3loopif(state(i)=,0")thenpl(i)<=,;elsePKi)V=O;endif;endloop;elsif(side-1'andboat(0)=,l,)then-从左往右运输且右边的船灯亮,即运输结束。foriin0to3loopif(state(i)=,0")thenpr(i)<=,0,;elsepr(i)<=,;endif;endloop;elsif(side='O'andboat(0)=,l,)then-从右往左运输且右边的船灯亮,即运输刚开始。foriin0to3loopif(state(i)=,0")thenpr(i)<=,01;elsepr(i)<='endif;endloop;elsif(side="O'andboat(2)=,)then-从右往左运输且左边的船灯亮,即运输结束。foriin0to3loopif(state(i)='0")thenpl(i)<=,;elsepl(i)<=V;endif;endloop;endif;endif;endif;endprocessp3;counth<=ch;countl<=cl;boats<=boat;end;-数码显示模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityguoheisport(clk,clkl:instd_logic;man,dogman,dog,cat,rat:instd_logic;-人、狗、猫和鼠的开关动作信号enter:instdOgic;-确认开关信号。reset:inStdJogic;-复位开关信号。pl,pr:outstd_logic_vector(3downtoO);河两岸动物的状态。counth,countl:outstd_logic_vector(3downtoO);-过河次数。boats:outstd_logic_vector(13downtoO);-船灯信号。fail,success:outstd_logic);-成功、警告信号。endguohe;architecturestructofguoheissignalch,cl:StdJogic_vector(3downtoO);signalstate:std_logic_vector(3downtoO);signalenable:std_logic;signalriver,river1:StdJogic;signalside:stdOgic;signalboat:std_logic_vector(13downto0);signalfirst:stdogic;signalms,ds,cs,rs:std_logic;beginpl:process(clk)beginif(rising_edge(clk)thenif(reset=11,)thenstate<=OOOO*'左边状态全为T。fail<='O'success<=,0'enable<=,0'ch<="0000,;CK=uOOOOn;ms<=,0'ds<=,O,;cs<='O'rs<=,O,;riverl<='0,;side<=,O'first<=,O'elseif(river=,0,andriverl=,0,)thenif(enable='O,)thenif(man=,l')thenstate(3)<=notstate(3);ms<=notms;first<=,;endif;if(dog-)thenstate(2)<=notstate(2);ds<=notds;first<=,;endif;if(cat=,)thenstate(1)<=notstate(l);cs<=notcs;first<=,;endif;if(rat=')thenstate(0)<=notstate(O);-复位信号有效。-右边状态全为O,同时-若不处于运输过程。-按下表示人的开关。-人的状态改变。rs<=notrs;first<=,;endif;if(enter=")then-有确认信号。- -对过河次数的处理。if(cl=,100,)thenif(ch=100|)thench<=ch;cl<=cl;fail<=,r;enable<=,r;- 若过河次数的高位也计到9,则判为失败。elsech<=ch+1d<=,OOOO"endif;elsecl<=cl+l;endif;side<=notside;riverl<='l,;- -失败和成功的判断。if(ms=,0,)thenfail<,1nable<=t1,;river1<=,0,;-人没有上船,过河失败。- -人和动物在河的两边却同时上船的失败判断。elsif(ds='andstate(3)='andstate(2)=,0,)thenfail<="1'enable<=,1,;riverl<=,0'elsif(ds="andstate(3)=,O,andstate(2)=,l')thenfail<='r;enable<=,l'river1<=,0"elsif(cs=,andstate(3)-andstate(1)='O')thenfail<="1'enable<=,1,;riverl<=,0'elsif(cs=,andstate(3)="O,andstate(1)="1')thenfail<='r;enable<=,l'river1<=,0"elsif(rs=,l'andstate(3)=,andstate(O)=,O,)thenfail<="1'enable<=,1,;riverl<=,0'elsif(rs=,andstate(3)=,O,andstate(O)=')thenfail<='r;enable<=,l'riverl<=,0,;elsif(dsandcs)='l,thenfail<="1'enable<=,1,;riverl<=,0'elsif(csandrs)=,thenfail<='r;enable<=,l'river1<=,0"elsif(dsandrs)="thenfail<="1'enable<=,1,;river1<=,O'elsif(state=,1001,'orstate=11OO"orState=nOO1,orState=nOl10uorState=nOl11"orstate=1000)thenfail<="r;enable<-r;riverl<-O'elseif(state=n111,)thensuccess<='lenable<=,;endif;endif;ms<=,Ods<=,Ocs<=,Ors<=,O'endif;endif;-运输过程。elseif(side=,andboat(0)=,l,)theriverl<=,0'-经亮,则运输过程结束。elsif(side='O'andboat(2)=")thenriverl<=,0,;-经亮,则运输过程结束。endif;endif;endif;endif;endprocesspl;p2:process(clk1,cl,ch)beginif(cl<="OOOOandch<=OOOO")thenboat<=00011101111100"亮。elseif(rising_edge(clk1)thenif(riverl=,0,)thenif(enable="0')thenif(side='O,)thenboat<=00011101111100"亮。elsif(side-)thenboat<=0001110111100,;endif;elseboat<=boat;endif;elseif(side-)thenboat(0)<=boat(1);boat(1)<=boat(2);boat(2)<=,0,;if(boat(l)=,)thenriver<=,0,;endif;elseboat(2)<=boat(l);boat(l)<=boat(0);boat(0)<=,0,;if(boat(l)=,)then若从左往右运输且右边的船灯已若从右往左运输且左边的船灯已-第一次运输开始前。-左边的船灯-人在左边。-左边的船灯-从左往右运输。船灯从左往右依次亮。river<='0,;endif;endif;endif;endif;endif;endprocessp2;p3:process(clkl,first)beginif(first='O')thenforiin0to3looppl(i)<=,ipr(i)<=,0'endloop;elseif(rising_edge(clk1)thenif(side=,andboat(2)=")then-初始状态。-左边的状态全为T,右边全为。-从左往右运输且左边的船灯亮,即运输刚开始。foriin0to3loopif(state(i)=,0")thenpl(i)<=,;elsepl(i)<=,0,;endif;endloop;elsif(side-andboat(0)=")then- -从左往右运输且右边的船灯亮,即运输结束。foriin0to3loopif(state(i)='0")thenpr(i)<='01;elsepr(i)<='endif;endloop;elsif(side='O'andboat(0)='l')then- -从右往左运输且右边的船灯亮,即运输刚开始。foriin0to3loopif(state(i)=,0")thenpr(i)<=,01;elsepr(i)<='endif;endloop;elsif(side='O'andboat(2)=,l,)then- -从右往左运输且左边的船灯亮,即运输结束。foriin0to3loopif(state(i)=,O,)thenpl(i)<=,;elsepl(i)<=,O,;endif;endloop;endif;endif;endif;endprocessp3;counth<=ch;countl<=cl;boats<=boat;end;五.功能说明左右岸动物均有表示,选中的动物灯熄灭点阵点的移动代表船的渡河动作成功或失败均有提示船每过河一次,数码管显示+1任何时候按下复位键,游戏重新开始六.元器件清单及资源利用情况元器件清单:LED灯:8个按钮:6个七段数码管点阵资源利用情况:FlowStatusSuccessful-MonNov0714:39:292011QuartusIIVersion9.0Build13202/25/2009SJFullVersionRevisionNameghlTop-levelEntityNameghlFamilyMAXIIDeviceEPM1270T144C5TimingModelsFinalMettimingrequirementsNoTotallogicelements148/1,270(12%)Totalpins45/116(39%)Totalvirtualpins0UFMblocks0/1(0%)七 .故障及问题分析编译时,考虑最多的是过河的逻辑,没有考虑太多的与硬件的结合编程,到第三次检查时最重要的过河逻辑也没有编出来,当然无仿真图可言,后面是自己在网上找的一段代码,虽然起先编译未能通过,但问题不大,只用改改些许地方就行了,他采用的是if嵌套,套了7,8层if,起先看这段代码看不懂,后面把每个if和endif对应起来打印出来,再仔细想了几个小时才弄明白。最初仿真时,因为自己过河动作的频率较低,故所需仿真的时间较长。得IS左右吧,仿真时发现总是到49%时总是不动了,后来才想到由于自己输入的是50MHZ的频率,而自己需要的频率又很小,计算机进行此仿真会有大量的计算,导致仿真过慢,这个问题老师第一节课可能也说过,自己没注意。后来又以为如果要仿真就得改代码,故进行各个模块的仿真时都是另建工程再改代码进行仿真,而且忘保存了,不知道报告需要仿真图,后来才发现模块之间的信号是可以进行仿真的,可为时已晚。进行下载时,有一次下载完后按按钮总没有反应,后面经同学提醒才知道有个按钮得按下,至于这个按钮的作用,不甚了解。八 .总结和结论此次数电综合实验虽然不是自己完全自己独立完成(上网找了代码)的,但自己仍然学到了不少东西,一是熟悉了VHDL语言,对VHDL进行逻辑电路的结构方式也了解更深,特别是对ProCeSS的理解和ComPorlent的应用。另外,也因为此次实验只有自己选这一个题目,很多具体逻辑问题和实际问题都只有靠自己解决,问同学只能解决一部分,真正要完全解决只有靠自己,因此自己也得到了不少锻炼。但是自己也注意到自己编程还是没有考虑很多关于硬件的问题,更多的只是注意软件,这个自己后面还得好好锻炼。另外,对于状态机的认识也不够,希望老师在以后授课时可以让同学们真正学到怎么设计状态机,怎么利用状态机来进行编译等。

    注意事项

    本文(猫和老鼠游戏实验报告.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开