EDA拔河游戏机课程设计_第1页
EDA拔河游戏机课程设计_第2页
EDA拔河游戏机课程设计_第3页
EDA拔河游戏机课程设计_第4页
EDA拔河游戏机课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA拔河游戏机课程设计__学院课程设计题目:EDA拔河游戏机课程设计作者:

__专业:

自动化班级:

__学号:

__指导老师:

___月_日重要内容、基本规定、重要参考资料等重要内容:

电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表达拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一种发光二极管时,则该方获胜,持续比赛多局以定胜负。

基本规定:

1、设计一种能进行拔河游戏的电路。

2、电路使用9个发光二极管,开机后只有中间一种发亮,此即拔河的中心点。

3、游戏双方各持一种按钮,快速地、不停地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。

4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。

5、用数码管显示获胜者的盘数。

重要参考资料:

潘松著.EDA技术实用教程(第二版).北京:科学出版社,.康华光主编.电子技术基础模拟部分.北京:高教出版社,.阎石主编.数字电子技术基础.北京:高教出版社,.一、总体设计思想1.基本原理由设计内容可知,需要一种十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计规定用50MHz的频率,而设计用到的是1KHz的频率,因此要设计一种程序进行分频。显视控制部分设计规定在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一种清零端,用于复位。将以上程序组装起来。

2.设计框图译码器编码电路选择开关整形电路可逆计数器控制电路图1.拔河机游戏机框图二、设计环节和调试过程1、总体设计电路总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,能够实现按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平批示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,双方按键产生的输入脉冲不起作用。如按动复位键C,亮点又回到中点位置,再次按C键则比赛又可重新开始。

图2.电路图2、模块设计和对应模块程序1.顶层文献libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitybaheisport(player1,player2:instd_logic;__玩家1,2输入clk_in:instd_logic;__clk_in(1MHZ)reset:instd_logic;__重置键row:outstd_logic_vector(7downto0);col:outstd_logic_vector(7downto0);led:outstd_logic_vector(7downto0);__绳子cats:outstd_logic_vector(6downto0);__比分q:outstd_logic_vector(5downto0);__数码管控制mus:outstd_logic);__蜂鸣输出endbahe;architecturebody_baheofbaheis__分频模块ponentdivisionport(clk_in:instd_logic;__1MHZ输入clk_100,clk_5,clk_1:outstd_logic);__100HZ,5Hz,1HZendponent;__计数模块ponentcountport(clk_1:instd_logic;__1HZ输入sw:instd_logic;__状态开关player1,player2:instd_logic;__选手输入sum1,sum2:outstd_logic_vector(4downto0));__计数成果输出endponent;__比较模块ponentcmpport(clk_100:instd_logic;__100hzclk_1:instd_logic;__1hzsw:outstd_logic;__状态开关输出reset:instd_logic;__重置start:instd_logic;__开始sum1,sum2:instd_logic_vector(4downto0);__计数成果输入music_begin:outstd_logic;__音乐record1,record2:outstd_logic_vector(1downto0);__比分输出lights:outstd_logic_vector(2downto0));__拔河绳子显示endponent;__音乐模块ponentmusicport(reset:instd_logic;__重置clk:instd_logic;__1MHzclk_5:instd_logic;__5hzmusic_begin:instd_logic;__音乐开始mus:outstd_logic);endponent;__译码模块ponentdecodeport(clk_in:instd_logic;__1mHZrecord1,record2:instd_logic_vector(1downto0);__比分输入lights:instd_logic_vector(2downto0);__拔河绳子输入led:outstd_logic_vector(7downto0);__输出到LEDq:bufferstd_logic_vector(5downto0);__数码管控制cats:outstd_logic_vector(6downto0)__数码管显示比分);endponent;__倒计时模块ponentdaojishiport(clk_in,clk_1,reset:instd_logic;row:outstd_logic_vector(7downto0);col:outstd_logic_vector(7downto0);start:outstd_logic);endponent;__分频器输出signalclk_100,clk_5,clk_1:std_logic;__时钟信号__计数器输出signalsum1,sum2:std_logic_vector(4downto0);__计数成果__比较器输出signalsw:std_logic;__状态开关signalrecord1,record2:std_logic_vector(1downto0);__比分signallights:std_logic_vector(2downto0);__绳子signalmusic_begin:std_logic;__解码器输出signaltmp_led:std_logic_vector(7downto0);__LED显示signaltmp_q:std_logic_vector(5downto0);__数码管控制signaltmp_cat:std_logic_vector(6downto0);__数码管显示比分__倒计时器输出signaltmp_start:std_logic;begincats=tmp_cat;q=tmp_q;led=tmp_led;div:divisionportmap(clk_in=clk_in,clk_100=clk_100,clk_5=clk_5,clk_1=clk_1);cnt:countportmap(clk_1=clk_1,sw=sw,player1=player1,player2=player2,sum1=sum1,sum2=sum2);:cmpportmap(clk_100=clk_100,clk_1=clk_1,sw=sw,reset=reset,start=tmp_start,sum1=sum1,sum2=sum2,music_begin=music_begin,record1=record1,record2=record2,lights=lights);dec:decodeportmap(clk_in=clk_in,record1=record1,record2=record2,lights=lights,led=tmp_led,q=tmp_q,cats=tmp_cat);mu:musicportmap(reset=reset,clk=clk_in,clk_5=clk_5,music_begin=music_begin,mus=mus);dao:daojishiportmap(clk_in=clk_in,clk_1=clk_1,reset=reset,start=tmp_start,col=col,row=row);endbody_bahe;2.CMP模块libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycmpisport(clk_100:instd_logic;__100HZ输入clk_1:instd_logic;__1HZ输入reset:instd_logic;__重置start:instd_logic;__开始sum1,sum2:instd_logic_vector(4downto0);__计数输入record1,record2:outstd_logic_vector(1downto0);__比分输出music_begin:outstd_logic;__音乐开始sw:outstd_logic;__状态输出lights:outstd_logic_vector(2downto0));__绳子状态endcmp;architecturebody_cmpofcmpissignaltmp_record1:std_logic_vector(1downto0);__比分signaltmp_record2:std_logic_vector(1downto0);signaltmp:std_logic_vector(2downto0);__绳子状态signaltmp_sta:std_logic;__状态signals1,s2:std_logic_vector(4downto0);__计数beginrecord1=tmp_record1;record2=tmp_record2;lights=tmp;sw=tmp_sta;process(clk_100)__判断比赛状态beginif(start='1')thenif(clk_100'eventandclk_100='1')thentmp_sta='1';endif;endif;if(clk_100'eventandclk_100='1')then__任意比分到3,比赛结束,开始播放音乐if(tmp_record1=“11“ortmp_record2=“11“)thentmp_sta='0';music_begin='1';endif;if(tmp=“001“ortmp=“111“)then__绳子到头,进入等待状态tmp_sta='0';endif;if(reset='1')then__复位,状态归零tmp_sta='0';music_begin='0';endif;endif;endprocess;s1=sum1;s2=sum2;process(clk_1,reset)__控制绳子移位beginif(reset='1')thentmp=“100“;__绳子初始状态为100tmp_record1=“00“;tmp_record2=“00“;elseif(clk_1'eventandclk_1='1')thenif(tmp_sta='1')thenif(s1s2)thentmp=tmp-'1';__绳子左移elsif(s1=s2)thentmp=tmp;__绳子保持原状elsetmp=tmp+'1';__绳子右移endif;elseif(tmp=“001“)then__绳子到左尽头,左计分器加1tmp_record1=tmp_record1+'1';tmp=“100“;elsif(tmp=“111“)then__绳子到右尽头,右记分器加1,tmp_record2=tmp_record2+'1';tmp=“100“;endif;endif;endif;endif;endprocess;endbody_cmp;3.COUT模块useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycountislibraryIEEE;port(clk_1:instd_logic;__1HZ输入sw:instd_logic;__状态判断输入player1,player2:instd_logic;__选手输入sum1,sum2:outstd_logic_vector(4downto0));__计数输出endcount;architecturebody_countofcountissignalp1,p2:std_logic_vector(4downto0);__计数输出beginsum1sum2process(player1,player2,sw,clk_1)beginif(sw='1')then__处在比赛状态if(clk_1='0')thenif(player1'eventandplayer1='1')thenp1=p1+'1';endif;if(player2'eventandplayer2='1')thenp2=p2+'1';endif;elsep1=“00000“;p2=“00000“;endif;__比赛状态结束elsep1=“00000“;p2=“00000“;endif;endprocess;endbody_count;4.daojishi模块libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitydaojishiisport(clk_1,clk_in,reset:instd_logic;row:outstd_logic_vector(7downto0);col:outstd_logic_vector(7downto0);start:outstd_logic);enddaojishi;architecturebody_daojishiofdaojishiistypestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10);signalpresent_state:state:=s10;signalnum:std_logic_vector(2downto0):=“000“;beginp3:process(clk_in)beginifclk_in'eventandclk_in='1'thenifnum=“101“thennum=“000“;elsenum=num+1;casepresent_stateiswhens9=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens8=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens7=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens6=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens5=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens4=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens3=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens2=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens1=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whens0=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;whenothers=casenumiswhen“000“=col=“__“;row=“__“;when“001“=col=“__“;row=“__“;when“010“=col=“__“;row=“__“;when“011“=col=“__“;row=“__“;when“100“=col=“__“;row=“__“;whenothers=col=“__“;row=“__“;endcase;endcase;endif;endif;endprocessp3;p4:process(clk_1)beginifreset='1'thenpresent_state=s10;start='0';elseifclk_1'eventandclk_1='1'thencasepresent_stateiswhens10=present_statestart='0';whens9=present_statestart='0';whens8=present_statestart='0';whens7=present_statestart='0';whens6=present_statestart='0';whens5=present_statestart='0';whens4=present_statestart='0';whens3=present_statestart='0';whens2=present_statestart='0';whens1=present_statestart='1';whens0=present_state=present_state;whenothers=null;start='1';endcase;endif;endif;endprocessp4;endbody_daojishi;libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitydecodeisport(clk_in:instd_logic;__1MHzrecord1,record2:instd_logic_vector(1downto0);__比分状态输入lights:instd_logic_vector(2downto0);__绳子状态输入led:outstd_logic_vector(7downto0);__绳子解码后输出q:bufferstd_logic_vector(5downto0);__数码管控制cats:outstd_logic_vector(6downto0));__数码管显示enddecode;architecturebody_decodeofdecodeissignaltmp_led:std_logic_vector(7downto0);__绳子输出signaltmp_da1:std_logic_vector(6downto0);__比分1signaltmp_da2:std_logic_vector(6downto0);__比分2signaltmp:std_logic_vector(6downto0);__比分显示beginled=tmp_led;cats=tmp;process(clk_in,lights,record1,record2,q,tmp_da2,tmp_da1,tmp)begincaselightsis__绳子状态when“100“=tmp_led=“__“;when“011“=tmp_led=“__“;when“010“=tmp_led=“__“;when“001“=tmp_led=“__“;when“101“=tmp_led=“__“;when“110“=tmp_led=“__“;when“111“=tmp_led=“__“;whenothers=tmp_led=“__“;endcase;caserecord1is__比分状态when“00“=tmp_da1=“__“;when“01“=tmp_da1=“__“;when“10“=tmp_da1=“__“;when“11“=tmp_da1=“__“;endcase;caserecord2is__比分状态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论