VHDL乒乓球游戏设计

更新时间:2024-04-20 16:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

1引言 ........................................................................................................................................... 1 2 VHDL简介 ............................................................................................................................... 2

2.1 VHDL的特点及优点 .................................................................................................... 2 2.2设计流图 ........................................................................................................................ 3 3模块设计 ................................................................................................................................... 6

3.1七段数码管显示译码器 ................................................................................................ 7 3.2按键去抖电路 ................................................................................................................ 9 3.3状态机设计 ...................................................................................................................11 3.3.1状态机的6种状态及状态转移 ................................................................................11 3.3.2状态机/球台控制程序.............................................................................................. 12 3.4记分器设计 .................................................................................................................. 17 4系统硬件测试 ......................................................................................................................... 20

4.1 GW48系统的主要性能和特点 .................................................................................. 20 4.2 FPGA目标芯片管脚图............................................................................................... 20 4.3系统的编译、综合、适配 .......................................................................................... 22 4.4系统的有关仿真 .......................................................................................................... 24 4.5系统的编程配置 .......................................................................................................... 26 5结论 ......................................................................................................................................... 28 参考文献 .................................................................................................................................... 29 致谢 ............................................................................................................................................ 30

i

摘 要

VHDL是甚高速集成电路硬件描述语言。目前,VHDL已成为许多设计自动化工具普遍采用的标准化硬件描述语言。VHDL语言功能性强,覆盖面广,灵活性高,具有很好的实用性。本文设计一个基于VHDL的乒乓游戏机,乒乓游戏机由状态机、记分器、译码显示器与按键去抖等部分所组成。通过对各部分编写VHDL程序,然后进行编译、仿真、逻辑综合、逻辑适配,最后进行编程下载,并且通过GW48型EDA实验箱的验证,实现乒乓游戏机的基本功能。

关键词:VHDL;GW48;乒乓游戏机

ii

Abstract

VHDL is high speed IC hardware describe language. VHDL already becomes the language of normalizing hardware describe that a lot of design automation implement adopts commonly at present. The VHDL language function is strong. The face covering is broad, flexibility high and have the very good pragmatism. One main body of the book is designed waits for what part group is accomplished owing to that VHDL table tennis game machine, table tennis game machine go to tremble from state machine, marker, decoding display and button. By compiling and composing VHDL procedure to every part, then compiling, simulate, logic synthesis, logic fitting. Carry out programming time be loaded with finally. Then verification and by GW48 type EDA experiment box, realize table tennis game machine’s fundamental function.

Key words: VHDL; GW48; Table tennis game machine

iii

1引言

随着社会的进步和工业技术的发展,在电子线路设计领域中,设计自动化工具已经逐步为设计者所接受,成为主要的设计手段。目前,VHDL已成为许多设计自动化工具普遍采用的标准化硬件描述语言,掌握VHDL语言,用VHDL语言设计电子线路,是电子线路设计者必须掌握的基本技能。VHDL支持数字电路的开发环境,VHDL也支持各种设计方法:自顶向下、自底向上或混合的方法[1]。VHDL语言功能性强,覆盖面大,灵活性高,具有很好的实用性[2]。本文设计一个基于VHDL的乒乓游戏机,乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,甲乙二人按乒乓球比赛规则来操作开关。本设计由译码显示器、记分器、状态机/球台控制器与按键去抖等部分组成。本设计是用实验箱GW48进行模拟乒乓机,用发光二极管代表乒乓球台,最中间的发光二极管作球网,用点亮的发光二极管按一定方向移动来表示球的运动,用按钮设置发球和接球开关。

设计总体要求:乒乓机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。 本设计的主要任务和要求如下:

(1)使用乒乓机的甲乙双放在不同的位置发球或击球。

(2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定。球的速度为0.1s-0.5s移动1位。球过网,接球方向即可击球,提前击球或没击球均判失分。

(3)比赛按21分为一局进行,甲乙双方都应设置自己的记分牌,任何一方先记满21分,该方就算胜出,按RESET复位重新开局。

1

2VHDL简介

VHDL是Very high speed integrated circuit Hardware Description Language的缩写,即“甚高速集成电路硬件描述语言”,最初由美国国防部和INTER、IBM、TI公司联合开发,1987年成为IEEE标准,即IEEE1076标准(俗称87版VHDL)[1]。此后,美国国防部要求官方与高速集成电路设计的所有文档必须用VHDL描述,因为VHDL在电子设计领域得到了广泛的应用,渐渐成为工业界的标准。1993年,IEEE对VHDL进行了修订,公布了新的VHDL标准,即IEEE1076-1993版(俗称93版VHDL)[3]。

2.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

率上略有差异。

(2)VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。

(3)VHDL语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。高效、高速完成符号市场需求的大规模系统设计必须有多人甚至多个开发组共同并行工作才能实现。VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有利的支持。

(4)用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的芯片)。这种方式突破了门级设计的瓶颈,极大地减少电路设计的时间和可能发生的错误,降低了开发成本。利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系统。反过来,设计者还可以容易地从综合和优化的电路获得设计信息,返回去修改VHDL设计描述,使之更加完善。

(5)VHDL对设计的描述具有相对独立性。设计者可以不懂硬件的结构,也不必管最终设计的目标器件是什么,而进行独立的设计。正因为VHDL的硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各种系列的CPLD、FPGA及各种门阵列器件。

(6)VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。

正因为VHDL有如此多的特点和优点,所以本设计运用VHDL进行乒乓球游戏机软设计。

2.2设计流图

设计流程图如图1所示。这一流程图基本可使用任何基本硬件描述语言的设计。下面对这个流程中的步骤进行说明[1]:

(1)系统层次划分/画出系统框图(Hierarchy/Block Diagram):按照“自顶向下”的设计方法对系统进行划分(确定系统由哪些模块构成,各个模块又由哪些子模块构成)。

(2)编码:写出VHDL代码,大多数集成开发环境(如MAX+plus2等)都集成了针对VHDL的编辑。这些编辑器一般都具有VHDL关键词的亮点显示等特点,有的还内

3

嵌了常用的VHDL程序模块。

图1 VHDL的设计流程图

(3)编译(Compilation):编译器会对VHDL程序进行语法检查,还会产生用于仿真的一些内部信息。这一步骤通常由编译器自动完成,无须我们干预。如果VHDL语言有错误,编译无法通过,则需要修改程序,即回到第(2)步。事实上,VHDL设计过程中,常常根据需要往后退一步,甚至更多。

(4)功能仿真(Functional Simulation):VHDL仿真器允许定义输入并应用到设计中,不必生成实际电路就可以观察输出。此仿真主要用于检验系统功能设计的正确性,不涉及具体器件的硬件特性。

(5)综合(Synthesis):利用综合器对VHDL代码进行综合优化处理,生成门级描述的网表文件,这是将VHDL语言描述转化为硬件电路的关键步骤。这一步通常由综合器自动完成,但设计者可以设定一些技术上的约束条件(如限定逻辑层次的最大数等)来“帮助”综合器。

(6)适配(Fitting):利用适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化、布局布线等。

此步骤将产生多项设计结果:①适配报告,包括芯片内部资源的利用情况、设计的布尔方程描述情况等;②适配后的仿真模型;③器件编程文件。

(7)时序仿真(Timing Simulation):根据适配后的仿真模型,可以进行时序仿真。因为这时已经得到目标器件的实际硬件特性(如时延特性等),所以仿真结果能比较精确的预期芯片的实际性能。如果仿真结果达不到设计要求,就需要修改VHDL源代码或选择不同的目标器件,甚至要重构整个系统,图1就是所设计者极力避免出现的情况。

(8)下载CPLD/FPGA(Programming):如果时序仿真通过,就可将“适配”时产生的器件编程文件下载到CPLD或FPGA中(FPGA的编程通过被称为“配置”)。虽然

4

流程图中未标出从此步“往回走”的箭头,但事实上,实际的结果有可能与仿真结果有差异(可能是设计时未考虑到外部硬件的实际情况;也可能是由于仿真时测试的条件不够多,没有发现其中隐藏的错误),这时,必须回头重新找出问题所在。

5

3模块设计

乒乓游戏机的组成示意图如图2所示。

图2 乒乓游戏机的组成示意图

本设计中的乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,一个是发球开关STARTA、STARTB;另一个是击球开关HITA、HITB。甲乙二人按乒乓球比赛规则来操作开关。当甲方按动发球开关STARTA时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。当球过网后按设计者规定的球位,乙方就可以击球。若乙方提前击球或没有击中球,则判乙方失分,甲方的记分牌自动加一分。然后重新发球,比赛继续进行。比赛一直要进行到一方记分牌达到21分,该局才结束。本设计由译码显示器、按键去抖、状态机/球台控制器和记分器等部分所组成。本系统的逻辑分框图如图3所示。

6

图3 系统逻辑分框图

3.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,表示数码管无显示。用选择信号赋值语句描述,将综合成组合逻辑电路。

7

图4 共阴数码管及电路

图5 多模块共同控制七段数码管译码电路示意图

带使能信号EN的译码电路的VHDL程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DISPLAY IS PORT

(EN: IN STD_LOGIC;

NUM: IN INTEGER RANGE 0 TO 15;

DISPLAY: OUT STD_LOGIC_VECTOR (0 TO 6)); END;

8

ARCHITECTURE DECODER OF DISPLAY IS BEGIN

PROCESS (EN, NUM) BEGIN

IF EN=’ 1 ’ THEN --使能信号EN为1时,译码器正常工作

CASE NUM IS

WHEN 0=>DISPLAY<=”1111110”; WHEN 1=>DISPLAY<=”0110000”; WHEN 2=>DISPLAY<=”1101101”; WHEN 3=>DISPLAY<=”1111001”;

WHEN 4=>DISPLAY<=”0110011”; WHEN 5=>DISPLAY<=”1011011”;

WHEN 6=>DISPLAY<=”0011111”;

WHEN 7=>DISPLAY<=”1110000”; WHEN 8=>DISPLAY<=”1111111”; WHEN OTHERS=>DISPLAY<=”0000000”; END CASE; ELSE

DISPLAY<=”0000000”; --EN为0,数码管无显示

END IF; END PROCESS; END;

值得注意的是,本程序是组合逻辑电路,PROCESS的敏感信号参数表中一定要有NUM;否则编译时会提示如下出错信息:“Else Clause following a Clock edge must hold the state of signal ‘Display’”。

出现此提示信息的原因是:综合器将EN误判为时钟信号,并试图将程序综合成时序逻辑电路,但该程序的格式又不符合综合器对时钟信号描述的要求,因此无法综合。

3.2按键去抖电路

键盘的按键闭合与释放瞬间,输入的信号会有毛刺。如果不进行消抖处理,系统会

9

将这些毛刺误以为是用户的另一次输入,导致系统的误操作。防抖电路有很多种,最简单、最容易理解的就是计数法。其原理是对键值进行计数,当某一键值保持一段时间不改变时(计数器达到一定值后),才确认它为有效值;否则将其判为无效键值,重新对键值进行计算[2]。

下面是基于计数法的防抖电路程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTUTY ANTITWITTER IS PORT

(CLOCK: IN STD_LOGIC;

NUMIN: IN INTEGER RANGE 0 TO 15; NUMOUT: OUT INTEGER RANGE 0 TO 15); END;

ARCHITECTURE BEHAVIOR OF ANTITWITTER IS SIGNAL TEMPNUM: INTEGER RANGE 0 TO 15; SIGNAL COUNTER: INTEGER RANGE 0 TO 31; SIGNAL START: STD_LOGIC; BEGIN

PROCESS (CLOCK) BEGIN

IF RISING_EDGE (CLOCK) THEN

IF START=‘0’THEN --上电后立即对输出的键值赋予无效值

TEMPNUM<=15; --此处沿将15作为无效值 NUMOUT<=15; --此无效值务必随实际情况改变 START <= ‘1’; ELSE

IF NUMIN<=TEMPNUM THEN --上一键值与此键值不同 TENPNUM<=NUMIN; --记录此键值

COUNTER<= ‘0’; --并对计数器清0,准备对此键值计时 ELSE

IF COUNTER31 THEN; --当键值保持31个时钟周期不变时

10

NUMOUT<=NUMIN; --即确定为有效键值,并输出 COUNTER<= ‘0’; ELSE

COUNTER<=COUNTER+1; END IF;

END IF; END IF; END IF; END PROCESS; END;

3.3状态机设计

3.3.1状态机的6种状态及状态转移

本状态机有6种状态,分别是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含义如表1所示。

表1 状态机的6种状态及含义

状 态 WAITSTATE ATOB BTOA ASCORE BSCORE FINALRESULT

含 义

等待状态,等待A或B方开球 球从A向B方移动 球从B向A方移动 A得一分 B得一分

比赛结束(最终判分),在此状态下需要按复位键,才能开始下一轮比赛

结合表1,从图6中很清楚地看出乒乓游戏机比赛过程中球的移动情况,及加分方法,还可以初步了解到本状态机设计的基本思路。

11

图6 乒乓游戏机状态转移图

3.3.2状态机/球台控制程序

状态机是种很重要的时序电路,也是本设计的核心部件。状态机属于时序电路范畴,实现一个控制功能更为方便,并提高了控制速度[10]。本次设计中状态机的符号如图7所示。

图7 状态机符号

在本设计中,状态机用两个信号表示状态:STATE表示当前状态, TABLESTATE表示下一个状态。此状态机由两个进程构成,状态机的输入/输出引脚的作用如表2所示。其中SCOREAL[3..0]、SCOREAH[3..0]、SCOREBL[3..0]、SCOREBH[3..0]用七段BCD码译码器显示得分情况,而SCOREA、SCOREB用二进制进行加分,由记分器反馈回来。

12

表2 输入/输出引脚的作用

引 脚 CLK

作 用

10Hz的时钟,可由系统时钟分频得到。此时时钟决定了球移动的速度, 可根据实际需要调整。 复位键,比赛重新开始,记分器清0 A和B双方的开始的开球键

A和B双方的击球键(可以将其与开球键合并) 将记分器清0(给记分器的控制信号)

分别为A、B双方的加分信号(给记分器的控制信号)

A、B双方的分数(由记分器给出)

接5个发光二极管

分别接发光二极管,表示A或B方胜出

RESET STARTA、STARTB HITA、HITB CLEAR

INCREASEA 、INCREASEB SCOREAL[3..0]SCOREAH[3..0] SCOREBL[3..0]SCOREBH[3..0]

SCOREA、SCOREB

LIGHT[4..0] AWIN、BWIN

状态机的程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY STATEMACHINE IS PORT (CLK: IN STD_LOGIC; RESET: IN STD_LOGIC;

STARTA, HITA, STARTB, HITB: IN STD_LOGIC;

SCOREA, SCOREB: IN INTEGER RANGE 0 TO 21; CLEAR, INCREASEA, INCREASEB: OUT STD_LOGIC; TABLELIGHT: OUT STD_LOGIC_VECTOR (0 TO 4); AWIN, BWIN: OUT STD_LOGIC); END;

ARCHITECTURE BEHAVIOR OF STATEMACHINE IS

TYPE STATE_TYPE IS (WAITSTATE, ATOB, BTOA, ASCORE, BSCORE,

FINALRESULT);

13

SIGNAL STATE: STATE_TYPE;

SIGNAL TABLESTATE: INTEGER RANGE 0 TO 4; BEGIN

PROCESS (CLK, RESET) BEGIN

IF RESET='1' THEN --按下复位键,比赛开始 STATE<=WAITSTATE; --进入等待状态 CLEAR<='1'; --记分器清零 AWIN<='0';

BWIN<='0';

ELSIF RISING_EDGE (CLK) THEN CASE STATE IS WHEN WAITSTATE=> CLEAR<='0'; INCREASEA<='0'; INCREASEB<='0';

IF((SCOREA =21 ) OR (SCOREB=21))THEN--如果一方先得到21分

STATE<=FINALRESULT; --比赛结束

ELSE

IF STARTA='1'THEN --如果A开球 STATE<=ATOB; --球从A向B方移动 TABLESTATE<=0; --A方第一个灯点亮 ELSE

IF STARTB='1'THEN --如果B开球(A、B开球有

--定的优先级区别

STATE<=BTOA; --球从B向A方移动 TABLESTATE<=4; --B方第一个灯亮 ELSE

STATE<=WAITSTATE; END IF;

END IF;

14

END IF;

WHEN ATOB=> --球从A向B移动的过程 IF HITB='1'THEN --如果检测到B方击球 IF TABLESTATE<=2 THEN --若未过网提前击球 STATE<=ASCORE; --判为A胜 ELSE

STATE<=BTOA; --若过了网击球,球从B

--向A移动

END IF;

ELSE --若未检测到B方击球 IF TABLESTATE=4 THEN --如果离B方最近的灯

--已经亮

STATE<=ASCORE; --判为A胜 ELSE

TABLESTATE<=TABLESTATE+1; --否则球继续移动 END IF; END IF;

WHEN BTOA=> --球从B向A移动的过程 IF HITA='1'THEN --如果检测A方击球 IF TABLESTATE>=2 THEN --若未过网提前击球 STATE<=BSCORE; --判为B胜

ELSE --若过了网击球,球从A STATE<=ATOB; --向B移动

END IF;

ELSE --若未检测到A击球 IF TABLESTATE=0 THEN --如果离A最近的灯亮了

STATE<=BSCORE; --判为B胜 ELSE

TABLESTATE<=TABLESTATE-1; --否则球继续移动 END IF; END IF;

15

WHEN ASCORE=> --如果A胜 INCREASEA<='1'; --A方加1分 STATE<=WAITSTATE; --回到等待开球状态 WHEN BSCORE=> --如果B胜 INCREASEB<='1'; --B方加1分 STATE<=WAITSTATE; --回到等待开球状态 WHEN FINALRESULT=> --最后结果

IF(SCOREA=21) THEN --若A方先达到21分 AWIN<='1'; --表示A方胜出的灯亮 ELSE

BWIN<='1'; --否则,表示B方胜出的灯亮 END IF; WHEN OTHERS=> STATE<=WAITSTATE; END CASE; END IF; END PROCESS;

PROCESS(CLK) --此进程控制5个发光二极管的亮灭

BEGIN

IF FALLING_EDGE (CLK) THEN

IF ((STATE=ATOB) OR (STATE=BTOA)) THEN CASE TABLESTATE IS

WHEN 0=>TABLELIGHT<=\ WHEN 1=>TABLELIGHT<=\ WHEN 2=>TABLELIGHT<=\ WHEN 3=>TABLELIGHT<=\ WHEN 4=>TABLELIGHT<=\ WHEN OTHERS=>TABLELIGHT<=\ END CASE; ELSE

TABLELIGHT<=\

16

END IF; END IF; END PROCESS; END;

3.4记分器设计

图8 记分器元件符号

记分器元件符号如图8所示,本设计中记分器比较简单,只须根据状态机给出的两个信号(INCREASEA和INCREASEB)对六个分数(SCOREAL、SCOREAH和SCOREBL、SCOREBH、SCOREA、SCOREB)进行操作,记分器的程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER IS PORT (CLK: IN STD_LOGIC; CLEAR: IN STD_LOGIC;

INCREASEA, INCREASEB: IN STD_LOGIC;

SCOREAL, SCOREAH, SCOREBL, SCOREBH: BUFFER STD_LOGIC_VECTOR (3 DOWNTO 0)

SCOREA,SCOREB:BUFFER INTRGER RANGE 0 TO 21);

END;

ARCHITECTURE COUNT OF COUNTER IS BEGIN

17

PROCESS (CLK, CLEAR) IS

BEGIN

IF CLEAR='1' THEN --清0 SCOREAL<=\ SCOREAH<=\ SCOREBL<=\ SCOREBH<=\ SCORES<=0; SCOREB<=0;

ELSIF FALLING_EDGE (CLK) THEN

IF INCREASEA='1' THEN -- IF SCOREAH<\ -- IF SCOREAL<\ --SCOREAL<=SCOREAL+1; -- ELSE SCOREAL<=\ -- SCOREAH<=SCOREAH+1; -- END IF;

ELSIF SCOREAH<= \ IF SCOREAL<\ --SCOREAL<=SCOREAL+1; -- ELSE SCOREAL<=\; -- SCOREAH<=\;

END IF;

END IF;

SCOREA<=SCOREA+1; ELSIF INCREASEB='1' THEN

IF SCOREBH<2 THEN -- IF SCOREBL<\ --SCOREBL<=SCOREBL+1; -- ELSE SCOREBL<=\; -- SCOREBH<=SCOREBH+1; --18

A方加1分 若高位小于2 如果低位小于9

则低位加1

当低位为9,则清0 高位加1 若高位为2 如果低位小于1

则低位加1

否则高位、低位都清0 若高位小于2 如果低位小于9

则低位加1

当低位为9,则清0 高位加1

--

END IF;

ELSIF SCOREBH<=\ --若高位为2 IF SCOREBL<\ --如果低位小于1

SCOREBL<=SCOREBL+1; --则低位加1

ELSE SCOREBL<=\ --否则高位、低位都清0 SCOREBH<=\;

END IF;

END IF;

SCOREB<=SCOREB+1; END IF; END IF; END PROCESS; END;

编写VHDL源程序后,不能将设计文本存入根目录下,本设计都存在文件夹CHENLY中,还要注意设计文本的后缀名一定是“.VHD”,编写时一定要注意实体名跟设计文件名一致,这些是程序能顺利进行编辑和编译、逻辑综合、逻辑适配、编程下载成功的最重要的前提条件。

19

4系统硬件测试

4.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]。

4.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、

20

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。 I/O6/DATA1I/O5/DATA2I/O4/DATA3I/O3/DATA4I/O2/DATA5I/O1/DATA6I/O0/DATA7VCCINTDEV_CLRnIN1GCLCK1IN4DEV_OEGNDINTI/O49/nRSI/O48/nWSI/O47/CSI/O46/nCSTCKCONF_DONEnCEOVCCINTnCONFIGI/O20I/O21I/O22I/O23I/O24VCCINTGNDINTIN2GCLK2IN3VCCINTGNDINTI/O25I/O26I/O27I/O28I/O29I/O30I/O3133343536373839404142434445464748495051525354DATA0DCLKnCETDII/O7I/O8I/O9I/O10VCCINTI/O11I/O12I/O13I/O14I/O15GNDINTI/O16I/O17I/O18I/O19MSEL0MSEL1121314151617181920212223242526272829303132111098765432184838281807978777675ALTERAFLEXEPF10K10LC8484-PIN PLCC 封装顶面图7473727170696867666564636261605958575655TDOI/O45/CLKUSRI/O44I/O43I/O42/RDYnBSYINIT_DONEGNDINTI/O41I/O40I/O39I/O38VCCINTI/O37I/O36I/O35I/O34I/O33TMSnTRSTnSTATUSI/O32 图9 目标芯片顶面图 21

4.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”→ “Set Project to Current File”,当前的工程,即被设为PINGPANG。首先通过选择“MAX+PIUS II” → “Compiler”菜单,进入编辑窗。

(2)选择目标器件及锁定引脚:先选择用编程的目标芯片。选择菜单“Assign”→“Device…”在弹出的对话框中的“Device Family”下拉栏中选择“FLEX10”,然后在“Devices”列表框中选择芯片型号“EPF10K10-PLCC84”,按“OK”。

选择菜单“Assign” →“Pin/Location/Chip…”弹出一个对话框来设置引脚。在“Pin”右边的下拉栏中选择芯片引脚号,然后按下“Add”按钮,就会在下面的子窗口出现引脚设定说明语句,当前的一个引脚设置就加到了列表中。如果是总线形式的引脚名,也应分别写出总线中的每一个信号引脚设定,顶层文件引脚锁定文件为PINGPANG.PPN,如表3所示。

22

图10 乒乓游戏机顶层文件连接图

23

4.4系统的有关仿真

(1)建立仿真波形文件:选择菜单“File”→ “New”对话框中选择“Waveform Editor file”,按“OK”后将出现波形编辑器子窗口。选择菜单“Node”→“Enter Nodes from SNF”,出现选择结点对话框。按右上侧的“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”按钮,即进行仿真运算,当仿真结果显示“0 errors,0 warnings”,表示仿真运算结束。仿真结果可以确认设计正确。本系统含有时钟信号,希望在不改变输入时钟信号周期的条件下,延长运算时间,所以进行下面设置:在波形编辑窗口打开的情况下,选择“File”→“END Time”,在弹出的窗口中设置仿真结束时间,按“OK”按钮,选择菜单“MAX+PLUSⅡ”→“Simulator”,在“Simulator”子窗口“END Time”处设置同一时间长度。然后启动仿真操作,结束后可观察仿真波形。如果在开始没有打开波形观察窗,可选择“File”→“Open”,然后在弹出一名为“Open”的窗口中选择“Waveform Editor file”,并在“Files”窗口弹出的波形文件名PINGPANG.SCF上双击,即可进入波形观察窗,如图11所示。

24

表3 PINGPANG.PPN的设计过程

设计实体I/O标记

RESET STARTA HITA STARTB HITB AL0 AL1 AL2 AL3 AH0 AH1 AH2 AH3 BL0 BL1 BL2 BL3 BH0 BH1 BH2 BH3 L0 L1 L2 L3 L4 AWIN BWIN

设计实体I/O来源/去向

键1 键4 键5 键7 键8 数码管1 数码管1 数码管1 数码管1 数码管2 数码管2 数码管2 数码管2 数码管3 数码管3 数码管3 数码管3 数码管4 数码管4 数码管4 数码管4 D1 D2 D3 D4 D5 D7 D8

插座序号 PIO0 PIO3 PIO4 PI06 PIO7 PIO16 PIO17 PIO18 PIO19 PIO20 PIO21 PIO22 PIO23 PIO24 PIO25 PIO26 PIO27 PIO28 PIO29 PIO30 PIO31 PIO8 PIO9 PIO10 PIO11 PIO12 PIO14 PIO15

芯片可用资源序号

I/O0 I/O3 I/O4 I/O6 I/O7 I/O16 I/O17 I/O18 I/O19 I/O20 I/O21 I/O22 I/O23 I/O24 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O8 I/O9 I/O10 I/O11 I/O12 I/O14 I/O15

序号 5 8 9 11 16 27 28 29 30 35 36 37 38 39 47 48 49 50 51 52 53 17 18 19 21 22 24 25

25

续表3

设计实体I/O标记

CLK

设计实体I/O来源/去向

插座序号 CLOCK0

芯片可用资源序号

IN1

序号 2

图11 仿真波形图

4.5系统的编程配置

编程器型号的选择方法是启动“Programmer”,选菜单“Option”→“Hardware Setup”,在“Hardware Type”下拉窗中选“ByteBlaster(MV)”,按“OK”即可。用鼠标双击编译器子窗口的下载图标,可调出编程器(Programmer)窗口。在将设计文件编程配置(对此FPGA下载称为配置)进硬件芯片前,需连接好硬件测试系统。将实验板接好,接好电源,一切准备就绪后,方可按下编程器窗口中的“Configure”按钮。可将所设计的内容下载到芯片中。下载成功后将在一弹出的窗口中显示“Configuration Complete”。接下来就可以在实验系统上进行实验验证:按“模式选择键”,使“模式指示”显示“3”,该

26

模式电路结构图如图12所示[8],然后按动“键1”、“键4”、“键5”、“键7”、“键8”输入相应信号,如果结果和仿真结果不一样,就要根据流程图进行检查并修改,直至验证结果与仿真一致。

87654321??éù?÷PIO19-PIO16PIO23-PIO20PIO27-PIO24PIO31-PIO28PIO35-PIO32PIO39-PIO36PIO43-PIO40PIO47-PIO44D8PIO15D7PIO14D6PIO13D5PIO12D4PIO11D3PIO10D2PIO9D1PIO8FPGA/CPLD??±êD???PIO15-PIO8PIO7PIO6PIO5PIO4PIO3PIO2PIO1PIO0D16D15D14D13D12D11D10D9?ü8?ü7?ü6?ü5?ü4?ü3?ü2?ü1êμ?éμ??·?á11í?NO.3

图12 实验电路结构NO.3

27

SPEAKERò????÷ò????÷ò????÷ò????÷ò????÷ò????÷ò????÷ò????÷

5结论

本文进行乒乓游戏机软件设计,并用GW48实验箱进行验证,目标芯片是FLEX EPF10K10-PLCC84,本设计由状态机/球台控制器、记分器、译码显示器、按键去抖等模块组成。通过实验箱GW48模拟乒乓机,用发光二极管代表乒乓球台,最中间的发光二极管作球网,用点亮的发光二极管按一定方向移动来表示球的运动,用按钮设置发球和接球开关。最终实现乒乓机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。实验箱有8个二极管,本设计只用了5个发光当乒乓球台,还有2个当胜出信号。本设计可以再改进一下,把指示胜利2个发光二极管用数码管来代替,增加两个发光二极管当乒乓球台,这样球台就更大,双方会有更加充足的时间准备接球,这样不仅可以完成之前的功能,而且可以显示比赛的局数。

28

参考文献

[1] 边计年.用VHDL设计电子线路[M].北京:清华出版社,2000:2.

[2] 黄任.VHDL入门?解惑?经典实例?经验总结[M].北京:北京航天大学出版社,2005:3-5,115. [3] 尹常永.EDA技术/电子设计实验讲义[M].西安:西安电子科技大学出版社,2004:3. [4] 杨刚.现代电子技术—VHDL与数字系统设计[M].北京:电子工业出版社, 2004:6. [5] 甘历.VHDL应用与开发实验[M].北京:科学出版社,2003:4.

[6] 侯伯亨.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1999:27. [7] 潭会生,张昌凡.EDA技术及应用[M].西安:西安电子科技大学出版社,2004:81,233,256. [8] 王振红.VHDL数字电路设计与应用实践教程[M].北京:机械工业出版社,2005:35,37. [9] 李宜达.数字逻辑电路设计与实现[M].北京:科学出版社,2004:144.

[10] 王振红,张常年.综合电子设计与实践[M].北京:清华大学出版社,2005:122. [11] 杭州康芯电子有限公司.EDA技术实用教程[M].北京:科学出版社,2004:17. [12] 朱正伟.EDA技术及应用[M].北京:清华大学出版社,2005:21-25.

29

致谢

30

本文来源:https://www.bwwdw.com/article/h5tp.html

Top