课程设计论文-乒乓球游戏机设计.docx
《课程设计论文-乒乓球游戏机设计.docx》由会员分享,可在线阅读,更多相关《课程设计论文-乒乓球游戏机设计.docx(17页珍藏版)》请在冰豆网上搜索。
课程设计说明书
目录
1引言 1
1.1硬件描述语言—VHDL 1
1.2QuartusⅡ简介 1
2设计题目、内容及要求 2
2.1设计题目 2
2.2设计内容 2
2.3设计要求 2
3系统设计 3
3.1控制模块的设计 3
3.2送数据模块的设计 7
3.3产生数码管片选信号模块的设计 8
3.47段译码器模块的设计 8
4总结 10
参考文献 11
2
1引言
1.1硬件描述语言—VHDL
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
1.2QuartusⅡ简介
QuartusII是Altera公司的综合性PLD开发软件,可以采用多种输入方式,如VHDL、VerilogHDL、AHDL(AlteraHardwareDescriptionLanguage)及电路图等。
它支持一些比较成熟的模块,如LPM/MegaFunction宏功能模块库等,设计者可以直接调用这些模块,从而使设计的复杂性降低了,设计的速度也加快了。
QuartusII内带有综合器和仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,减少了设计者的工作量。
QuartusII是一种综合性的开发平台,在QuartusII中可以进行系统级设计嵌入式的软件开发和可编程逻辑的设计。
QuartusII越来越受到数字系统设计者的欢迎,是因为QuartusII拥有强大的设计能力和直观易用的接口,可以在多种平台上使用,如XP、Linux以及Unix等,具有完善的用户图形界面设计方式,运行速度快,功能集中,易学易用等特点。
2设计题目、内容及要求
2.1设计题目
乒乓球游戏机设计
2.2设计内容
(1)用8个发光二极管表示球,用两个按钮分别表示甲乙两个球员的球拍。
(2)一方发球后,球以固定速度向另一方运动,发光二极管依次点亮,当球达到最后一个发光二极管时,对方击球,按下按钮,球将向相反方向运动。
在其他时候击球视为犯规,给对方加1分都犯规,各加1分。
(3)甲乙两方各由数码管计分。
(4)裁判有一按钮可进行系统初始化。
具体原理图如下:
等待发球
甲得分乙得分
甲发球乙发球
第一盏灯亮
第八盏灯亮
允许甲发球
球向甲移动
乙击球甲击球
球向乙移动
乙击球甲击球
允许乙发球
乙没击球甲没击球
图1-1乒乓球游戏机原理图
2.3设计要求
(1)根据任务要求确定电路各功能模块;
(2)写出设计程序;
(3)给出时序仿真结果;
(4)最后要有设计总结;
3系统设计
3.1控制模块的设计
模块pp分两个进程,第一个进程实现逻辑功能,第二个进程将整数的记分转换为十进制数,便于译码显示。
af,aj,bf,bj分别为a方发球键和接球键,b方发球键和接球键,shift表示球所在的位置。
其vhdl程序描述如下:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityppis
Port(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);
Endpp;
Architecturebehaveofppis
Signalamark,bmark:
integer;
Begin
Process(clr,clk)
Variablea,b:
std_logic;
Variableshe:
std_logic_vector(7downto0);
Begin
Ifclr='0'then
a:
='0';
b:
='0';
she:
="";
amark<=0;
bmark<=0;
elsifclk'eventandclk='1'then
ifa='0'andb='0'andaf='0'then
--a方发球
a:
='1';
she:
="";
elsifa='0'andb='0'andbf='0'then
--b方发球
b:
='1';
she:
="";
elsifa='1'andb='0'then
--a方发球后
ifshe>8then
ifbj='0'then
--b方过网击球
amark<=amark+1;
--a方加一分
a:
='0';
b:
='0';
she:
="";
else
she:
='0'&she(7downto1);
--b方没有击球
endif;
elsifshe=0then
--球从b方出界
amark<=amark+1;
--a方加一分
a:
='0';
b:
='0';
else
ifbj='0'then
--b方正常击球
a:
='0';
b:
='1';
else
she:
='0'&she(7downto1);
--b方没有击球
endif;
endif;
elsifa='0'andb='1'then
--b方发球
ifshe<16andshe/=0then
ifaj='0'then
bmark<=bmark+1;
a:
='0';
b:
='0';
she:
="";
else
she:
=she(6downto0)&'0';
endif;
elsifshe=0then
bmark<=bmark+1;
a:
='0';
b:
='0';
else
ifaj='0'then
a:
='1';
b:
='0';
else
she:
=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;
begin
ifclr='0'then
--清零
aha:
="0000";
ala:
="0000";
bha:
="0000";
bla:
="0000";
tmp1:
=0;
tmp2:
=0;
t1:
='0';
t2:
='0';
elsifclk'eventandclk='1'then
ifaha="0001"andala="0001"then
--a方得分达到11分,则保持
aha:
="0001";
ala:
="0001";
t1:
='1';
elsif
bha="0001"andbla="0001"then
--b方得分达到11分,则保持
bha:
="0001";
bla:
="0001";
t2:
='1';
elsifamark>tmp1then
ifala="1001"then
ala:
="0000";
aha:
=aha+1;
tmp1:
=tmp1+1;
else
ala:
=ala+1;
tmp1:
=tmp1+1;
endif;
elsifbmark>tmp2then
if
bla="1001"then
bla:
="0000";
bha:
=bha+1;
tmp2:
=tmp2+1;
else
bla:
=bla+1;
tmp2:
=tmp2+1;
endif;
endif;
endif;
al<=ala;
bl<=bla;
ah<=aha;
bh<=bha;
awin<=t1;
bwin<=t2;
endprocess;
endbehave;
3.2送数据模块的设计
--送数据模块的设计送数据模块ch41a的vhdl程序描述如下:
LibraryIEEE;
UseIEEE.std_logic_1164.all;
Entitych41ais
Port(sel:
instd_logic_vector(2downto0);
D0,d1,d2,d3:
instd_logic_vector(3downto0);
Q:
outstd_logic_vector(3downto0));
Endch41a;
Architecturebehaveofch41ais
Begin
Process(sel)
Begin
Caseselis
When
"100"=>q<=d0;
When"101"=>q<=d1;
When"000"=>q<=d2;
Whenothers=>q<=d3;
Endcase;
Endprocess;
Endbehave;
3.3产生数码管片选信号模块的设计
--产生数码管片选信号模块sel的vhdl程序描述如下:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.