本科毕业论文-基于vhdl的乒乓球游戏机的设计正文_第1页
本科毕业论文-基于vhdl的乒乓球游戏机的设计正文_第2页
本科毕业论文-基于vhdl的乒乓球游戏机的设计正文_第3页
本科毕业论文-基于vhdl的乒乓球游戏机的设计正文_第4页
本科毕业论文-基于vhdl的乒乓球游戏机的设计正文_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

-引言随着社会的进步和工业技术的发展,在电子线路设计领域中,设计自动化工具已经逐步为设计者所接受,成为主要的设计手段。目前,VHDL已成为许多设计自动化工具普遍采用的标准化硬件描述语言,掌握VHDL语言,用VHDL语言设计电子线路,是电子线路设计者必须掌握的基本技能。VHDL支持数字电路的开发环境,VHDL也支持各种设计方法:自顶向下、自底向上或混合的方法[1]。VHDL语言功能性强,覆盖面大,灵活性高,具有很好的实用性[2]。本文设计一个基于VHDL的乒乓游戏机,乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,甲乙二人按乒乓球比赛规则来操作开关。本设计由译码显示器、记分器、状态机/球台控制器与按键去抖等部分组成。本设计是用实验箱GW48进行模拟乒乓机,用发光二极管代表乒乓球台,最中间的发光二极管作球网,用点亮的发光二极管按一定方向移动来表示球的运动,用按钮设置发球和接球开关。设计总体要求:乒乓机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。本设计的主要任务和要求如下:(1)使用乒乓机的甲乙双放在不同的位置发球或击球。(2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定。球的速度为0.1s-0.5s移动1位。球过网,接球方向即可击球,提前击球或没击球均判失分。(3)比赛按21分为一局进行,甲乙双方都应设置自己的记分牌,任何一方先记满21分,该方就算胜出,按RESET复位重新开局。

1.VHDL简介VHDL是VeryhighspeedintegratedcircuitHardwareDescriptionLanguage的缩写,即“甚高速集成电路硬件描述语言”,最初由美国国防部和INTER、IBM、TI公司联合开发,1987年成为IEEE标准,即IEEE1076标准(俗称87版VHDL)[1]。此后,美国国防部要求官方与高速集成电路设计的所有文档必须用VHDL描述,因为VHDL在电子设计领域得到了广泛的应用,渐渐成为工业界的标准。1993年,IEEE对VHDL进行了修订,公布了新的VHDL标准,即IEEE1076-1993版(俗称93版VHDL)[3]。1.1VHDL的特点及优点VHDL具有以下特点[4]:(1)支持“自顶向下”的设计方法:设计可按层次分解,采用结构化开发手段,可实现多人、多任务的并行工作方式,使系统的设计效力大幅提高。(2)系统硬件描述能力强:可以同时支持“行为描述”、“数字流描述”和“结构描述”3种描述方式,并可混用[5]。其中,强大的“行为描述”能力使设计者可以避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统。这一特点使VHDL成为系统设计领域中最佳的硬件描述语言。(3)系统仿真能力强:VHDL最初是作为一种仿真标准问世的,因此VHDL具有仿真语句和库函数。另外,VHDL强大的“行为描述”能力也使其十分适用于系统级仿真。(4)工艺无关性[6]:在使用VHDL设计系统硬件时,没有嵌入与工艺相关的信息。正因为VHDL的硬件描述与具体工艺无关,因而其程序的硬件实现目标器件有广阔的选择范围,其中包括各种CPLD、FPGA及ASIC等。同时,VHDL具有以下优点[7]:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。就目前流行EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体FPGA和CPLD等目标器件的网表文件已不成问题,只是在综合与优化效率上略有差异。(2)VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。(3)VHDL语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。高效、高速完成符号市场需求的大规模系统设计必须有多人甚至多个开发组共同并行工作才能实现。VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有利的支持。(4)用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的芯片)。这种方式突破了门级设计的瓶颈,极大地减少电路设计的时间和可能发生的错误,降低了开发成本。利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系统。反过来,设计者还可以容易地从综合和优化的电路获得设计信息,返回去修改VHDL设计描述,使之更加完善。(5)VHDL对设计的描述具有相对独立性。设计者可以不懂硬件的结构,也不必管最终设计的目标器件是什么,而进行独立的设计。正因为VHDL的硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各种系列的CPLD、FPGA及各种门阵列器件。(6)VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。正因为VHDL有如此多的特点和优点,所以本设计运用VHDL进行乒乓球游戏机软设计。1.2设计流图设计流程图如图1所示。这一流程图基本可使用任何基本硬件描述语言的设计。下面对这个流程中的步骤进行说明[1]:(1)系统层次划分/画出系统框图(Hierarchy/BlockDiagram):按照“自顶向下”的设计方法对系统进行划分(确定系统由哪些模块构成,各个模块又由哪些子模块构成)。(2)编码:写出VHDL代码,大多数集成开发环境(如MAX+plus2等)都集成了针对VHDL的编辑。这些编辑器一般都具有VHDL关键词的亮点显示等特点,有的还内嵌了常用的VHDL程序模块。图1VHDL的设计流程图(3)编译(Compilation):编译器会对VHDL程序进行语法检查,还会产生用于仿真的一些内部信息。这一步骤通常由编译器自动完成,无须我们干预。如果VHDL语言有错误,编译无法通过,则需要修改程序,即回到第(2)步。事实上,VHDL设计过程中,常常根据需要往后退一步,甚至更多。(4)功能仿真(FunctionalSimulation):VHDL仿真器允许定义输入并应用到设计中,不必生成实际电路就可以观察输出。此仿真主要用于检验系统功能设计的正确性,不涉及具体器件的硬件特性。(5)综合(Synthesis):利用综合器对VHDL代码进行综合优化处理,生成门级描述的网表文件,这是将VHDL语言描述转化为硬件电路的关键步骤。这一步通常由综合器自动完成,但设计者可以设定一些技术上的约束条件(如限定逻辑层次的最大数等)来“帮助”综合器。(6)适配(Fitting):利用适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化、布局布线等。此步骤将产生多项设计结果:①适配报告,包括芯片内部资源的利用情况、设计的布尔方程描述情况等;②适配后的仿真模型;③器件编程文件。(7)时序仿真(TimingSimulation):根据适配后的仿真模型,可以进行时序仿真。因为这时已经得到目标器件的实际硬件特性(如时延特性等),所以仿真结果能比较精确的预期芯片的实际性能。如果仿真结果达不到设计要求,就需要修改VHDL源代码或选择不同的目标器件,甚至要重构整个系统,图1就是所设计者极力避免出现的情况。(8)下载CPLD/FPGA(Programming):如果时序仿真通过,就可将“适配”时产生的器件编程文件下载到CPLD或FPGA中(FPGA的编程通过被称为“配置”)。虽然流程图中未标出从此步“往回走”的箭头,但事实上,实际的结果有可能与仿真结果有差异(可能是设计时未考虑到外部硬件的实际情况;也可能是由于仿真时测试的条件不够多,没有发现其中隐藏的错误),这时,必须回头重新找出问题所在。

2.模块设计乒乓游戏机的组成示意图如图2所示。图2乒乓游戏机的组成示意图本设计中的乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,一个是发球开关STARTA、STARTB;另一个是击球开关HITA、HITB。甲乙二人按乒乓球比赛规则来操作开关。当甲方按动发球开关STARTA时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。当球过网后按设计者规定的球位,乙方就可以击球。若乙方提前击球或没有击中球,则判乙方失分,甲方的记分牌自动加一分。然后重新发球,比赛继续进行。比赛一直要进行到一方记分牌达到21分,该局才结束。本设计由译码显示器、按键去抖、状态机/球台控制器和记分器等部分所组成。本系统的逻辑分框图如图3所示。图3系统逻辑分框图2.1七段数码管显示译码器七段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用VHDL译码程序在FPGA或CPLD中实现。七段数码管分为共阴极和共阳极两种[8]。简而言之,对共阴极来说,公共引脚要接地,想要点亮某段数码管,就在相应的引脚加上高电平;对共阴极来说刚好相反,公共引脚提高电平,想要点亮某段数码管,就在相应的引脚加上低电平[9]。七段BCD码译码器的设计,输出信号LED7S的7位分别接如图4所示数码管的七个段,高位在左,低位在右[9]。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1,接有高电平的段发亮,于是数码管显示“5”。带使能信号EN的译码电路的VHDL程序中,EN为高电平时,译码器正常工作;EN为低电平时,译码器输出0000000,表示数码管无显示。用选择信号赋值语句描述,将综合成组合逻辑电路。图4共阴数码管及电路图5多模块共同控制七段数码管译码电路示意图带使能信号EN的译码电路的VHDL程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDISPLAYISPORT(EN:INSTD_LOGIC;NUM:ININTEGERRANGE0TO15;DISPLAY:OUTSTD_LOGIC_VECTOR(0TO6));END;BEGINPROCESS(EN,NUM)BEGINIFEN=’1’THEN--使能信号EN为1时,译码器正常工作CASENUMISWHEN0=>DISPLAY<=”1111110”;WHEN1=>DISPLAY<=”0110000”;WHEN2=>DISPLAY<=”1101101”;WHEN3=>DISPLAY<=”1111001”;WHEN4=>DISPLAY<=”0110011”;WHEN5=>DISPLAY<=”1011011”;WHEN6=>DISPLAY<=”0011111”;WHEN7=>DISPLAY<=”1110000”;WHEN8=>DISPLAY<=”1111111”;WHENOTHERS=>DISPLAY<=”0000000”;ENDCASE;ELSEDISPLAY<=”0000000”;--EN为0,数码管无显示ENDIF;ENDPROCESS;END;值得注意的是,本程序是组合逻辑电路,PROCESS的敏感信号参数表中一定要有NUM;否则编译时会提示如下出错信息:“ElseClausefollowingaClockedgemustholdthestateofsignal‘Display’”。出现此提示信息的原因是:综合器将EN误判为时钟信号,并试图将程序综合成时序逻辑电路,但该程序的格式又不符合综合器对时钟信号描述的要求,因此无法综合。2.2按键去抖电路键盘的按键闭合与释放瞬间,输入的信号会有毛刺。如果不进行消抖处理,系统会将这些毛刺误以为是用户的另一次输入,导致系统的误操作。防抖电路有很多种,最简单、最容易理解的就是计数法。其原理是对键值进行计数,当某一键值保持一段时间不改变时(计数器达到一定值后),才确认它为有效值;否则将其判为无效键值,重新对键值进行计算[2]。下面是基于计数法的防抖电路程序:LIBRARYIEEE;ENTUTYANTITWITTERISPORT(CLOCK:INSTD_LOGIC;NUMIN:ININTEGERRANGE0TO15;NUMOUT:OUTINTEGERRANGE0TO15);END;ARCHITECTUREBEHAVIOROFANTITWITTERISSIGNALTEMPNUM:INTEGERRANGE0TO15;SIGNALCOUNTER:INTEGERRANGE0TO31;SIGNALSTART:STD_LOGIC;BEGINPROCESS(CLOCK)BEGINIFRISING_EDGE(CLOCK)THENIFSTART=‘0’THEN--上电后立即对输出的键值赋予无效值TEMPNUM<=15;--此处沿将15作为无效值NUMOUT<=15;--此无效值务必随实际情况改变START<=‘1’;ELSEIFNUMIN<=TEMPNUMTHEN--上一键值与此键值不同TENPNUM<=NUMIN;--记录此键值COUNTER<=‘0’;--并对计数器清0,准备对此键值计时ELSEIFCOUNTER31THEN;--当键值保持31个时钟周期不变时NUMOUT<=NUMIN;--即确定为有效键值,并输出COUNTER<=‘0’;ELSECOUNTER<=COUNTER+1;ENDIF;ENDIF;ENDIF;ENDIF;ENDPROCESS;END;2.3状态机设计2.3.1状态机的6种状态及状态转移本状态机有6种状态,分别是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含义如表1所示。表1状态机的6种状态及含义状态含义WAITSTATE等待状态,等待A或B方开球ATOB球从A向B方移动BTOA球从B向A方移动ASCOREA得一分BSCOREB得一分FINALRESULT比赛结束(最终判分),在此状态下需要按复位键,才能开始下一轮比赛结合表1,从图6中很清楚地看出乒乓游戏机比赛过程中球的移动情况,及加分方法,还可以初步了解到本状态机设计的基本思路。图6乒乓游戏机状态转移图2.3.2状态机/球台控制程序状态机是种很重要的时序电路,也是本设计的核心部件。状态机属于时序电路范畴,实现一个控制功能更为方便,并提高了控制速度[10]。本次设计中状态机的符号如图7所示。图7状态机符号在本设计中,状态机用两个信号表示状态:STATE表示当前状态,TABLESTATE表示下一个状态。此状态机由两个进程构成,状态机的输入/输出引脚的作用如表2所示。其中SCOREAL[3..0]、SCOREAH[3..0]、SCOREBL[3..0]、SCOREBH[3..0]用七段BCD码译码器显示得分情况,而SCOREA、SCOREB用二进制进行加分,由记分器反馈回来。表2输入/输出引脚的作用引脚作用CLK10Hz的时钟,可由系统时钟分频得到。此时时钟决定了球移动的速度,可根据实际需要调整。RESET复位键,比赛重新开始,记分器清0STARTA、STARTBA和B双方的开始的开球键HITA、HITBA和B双方的击球键(可以将其与开球键合并)CLEAR将记分器清0(给记分器的控制信号)INCREASEA、INCREASEB分别为A、B双方的加分信号(给记分器的控制信号)SCOREAL[3..0]SCOREAH[3..0]SCOREBL[3..0]SCOREBH[3..0]SCOREA、SCOREBA、B双方的分数(由记分器给出)LIGHT[4..0]接5个发光二极管AWIN、BWIN分别接发光二极管,表示A或B方胜出状态机的程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSTATEMACHINEISPORT(CLK:INSTD_LOGIC;RESET:INSTD_LOGIC;STARTA,HITA,STARTB,HITB:INSTD_LOGIC;SCOREA,SCOREB:ININTEGERRANGE0TO21;CLEAR,INCREASEA,INCREASEB:OUTSTD_LOGIC;TABLELIGHT:OUTSTD_LOGIC_VECTOR(0TO4);AWIN,BWIN:OUTSTD_LOGIC);END;SIGNALSTATE:STATE_TYPE;SIGNALTABLESTATE:INTEGERRANGE0TO4;BEGINPROCESS(CLK,RESET)BEGINIFRESET='1'THEN--按下复位键,比赛开始STATE<=WAITSTATE;--进入等待状态CLEAR<='1';--记分器清零AWIN<='0';BWIN<='0';CASESTATEISWHENWAITSTATE=>CLEAR<='0';INCREASEA<='0';INCREASEB<='0';IF((SCOREA=21)OR(SCOREB=21))THEN--如果一方先得到21分STATE<=FINALRESULT;--比赛结束ELSEIFSTARTA='1'THEN--如果A开球STATE<=ATOB;--球从A向B方移动TABLESTATE<=0;--A方第一个灯点亮ELSEIFSTARTB='1'THEN--如果B开球(A、B开球有--定的优先级区别STATE<=BTOA;--球从B向A方移动TABLESTATE<=4;--B方第一个灯亮ELSESTATE<=WAITSTATE;ENDIF;ENDIF;ENDIF;WHENATOB=>--球从A向B移动的过程IFHITB='1'THEN--如果检测到B方击球IFTABLESTATE<=2THEN--若未过网提前击球STATE<=ASCORE;--判为A胜ELSESTATE<=BTOA;--若过了网击球,球从B--向A移动ELSE--若未检测到B方击球IFTABLESTATE=4THEN--如果离B方最近的灯--已经亮STATE<=ASCORE;--判为A胜ELSETABLESTATE<=TABLESTATE+1;--否则球继续移动ENDIF;WHENBTOA=>--球从B向A移动的过程IFHITA='1'THEN--如果检测A方击球IFTABLESTATE>=2THEN--若未过网提前击球STATE<=BSCORE;--判为B胜ELSE--若过了网击球,球从ASTATE<=ATOB;--向B移动ENDIF;ELSE--若未检测到A击球IFTABLESTATE=0THEN--如果离A最近的灯亮了STATE<=BSCORE;--判为B胜ELSETABLESTATE<=TABLESTATE-1;--否则球继续移动ENDIF;ENDIF;WHENASCORE=>--如果A胜INCREASEA<='1';--A方加1分STATE<=WAITSTATE;--回到等待开球状态WHENBSCORE=>--如果B胜INCREASEB<='1';--B方加1分STATE<=WAITSTATE;--回到等待开球状态WHENFINALRESULT=>--最后结果IF(SCOREA=21)THEN--若A方先达到21分AWIN<='1';--表示A方胜出的灯亮ELSEBWIN<='1';--否则,表示B方胜出的灯亮ENDIF;WHENOTHERS=>ENDCASE;ENDIF;ENDPROCESS;PROCESS(CLK)--此进程控制5个发光二极管的亮灭BEGINIFFALLING_EDGE(CLK)THENIF((STATE=ATOB)OR(STATE=BTOA))THENCASETABLESTATEISWHEN0=>TABLELIGHT<="10000";WHEN1=>TABLELIGHT<="01000";WHEN2=>TABLELIGHT<="00100";WHEN3=>TABLELIGHT<="00010";WHEN4=>TABLELIGHT<="00001";WHENOTHERS=>TABLELIGHT<="00000";ENDCASE;ELSETABLELIGHT<="00000";ENDIF;ENDIF;ENDPROCESS;END;3.4记分器设计图8记分器元件符号记分器元件符号如图8所示,本设计中记分器比较简单,只须根据状态机给出的两个信号(INCREASEA和INCREASEB)对六个分数(SCOREAL、SCOREAH和SCOREBL、SCOREBH、SCOREA、SCOREB)进行操作,记分器的程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTERISCLEAR:INSTD_LOGIC;INCREASEA,INCREASEB:INSTD_LOGIC;SCOREAL,SCOREAH,SCOREBL,SCOREBH:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)SCOREA,SCOREB:BUFFERINTRGERRANGE0TO21);END;BEGINPROCESS(CLK,CLEAR)ISBEGINIFCLEAR='1'THEN--清0SCOREAL<="0000";SCOREAH<="0000";SCOREBL<="0000";SCOREBH<="0000";SCORES<=0;SCOREB<=0;ELSIFFALLING_EDGE(CLK)THENIFINCREASEA='1'THEN--A方加1分IFSCOREAH<"0010"THEN--若高位小于2IFSCOREAL<"1001"THEN--如果低位小于9SCOREAL<=SCOREAL+1;--则低位加1ELSESCOREAL<="0000";--当低位为9,则清0SCOREAH<=SCOREAH+1;--高位加1ENDIF;ELSIFSCOREAH<="0010"THEN--若高位为2IFSCOREAL<"0001"THEN--如果低位小于1SCOREAL<=SCOREAL+1;--则低位加1ELSESCOREAL<="0000";--否则高位、低位都清0SCOREAH<="0000";ENDIF;ENDIF;SCOREA<=SCOREA+1;ELSIFINCREASEB='1'THENIFSCOREBH<2THEN--若高位小于2IFSCOREBL<"1001"THEN--如果低位小于9SCOREBL<=SCOREBL+1;--则低位加1ELSESCOREBL<="0000";--当低位为9,则清0SCOREBH<=SCOREBH+1;--高位加1ENDIF;ELSIFSCOREBH<="0010"THEN--若高位为2IFSCOREBL<"0001"THEN--如果低位小于1SCOREBL<=SCOREBL+1;--则低位加1ELSESCOREBL<="0000";--否则高位、低位都清0SCOREBH<="0000";ENDIF;ENDIF;ENDPROCESS;END;编写VHDL源程序后,不能将设计文本存入根目录下,本设计都存在文件夹CHENLY中,还要注意设计文本的后缀名一定是“.VHD”,编写时一定要注意实体名跟设计文件名一致,这些是程序能顺利进行编辑和编译、逻辑综合、逻辑适配、编程下载成功的最重要的前提条件。

3.系统硬件测试3.1GW48系统的主要性能和特点(1)GW48系统设有通用的系统编程下载电路,可对Lattice、Xilinx、Vantis、Altera、Atmel和Cypress等世界六大PLD公司各种ISP编程下载方式或现场配置的CPLD/FPGA系列器件进行实验或开发。其主系统板与芯片板都采用接插式结构,动态电路结构自动切换工作方式,含有可自动切换的12种实验电路结构模式。(2)GW48系统基于“电路重构软件配置”的设计思想,采用了I/O口可任意定向目标板的智能化电路结构设计方案,利用在系统微控制器对I/O口进行任意定向设置和控制,从而实现了CPLD/FPGA目标芯片I/O口与实验输入/输出资源以各种不同方式连接来构造形式各异的实验电路的目的。(3)GW48充实丰富的实验资源外,还扩展了A/D、D/A、VGA视频、PS/2接口、RS232通信、单片机独立用户系统编程下载接口、48MHz高频时钟源及在板数字频率计,在其上可完成200多种基于FPGA和CPLD的各类电子设计和数字系统设计实验与开发项目,从而能使实验更接近实际的工程设计[8]。3.2FPGA目标芯片管脚图设计所用的GW48实验箱中,适配的目标芯片为ALTERA类中FLEX10K系列的EPF10K10,EPF10K10LC84型号的芯片有84个引脚[11],如图9所示,本设计中用到的引脚情况如下:(1)CLK:时钟信号,决定球的移动速度,对应实验箱中的输入时钟选择模块中的CLOCK0。对应芯片引脚2。(2)RESET:复位键,对应实验箱的键1,对应芯片的引脚5。(3)STARTA、STARTB:开球键,分别对应实验箱的键4、键7,分别对应芯片的引脚8、11。(4)HITA、HITB:击球键,分别对应实验箱的键5、键8,分别对应芯片的引脚9、16。(5)L0、L1、L2、L3、L4:代表乒乓球台,L2为球网,分别对应发光二极管的D1、D2、D3、D4、D5,分别对应芯片引脚17、18、19、21、22。(6)AWIN、BWIN:表示A、B胜出的标志,分别接二极管D7、D8,哪个先点亮,说明该方已经得里21分,分别对应芯片引脚24、25。(7)AL0、AL1、AL2、AL3:显示A方得分情况中个位上的分值,对应数码管1,分别对应芯片引脚27、28、29、30。(8)AH0、AH1、AH2、AH3:显示A方得分情况中十位上的分值,对应数码管2,分别对应芯片引脚35、36、37、38。(9)BL0、BL1、BL2、BL3:显示B方得分情况中个位上的分值,对应数码管3分别对应芯片引脚39、47、48、49。(10)BH0、BH1、BH2、BH3:显示B方得分情况中十位上的分值,对应数码管4,对应芯片引脚50、51、52、53。图9目标芯片顶面图3.3系统的编译、综合、适配顶层文件元件连接PINGPANG.GDF,如图10所示,模块STATEMACHINE1是状态机/球台控制,当复位键为低电平时,若A方(STARTA)或B方(STARTB)开始发球,模块LIGHT的发光二极管L0、L1、L2、L3、L4在下降沿来临时正向或反向依次点亮,当有方得分时,将启动加分信号INCREASEA、INCREASEB,同时启动记分器模块COUNTER1,加分情况将通过四个数码管来显示,并将其反馈回状态机模块,当有一方先达到21时,其对应的胜分标志发光二极管将被点亮。在按键与CPLD相连的引脚需要设置下拉电阻(300~1000Ω即可)以便在没有按键按下时将输入也稳定在低电平,否则系统会不稳定。(1)设置顶层文件:在编译系统文件PINGPANG.GDF之前,需要设置该文件为顶层文件Project(工程文件)。选择菜单“File”→“Project”→“SetProjecttoCurrentFile”,当前的工程,即被设为PINGPANG。首先通过选择“MAX+PIUSII”→“Compiler”菜单,进入编辑窗。(2)选择目标器件及锁定引脚:先选择用编程的目标芯片。选择菜单“Assign”→“Device…”在弹出的对话框中的“DeviceFamily”下拉栏中选择“FLEX10”,然后在“Devices”列表框中选择芯片型号“EPF10K10-PLCC84”,按“OK”。选择菜单“Assign”→“Pin/Location/Chip…”弹出一个对话框来设置引脚。在“Pin”右边的下拉栏中选择芯片引脚号,然后按下“Add”按钮,就会在下面的子窗口出现引脚设定说明语句,当前的一个引脚设置就加到了列表中。如果是总线形式的引脚名,也应分别写出总线中的每一个信号引脚设定,顶层文件引脚锁定文件为PINGPANG.PPN,如表3所示。图10乒乓游戏机顶层文件连接图3.4系统的有关仿真(1)建立仿真波形文件:选择菜单“File”→“New”对话框中选择“WaveformEditorfile”,按“OK”后将出现波形编辑器子窗口。选择菜单“Node”→“EnterNodesfromSNF”,出现选择结点对话框。按右上侧的“List”按钮,左边的列表框将立即列出所有可以选择的信号结点,然后按中间的“=>”按钮,将左边列表框的结点全部选中到右边的列表框。按“OK”按钮,选中的信号将出现在波形编辑器中[12]。其中有全部的输入信号CLK、RESET、STARTA、HITA、STARTB、HITB,输出信号L0、L1、L2、L3、L4、AL0、AL1、AL2、AL3、AH0、AH1、AH2、AH3、BL0、BL1、BL2、BL3、BH0、BH1、BH2、BH3、AWIN、BWIN。最后通过菜单“File”→“Save”在弹出的窗口中将波形文件存在同一个目录下,文件取名为PINGPANG.SCF。(2)设置输入信号波形:波形观察左排按钮是用于设置输入信号的,使用时只要先用鼠标在输入波形上拖一个需要改变的黑色区域,然后单击左排相应按钮即可。其中“0”、“1”、“X”、“Z”、“INV”、“G”分别表示低电平、高电平、任意、高电阻、反相和总线数据设置。时钟信号用鼠标点时钟信号的“VALUE”区域,可以将时钟信号选中。这时时钟信号的波形区域全都变成黑色,按集成环境左边上的时钟按钮,将出现时钟信号设置对话框,按下“OK”,即可设置时钟信号。按集成环境右边的“缩小”按钮,可以随小波形显示,以便在仿真时能够浏览波形全貌。根据需要将各输入信号进行设置,并保存。(3)运行仿真器进行仿真:选择菜单“MAX+PIUSⅡ”→“Simulator”,按下“Simulator”,出现仿真参数设置与仿真启动窗。这时按一下该窗口中的“Start”按钮,即进行仿真运算,当仿真结果显示“0errors,0warnings”,表示仿真运算结束。仿真结果可以确认设计正确。本系统含有时钟信号,希望在不改变输入时钟信号周期的条件下,延长运算时间,所以进行下面设置:在波形编辑窗口打开的情况下,选择“File”→“ENDTime”,在弹出的窗口中设置仿真结束时间,按“OK”按钮,选择菜单“MAX+PLUSⅡ”→“Simulator”,在“Simulator”子窗口“ENDTime”处设置同一时间长度。然后启动仿真操作,结束后可观察仿真波形。如果在开始没有打开波形观察窗,可选择“File”→“Open”,然后在弹出一名为“Open”的窗口中选择“WaveformEditorfile”,并在“Files”窗口弹出的波形文件名PINGPANG.SCF上双击,即可进入波形观察窗,如图11所示。表3PINGPANG.PPN的设计过程设计实体I/O标记设计实体I/O来源/去向插座序号芯片可用资源序号序号RESET键1PIO0I/O05STARTA键4PIO3I/O38HITA键5PIO4I/O49STARTB键7PI06I/O611HITB键8PIO7I/O716AL0数码管1PIO16I/O1627AL1数码管1PIO17I/O1728AL2数码管1PIO18I/O1829AL3数码管1PIO19I/O1930AH0数码管2PIO20I/O2035AH1数码管2PIO21I/O2136AH2数码管2PIO22I/O2237AH3数码管2PIO23I/O2338BL0数码管3PIO24I/O2439BL1数码管3PIO25I/O2547BL2数码管3PIO26I/O2648BL3数码管3PIO27I/O2749BH0数码管4PIO28I/O2850BH1数码管4PIO29I/O2951BH2数码管4PIO30I/O3052BH3数码管

温馨提示

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

评论

0/150

提交评论