基于VHDL的智力竞赛抢答器的设计与实现.docx

上传人:b****5 文档编号:6605079 上传时间:2023-01-08 格式:DOCX 页数:13 大小:121.09KB
下载 相关 举报
基于VHDL的智力竞赛抢答器的设计与实现.docx_第1页
第1页 / 共13页
基于VHDL的智力竞赛抢答器的设计与实现.docx_第2页
第2页 / 共13页
基于VHDL的智力竞赛抢答器的设计与实现.docx_第3页
第3页 / 共13页
基于VHDL的智力竞赛抢答器的设计与实现.docx_第4页
第4页 / 共13页
基于VHDL的智力竞赛抢答器的设计与实现.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于VHDL的智力竞赛抢答器的设计与实现.docx

《基于VHDL的智力竞赛抢答器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于VHDL的智力竞赛抢答器的设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。

基于VHDL的智力竞赛抢答器的设计与实现.docx

基于VHDL的智力竞赛抢答器的设计与实现

摘要本课程设计主要内容是利用EDA技术设计一个可容纳四组选手的智力竞赛抢答器,全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程。

本课程设计的开发仿真工具是MAX+plusII,采用自顶向下、逐层细化的设计方法设计整套系统,顶层模块用图形描述,底层文件用VHDL语言描述。

通过波形仿真,实现了智力竞赛抢答器的基本功能,达到了设计要求。

关键字智力竞赛抢答器;EDA技术;VHDL;MAX+plusII;自顶向下

1引言

20世纪90年代,引进数字系统设计方法发生突破性变革的技术是VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,超高速集成电路硬件描述语言)。

它是一种IEEE-1076标准所规范的硬件描述语言,主要用于算法级、寄存器级到门级的多种抽象设计层次的数字系统建模,已成为电子设计自动化(EDA)的一种重要手段。

本课程设计的主要目的是:

全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养设计综合电路的能力,养成编写文档资料的习惯和规范编程的思想。

2智力竞赛抢答器的主要功能

设计一个4人参加的智力竞赛抢答计时器。

该系统具有回答问题时间控制的功能,要求回答问题时间小于等于100秒(显示为0~99),时间显示采用倒计时方式。

当达到限定时间时,发出声响以示警告;当有某一参赛者首先按下抢答开关时,相应显示灯亮并伴有声响,此时抢答器不再接受其他输入信号。

智力竞赛抢答器的功能分块如图2-1所示。

图2-1智力竞赛抢答器功能模块划分图

该智力竞赛抢答器分为七个模块,分别为:

鉴别模块、锁存器模块、转换模块、选择输出模块、倒计时模块、片选模块和显示模块。

3主要功能的实现

3.1鉴别功能

鉴别模块jianbie如图3-1所示,输入信号CLK和CLR,若CLR=“0”,表示无人按键,输出信号Q为0;若CLR=“1”,表示有人按键,输出信号Q为1。

图3-1jianbie模块

鉴别模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYjianbieIS

PORT(CLK,CLR:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC);

ENDjianbie;

ARCHITECTUREjianbie_mkOFjianbieIS

 

BEGIN

PROCESS(CLK,CLR)

BEGIN

IFCLR='0'THEN--利用IF_THEN_ELSE语句

Q<='0';

ELSIFCLK'EVENTANDCLK='0'THEN--检测时钟下降沿

Q<='1';

ENDIF;

ENDPROCESS;

ENDjianbie_mk;

鉴别模块程序调试波形如图3-2所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟下降沿开始Q输出高电平。

图3-2鉴别模块仿真波形图

3.2锁存器功能

锁存器模块suocunqi如图3-3所示,锁存器对四位答题者的结果进行锁存,并将其赋给输出信号Q1,Q2,Q3,Q4。

图3-3suocunqi模块

锁存器模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsuocunqiIS

PORT(D1,D2,D3,D4:

INSTD_LOGIC;

CLK,CLR:

INSTD_LOGIC;

Q1,Q2,Q3,Q4,ALM:

OUTSTD_LOGIC);

ENDsuocunqi;

ARCHITECTUREsuocunqi_mkOFsuocunqiIS

BEGIN

PROCESS(CLK)

BEGIN

IFCLR='0'THEN

Q1<='0';

Q2<='0';

Q3<='0';

Q4<='0';

ALM<='0';

ELSIFCLK'EVENTANDCLK='1'THEN--检测CLR为高电平,则有人抢答

Q1<=D1;

Q2<=D2;

Q3<=D3;

Q4<=D4;

ALM<='1';

ENDIF;

ENDPROCESS;

ENDsuocunqi_mk;

锁存器模块程序调试波形如图3-4所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟上升沿开始:

将D1赋给Q1、将D2赋给Q2、将D3赋给Q3、将D4赋给Q4,并输出ALM为1;在CLR为低电平时无

输出。

图3-4锁存器模块仿真波形图

3.3转换功能

转换模块zhuanhuan如图3-5所示,把抢答结果转化为一个四位二进制数,表示抢答者的编号。

图3-5zhuanhuan模块

转换模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYzhuanhuanIS

PORT(D1,D2,D3,D4:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDzhuanhuan;

ARCHITECTUREzhuanhuan_mkOFzhuanhuanIS

BEGIN

PROCESS(D1,D2,D3,D4)

VARIABLETMP:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

TMP:

=D1&D2&D3&D4;

CASETMPIS

WHEN"1000"=>Q<="0001";--类似于真值表的CASE语句

WHEN"0100"=>Q<="0010";

WHEN"0010"=>Q<="0011";

WHEN"0001"=>Q<="0100";

WHENOTHERS=>Q<="0000";

ENDCASE;

ENDPROCESS;

ENDzhuanhuan_mk;

转换模块程序调试波形如图3-6所示,通过此模块将D1D2D3D4的输入结果转换成Q1Q2Q3Q4这种四位二进制数,当D1=‘1’,其他三位为‘0’时,输出Q为“0001”;当D2=‘1’,其他三位为‘0’时,输出Q为“0010”;当D3=‘1’,其他三位为‘0’时,输出Q为“0011”;当D4=‘1’,其他三位为‘0’时,输出Q为“0100”;其他情况下,输出Q为“0000”。

图3-6转换模块仿真波形图

3.4选择输出功能

选择输出模块sanxuanyi如图3-7所示,用两个四位二进制数表示倒计时,其中D1为高位,D2为低位,用一个四位二进制数D3表示抢答号,输出信号Q1和Q2,其中Q1和Q2作为显示模块中数码管的输入值。

通过SEL的值控制Q1和

 

Q2输出抢答号或者倒计时,当SEL=‘0’时为输出倒计时状态,Q1代表高位,Q2代表低位;当SEL=‘1’时,为显示抢答号状态,Q1输出为‘0’,Q2的输出代表抢答者编号。

图3-7sanxuanyi模块

选择输出模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsanxuanyiIS

PORT(SEL:

INSTD_LOGIC;

D1,D2,D3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q1,Q2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDsanxuanyi;

ARCHITECTUREsanxuanyi_mkOFsanxuanyiIS

BEGIN

PROCESS(SEL,D1,D2,D3)

BEGIN

IFSEL='1'THEN

Q1<="0000";Q2<=D3;

ELSEQ1<=D1;Q2<=D2;

ENDIF;

ENDPROCESS;

ENDsanxuanyi_mk;

选择输出模块程序调试波形如图3-8所示,由SEL控制Q的输出,当SEL为‘1’时,将D3赋给Q2,“0000”赋给Q1,输出结果代表抢答者编号;当SEL为‘0’时,将D2赋给Q2,D1赋给Q1,输出结果代表倒计时。

 

图3-8选择输出模块仿真波形图

3.5倒计时功能

倒计时模块daojishi如图3-9所示,用两个四位二进制数表示倒计时,定义变量HH,LL,由时钟CLK和使能信号EN控制,其中EN的值由锁存器模块中的ALM控制。

当倒计时至HH==0,LL==0时,发出声音停止计时,输出H(XXX),L(XXX)。

图3-9daojishi模块

倒计时模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdaojishiIS

PORT(CLK,EN:

INSTD_LOGIC;

H,L:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SOUND:

OUTSTD_LOGIC);

ENDdaojishi;

ARCHITECTUREdaojishi_mkOFdaojishiIS

BEGIN

PROCESS(CLK,EN)

VARIABLEHH,LL:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFEN='1'THEN--EN=1驱动倒计时模块开始倒计时

SOUND<='0';

HH:

="1001";

LL:

="1001";

ELSIFLL=0THEN

IFHH=0THEN

SOUND<='1';--倒计时至0时,输出超时报警信号

ELSE

LL:

="1001";

HH:

=HH-1;

ENDIF;

ELSELL:

=LL-1;

ENDIF;

ENDIF;

H<=HH;

L<=LL;

ENDPROCESS;

ENDdaojishi_mk;

倒计时模块程序调试波形如图3-10所示,当EN为“1”时,在时钟上升沿将“1001”赋给H和L,准备进入倒计时;从EN为“0”且时钟的上升沿到来时,H和L的值开始以逐渐递减,即从99倒计时到0,同时倒计时至0时,输出超时报警信号SOUND=1。

 

图3-10倒计时模块仿真波形图

3.6片选功能

片选模块pianxuan如图3-11所示,该模块用于控制选择输出模块输出倒计时或者抢答号,其中EN1的值由锁存器模块中的ALM控制。

图3-11pianxuan模块

片选模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYpianxuanIS

PORT(CLK,EN1:

INSTD_LOGIC;

A:

OUTSTD_LOGIC);

ENDpianxuan;

ARCHITECTUREpianxuan_mkOFpianxuanIS

BEGIN

PROCESS(CLK,EN1)

BEGIN

IFEN1='0'THEN--利用IF_THEN_ELSE语句

A<='0';

ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

A<='1';

ENDIF;

ENDPROCESS;

ENDpianxuan_mk;

片选模块程序调试波形如图3-12所示,EN1=’0’时,将‘0’赋给A;当EN1=’1’时,在CLK时钟信号的下一个时钟上升沿将‘1’赋给A。

图3-12片选模块仿真波形图

3.7显示功能

显示模块如图3-13所示,将所有进程中的数值转换成七位二进制数。

图3-13xianshi模块

显示模块源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYxianshiIS

PORT(D:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDxianshi;

ARCHITECTURExianshi_mkOFxianshiIS

BEGIN

PROCESS(D)

BEGIN

CASEDIS

WHEN"0000"=>Q<="0111111";

WHEN"0001"=>Q<="0000110";

WHEN"0010"=>Q<="1011011";

WHEN"0011"=>Q<="1001111";

WHEN"0100"=>Q<="1100110";

WHEN"0101"=>Q<="1101101";

WHEN"0110"=>Q<="1111101";

WHEN"0111"=>Q<="0000111";

WHEN"1000"=>Q<="1111111";

WHEN"1001"=>Q<="1101111";

WHENOTHERS=>Q<="0000000";

ENDCASE;

ENDPROCESS;

ENDxianshi_mk;

显示模块程序仿真波形如图3-14所示,将输入信号D转变成能在七段数码管上显示的七位二进制数。

图3-14显示模块仿真波形图

3.8顶层模块

各模块连接后形成顶层文件的电路图如图3-15所示。

 

图3-15各模块连接后的电路图

顶层文件仿真波形如图3-16所示,D2最先获得抢答权,输出声音信号SOUND=1,在数码管上显示抢答号,Q1输出“0111111”(0),Q2输出“1011011”

(2),代表抢答号为02;之后自动进入倒计时状态,将“1101111”(9)赋给Q1和Q2,同时开始自动倒计时,倒计时至0时,输出超时报警信号SOUND=1,停止倒计时。

图3-16顶层文件仿真波形图

4总结

4.1智力竞赛抢答器设计结果

通过MAX+plusII的仿真,证明了本系统在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后发出声音提示,并能通过译码器显示抢答号;在两组或者两组以上信号同时抢答时视抢答无效。

抢答成功后,系统开启倒计时功能,并且能够准确计时将时间呈两位数显示;倒计时开始后从99秒倒计时至0秒并通过译码器实时显示计时结果,当倒计时至0秒时,停止倒计时,发出超时报警信号。

4.2学习总结

在整个设计过程中,主要需要考虑的问题如下:

将整套系统划分成多个子

模块,通过画流程图分析各模块之间的联系,以达到设计要求;程序中电路的时序设计;修改程序中的语法错误;程序仿真时波形的设计;根据波形仿真现象修改程序逻辑错误;对VHDL基本语法的掌握;掌握使用MAX+plusII编辑程序、编译、设计波形、仿真的方法。

通过本次课程设计,我们加深了对EDA技术、VHDL语言基本语法知识及程序基本框架的理解,将理论知识应用到实践中,提高了动手能力,同时养成了编写文档的习惯。

整套系统运用MAX+plusII编程、调试、仿真,使我们对这个软件的使用熟练了很多。

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

当前位置:首页 > 医药卫生

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

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