




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1引言EDAElectronic Design Automation,电子设计自动化技术是现代电子工程领域的一门新技术。它提供了基于计算机和信息技术的电路系统设计方法。EDA技术的发张和推广应用极大地推动了电子工业的开展。EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合及优化,逻辑布局布线,逻辑仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果1。近年来
2、,集成电路制造技术的快速开展, 一方面促进了相应设计技术的开展, 另一方面也对设计技术提出了更高的要求。当前集成电路设计, 面临着功能强、性能好、规模大、本钱低、设计周期短等一系列要求和挑战, 这些要求和挑战引起了集成电路设计方法的全面革新。当今, 以行为设计为主要标志的新一代数字系统设计理论已形成并得到开展。在集成电路的数字系统的系统级设计中, VHDL 硬件描述语言构造的描述模型优化设计, 有利于高效利用设计空间, 实现设计结构的精确分析, 使芯片资源得以充分利用。的背景、目的20世纪末,电子技术获得了飞速的开展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的开
3、展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。而休闲时间越来越少的人们越来越没太多的时间出去搞户外活动,于是众多电子游戏相应而出,成为大家的娱乐节目。因此设计了这个两人的乒乓球游戏。而电子信息类产品的开创造显地出现了两个特点:一是开发产品的复杂程度加深;二是开发产品的上市时限紧迫。而伴随着如上两个特点的产生,相应的出现了设计上的两个问题。其一,在电子系统日趋数字化、复杂化和大规模集成化的今天,电子厂商们越加迫切地追求电子产品的高功能、优品质、低本钱、微功耗和微小封装尺寸,从而使得电子设计日趋复杂。那么如何去完成这些高复杂度的电子设计呢?其二,电子产
4、品设计周期短和上市快是电子厂商们坚持不懈的追求,那么面对日趋复杂的设计,又如何能够缩短开发时间呢?解决以上两个问题的唯一途径是电子设计自动化EDA,即用计算机帮助设计人员完成繁琐的设计工作。1.2课题设计主要内容 两人乒乓球游戏机是用8个发光二级管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规那么来操作开关。当甲方按动发球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方向乙方依次点亮,代表乒乓球的移动。当球过网后按照设计者规定的球位乙方就可以击球。假设乙方提前击球或者未击到球,那
5、么甲方得分。然后重新发球进行比赛,知道一方记分到达21分为止,记分清零,重新开始新一局比赛。2 开发工具简介技术EDA2是电子设计自动化Electronic Design Automation缩写,是90年代初从CAD计算机辅助设计、CAM计算机辅助制造、CAT计算机辅助测试和CAE计算机辅助工程的概念开展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL Hardware Description language完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器
6、和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统工程的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接
7、方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比拟常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。硬件描述语言VHDLVHDL3的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL
8、的标准版本,IEEE-1076简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起大局部的
9、数字系统设计任务。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体4可以是一个元件,一个电路模块或一个系统分成外部或称可是局部,及端口)和内部或称不可视局部,既涉及实体的内部功能和算法完成局部。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外局部的概念是VHDL系统设计的根本点。应用VHDL进行工程设计的优点是多方面的。 (1) 与其他的硬件描述语言相比,VHDL具有更强的
10、行为描述能力,从而决定了他成为系统设计领域最正确的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2) VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (3) VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。 (5) VH
11、DL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。2.3 MAX+PLUS的介绍Altera公司的MAX+PLUS5开发系统是一个完全集成化、易学易用的可编程逻辑设计环境,它可以在多种平台上运用。它所提供的灵活性和高效性是无可比拟的。其丰富的图形界面,辅之以完整的、可及时访问的在线文档,使学生能够轻松掌握和使用MAX+PLUS软件。MAX+PLUS软件支持各种HDL设计输入选项,包括VHDL、VerilogHDL和Altera自己的硬件描述语言AHDL,它允许设计人员添加自己认为有价值的宏函数。 MAX+PLUS系统的核心Com
12、piler支持Altera公司的FLEX10K、FLEX8000、FLEX6 000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件系列,提供了商业界唯一真正与结构无关的可编程逻辑设计环境。MAX+PLUS的编译器还提供了强大的逻辑综合与优化功能,使用户比拟容易地将设计集成到器件中。设计输入MAX+plus II软件的设计输入方式有多种,主要包括原理图输入方式、文本输入方式、波形设计输入方式、层次设计输入方式和底层设计输入方式。因此,设计人员可以根据自己的实际情况灵活选择使用。设计编译MAX+plus II编译一个设计时,Compiler在设计文件中读取信息并产生
13、编程文件和仿真文件,Message Processor信息处理程序可自动定位错误。设计校验设计校验过程包括设计仿真和定时分析,仿真起的作用是测试逻辑操作和设计功能的完备性;Timing Analyzer定时分析程序可分析设计的定时和延时情况。器件编程 MAX+plus II Programmer是使用Compiler生成的编程文件对Altera器件进行编程的。它可以用来对器件编程、校验和试验,是对设计功能进行的测试。Altera公司器件的编程方法有许多种,可根据具体情况选择使用。编译生成的配置文件经计算机并行通信口接到Altera专用编程电缆上,再接到器件的编程接口6,利用应用软件提供的编程软
14、件,Programmer即可对器件进行配置。这种方法的优点是配置方便、迅速,便于修改。MAX+plus2在Windows 2000/XP上一旦安装完毕,经过设置即可使用硬件下载功能。在Windows 2000上除了安装软件外,为了使用ByteBlaster(MV)下载功能,还必须安装硬件驱动(Drivers)以支持MAX+plus2对PC机并行口的操作。3设计方案3.1状态机的设计思路状态机设置了7个状态,分别是“等待发球状态,第一盏灯亮状态“,第八盏灯亮状态,“球向乙移动状态,“球向甲移动状态,“允许甲击球状态,“允许乙击球状态。这是该程序中起作用的7个状态。开始的时候处于“等待发球状态,假
15、设甲发球那么状态转移到“第一盏灯亮状态,假设乙发球那么转移到第八盏灯亮状态“,具体说明以甲发球为例。假设发球后乙没有提前击球规定球移动到对方第一个发光二极管时允许击球,那么状态机从“第一盏灯亮状态转移到“球向乙移动状态。假设在“球向乙移动状态乙仍然没有提前击球,状态就转移到“允许乙击球状态,在此状态下,如果乙击球了,那么状态就转移到“球向甲移动状态。在“第一盏灯亮状态,“球向乙移动状态中,如果乙击球了,就算提前击球,这样甲得分,状态转移到“等待发球状态等待发球。“球向甲移动状态之后的过程和前面的过程只不过是甲乙角色的调换而已。状态转移规那么都是一样。图3-1给出了乒乓游戏机的状态转移图。第一盏
16、灯亮第一盏灯亮第一盏灯亮第一盏灯亮第一盏灯亮第一盏灯亮第一盏灯亮图3-13.2乒乓球游戏机实体的设计设计该乒乓球游戏机的输入/输出端口。首先考虑输入端口,一般都应该设置一个异步置位端口reset,用于在系统不正常时回到初始状态;两个发球输入端serve1和serve2,逻辑1分别表示甲方和乙方的发球;两个击球输入端hit1和hit2,逻辑1分别表示甲击球和乙击球;一个开始游戏按钮startbutton,处于逻辑1表示可以游戏;还得有一个时钟输入端口clk。其次考虑输出端口,芯片应该有8个输出端口来控制8个发光二极管,输出逻辑1即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分
17、,就得用到七段译码器,每方用到2个,可以表示021的数字,每个七段译码器需要芯片的7个输出端口来控制,总共需要28个输出端口。实体的设计如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pingponggame is port(reset: in std_logic;clk: in std_logic;startbutton: in std_logic;serve: in std_logic_vector(1 to 2);hit1,hit2: in std_logic;light
18、: out std_logic_vector(1 to 8);score11,score12,score21,score22: out std_logic_vector(1 to 7);end pingponggame;3.3状态机编程实现状态机设置了7个状态,分别是等待发球状态waitserve、第一盏灯亮状态light1on、第八盏灯亮状态light8on、球向乙移动状态ballmoveto2、球向甲移动状态ballmoveto1、允许甲击球状态allow1hit和允许乙击球状态allow2hit。状态waitserve,light1on,ballmoveto2,allow2hit,lig
19、ht8on,ballmoveto1和allow1hit代表的具体数值依次是0到6.在波形模拟图中是用数值来表示状态的。乒乓球游戏机中有两个计数器count1和count2,分别记忆甲的得分和乙的得分;一个i信号,用它的数值来控制状态机外8个发光二极管的亮和暗,比方当i=1时表示第一个发光二极管亮,用发光二级管的轮流发光表示球的移动轨迹。输入状态机的信号有游戏开关startbutton信号,它是1位二进制信号,数值为1表示可以进入游戏;serve信号,是一个2位二进制向量,“01表示甲发球;两个二进制信号hit1和hit2分别表示甲乙是否击球,假设数值为1,表示击球,不为1表示不击球。以下是状态
20、机进程代码。process(clk)beginif reset='1' theni<=0;count1<="00000"count2<="00000"elsif clk'event and clk='1'thenif count1="10101" or count2="10101"then i<=0;count1<="00000"count2<="00000" elsif startbutton=
21、39;0' then i<=0;count1<="00000"count2<="00000"elsecase state iswhen waitserve =>case serve iswhen "00" => i<=0;when "10" => i<=1;state<=light1on; when "01" => i<=8;state<=light8on; when "11" => i&l
22、t;=0;when others => i<=0;end case;when light1on => i<=2;if hit2='1' then i<=0;count1<=count1+1;state<=waitserve;elsestate<=ballmoveto2;end if;when light8on => i<=7;if hit1='1' then i<=0;count2<=count2+1;state<=waitserve;elsestate<=ballmoveto1
23、;end if;when ballmoveto1 =>if hit1='1' then i<=0;count2<=count2+1;state<=waitserve;elsif i=2 then i<=1;state<=allow1hit;else i<=i-1;end if;when ballmoveto2 =>if hit2='1' then i<=0;count1<=count1+1;state<=waitserve;elsif i=7 then i<=8;state<=allo
24、w2hit;else i<=i+1;end if;when allow1hit =>if hit1='1' then i<=2;state<=ballmoveto2;else count2<=count2+1;i<=0;state<=waitserve;end if;when allow2hit =>if hit2='1' then i<=7;state<=ballmoveto1;else count1<=count1+1;i<=0;state<=waitserve;end if;en
25、d case;end if;end if;end process;3.4记分译码器的设计七段译码器是在数字电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。如图3-2所示。图3-2 其中的a,b,c,d,e,f,g飞奔为7段发光二极管,通过控制每个发光二极管的亮和暗,可以分别显示09十个数字。例如,b和c两段发光二极管亮,其他发光二极管暗,那么表示数字“1”;a,b,g,e和d五段发光二极管亮,其他发光二极管暗,那么表示数字“2”。七段译码器有7个输入端,分别控制ag七段发光二极管。记分译码器mydecoder:由于记分需要显示出来,所以要使用七段译
26、码器。而状态机中的记分是由5位二进制码来表示的,即count1和count2.以下程序就是实现从5位二进制码转换成七段译码显示。bcout1(1)和bcout2(1)表示a段,bcout1(2)和bcout2(2)表示b段,以此类推,bcout1(7)和bcout2(7)表示g段。这个记分译码器电路是针对乒乓球游戏机的特点进行的特别设计,采用的是全部列举的方法,代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity myde
27、coder isport(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 mydecoder;architecture m of mydecoder issignal tembinaryin:std_logic_vector(1 to 5);beginprocess(binaryin)begintembinaryin<=binaryin;case tembinaryin iswhen "000
28、00"=> bcdout1<="1111110"bcdout2<="1111110"when "00001"=> bcdout1<="1111110"bcdout2<="0110000"when "00010"=> bcdout1<="1111110"bcdout2<="1101101"when "00011"=> bcdout1<=&quo
29、t;1111110"bcdout2<="1111001"when "00100"=> bcdout1<="1111110"bcdout2<="0110011"when "00101"=> bcdout1<="1111110"bcdout2<="1011011"when "00110"=> bcdout1<="1111110"bcdout2<=&qu
30、ot;1011111"when "00111"=> bcdout1<="1111110"bcdout2<="1110000"when "01000"=> bcdout1<="1111110"bcdout2<="1111111"when "01001"=> bcdout1<="1111110"bcdout2<="1111011"when "010
31、10" =>bcdout1<="0110000"bcdout2<="1111110"when "01011" =>bcdout1<="0110000"bcdout2<="0110000"when "01100" =>bcdout1<="0110000"bcdout2<="1101101"when "01101" =>bcdout1<=&quo
32、t;0110000"bcdout2<="1111001"when "01110" =>bcdout1<="0110000"bcdout2<="0110011"when "01111" =>bcdout1<="0110000"bcdout2<="1011011"when "10000" =>bcdout1<="0110000"bcdout2<=&qu
33、ot;1011111"when "10001" =>bcdout1<="0110000"bcdout2<="1110000"when "10010" =>bcdout1<="0110000"bcdout2<="1111111"when "10011" =>bcdout1<="0110000"bcdout2<="1111011"when "101
34、00" =>bcdout1<="1101101"bcdout2<="1111110"when "10101" =>bcdout1<="1101101"bcdout2<="0110000"when others =>bcdout1<="1101101"bcdout2<="1111110"end case;end process;end m;3.5构造体的设计 构造体代码如下:architectu
35、re game of pingponggame is type pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):="00000"component mydecoder isport(binaryin: in std_logic_vector(1 to 5);b
36、cdout1: out std_logic_vector(1 to 7);bcdout2: out std_logic_vector(1 to 7);end component;beginprocess(clk)begin.end process;light<="10000000" when (i=1) else "01000000" when (i=2) else "00100000" when (i=3) else"00010000" when (i=4) else"00001000"
37、 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; 该构造体紧跟在实体设计之后,这样就完成了数字乒乓游戏机的VHDL源程序编写。从构造体设计中可以看到,控制
38、整个乒乓球游戏机运转的就是状态机进程,它对各个外围局部起控制作用。它是整个程序的核心,起到一个中心控制器的作用。而外围的局部,比方分数显示,球的轨迹,都是通过状态机传出的信号来控制,这就是状态机的功能和作用。程序中的球的轨迹,即发光二极管的亮暗是通过状态机中传出的i信号来控制的,而分数显示那么是通过状态机中传出的count1和count2信号来控制的。而状态机中i信号和count1,count2信号的变化同时就可以影响到外围的显示局部发光二极管和七段译码器,从而表现出当时的乒乓球位置和双方分数情况。3.6编译和波形仿真 图3-3所示代表乙发球,由light端口输出的高电平会驱动芯片以外的发光二
39、极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。可以看到,在甲该击球的时候没有击球,也就是hit1在state状态6allow1hit,允许甲击球状态的时候没有高电平1输入,那么算乙得分,count2由0变到1,score22的值随之变化,“30”代表了二进制的“0110000”,就是七段译码器显示1,之后state回到状态0waitserve,等待发球状态。从最后一行state值的变化,可以清楚地分析状态转移。图3-3i从8开始依次递减计数,控制发光二极管亮暗的light信号也随着i的数值而变化,如图3-4所示: 图3-4 图3-5是在乙发球以后,甲子正确时刻击球的波形仿真图。甲
40、在state为状态6allow1hit,允许甲击球状态的时候击球了,在图上hit1在此时刻出现高电平,看到state转移了状态2ballmoveto2,球向乙移动状态当到了状态3allow2hit,允许乙击球状态乙没有击球,所以甲得分了,count1由0变到1,而七段译码器随之改变。图3-5图3-6为上图的球的移动轨迹:图3-6 图3-7是仿真甲提早击球的情况,在不允许甲击球的状态下,即state处于状态5ballmoveto1,球向甲移动状态时,hit1输入逻辑1,表示甲击球了,所以乙得分。图3-7图3-8为上图的球的移动轨迹:图3-8结束语在这个设计中,初步表达了状态机的中心控制作用。通过
41、状态机进程传出的信号,驱动了发光二极管以及七段译码器等外围设备。状态机进程传出的i信号,控制了发光二极管的状态,状态机进程传出的count1和count2信号,控制了七段译码器的显示。如果要用实际电路来实现乒乓球游戏机,就还要将设计下载到芯片中去,并且加上外围电路,这些外围电路包括七段译码器,按键,即便如此,上面的设计还是不够的,还存在两个问题,一个是时钟频率问题,一个是按键问题,但由于本人时间及能力有限,就没多加研究,深感遗憾。致谢本次设计是在指导老师黄敏的指导下完成的。在设计的过程中,黄老师给予了指导,并提供了很多与该设计相关的重要信息,培养了我们对课程设计的兴趣,丰富了我们的知识。这都将
42、非常有利于我们今后的学习和工作。在此表示衷心的感谢!在这里还要感谢一位老师,很抱歉我不知道他的名字,他是带我们进入VHDL世界的人,仅仅两次课让我们了解VHDL的世界,这是我这次课程设计能成功的最主要原因,在这深深表示感谢。另外,在课程设计过程中,我更深刻的了解到计算机是一门很精深的课程,同时也是一个硬件与软件相通的课程,要想很好的学好它,还必须投入更多时间与热情。也了解到很多内容不是光看可不就能学到的,必须高强度的提高动手能力,多去尝试。这些都对我以后的学习有很大的帮助。还有,班上同学同样给与我不少帮助,这里一并表示感谢。参考文献1潘松,王国栋VHDL实用教程四川:电子科技大学出版社,200
43、6年,7月2李国洪,沈明山,胡辉可编程器件EDA技术与实践M北京:机械工业出版社,2004年,7月3赵俊超集成电路设计VHDL教程M北京:希望电子出版社,2002年,8月4李宜达数字逻辑电路设计与实现M北京:科学出版社,2004年,3月5付家才EDA工程实践技术M北京:工业出版社,2005年,1月6侯树文数字逻辑与VHDL设计M北京:中国水利水电出版社,2004年,1月附录:基于VHDL数字电子钟设计与实现源程序代码(1) 顶层文件文件名为pingponggame.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_ar
44、ith.all;use ieee.std_logic_unsigned.all;entity pingponggame is port(reset: in std_logic;clk: in std_logic;startbutton: in std_logic;serve: in std_logic_vector(1 to 2);hit1,hit2: in std_logic;light: out std_logic_vector(1 to 8);score11,score12,score21,score22: out std_logic_vector(1 to 7);end pingpon
45、ggame;architecture game of pingponggame is type pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):="00000"component mydecoder isport(binaryin: in std_logic_
46、vector(1 to 5);bcdout1: out std_logic_vector(1 to 7);bcdout2: out std_logic_vector(1 to 7);end component;beginprocess(clk)beginif reset='1' theni<=0;count1<="00000"count2<="00000"elsif clk'event and clk='1'thenif count1="10101" or count2=&qu
47、ot;10101"then i<=0;count1<="00000"count2<="00000" elsif startbutton='0' then i<=0;count1<="00000"count2<="00000"elsecase state iswhen waitserve =>case serve iswhen "00" => i<=0;when "10" => i<=1
48、;state<=light1on; when "01" => i<=8;state<=light8on; when "11" => i<=0;when others => i<=0;end case;when light1on => i<=2;if hit2='1' then i<=0;count1<=count1+1;state<=waitserve;elsestate<=ballmoveto2;end if;when light8on => i&
49、lt;=7;if hit1='1' then i<=0;count2<=count2+1;state<=waitserve;elsestate<=ballmoveto1;end if;when ballmoveto1 =>if hit1='1' then i<=0;count2<=count2+1;state<=waitserve;elsif i=2 then i<=1;state<=allow1hit;else i<=i-1;end if;when ballmoveto2 =>if hit
50、2='1' then i<=0;count1<=count1+1;state<=waitserve;elsif i=7 then i<=8;state<=allow2hit;else i<=i+1;end if;when allow1hit =>if hit1='1' then i<=2;state<=ballmoveto2;else count2<=count2+1;i<=0;state<=waitserve;end if;when allow2hit =>if hit2='
51、1' then i<=7;state<=ballmoveto1;else count1<=count1+1;i<=0;state<=waitserve;end if;end case;end if;end if;end process;light<="10000000" when (i=1) else "01000000" when (i=2) else "00100000" when (i=3) else"00010000" when (i=4) else"0
52、0001000" 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;2七段译码器文件名:mydecoder.vhdlibrary ieee;use
53、ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mydecoder isport(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 mydecoder;architecture m of mydecoder issignal tembinaryin:std_logic_vect
54、or(1 to 5);beginprocess(binaryin)begintembinaryin<=binaryin;case tembinaryin iswhen "00000"=> bcdout1<="1111110"bcdout2<="1111110"when "00001"=> bcdout1<="1111110"bcdout2<="0110000"when "00010"=> bcdout1<="1111110"bcdout2<="1101101"when "
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年甘肃省庆阳市宁县三年级数学第一学期期末考试试题含解析
- 2025-2026学年福建泉州泉港区三上数学期末综合测试试题含解析
- 2024年龙岩市武平县数学三上期末模拟试题含解析
- 2024年霍尔果斯市数学三年级第一学期期末调研试题含解析
- 公共场所常见急救处理课件
- 护理教育与研究动态试题及答案
- 护士职业生涯不可或缺的试题与答案
- 卫生资格考试逐项解析与总结试题及答案
- 拔罐与护理技能试题及答案讨论
- 2025年卫生资格考试的试卷结构分析试题及答案
- 深圳 退休 返聘 合同
- 成立物流协会可行性方案
- 苗木采购投标方案(技术方案)(技术方案)
- 《应用统计学》复习题库(含答案)
- 心脏康复指南完整版
- 国开电大土木工程本科《工程地质》在线形考形考(作业1至4)试题及答案
- 售后维修服务单
- 《实数》单元作业设计
- GB/T 9128.2-2023钢制管法兰用金属环垫第2部分:Class系列
- 北师大版八年级数学下册 (一元一次不等式)一元一次不等式和一元一次不等式组课件(第2课时)
- 干湿法脱硫运行经济成本对比(自动计算)
评论
0/150
提交评论