武汉理工大学EDA课程设计数字抢答器的设计.docx

上传人:b****6 文档编号:7327026 上传时间:2023-01-23 格式:DOCX 页数:12 大小:141.97KB
下载 相关 举报
武汉理工大学EDA课程设计数字抢答器的设计.docx_第1页
第1页 / 共12页
武汉理工大学EDA课程设计数字抢答器的设计.docx_第2页
第2页 / 共12页
武汉理工大学EDA课程设计数字抢答器的设计.docx_第3页
第3页 / 共12页
武汉理工大学EDA课程设计数字抢答器的设计.docx_第4页
第4页 / 共12页
武汉理工大学EDA课程设计数字抢答器的设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

武汉理工大学EDA课程设计数字抢答器的设计.docx

《武汉理工大学EDA课程设计数字抢答器的设计.docx》由会员分享,可在线阅读,更多相关《武汉理工大学EDA课程设计数字抢答器的设计.docx(12页珍藏版)》请在冰豆网上搜索。

武汉理工大学EDA课程设计数字抢答器的设计.docx

武汉理工大学EDA课程设计数字抢答器的设计

 

1绪论

在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。

为了能在实际中得到真正的应用,它必须有以下功能:

(1).有在主持人按下开始开关后,抢答才有效。

(2).当其中有一路选手按下后,其它的开关失效。

(3).具有声音报告功能,当有选手按下时,同时有响声表示有人抢答。

当然以上只是最简单而且是十分必要的功能。

为了做到这点,必须设计一个所用元件最少,结构最简单,成功率最高的作品来。

2设计要求

1)设计一个4组参赛的数字式抢答器

2)抢答器具有第一信号鉴别和锁存功能,使除第一抢答外地按钮不起作用。

3)设置一个主持人“复位”按钮。

4)主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2-3秒的音响。

5)设置一个记分电路,每组开始预置100分,由主持人记分,答对一次加10分,答错一次减10分。

3QuartusII软件简介

QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDLVerilogHDL等多种设计输入形式,可以完成从设计输入到硬件配置的完整

PLD设计流程。

提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

4方案设计

4.1方案选择及论证

数字式抢答器应具备锁存功能,将第一个抢答者的信号进行锁存,并有音响予以配合,来保证抢答的及时性。

此外,计分部分应由主持人操控,答对加十分,答错扣十分。

所以,整体系统应使用抢答、扬声器、计分三部分。

4.2设计框图

图1总体框图

5程序及各模块设计

5.1主程序模块

主程序负责将各个模块例化,使整个程序完整有调理。

主程序包括三个模块:

抢答模块、扬声器模块、计分模块。

Pin【3..0】端口为四位选手的抢答输入端口,抢答信号由bee_in送至扬声器模块,扬声器接到高电平马上发声。

另外,由计分模块显示出该选手的分数,以及对其进行加分减分操作。

在三个模块结合下完成抢答的任务。

各模块所对应的实体名:

(1)抢答模块QD

(2)扬声器模块bee

(3)计分模块count

主程序模块QDQ将这三个模块组合在一起,并对其分别例化,使整个抢答系统完整且不易出错。

图2主程序模块集成芯片

5.2抢答模块

抢答鉴别模块用来准确直观地判断四位抢答者谁最先按下按钮,并为显示端送出信号,使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。

同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。

由pin[3..0]输入抢答信号,四位选手分别对应b[1000]、b[0100]、b[0010]、b[0001]。

图3抢答模块集成芯片

抢答语句:

ifrst='1'thengate1<='1';bee_in<='0';

elsifpin=b"1000"thenpout<=b"1000";gate1<='0';

即当主持人按下复位之后,抢答开始。

如果是一号选手抢到,则将b“1000”赋给pin,扬声器响起,并且将该选手的序号由pout端送入计分模块,方便评委给该选手作出评分。

5.3扬声器模块

扬声器模块时钟信号采用50MHZ。

扬声器在接到抢答信号以后持续响两秒钟,然后恢复低电平:

ifclk'eventandclk='1'then

ifnum=1000thennum<=b"0000_0000_0000_0000";

bee_out<='0';

这样可以保证扬声器不会一直响下去。

图4扬声器模块集成芯片

5.4计分模块

如图,pout【3..0】为选择对应的选手。

Start为主持人的开始按键,right_in为加分按键,wrong_in为减分按键,output为对应选手的得分输出。

加分计算方法:

ifpout=b"1000"thencount0<=count1+b"0000_1010";

elsifpout=b"0100"thencount1<=count2+b"0000_1010";

即预先给每位选手置入分数为100分,答对一题后,加十分。

减法同理,见程序清单。

图5计分模块集成芯片

6仿真及调试

6.1抢答模块仿真

图6抢答模块仿真

此仿图中,时钟信号clk为默认值。

先由rst进行清零,随后PIN端口3-0依次输入高电平,即分别在不同时间按下抢答按键,对应的POUT端口立即响应。

本图模拟中pin【3】选手最先按下抢答按键,其对应的pout【3】号输出端口也立即响应;同时,输出给扬声器的信号bee_in也同时响应。

6.2扬声器模块仿真

图7扬声器模块仿真

当bee_in接收到高电平信号时,意为有人已经按下抢答按键,扬声器马上响应,输出bee_out为高电平。

6.3计分模块仿真

图8计分模块仿真

计分模块工作:

当按下STSRT时,start为高电平,计分模块开始工作。

与其对应的选手选择端口POUT中pout【3】为高,意为pout【3】号选手已对问题作出了回答,并且答错,此时由主持人按下wrong_in按键,则判断为该选手答错,扣十分。

Count输出端口由原来的26+25+22=100变为26+24+21=90分。

7总结

刚开始做这个题目的时候,软件还不会用,对于整个题目也是摸不着头脑。

经过一段时间的收集资料,以及对软件功能的摸索,我逐渐开始熟悉这个课题并开始着手设计。

在设计的过程中,遇到了许多困难,比如程序编译错误,仿真工具不会用,波形仿真错误等等。

在与同学讨论的过程中,我的一些问题得到了解决,也收获了很多知识。

这次EDA的课程设计,最大的收获应该是学会了如何熟练运用QuartusII软件的各种功能,以及对VHDL语言的熟悉。

同时,我也学到了不屈不挠不放弃的精神,遇到困难要敢于面对,寻找解决的方法,而不是一个人钻牛角尖。

总之,这次课设让我受益匪浅。

参考文献

[1]郑燕.基于VHDL与QuartusⅡ软件的可编程逻辑器件应用与开发.北京:

国防工业出版社,2011

[2]周润景.基于QuartusII的FPGA/CPLD数字系统设计实例.北京:

电子工业出版社,2010

[3]徐志军,王金明等.EDA技术与VHDL设计.北京:

电子工业出版社,2009.1

[4]王彩凤,胡波等.EDA技术在数字电子技术实验中的应用[J].实验科学与技术,2011,

(1):

1-2.

[5]肖宇;游明星.在QuartusII仿真中输入激励波形数据[J].今日电子,2010,(4):

13-17.

附录程序清单

(1)主程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

--topentity

entityQDQis

port(pin:

instd_logic_vector(3downto0);--qiangdaanjian

rst,clk:

instd_logic;--clk=50M

start:

instd_logic;

right_in,wrong_in:

instd_logic;

bee_out:

outstd_logic;

count0,count1,count2,count3:

bufferstd_logic_vector(7downto0);--jifen

pout:

bufferstd_logic_vector(3downto0));--LED

endQDQ;

architectureQDQofQDQis

componentQDis

port(pin:

instd_logic_vector(3downto0);

clk:

instd_logic;

rst:

instd_logic;

bee_in:

outstd_logic;

pout:

bufferstd_logic_vector(3downto0));

endcomponent;

componentcountis

port(pout:

instd_logic_vector(3downto0);

start:

instd_logic;

right_in,wrong_in:

instd_logic;

count0,count1,count2,count3:

bufferstd_logic_vector(7downto0));

endcomponent;

componentbeeis

port(bee_in:

instd_logic;

bee_out:

outstd_logic;

clk:

instd_logic;

pout:

instd_logic_vector(3downto0));

endcomponent;

signalbee_in:

std_logic;

begin

QD_use:

QDportmap(pin,clk,rst,bee_in,pout);

count_use:

countportmap(pout,start,right_in,wrong_in,count0,count1,count2,count3);

bee_use:

beeportmap(bee_in,bee_out,clk,pout);

endQDQ;

(2)抢答模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityQDis

port(pin:

instd_logic_vector(3downto0);

clk:

instd_logic;

rst:

instd_logic;

bee_in:

outstd_logic;

pout:

bufferstd_logic_vector(3downto0));

endQD;

architectureQDofQDis

signalgate,gate1,clk_1:

std_logic;

begin

clk_1<=gateandclk;

process(rst,gate1)

begin

ifrst='1'thengate<='1';

elsifgate1='0'thengate<='0';

elsenull;

endif;

endprocess;

process(clk_1)

begin

ifclk_1'eventandclk_1='1'then

ifrst='1'thengate1<='1';

bee_in<='0';

elsifpin=b"1000"thenpout<=b"1000";

gate1<='0';

bee_in<='1';

elsifpin=b"0100"thenpout<=b"0100";

gate1<='0';

bee_in<='1';

elsifpin=b"0010"thenpout<=b"0010";

gate1<='0';

bee_in<='1';

elsifpin=b"0001"thenpout<=b"0001";

gate1<='0';

bee_in<='1';

elseNULL;

endif;

endif;

endprocess;

endQD;

(3)扬声器模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitybeeis

port(bee_in:

instd_logic;

bee_out:

outstd_logic;

clk:

instd_logic;

pout:

instd_logic_vector(3downto0));

endbee;

architecturebeeofbeeis

signalnum:

std_logic_vector(15downto0);

signallcx:

std_logic;

begin

process(clk)

begin

lcx<=bee_in;

iflcx='0'andbee_in='1'then

bee_out<='1';

num<=b"0000_0000_0000_0000";

elsifclk'eventandclk='1'then

ifnum=1000thennum<=b"0000_0000_0000_0000";

bee_out<='0';

elsifnum<1000andpout/="0000"thennum<=num+b"0000_0000_0000_0001";bee_out<='1';

endif;

endif;

endprocess;

endbee;

(4)计分模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycountis

port(pout:

instd_logic_vector(3downto0);

start:

instd_logic;

right_in,wrong_in:

instd_logic;

count0,count1,count2,count3:

bufferstd_logic_vector(7downto0));

endcount;

architecturecountofcountis

begin

process(right_in,wrong_in,start)

begin

ifstart='1'thencount0<=b"0110_0100";

count1<=b"0110_0100";

count2<=b"0110_0100";

count3<=b"0110_0100";

elsifright_in='1'then

ifpout=b"1000"thencount0<=count1+b"0000_1010";

elsifpout=b"0100"thencount1<=count2+b"0000_1010";

elsifpout=b"0010"thencount2<=count3+b"0000_1010";

elsifpout=b"0001"thencount3<=count0+b"0000_1010";

elsenull;

endif;

elsifwrong_in='1'then

ifpout=b"1000"thencount0<=count1-b"0000_1010";

elsifpout=b"0100"thencount1<=count2-b"0000_1010";

elsifpout=b"0010"thencount2<=count3-b"0000_1010";

elsifpout=b"0001"thencount3<=count0-b"0000_1010";

elsenull;

endif;

elsenull;

endif;

endprocess;

endcount;

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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