用VHDL实现的电子抢答器jsp.docx

上传人:b****4 文档编号:3737789 上传时间:2022-11-25 格式:DOCX 页数:10 大小:91.64KB
下载 相关 举报
用VHDL实现的电子抢答器jsp.docx_第1页
第1页 / 共10页
用VHDL实现的电子抢答器jsp.docx_第2页
第2页 / 共10页
用VHDL实现的电子抢答器jsp.docx_第3页
第3页 / 共10页
用VHDL实现的电子抢答器jsp.docx_第4页
第4页 / 共10页
用VHDL实现的电子抢答器jsp.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

用VHDL实现的电子抢答器jsp.docx

《用VHDL实现的电子抢答器jsp.docx》由会员分享,可在线阅读,更多相关《用VHDL实现的电子抢答器jsp.docx(10页珍藏版)》请在冰豆网上搜索。

用VHDL实现的电子抢答器jsp.docx

用VHDL实现的电子抢答器jsp

用VHDL实现的电子抢答器

物理系08级电子信息科学与技术专业曾凡宗

合作者:

赵玉龙,张鹏

摘要:

以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QuartusⅡ开发软件和EDA试验箱为设计工具,阐述了电子抢答器的工作原理和软硬件实现方法。

并对所设计的电子抢答器进行了时序仿真和硬件验证。

关键词:

QuartusⅡ开发软件;时序仿真;EDA

WiththerealizationofVHDLelectronicviestoimplement

Abstract:

basedonfieldprogrammablelogicdevices(FPGA)forthedesignofthecarrier,withVHDLformainlyexpresswaytoQuartusⅡdevelopmentsoftwareandEDAtestcasesfordesigntools,thispaperexpoundstheworkingprincipleofelectronicscare-answeringdeviceanditshardwareandsoftwareimplementation.AndthedesignofelectronictiKeywords:

QuartusⅡdevelopmentsoftware,timing,EDAsimulationmingresponderusedtocarryoutsimulationandhardwarevalidation

0引言

数字抢答器控制系统在现今许多工厂、学校和电视台等单位所举办的各种知识竞赛中起着不可替代的作用。

基于EDA技术设计的电子抢答器,以其价格便宜、安全可靠、使用方便而受到了人们的普遍欢迎。

本文以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言VHDL为主要表达方式,以OuartusⅡ开发软件为设计工具设计的电子抢答器,具有抢答鉴别与锁存功能以及答题限时功能、对抢答犯规的小组进行警告和对各抢答小组进行相应的成绩操作等功能。

1电子抢答器的工作原理分析

1.1流程图

如图1所示。

图1电子抢答器功能流程图

1.2电子抢答器的功能设计

该电子抢答器实现的功能主要包括四项操作:

(1)第一抢答信号的鉴别和锁存

  该电子抢答器共设4个组别,每组控制一个抢答开关,分别为keyin[0],keyin[1],keyin[2],keyin[3]。

在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组指示灯亮,同时显示器显示出抢答者的组别。

同时,电路处于自锁状态,以使其他组的抢答器按钮不起作用。

(2)计时功能

  在初始状态时。

主持人可以设置答题时间的初时值。

在主持人对抢答组别进行确认,并给出倒计时计数开始信号以后,抢答者便可开始回答问题。

此时,显示器从初始值开始倒计时,计至0时停止计数,同时扬声器发出超时报警信号。

若参赛者在规定的时间内回答完问题,主持人即可给出计时停止信号,以免扬声器鸣叫。

(3)计分功能

  在初始状态时,各组分数均为零。

每组抢答完后,由主持人打分,答对一次加1分,答错不加分

2抢答器VHDL设计

2.1抢答器模块的设计

当主持人按下start开关后,四个队开始抢答,指示灯keyout[0],keyout[1],keyout[2],keyout[3]中代表该队的亮起。

该模块的源程序

IFstart='1'THEN

CASEkeyinIS

WHEN"0001"=>keyout<="0001";

WHEN"0010"=>keyout<="0010";

WHEN"0100"=>keyout<="0100";

WHEN"1000"=>keyout<="1000";

WHENOTHERS=>keyout<="0000";

ENDCASE;

时序仿真图如图2

图2抢答器模块时序图

通过图1可看到在start=1时当第一组按下开关keyin[0]后,该组的指示灯keyout[0]被点亮,可见抢答器模块的功能设计正确。

2.2计时器模块的设计

主要功能是用来对答题限时。

当倒计时时间计为0时,系统将输出报警信号,蜂鸣器响起。

该计时器应具有异步清零的功能,假设设定的初始倒计时时间为9s,在rst=0,start=1的情况下开始倒计时,在时间回到零之前回答完问题,主持人按下复位键即rst=1。

当时间回到零没回答完问题,则beep=1,蜂鸣器响起。

该模块的源程序如下

two:

PROCESS(clk,rst,start)

VARIABLECQ1:

INTEGERRANGE20DOWNTO0;

BEGIN

beep<='0';

IFrst='1'THENCQ2<="1001";CQ1:

=0;

ELSIFclk'eventandclk='1'THEN

IFstart='1'THEN

IFCQ1<10THENCQ1:

=CQ1+1;

ELSE

CQ1:

=0;CQ2<=CQ2-1;

ENDIF;

IFCQ2>"1001"THENCQ2<="1001";

ENDIF;

ENDIF;

ENDIF;

IFCQ2="0000"THENbeep<='1';

ENDIF;

CASECQ2IS

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

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

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

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

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

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

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

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

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

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

WHENOTHERS=>display<="0111111";

ENDCASE;

ENDPROCESStwo;

时序仿真图如图3.

图3计时器模块的时序仿真图

通过图2可看出,在start=1时,共阴极代码从9~0变化,当变化到0的代码3F时,beep=1,蜂鸣器响起。

当rst=1时,数码管上一直显示9的共阴极代码6F,可见计时器功能设计正确。

2.3计分模块

若某队在规定的时间内正确回答完问题,则有主持人按下计分键出现一个上升沿该队分数加一分。

该模块的源程序如下

IF(count'eventandcount='1')THEN

CASEkeyinIS

WHEN"0001"=>jifen1<=jifen1+1;

WHEN"0010"=>jifen2<=jifen2+1;

WHEN"0100"=>jifen3<=jifen3+1;

WHEN"1000"=>jifen4<=jifen4+1;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

时序仿真图如图4

图4计分器的时序仿真图

通过图4可以看出,在第一组(keyin=0001)回答完问题后检测到count的上升沿,jifen1加一即有0000~0001,可见计分模块设计成功。

2.5全局时序仿真图

如图5所示。

图5全局时序仿真图

4结束语

本文以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QuartusⅡ开发软件为设计工具设计了一种具有第一抢答信号鉴别和锁存、计时和计分,并可对超时抢答进行蜂鸣警示等功能的电子抢答器。

阐述了电子抢答器的工作原理和软硬件实现方法。

并对电子抢答器的各部分模块进行了时序仿真和硬件验证,结果表明,该电路能够实现其所要求的功能。

另外,由于FPGA芯片体积小,功耗低,价格便宜,安全可靠,稍加修改就可以改变抢答器的抢答组别数,而且抢答时间设定和成绩组成方式以及维护和升级都比较方便,同时也很容易做成ASIC芯片,因而具有较好的应用前景。

参考文献

【1】EDA技术使用教程(第三版)潘松黄继业著科技出版社

【2】CPLD系统设计技术入门与应用黄正谨徐坚著电子工业出版社

【3】可编程ASIC集成数字系统孟宪元电子工业出版社

【4】电子设计自动化(EDA)教程王锁萍成都电子科技大学出版社

附:

源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYanswerIS

PORT(keyin:

INSTD_LOGIC_VECTOR(3DOWNTO0);

clk:

INSTD_LOGIC;

start:

INSTD_LOGIC;

rst:

INSTD_LOGIC;

count:

INSTD_LOGIC;

keyout:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

beep:

OUTSTD_LOGIC;

jifen1:

BUFFERINTEGERRANGE10DOWNTO0;

jifen2:

BUFFERINTEGERRANGE10DOWNTO0;

jifen3:

BUFFERINTEGERRANGE10DOWNTO0;

jifen4:

BUFFERINTEGERRANGE10DOWNTO0;

display:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDanswer;

ARCHITECTUREcoutOFanswerIS

SIGNALCQ2:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

one:

PROCESS(clk,count)

BEGIN

IFstart='1'THEN

CASEkeyinIS

WHEN"0001"=>keyout<="0001";

WHEN"0010"=>keyout<="0010";

WHEN"0100"=>keyout<="0100";

WHEN"1000"=>keyout<="1000";

WHENOTHERS=>keyout<="0000";

ENDCASE;

IF(count'eventandcount='1')THEN

CASEkeyinIS

WHEN"0001"=>jifen1<=jifen1+1;

WHEN"0010"=>jifen2<=jifen2+1;

WHEN"0100"=>jifen3<=jifen3+1;

WHEN"1000"=>jifen4<=jifen4+1;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDIF;

ENDPROCESSone;

two:

PROCESS(clk,rst,start)

VARIABLECQ1:

INTEGERRANGE20DOWNTO0;

BEGIN

beep<='0';

IFrst='1'THENCQ2<="1001";CQ1:

=0;

ELSIFclk'eventandclk='1'THEN

IFstart='1'THEN

IFCQ1<10THENCQ1:

=CQ1+1;

ELSE

CQ1:

=0;CQ2<=CQ2-1;

ENDIF;

IFCQ2>"1001"THENCQ2<="1001";

ENDIF;

ENDIF;

ENDIF;

IFCQ2="0000"THENbeep<='1';

ENDIF;

CASECQ2IS

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

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

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

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

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

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

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

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

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

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

WHENOTHERS=>display<="0111111";

ENDCASE;

ENDPROCESStwo;

ENDcout;

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

当前位置:首页 > 求职职场 > 简历

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

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