《数字电子技术A》课程设计报告题目冒险游戏有限状态机设计授课教师课程助教课程代码教学班学年度成绩比例综合评价(助教)向乾尹曾思杰304560022015-2016(A)10%项目分工情况说明(学生填写)姓名学号班级在课题中的分工与贡献(100字内)组长汤朋2014112217软件四班电路设计+仿真验证+引脚分配+下载开发板验证组员1单源超2014112212软件四班录制视频+ppt制作+实测照片组员2朱浩楠2014112219软件四班画状态转移图+状态转换表+写总结心得与建议组员3马昊2014112210软件四班状态编码+状态机的激励方程、输出方程+检查自启动能力、输出信号、误输出等报告正文格式注意:正文字体为宋体小四,行距1.25,段落设置首行缩进2个字符。一、状态机理论设计1.RoomFSM完整的状态转移图(状态转移图要求用visio画出,可直接拷贝到word中。必须图文并茂,对补充的内容进行阐述说明)1.ROOM状态图2.SWORD状态图2.状态转换表ROOMFSM状态表输入现态次态输出resetnsewvSnSn+1ccttrrssddvvggwindeadsw1xxxxxcccc100000000000010xcctt010000000000100xttrr0010000000000010rrss0001000001000101ssrr0010000000000101rrdd0000100100000100rrdd000010001000001xttcc100000000001000xrrtt0100000000000011rrss0001000000000000ddgg0000001010000001ddvv0000010100SWORDFSM状态表注:注意列表时未涉及的状态可不列,以减小表格规模!3.状态编码方案及状态转换真值表采用“一对一”编码方案。以7个D触发器表示状态,现态为Q6n,Q5n,Q4n,Q3n,Q2n,Q1n,Q0n输入信号为reset,n,s,w,e,v。次态为Q6n+1(cc),Q5n+1(tt),Q4n+1(rr),Q3n+1(ss),Q2n+1(dd),Q1n+1(vv),Q0n+1(gg)。win,dead,sw作为输出。列出状态转换真值表如下4.触发器激励方程、输出方程,自启动能力及误输出检查更正¯得到7个D触发器的激励方程组D6=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsew+resetD5=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsew+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewD4=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsew+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvD3=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvD2=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvD1=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvD0=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv输出方程为win=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvdead=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv+Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewvsw=Q6nQ5nQ4nQ3nQ2nQ1nQ0nresetnsewv有效编码状态有:1000000、0100000、0010000、0001000、0000100、0000010、0000001.其他无效编码要么为全0要么至少含有两个1,当进入无效态时,根据输出方程可以看出,win=0,dead=0,sw=0,所以没有误输出。然而当状态进入0000000时,D6D5D4D3D2D1D0全为0,不具备自启动能力,所以我们通过将reset=D6+D5+D4+D3+D2+D1+D0的当进入全0状态时,reset为1,重置为初始态。而其他态至少有两个1,进入这些状态后,在下一个时钟沿后都进入全0态(在Verilog中通过case中的default语句实现),最后进入初始态。所以此时就具备了自启动能力。二、电路设计(此部分默认要求是用D触发器和逻辑门在Quartus中进行电路设计,也可用VERILOGHDL进行编程设计)ROOMFSMmoduleT175066(inputclk,n,s,e,w,v,reset,outputregcc,tt,rr,ss,dd,vv,gg,win,dead,sw);reg[6:0]temp;integerflag=0;initialbegincc=1'b1;tt=1'b0;rr=1'b0;ss=1'b0;dd=1'b0;vv=1'b0;gg=1'b0;win=1'b0;dead=1'b0;sw=1'b0;temp={cc,tt,rr,ss,dd,vv,gg};endalways@(posedgeclk)beginif(reset)begincc=1'b1;tt=1'b0;rr=1'b0;ss=1'b0;dd=1'b0;vv=1'b0;gg=1'b0;win=1'b0;dead=1'b0;sw=1'b0;temp={cc,tt,rr,ss,dd,vv,gg};endelsebegincase(temp)7'b1000000:if(e)begincc=1'b0;tt=1'b1;endelse;7'b0100000:if(w)begincc=1'b1;tt=1'b0;endelseif(s)begintt=1'b0;rr=1'b1;endelse;7'b0010000:if(n)begintt=1'b1;rr=1'b0;endelseif(e)begindd=1'b1;rr=1'b0;endelseif(w)beginss=1'b1;rr=1'b0;sw=1'b1;endelse;7'b0001000:if(e)beginss=1'b0;rr=1'b1;endelse;7'b0000100:if(v)beginvv=1'b1;dd=1'b0;win=1'b1;dead=1'b0;endelsebegingg=1'b1;dd=1'b0;win=1'b0;dead=1'b1;end7’b0000010:beginwin=1’b1;dead=1’b0;end7’b0000001:beginwin=1’b0;dead=1’b1;enddefault:flag=1;endcasetemp={cc,tt,rr,ss,dd,vv,gg};endif(flag==1)begintemp=0;flag=0;endif(temp==0)reset=1;endEndmoduleSWORDFSMmoduleN175066(outputregv,inputsw,reset,clk);always@(posedgeclk)beginif(reset)v=1'b0;elseif(sw)v=1'b1;elsev=1'b0;endendmodule三、仿真验证与引脚分配(图文并茂,要有分析/说明)1.仿真激励设计说明①通过reset1、reset2置为1,初始化所有状态。②初始化处于cc(洞穴)(cc为1,其他位置都为0),然后置e为1,向东走到tt(隧道)(tt为1,其他为0,以下类似,不再累赘)。③再向南走s=1,到达rr(河流)。④如果再向东走(e=1)没有拿到宝剑(sw=0),到达dd(龙穴),由于v=0则玩家被杀死扔到gg(墓地),win=0,dead=1,游戏结束。如下图一所示。⑤如果向西走(w=1),到达ss(剑阁)获得宝剑(sw=1)。⑥向东走(e=1),到达rr(河流)。⑦再向东走(e=1),到达dd(龙穴),因为v=1,则成功杀死龙,到达vv(穹顶)获胜,win=1,dead=0,游戏结束。如下图二所示另外可以在游戏途中没收玩家的剑,通过reset2=1,将v置为0。如下图三所示,在玩家获得宝剑后,没收,然后玩家再向东走,没有宝剑则被龙杀死。2.仿真结果仿真波形图:图一图二图三3.FPGA引脚分配图4.实测照片房间一(theCaveofCacophony、洞穴)房间二(theTwistyTunnel、隧道)房间三(theRapidRiver、河流)房间四(theSecretSwordStash、剑阁)房间五(theDragonDen、龙穴)房间六(theVictoryVault、穹顶)房间七(theGrievousGraveyard、墓地)四、总结、心得与建议经过艰辛的探索与不懈的努力,灭龙团队克服重重困难,最终完成了本次课程设计。最终的产品虽然有进一步优化的空间,但确实可以提高我们自己动手的能力,让我们的学习得到了实际的检验。通过本次课程设计,我们团队已初步具有了设计能力,相信在今后更加艰苦的学习过程中,也可以运用这项技能让自己如鱼得水。本次课程设计中,不足之处在于对时钟频率的把握不够充分,也发现了在学习过程中自己的一些不足。这个游戏设计的还算到位,所以对我们今后的学习和工作发展打下了坚实的基础,对我们的团队协作能力也有了一定的要求。在下载到开发板的过程中,我们遇到了许多问题。首先,下载之后存在一些错误。处理错误之后,发现实际功能并不能和我们之前设想的那样完全吻合。所以在实验室,我们又进行了非常大的改动。这让我们认识到设计师的重要性。做一个产品,在动手制作之前有一个好的设计是非常必要的。失败的产品未必失败在技术上,而是失败在了产品设计上。好在灭龙团队的工程师们要么学识渊博,要么内涵丰富,最终,我们击败了龙,完成了实验。当然,也希望实验室可以打造更强大的设备,让我们可以更加灵活的发挥。在游戏设计中,我们发现实验室的电路板并不能很好的反映游戏中的东西南北等地理位置。而在造作过程中,也会存在操作比较抽象,设计出的游戏不能很好的让用户理解等缺点。所以我们在设计过程中,尽量优化游戏的显示方式,力求让游戏更友好,更美观的呈现在用户面前。所以对本次实验设计比较满意。