EDA课程设计数字抢答器Word格式.docx
《EDA课程设计数字抢答器Word格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字抢答器Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
2、主要模块设计
2.1、抢答鉴别模块
在这个模块中主要实现抢答过程中的抢答鉴别功能。
其电路框图如下。
其中,rst为复位信号,当该信号高电平有效时,电路无论处于何种状态都恢复为初始状态,即所有的输出信号都为0;
EN为抢答使能信号,该信号高电平有效;
s0、s1、s2、s3为抢答按钮,高电平时有效。
当使能信号EN为低电平时,如果有参赛者按下按钮,则提前抢答报警信号FALSE[3..0]的对应位输出高电平,以示警告;
当EN为高电平时,首先将提前抢答报警信号FALSE[3..0]复位清0,然后根据选手按下抢答按钮的先后顺序选择最先抢答的信号,其对应的抢答状态显示信号LEDA~LEDD输出高电平,抢答成功组别编号由信号states输出,并锁存抢答器此时的状态,直到清0信号有效为止。
在每一轮新的抢答之前,都要使用复位清零信号rst,清除上一轮抢答对判断电路留下的使用痕迹,使电路恢复初始状态。
图2抢答鉴别模块框图
2.2、计时模块
在这个模块中主要实现抢答过程中的计时功能,在有组别抢答后开始倒计时,若在规定时间没人回答,则超时报警。
其中有系统复位信号rst;
抢答使能信号s;
无人抢答警报信号warn;
计时中止信号stop;
图3计时模块框图
2.3、计分模块
抢答计分电路的设计一般按照一定数制进行加减即可,但随着计数数目的增加,要将计数数目分解成十进制并进行译码显示会变得较为复杂。
为了避免该种情况,通常是将一个大的进制数分解为数个十进制以内的进制数,并将计数器级连。
但随着数位的增加,电路的接口也会相应增加。
因此,本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,既减少了接口,又简化了设计。
其电路框图如下,该模块输入信号为加分选择信号add和组别选择信号chose[3..0],其中,加分选择信号add高电平有效,有效时对组别选择信号chose[3..0]选择的参赛组进行加分;
组别选择输入信号chose[3..0]即抢答鉴别模块的输出信号states[3..0]。
输出信号分别对应四组竞赛者的得分。
图4计分模块框图
2.4、译码显示模块
译码显示模块用于显示每组选手的分数,计时的时间等信息。
显示电路的实质就是一个简单的LED共阴极显示模块的译码器。
7段数码管LED常用的一般8字型为a,b,c,d,e,f,g,P,其中P为小数点,共阴LED低电平有效。
在这里我们不需要用到小数点位,因此用位宽为7的矢量表示7段数码管即可。
7段LED共阴极显示模块的框图如图所示。
其中,IN4[3…0]为输入信号,以4位2进制数表示;
OUT7[6…0]为输出信号,将输入的二进制数译码显示为十进制数字的0~9。
图5译码显示模块框图
2.5、报警模块
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内有人抢答,指示灯显示抢答组别,扬声器发出2~3秒的音响。
即有效电平输入信号i;
状态输出信号q。
图6报警模块框图
2.6、整体框图
从上述设计方案中我们可以大致得到数字竞赛抢答器的系统框图,如下图所示,其中抢答时钟信号clk2;
系统复位信号rst;
抢答状态显示信号states;
图7抢答器系统框图
3、仿真结果
3.1、抢答鉴别模块仿真
抢答鉴别模块的仿真波形图如图所示。
当鉴别模块的清零复位信号rst为高电平时,无论四组参赛者谁按下抢答按钮,系统输出均为零,同时组别显示端输出信号也显示为零;
当清零信号rst为低电平时,s0、s1、s2、s3四组参赛者谁先按下抢答按钮,其对应的显示灯LEDx亮起,states[3..0]输出抢答成功的选手编号。
图8抢答鉴别模块仿真波形图
3.2计时模块
计时模块的仿真波形如图所示。
实现了抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。
图9计时模块仿真波形图
3.3计分模块仿真
系统设计过程中,当计分复位端RST=1时,并且组别输入信号CHOSE=0000,其中的组别输入信号是抢答鉴别模块的输出信号,计分器复位,此时以上四组都不会产生加减分操作。
然而当计分复位端RST=0时,此时计分器可以计分。
当CHOS=0001时,组别显示为A组,此时主持人利用计分器对A组进行加减分操作;
当CHOS=0010时,组别显示为B组,此时主持人则利用计分器对B组进行加减分操作,以此类推。
下图仿真为A组回答正确,加分。
图10计分模块仿真波形图
3.4译码模块仿真
当in4="
0000"
,out7输出"
0111111"
此时数码管显示0;
0001"
0000110"
此时数码管显示1;
0010"
1011011"
此时数码管显示2;
0011"
1001111"
此时数码管显示3;
0100"
1100110"
此时数码管显示4;
0101"
1101101"
此时数码管显示5;
0110"
1111101"
此时数码管显示6;
0111"
0000111"
此时数码管显示7;
1000"
1111111"
此时数码管显示8;
1001"
1101111"
此时数码管显示9;
图11译码显示模块仿真波形图
3.5、报警模块仿真
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内如果人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;
仿真如下图。
图12报警模块仿真波形图
3.6、整体仿真
对电路整体进行仿真,得出如下仿真波形图12。
图中,当复位信号rst为高电平时,系统所有信号都清零;
当主持人按下开始键,抢答器开始工作。
图13整体仿真波形图
4、原理连线图
根据系统设计要求,将各模块连线得到如下系统框图。
主持人按下使能端EN,抢答器开始工作。
四位抢答者谁先按下抢答按钮,则抢答成功,对应的显示灯亮起,并通过显示电路模块显示参赛编号。
抢答成功的选手进入答题阶段,如果正确回答问题,则加分信号add有效,给相应的参赛组加分。
如果复位信号rst有效,使得抢答器在下一轮抢答前,其抢答成功的组别判断恢复为初始状态,开始新一轮抢答。
图14原理连线图
5、致谢
对于此次课程设计,首先我得诚挚的感谢我的指导老师,从设计、整改及论文的定稿过程中,自始至终都倾注着老师的心血。
老师以严谨的治学之道、宽厚仁慈的胸怀、积极乐观的生活态度,兢兢业业的工作作风为我树立了学习的典范,他们的教诲与鞭策将激励我在学习和生活的道路上励精图治,开拓创新。
他们渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。
我真诚地谢谢老师们的指导和关怀。
于个人,通过这次课程设计,我进一步加深了对电子设计自动化的了解。
并进一步熟练了对QuartusII软件的操作。
EDA这门课程也不像学习理论般那么空洞,有了更加贴切的了解及运用。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。
总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
6、详细仪器清单
名称
型号
数量
计算机
联想
1
QuartusII开发软件
9.0
EDA/SOPC实验开发系统
GW48-PK2
参考文献
[1]孙俊逸.EDA技术课程设计.华中科技大学出版社.2008.2-12
[2]潘松.EDA应用技术.北京理工大学出版社.2003
[3]徐志军.EDA技术与PLD设计[M].北京科学出版社.2002
[4]黄仁欣.EDA技术实用教程.清华大学出版社.2004
[5]崔建明.电工电子EDA仿真技术.北京高等教育出版社,2004
[6]曹昕燕、周风臣、聂春燕.EDA技术试验与课程设计.清华大学出版社.2007
[7]谢自美.电子线路设计实验测试.华中科技大学出版社.1999
[8]赵世强、许杰.电子电路EDA技术.西安电子科技大学出版社.2001
[9]江国强.EDA技术习题与实验.电子工业出版社.2012
[10]高有堂.EDA技术及应用实践.清华大学出版社.2006-08
附录
VHDL程序
1)抢答鉴别模块
libraryieee;
useieee.std_logic_1164.all;
entityqdjbis
port(rst:
instd_logic;
EN:
s0,s1,s2,s3:
LEDA:
outstd_logic;
LEDB:
LEDC:
LEDD:
false:
outstd_logic_vector(3downto0);
states:
outstd_logic_vector(3downto0));
endqdjb;
architectureoneofqdjbis
signaltmp:
std_logic_vector(3downto0);
signaltag:
std_logic;
begin
tmp<
=s0&
s1&
s2&
s3;
process(rst,EN,s0,s1,s2,s3,tmp)
ifrst='
1'
THEN
states<
="
;
LEDA<
='
0'
LEDB<
LEDC<
LEDD<
false<
tag<
elsifEN='
then
ifs0='
false(3)<
endif;
ifs1='
false
(2)<
ifs2='
false
(1)<
ifs3='
false(0)<
else
false<
iftag='
iftmp="
elsiftmp="
endif;
endprocess;
endone;
2)计时模块
useieee.std_logic_unsigned.all;
entityjsis
port(clk,rst,s,stop:
warn:
ta,tb:
bufferstd_logic_vector(3downto0));
endjs;
architectureoneofjsis
signalco:
std_logic;
p1:
process(clk,rst,s,stop,ta)
begin
orstop='
then
ta<
elsifclk'
eventandclk='
co<
ifs='
ifta="
co<
elseta<
=ta-1;
endprocessp1;
p2:
process(co,rst,s,stop,tb)
tb<
elsifco'
eventandco='
iftb="
thentb<
elsetb<
=tb-1;
endprocessp2;
3)计分模块
entityjfis
port(rst:
instd_logic;
add:
chose:
instd_logic_vector(3downto0);
aa2,aa1,aa0,bb2,bb1,bb0:
outstd_logic_vector(3downto0);
cc2,cc1,cc0,dd2,dd1,dd0:
outstd_logic_vector(3downto0));
endentityjf;
architectureartofjfis
process(rst,add,chose)is
variablea2,a1:
std_logic_vector(3downto0);
variableb2,b1:
variablec2,c1:
variabled2,d1:
if(rst='
)then
a2:
a1:
b2:
b1:
c2:
c1:
d2:
d1:
elsif(add'
eventandadd='
ifchose="
ifa1="
a1:
ifa2="
else
=a2+'
=a1+'
elsifchose="
ifb1="
b1:
ifb2="
=b2+'
=b1+'
ifc1="
c1:
ifc2="
=c2+'
=c1+'
ifd1="
d1:
ifd2="
=d2+'
=d1+'
aa2<
=a2;
aa1<
=a1;
aa0<
bb2<
=b2;
bb1<
=b1;
bb0<
cc2<
=c2;
cc1<
=c1;
cc0<
dd2<
=d2;
dd1<
=d1;
dd0<
endarchitectureart;
4)译码显示模块
entityymxsis
port(in4:
out7:
outstd_logic_vector(6downto0));
endymxs;
architectureartofymxsis
process(in4)
casein4is
when"
=>
out7<
whenothers=>
0000000"
endcase;
endarchitecture;
5)报警模块
entityalarmis
port(clk,i:
q:
outstd_logic);
endalarm;
architecturebehaveofalarmis
signalwarn:
signaln:
integerrange0to20;
q<
=warn;
process(clk)
ifclk'
ifi='
then
warn<
elsif(i='
andn<
=19)then
=notwarn;
n<
=n+1;
endprocess;
endbehave;
6)TOP模块
entitytopis
port(rst,en,ADD,s0,s1,s2,s3:
LEDA,LEDB,LEDC,LEDD: