资源描述:
《Verilog HDL项目设计报告--拔河游戏机》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、河海大学物联网工程学院VerilogHDL项目设计报告题目拔河游戏机专业电子科学与技术学号1562910123、1562910125授课班号6292758学生姓名徐子豪、杨诗欣指导教师华迪、齐本胜4摘要和关键字为了掌握数字系统的设计方法,掌握硬件描述语言——VerilogHDL,掌握模块化设计方法,掌握开发软件的使用方法。选择基于FPGA开发板设计的拔河游戏机,使用两个按键进行比赛,利用按键按下的快慢作为模拟的双方选手拔河过程,led灯的变化决定绳子的位置,led灯到了一边以后比赛终止,整个过程的难点在于,需要过滤信号
2、,使按键产生的信号稳定,所以程序中需要有按键消抖模块,同时需标识符来控制比赛的开始与结束。关键词:verilog拔河比赛消抖模块标识符Inordertomasterthedesignmethodofdigitalsystem,wemustmasterthehardwaredescriptionlanguage--VerilogHDL,graspthemodulardesignmethodandmasterthewayofdevelopingsoftware.ChoiceTugofwargameFPGAdevelopme
3、ntboardbasedonthedesign,theuseoftwobuttongame,usingkeypressspeedasboth4playerstugofwarofsimulation,changeledlampdecidethepositionoftherope,LEDlightstothesideaftertheendgame,thedifficultyliesinthewholeprocess,needtofilterthesignal,thestablesignalgeneratedbythekey
4、sso,theprocedurerequiresakeydebouncemodule,alsoneedtocontrolthegame'sidentifierandendstart.Keywords:Verilogtugshake-offmoduleidentifier.一、系统设计1.实验要求设计拔河游戏电路,用按键与LED表示输入与输出。(1)初始时,16个LED中间的两个点亮,然后游戏双方不停按动按键,点亮的两个LED向按动按键慢的一方移动;(2)每按动一下按键,LED向对方移动一格;(3)只要LED移动到头,游
5、戏结束;(4)工作时钟100Hz即可;(5)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、时序仿真、下载验证等。2.方案对比4脉冲信号方案:在选定一定的时间周期内,检测按键A与按键B的产生的脉冲个数,进行比较,若A的脉冲数量大于B,则Led向A方向移动,反之则向B方向移动,若相等则不动。4消抖模块方案给所定按键两个状态,一个前状态,一个后状态,当时钟时钟的脉冲沿来临时,将按键状态赋值给前状态,设置定时器,当计数计满后,前状态值赋给后状态,按键输出值为前状态和后状态的取反的并。此方案当一
6、直按住按键时,按键电平信号一直为高,取反后的变为低,可以避免一直按住而直接比赛结束的特殊情况。3.系统框图译码模块Led移动比较模块按键模块消抖模块时钟分频22由分频后的时钟信号模块控制按键信号模块,之后进入比较模块,若A的脉冲数大于B,则Led向A代表方向移动,反之则向B代表方向移动,若相等则不动。由Led的位置决定使能端的开启与关闭,若移动至A或B的顶端,则使能端控制Led无法再移动。4.代码设计和说明(1)对于输入端口输出端口的定义,和寄存器,线网型变量的,以及计数常量的定义moduleproject_ba(Cl
7、k,Rst_n,KEY1,KEY2,LED);inputClk;inputRst_n;inputKEY1;inputKEY2;//定义输入output[15:0]LED;//定义输出22reg[27:0]Cnt;regClk_100hz;regen;regKey1_n;regKey1_n_reg;regKey2_n;regKey2_n_reg;reg[3:0]t;reg[15:0]led;wirekey1,key2;parameterCNT=28'd49_999;(2)分频模块,将Basys3的100M系统时钟分频成为
8、周期为10ms,100Hz频率always@(posedgeClkorposedgeRst_n)beginif(Rst_n)beginCnt<=28'd0;Clk_100hz<=0;endelseif(Cnt==CNT)beginCnt<=28'd0;Clk_100hz<=~Clk_100hz;endelseCnt<=Cnt+1'