基于vhdl的乒乓球游戏机的设计与实现(编辑修改稿)内容摘要:
cdout2=1011011。 when00110=bcdout1=1111110。 bcdout2=1011111。 when00111=bcdout1=1111110。 bcdout2=1110000。 when01000=bcdout1=1111110。 bcdout2=1111111。 when01001=bcdout1=1111110。 bcdout2=1111011。 把 10到 19 的 5位二进制码转换成七段译码 when01010=bcdout1=0110000。 bcdout2=1111110。 when01011=bcdout1=0110000。 bcdout2=0110000。 when00000=bcdout1=0110000。 bcdout2=1101101。 when01100=bcdout1=0110000。 bcdout2=1111001。 when01101=bcdout1=0110000。 bcdout2=0110011。 when01111=bcdout1=0110000。 bcdout2=1011011。 when10000=bcdout1=0110000。 bcdout2=1011111。 when10001=bcdout1=0110000。 bcdout2=1110000。 when10010=bcdout1=0110000。 bcdout2=1111111。 when10011=bcdout1=0110000。 bcdout2=1111011。 把 20 到 21的 5位二进制码转换成七段译码 when10100=bcdout1=1101101。 bcdout2=1111110。 when10101=bcdout1=1101101。 bcdout2=0110000。 如果 5位二进制码不在 0 到 21范围内,那么两个七段译码器都显示 0 when others=bcdout1=1101101。 bcdout2=1111110。 end case。 end process。 end m。 这个记分译马电路是针对乒乓球游戏机的特点进行的特别设计,采用的是全部列举的方法。 构造体的设计 该构造体紧跟在实体设计之后,这样就完成了数字乒乓球游戏机的 VHDL 源程序编写。 rchitecture game of pingponggame is type pingpong is (waitserve,light1on,ballmoveto2,allow2hit, light8on,ballmoveto1,allow1hit)。 设置 7个状态,为枚举数据类型,记为 pingpong signal state:pingpong。 signal i:integer range 0 to 8。 signal count1,count2:std_logic_vector(1 to 5):=00000。 内部计数器,是 5位二进制变量 ponent mydecoder is port(binaryin: in std_logic_vector(1 to 5)。 bcdout1:out std_logic_vector(1 to 7)。 bcdout2:out std_logic_vector(1 to 7)。 )。 end ponent。 调用记分译码器 begin process(clk) 状态机进程 begin „„ end process。 进程处 i信号控制发光二极管的亮暗 light=10000000when(i=1) else 01000000 when(i=2) else 00100000 when(i=3) else 00010000 when(i=4) else 00001000 when(i=5) else 00000100 when(i=6) else 00000010 when(i=7) else 00000001 when(i=8) else 00000000。 其他情况所有发光二极管都暗 u0:mydecoder port map(count1,score11,score12)。 用七段译码器显示甲的分数 u1:mydecoder port map(count2,score21,score22)。 用七段 译码器显示乙的分数 end game。 从构造体设计中可以看到,控制整个乒乓球游戏机运转的就是状态机进程,它队各个外围部分起控制作用。 它是整个程序的核心,起到一个中心控制器的作用。 而外围的部分,比如分数显示,球的轨迹,都是通过它传出的信号来控制。 状态机中的 i信号和 count1,count2信号的变化同时就可以影响到外围的显示部分 发光二极管和七段译码器,从而表示出当时的乒乓球位置和双方分数情况。 4 系统仿真 系统的编译 编译时选择所要下载的芯片为 EPM7128SLC8415,在编译完成以后,会出现两个警告,信息是这样的:“ Primitive ‘ score112’ is stuck at VCC” 和“ Primitive ‘ score212’ is stuck at VCC”。 这说明 score11(2)和 score21(2)端口输出一直是‘ 1’。 score11(2)是用来表示甲得分的十位数字的七段译码器的 b 段的,由于在记分译码器设计中,十位数字只会显示 0, 1 或者 2,无论是这三个数字中的那一个, b段的发光二极管都是亮的,所以就相当于接着高电平VCC。 Score21(2)同理。 提示信息如图 所示。 图 编译时警告信息图 系统有关 波形 的 仿真 编译完成后,进行波形仿真,仿真波形图如图 所示。 图 乒乓球游戏机波形仿真图一 在这个仿真图中,看到 serve 数组为 1,代表乙发球。 I从 8 开始依次递减计数,控制发光管亮暗 light 信号也随着 i 的数值变化,见图 所示。 由 light端口输出的高电平驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。 可以看到,在甲该击球的时候没有击球,也就是hit1 在 state 状态 6的时候没有高电平‘ 1’输入,则乙得分, count2 由 0 变 1,score22 的值随之变化。 从最后一行 state 值的变化,可以清楚分析状态转移。 图 乒乓球游戏机仿真波形图一中的乒乓球移动状况 图 是乙发球以后,甲在正确时刻接球的波形仿真图。 图 乒乓球游戏机波形仿真图二 甲在 state 为状态 6 的时候击球了,在图上 hit1 在此时刻出现高电平,看到 state 转移到了状态 2。 当到了状态 3乙没有击球,所以甲得分了, count1 由0 变到 1,而七段译码器随之改变。 在图 中可 以清楚地看到球的移动轨迹。 图 乒乓球游戏机仿真波形图二中的乒乓球移动状况 下面仿真甲提前击球的情况,如图 所示。 在不允许甲击球的状态下,即 state 处在状态 5 时, hit1 输入逻辑‘ 1’,表示甲击球了,所以乙得分。 这种情况下球的移动状况如图 所示。 图 乒乓球游戏机波形仿真图三 图 乒乓球游戏机仿真波形图三中的乒乓球移动状况 结束语 在课题设计中, 通过 使用 MAX+PLUSⅡ这个完全集成化、易学易用的可编程逻辑设计环境,利用 VHDL 语言设计的 乒乓球游戏机 ,较成功的完成 了预期的效果 , 能够正确判断与显示乒乓球的位置,并 能自动裁判和记分的装置。 在具体设计过程中还需要改进的是控制系统的纠错功能。 由于时间关系,系统功能实现不够完善,这些都需要不断的改进和补充。 这次课程设计总的说来收获很大。 在最初的设计过程中,一共整理出好几个方案。 但在实际的过程中发现 ,设计的情况和实际中还是有些差异的,通过比较得出最优方案。 此外,也学会了使用 MAX+PLUS软件。 这次课程设计虽然短暂。 但却是我独立自主的从设计电路到得出结论。 书本上的内容第一次完完全全的综合运用。 在设计过程中。 遇到了书本中不曾学 到的知识,经过请教老师和同学,以及查阅相关的资料,最终攻克。 致 谢 在论文的准备和写作阶段,我遇到了很多难题,也从中认识到了自己专业知识的不足和设计思维上与老师们的差距。 本文是在指导老师 XXX 老师 的悉心指导下完成的 , XXX 老师 在学术上严格要求, 老师 的教诲和鼓励,及在学术上一丝不苟的精神, 本人 受益匪浅,在此向 XXX 老师 表示衷心的感谢和敬意。 参考文献 [1] 刘艳 . EDA 技术在数字系统电路设计实验中的应用 [J]. 实验室研究与探索 ,20xx,21(3): 63264 [2] 徐颖 .Protel 99 SE EDA 技术及应用 [M].西安: 机械工业出版社 .20xx [3] 杨恒,卢飞成 . FPGA/VHDL 快速工程实践入门与提高 [M].北京航空航天 大学出版社 .20xx [4]甘历 .VHDL 应用与开发实践 [M].科学出版社 .20xx [5] 卢杰,赖毅 . VHDL 与数字电路设计 [M]. 北京:科学出版社, 20xx [5] 刘建成,严婕 . 电子技术实验与设计教程 [M]. 北京:电子工业出版社, 20xx 附录:主要 VHDL 源程序 // 程序名称: // 程序作者:陈 梁 // 最后修改日期: 20xx32 library ieee。 use。 use。 use。 ENTITY change IS PORT(first:IN STD_LOGIC。 首发是谁 score1,score2: IN integer range 0 to 11。 当前比分 total1,total2: IN integer range 0 to 4。 当前总比分 total: OUT integer range 0 to 7。 总比分和 ends,who:OUT STD_LOGIC)。 比赛是否结束标志,当前发球权 END ENTITY。 ARCHITECTURE main OF change IS SIGNAL who_temp,first_temp:STD_LOGIC。 SIGNAL temp:integer range 0 to 21。 BEGIN first_temp = first。 temp = score1 + score2。 当前比分和 ends = 39。 139。 when total1 = 4 OR total2 = 4 当一方获胜 4局时比赛结束 else 39。 039。 who_temp = first_temp when (temp=0 OR temp=1 OR temp=4 OR temp=5 OR temp=8 OR temp=9 OR temp=12 OR temp=13 OR temp=16 OR temp=17 OR temp=20) else NOT first_temp when (temp=2 OR temp=3 OR temp=6 OR temp=7 OR temp=10 OR temp=11 OR temp=14 OR temp=15 OR temp=18 OR temp=19) else who_temp。 根据总比分和交换发球权 who = who_temp。 total = total1 + total2。 END ARCHITECTURE。 // 程序名称: /。基于vhdl的乒乓球游戏机的设计与实现(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。