eda实验论文.docx

上传人:b****9 文档编号:25681859 上传时间:2023-06-11 格式:DOCX 页数:17 大小:500.65KB
下载 相关 举报
eda实验论文.docx_第1页
第1页 / 共17页
eda实验论文.docx_第2页
第2页 / 共17页
eda实验论文.docx_第3页
第3页 / 共17页
eda实验论文.docx_第4页
第4页 / 共17页
eda实验论文.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

eda实验论文.docx

《eda实验论文.docx》由会员分享,可在线阅读,更多相关《eda实验论文.docx(17页珍藏版)》请在冰豆网上搜索。

eda实验论文.docx

eda实验论文

乒乓球游戏机

EDA电子实训

专业:

电子信息科学与技术

组长:

赵林帆

组员:

何晨旭、孙毅

指导教师:

任国凤

完成时间:

2018年9月24日

摘要1

1、EDA2

1.1EDA简介2

1.2设计语言VHDL2

2、乒乓球游戏机的设计3

2.1设计要求3

2.2设计说明4

2.2.1整体思路4

2.2.2具体设计思路4

3、编程5

3.1分频器模块5

3.2状态机编程设计7

3.3七段数码管显示13

3.4整体电路17

4、系统编译和仿真18

4.1仿真18

4.1.1球运动仿真18

4.1.2得分仿真18

4.1.3总仿真图18

4.2结果图19

5、心得与体会19

摘要

EDA(电子设计自动化)技术是现代电子工程领域的一门新技术。

它提供了基于计算机和信息技术的电路系统设计方法。

EDA技术的发展和推广应用极大地推动了电子工业的发展。

乒乓球是中华人民共和国国球,是一种极为流行的球类体育项目。

随着科学技术的发展,人类进入信息化社会,信息社会的发展离不开电子产品的进步。

现代电子产品发展得越来越快,于是人们将乒乓球与电子产品结合在一起,形成了乒乓球游戏机。

通过拨码开关模拟球拍,发光二极管模拟乒乓球,进行游戏的操作。

关键词:

EDA电子工业信息社会乒乓球游戏机

 

1、EDA

1.1EDA简介

EDA是电子设计自动化(ElectrONicDesign AUTOMATION)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

1.2设计语言VHDL

VHDL就是超高速集成电路硬件描述语言。

覆盖面广,描述能力强,是一个多层次的硬件描述语言。

在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。

具有良好的可读性,即容易被计算机接受,也容易被读者理解。

使用期长,不会因工艺变化而描述过时。

因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的参数即可。

支持大规模设计的分解和已有设计的再利用。

VHDL为设计的分解和设计的再利用提供了有力的支持。

2、乒乓球游戏机的设计

2.1设计要求

两人乒乓游戏机能够模拟乒乓球比赛的基本过程和规则,并能自动裁判和计分。

乒乓游戏机是用8个发光二极管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定的方向移动来表示球的运动。

在电路中设置四个输入端:

一个是暂停开关,一个清零开关,两个是击球开关(分别归甲乙两人所有)。

当甲方按下发球开关时,靠近甲方的第一盏灯亮,然后发光二极管由甲向乙依此点亮,代表乒乓球在移动。

当球过网后,按设计者规定的球位乙方可以击球。

若乙方提前击球或没有击着球,则判乙方失分,甲方得分。

然后重新发球,比赛继续进行。

比赛一直进行到乙方计分到11分,该局比赛结束。

记分牌清零,可以开始新的一局比赛。

具体功能如下:

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

(2)乒乓球的位置和移动方向由灯亮及依此点亮的方向决定,球移动的速度为0.1-0.5s移动一位。

游戏者根据求的位置做出相应的动作,提前击球或出界均判失分。

(3)比赛用11分为一局来进行,甲乙双方都应设置自己的记分牌,任何一方先记满11分,该方就算胜了此局。

当记分牌清零后,又可以开始新的一局比赛。

2.2设计说明

2.2.1整体思路

通过状态机来实现球的移动和各个状态的转移,用数码管显示得分结果。

通过计数器控制每5次交换发球权。

通过分频器来控制状态的转移时钟,从而控制球的移动速度。

当任一方的分数达11时,游戏结束。

或通过开关控制可清零比分,暂停比赛。

2.2.2具体设计思路

状态机中共设置7个状态(等待发球,A发球,B发球,球从A向B移动,球从B向A移动,A击球,B击球),各个状态间的转移控制要根据要求来改变转移的状态。

由于设计要求实现LED灯依次从左到右,或从右到左的移动。

同时球拍击球,若击中,则球向相反方向移动,若未击中,则对方得1分。

若提前击球,则对方得1分。

若要实现计分功能,就需要使用七段数码管。

使用分频器来控制状态转移的时钟,从而控制状态转移的快慢,即控制了球的移动速度。

发球权通过计数器来控制,每5次交换发球权。

裁判用重置信号reset表示。

清零所有计数器,且进入等待发球状态。

以状态机为控制核心,附加其它功能模块来实现乒乓球游戏机。

具体流程如下图所示:

3、编程

3.1分频器模块

因试验箱上的低频时钟信号频率依旧较快,无法用于游戏机的设计,完成击球的观察。

故而添加分频器,将试验箱上的低频信号进行分频,使得人眼可以清晰的观察到乒乓球的移动过程,从而实现击球。

以下为分频器代码:

LIBRARYieee;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFENPINQIIS

GENERIC(N:

INTEGER:

=16);--RATE=2^n

PORT(CLK:

INSTD_LOGIC;

CLKOUT:

OUTSTD_LOGIC);

ENDFENPINQI;

ARCHITECTUREAOFFENPINQIIS

SIGNALCNT:

STD_LOGIC_VECTOR(N-1DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

CNT<=CNT+1;

ENDIF;

ENDPROCESS;

CLKOUT<=CNT(N-1);

ENDA;

生成的模块图为:

经过不断的实验,本次采用的分频器为16分频器

3.2状态机编程设计

状态机中共设置7个状态,分别为等待发球,A发球,B发球,球从A向B移动,球从B向A移动,A击球,B击球。

两个计数器分别记忆A的得分和B的得分。

还有一个负责记忆发球次数。

每5次交换发球。

共4个输入:

en使能信号,A击球,B击球,reset清零信号。

以下为状态机进程代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYPINGPANGGAMEIS

PORT(RESET:

INSTD_LOGIC;

EN:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;--得分的触发进程

HIT1,HIT2:

INSTD_LOGIC;--A和B击球输入

LIGHT:

OUTSTD_LOGIC_VECTOR(1TO8);--8个发光二极管的输出

WINNER:

BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);

SCORE11,SCORE12,SCORE21,SCORE22:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));--4个七段数码管输出

ENDPINGPANGGAME;

ARCHITECTUREGAMEOFPINGPANGGAMEISTYPEPINGPONGIS(WAITSERVE,LIGHT_1_ON,BALL_MOVE_TO_B,ALLOW_B_HIT,LIGHT_8_ON,BALL_MOVE_TO_A,ALLOW_A_HIT);--7个状态(等待发球;进程第一盏灯亮,A已发球/击球;球向B移动;允许B击球;进程第八盏灯亮,B已发球/击球;球向A移动;允许A击球)

SIGNALSTATE:

PINGPONG;

SIGNALI:

INTEGERRANGE0TO8;--8个二极管

SIGNALJ:

INTEGERRANGE0TO10;--发球次数,当0-4时A发球,当为5-9时B发球,每当j=10时,归零。

SIGNALC:

INTEGERRANGE0TO1;

SIGNALCOUNT:

INTEGERRANGE0TO4;--比分显示

SIGNALSERVE:

STD_LOGIC_VECTOR(1TO2):

="01";--发球判断,当为“10”时A发球,当为“01”时B发球。

SIGNALCOUNT1,COUNT2:

STD_LOGIC_VECTOR(1TO4):

="0000";

COMPONENTMYDECODERIS

PORT(BINARYIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

BCDOUT1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

BCDOUT2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;--调用计分译码

BEGIN

P1:

PROCESS(CLK)--clk作为触发进程

BEGIN--进程开始

IFRESET='1'THEN

I<=0;COUNT1<="0000";COUNT2<="0000";J<=0;--异步置位

ELSIFCLK'EVENTANDCLK='1'THEN

IFEN='1'THEN

IFCOUNT1="1100"ORCOUNT2="1100"THEN--当到达11分时结束游戏,重新开始。

C<=1;I<=0;COUNT1<="0000";COUNT2<="0000";J<=0;

ENDIF;

ELSEI<=0;

ENDIF;--状态机部分

CASESTATEIS

WHENWAITSERVE=>CASESERVEIS--处于等待发球状态

WHEN"10"=>I<=0;STATE<=LIGHT_1_ON;J<=J+1;--A发球,同时记录发球次数

WHEN"01"=>I<=8;STATE<=LIGHT_8_ON;J<=J+1;--B发球,同时记录发球次数

IF(J=10)THEN--当发球10次后,j=10,此时将j归零,重新记录。

J<=0;ENDIF;

WHENOTHERS=>I<=0;--其他情况,暂停游戏。

ENDCASE;

WHENLIGHT_1_ON=>I<=1;--进程处于第一盏灯亮,A刚发球,在第一个灯亮的时候,此时B若击球,则A得分;否则进入球向B移动状态。

IFHIT2='1'THENI<=0;

COUNT1<=COUNT1+1;

STATE<=WAITSERVE;

ELSESTATE<=BALL_MOVE_TO_B;

ENDIF;

WHENLIGHT_8_ON=>I<=8;--进程处于第八盏灯亮,B刚发球,在第八个灯亮的时候,此时A若击球,则B得分;否则进入球向A移动状态。

IFHIT2='1'THENI<=0;COUNT2<=COUNT2+1;

STATE<=WAITSERVE;

ELSESTATE<=BALL_MOVE_TO_A;

ENDIF;

WHENBALL_MOVE_TO_A=>IFHIT1='1'

THEN--进程处于球向A移动,如果此时A已经完成击球,则属于抢先击球,B得分;否则,允许A击球。

I<=0;COUNT2<=COUNT2+1;STATE<=WAITSERVE;

ELSIFI=1ORI=2ORI=3THEN

STATE<=ALLOW_A_HIT;

ELSEI<=I-1;

ENDIF;

WHENBALL_MOVE_TO_B=>IFHIT2='1'

THEN--进程处于球向B移动,如果此时B已经完成击球,则属于抢先击球,A得分;否则,允许B击球。

I<=0;COUNT1<=COUNT1+1;STATE<=WAITSERVE;

ELSIFI=6ORI=7ORI=8THEN

STATE<=ALLOW_B_HIT;

ELSEI<=I+1;

ENDIF;

WHENALLOW_A_HIT=>IFHIT1='1'THEN--处于允许A击球状态

I<=2;STATE<=BALL_MOVE_TO_B;

ELSE

COUNT2<=COUNT2+1;I<=0;STATE<=WAITSERVE;

ENDIF;

WHENALLOW_B_HIT=>IFHIT2='1'THEN--处于允许B击球状态

I<=7;STATE<=BALL_MOVE_TO_A;

ELSE

COUNT1<=COUNT1+1;I<=0;STATE<=WAITSERVE;

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESSP1;

P2:

PROCESS(J)

BEGIN

IF(J>=0ANDJ<=4)THENSERVE<="10";

ENDIF;

IF(J>=5ANDJ<=9)THENSERVE<="01";

ENDIF;

ENDPROCESSP2;

P3:

PROCESS(WINNER)

BEGIN

IFCOUNT1<="1100"THEN

WINNER<="1110";

ELSIFCOUNT2<="1100"THEN

WINNER<="1111";

ELSEWINNER<="1101";

ENDIF;

ENDPROCESSP3;

LIGHT<="10000000"WHEN(I=1)ELSE--进程处i信号控制发光二极管的亮暗

"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:

MYDECODERPORTMAP(COUNT1,SCORE11,SCORE12);--A的得分

U1:

MYDECODERPORTMAP(COUNT2,SCORE21,SCORE22);--B的得分

ENDGAME

生成的状态机模块

3.3七段数码管显示

七段数码管是在数字电路设计中经常用到的显示电路。

所谓七段数码管,其实是由7段发光二极管组成的用于显示数字的器件。

其中的a,

b,,c,d,e,f,g分别为七个发光二极管,通过控制每个发光二极管的亮和暗,可以分别显示0~9十个数字。

例如,b和c发光表示数字1.

以下为七段数码管代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXSBFIS

PORT(WINNER,SCORE11,SCORE12,SCORE21,SCORE22:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK1:

INSTD_LOGIC;

SEL:

outstd_logic_vector(2downto0);

xsh:

outstd_logic_vector(6downto0));

ENDXSBF;

ARCHITECTUREBEHAVEOFXSBFIS

SIGNALCNT8:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P0:

process(clk1)

begin

ifrising_edge(clk1)then

IFCNT8<=7THEN

cnt8<=cnt8+1;

ELSECNT8<="000";

endif;

ENDIF;

SEL<=CNT8;

endprocessP0;

p1:

PROCESS(CNT8,SCORE11,SCORE12,SCORE21,SCORE22)

BEGIN

CASECNT8IS

WHEN"000"=>A<=SCORE12;--

WHEN"001"=>A<=SCORE11;--

WHEN"010"=>A<=WINNER;

WHEN"011"=>A<=WINNER;

WHEN"100"=>A<=WINNER;

WHEN"101"=>A<=WINNER;

WHEN"110"=>A<=SCORE21;--

WHEN"111"=>A<=SCORE22;--

whenothers=>A<="0000";

ENDCASE;

endprocessp1;

p2:

process(A)

begin

caseAis

when"0000"=>xsh<="0111111";--0

when"0001"=>xsh<="0000110";--1

when"0010"=>xsh<="1011011";--2

when"0011"=>xsh<="1001111";--3

when"0100"=>xsh<="1100110";--4

when"0101"=>xsh<="1101101";--5

when"0110"=>xsh<="1111100";--6

when"0111"=>xsh<="0000111";--7

when"1000"=>xsh<="1111111";--8

when"1001"=>xsh<="1100111";--9

when"1101"=>xsh<="0000000";

when"1110"=>xsh<="1110111";--A

when"1111"=>xsh<="1111111";--B

whenothers=>xsh<="0000000";

endcase;

ENDPROCESSp2;

ENDBEHAVE;

生成的模块图为

3.4整体电路

由分频器模块、乒乓球游戏模块、七段数码管模块3个模块组成乒乓球游戏机。

 

4、系统编译和仿真

4.1仿真

由上述程序生成模块图后,连接电路并进行仿真。

4.1.1球运动仿真

A和B的发球(分别五次)light代表在不击球时球的移动。

4.1.2得分仿真

到达11分归零

4.1.3总仿真图

在存在时钟信号,EN=1,RESTE=0,A、B都不击球的情况下的总仿真图

4.2结果图

5、心得与体会

经过近一个月的学习和实践过程中,遇到了很多问题。

刚开始由于对VHDL语言不是很熟悉,所以编程的过程中出现了许多问题,也走了很多弯路。

遇到的问题

1、编译通过后,下载到试验箱上,发现程序并没有预期的效果。

显示顺序颠倒。

2、对自己过高要求。

原设计显示“XX0000XX”,“XX”为比分。

当A获胜时,会显示“XXAAAAXX”;当B获胜时,会显示“XXBBBBXX”。

发现难以实现,就改为“XXAVSBXX”.

3、试验箱上的时钟信号高频可用,而低频信号不适合使用。

经老师提醒,添加分频器,使得时钟信号可用。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1