目录1设计目的.................................................................02设计要求和任务...........................................................02.1设计任务.............................................................02.2设计要求.............................................................03总体设计思路及原理描述....................................................04分层次方案设计及代码描述..................................................14.1控制模块的设计......................................................14.1.1cornal模块分析................................................14.1.2cornal模块VHDL程序描述.......................................24.2送数据模块的设计.....................................................64.2.1ch41a模块分析.................................................74.2.2ch41a模块VHDL程序描述........................................64.3产生数码管片选信号模块的设计.........................................74.3.1sel模块分析...................................................74.3.2sel模块VHDL程序描述..........................................84.4七段译码器模块的设计................................................94.4.1disp模块分析..................................................94.4.2disp模块VHDL程序描述.........................................94.5顶层原理图设计.....................................................105各模块的时序仿真图......................................................116总结....................................................................137参考文献................................................................13乒乓游戏机1设计目的掌握熟悉的使用QuartusII9.1软件的原理图绘制,程序的编写,编译以及仿真。体会使用EDA综合过程中电路设计方法和设计思路的不同。掌握使用EDA工具设计乒乓游戏机的的设计思路和设计方法。2设计要求和任务2.1设计任务设计一个乒乓球游戏机,该机模拟乒乓球比赛的基本过程和规则,并能自动裁判和几分。2.2设计要求(1)甲乙双方各在不同的位置发球或击球。(2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定,球移动的速度为0.1-0.5秒移动一位。(3)11分为一局,甲乙双方都应设置各自的几分牌,任何一方先记满11分,该方胜出。当记分牌清零后,重新开始。3总体设计思路及原理描述由乒乓游戏机功能,用原理图作为顶层模块,再将底层划分成四个小模块来实现:(1)cornal模块:整个程序的核心,它实现了整个系统的全部逻辑功能;(2)ch41a模块:在数码的片选信号时,送出相应的数据;(3)sel模块:产生数码管的片选信号;(4)disp模块:7段译码器。图3.1结构层次图4分层次方案设计及代码描述4.1控制模块的设计4.1.1cornal模块分析a发球一、在范围内1、b没有接到球,a加1分,将灯光清零000000002、b接到了球,则灯光为0&【7位】二、在b方出界了1、如果b没有接到球,则a加分2、如果b接到了球,则灯光为0&【7位】b发球一、在范围内1、a没有接到球,b加1分,并将灯光清零000000002、a接到了球,则灯光计分为【7位】&0二、在a方出界了1、a没有接到球,则b加分2、a接到了球,则灯光计分为【7位】&0af,aj,bf,bj分别为a方发球键和接球键,b方发球键和接球键,shift表示球所在的位置。图4.1conal模块原理图4.1.2cornal模块VHDL程序描述Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntitycornalisPort(clr,af,aj,bf,bj,clk:instd_logic;Shift:outstd_logic_vector(7downto0);Ah,al,bh,bl:outstd_logic_vector(3downto0);Awin,bwin:outstd_logic);Endcornal;ArchitecturebahaveofcornalisSignalamark,bmark:integer;BeginProcess(clr,clk)Variablea,b:std_logic;Variableshe:std_logic_vector(7downto0);BeginIfclr=’0’thena:=’0’;b:=’0’;she:=”00000000”amark=0;bmark=0;elsifclk’eventandclk=’1’thenifa=’0’andb=’0’andaf=’0’then--a方发球a:=’1’;she;=”10000000”;elsifa=’0’andb=’0’thenbf=’0’then--b方发球b:=’1’;she:=”00000001”;elsifa=’1’andb=’0’then--a方发球后ifshe8thenifbj=’0’then--b方过网击球amark=amark+1;--a方加一分a:=’0’;b:=’0’;she:=”00000000”;elseshe:=’0’&she(7downto1);--b方没有击球endif;elsifshe=0then--球从b方出界amark=amark+1;--a方加一分a:=’0’;b:=’0’;elseifbj=’0’then--b方正常击球a:=’0’;b:=’1’;elseshe:=’0’&she(7downto1);--b方没有击球endif;endif;elsifa=’0’andb=’1’then--b方发球ifshe16andshe/=0thenifaj=’0’thenbmark=bmark+1;a:=’0’;b:=’0’;she:=”00000000”;elseshe:=she(6downto0)&’0’;endif;elsifshe=0thenbmark=bmark+1;a:=’0’;b:=’0’;elseifaj=’0’thena:=’1’;b:=’0’;elseshe:=she(6downto0)&’0’;endif;endif;endif;endif;shift=she;endprocess;process(clk,clr,amark,bmark)variableaha,ala,bha,bla:std_logic_vector(3downto0);variabletmp1,tmp2:integer;variablet1,t2:std_logic;beginifclr=’0’then--清零aha:=”0000”;ala:=”0000”;bha:=”0000”;bla:=”0000”;tmp1:=0;tmp2:=0;t1:=’0’;t2:=’0’;elsifclk’eventandclk=’1’thenifaha=”0001”andala=”0001”then--a方得分达到11分,则保持aha:=”0001”;ala:=”0001”;t1:=’1’;elsifbha=”0001”andbla=”0001”then--b方得分达到11分,则保持bha:=”0001”;bla:=”0001”;t2:=’1’;elsifamarktmp1thenifala=”1001”thenala:=”0000”;aha:=aha+1;tmp1:=tmp1+1;elseala:=ala+1;tmp1:=tmp1+1;endif;elsifbmarktmp2thenifbla=”1001”thenbla:=”0000”;bha:=bha+1;tmp2:=tmp2+1;elsebla:=bla+1;tmp2:=tmp2+1;endif;endif;endif;al=ala;bl=bla;ah=aha;bh=bha;awin=t1;bwin=t2;endprocess;endbehave;4.2送数据模块的设计4.2.1ch41a模块分析图4.2ch41a模块分析及原理图4.2.2ch41a模块VHDL程序描述LibraryIEEE;UseIEEE.std_logic_1164.all;Entitych41aisPort(sel:instd_logic_vector(2downto0);D0,d1,d2,d3:instd_logic_vector(3downto0);Q:outstd_logic_vector(3downto0));Endch41a;Architecturebehaveofch41aisBeginProcess(sel)BeginCaseselisWhen”100”=q=d0;When”101”=q=d1;When”000”=q=d2;Whenothers=q=d3;Endcase;Endprocess;Endbehave;4.3产生数码管片选信号模块的设计4.3.1sel模块分析图4.3sel模块分析及原理图4.3.2sel模块VHDL程序描述Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntityselisPort(clk:instd_logic;Sell:outstd_logic_vector(2downto0));Endsel;ArchitecturebehaveofselisBeginProcess(clk)Variabletmp:std_logic_vector(2downto0);BeginIfclk’eventandclk=’1’thenIftmp=”000”thenTmp:=”001”;Elsiftmp=”001”thenTmp:=”100”;ElsifTmp=”100”thenTmp:=”101”;Elsiftmp=”101”thenTmp:=”000”;Endif;Endif;Sell=tmp;Endprocess;Endbehave;4.4七段译码器模块的设计4.4.1disp模块分析图4.4disp模块分析及原理4.4.2disp模块VHDL程序描述Libraryiee