eda数字式竞赛抢答器 1Word下载.docx
《eda数字式竞赛抢答器 1Word下载.docx》由会员分享,可在线阅读,更多相关《eda数字式竞赛抢答器 1Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。
2.设计框图
主电路
二、设计步骤和调试过程
总体设计电路
1、模块设计和相应模块程序
将该任务分成几个模块进行设计,分别为:
抢答器鉴别模块、抢答器记分模块、译码模块、数选模块、报警模块,最后是撰写顶层文件。
抢答器鉴别模块:
在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是超前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余过滤抢答封锁的功能。
其中有六个抢答信号s0、s1、s2、s3、s4、s5;
抢答使能信号s;
抢答状态显示信号states;
抢答与警报时钟信号clk2;
系统复位信号rst;
警报信号tmp。
抢答鉴别模块图
VHDL源程序
libraryieee;
--抢答鉴别模块
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdjbis
port(rst,clk2:
instd_logic;
s0,s1,s2,s3,s4,s5:
states:
bufferstd_logic_vector(5downto0);
tmp:
outstd_logic);
endqdjb;
architectureoneofqdjbis
signalst:
std_logic_vector(5downto0);
begin
p1:
process(s0,rst,s1,s2,s3,s4,s5,clk2)
begin
ifrst='
0'
then
tmp<
='
;
st<
="
0000"
elsifclk2'
eventandclk2='
1'
then
if(s0='
orst(0)='
)andnot(st
(1)='
orst
(2)='
orst(3)='
orst(4)='
orst(5)='
)thenst(0)<
endif;
if(s1='
orst
(1)='
)andnot(st(0)='
)thenst
(1)<
if(s2='
)thenst
(2)<
if(s3='
)thenst(3)<
if(s4='
)thenst(4)<
if(s5='
)thenst(5)<
tmp<
=s0ors1ors2ors3ors4ors5;
endif;
endprocessp1;
p2:
process(states(0),states
(1),states
(2),states(3),states(4),states(5))
if(st="
)thenstates<
elsif(st<
0001"
0010"
0100"
0011"
0101"
1000"
0110"
endif;
endprocessp2;
endone;
数据选择模块:
在这个模块中主要实现抢答过程中的数据输入功能,输入信号a[3..0]、b[3..0]、c[3..0];
计数输出信号s;
数据输出信号y;
计数脉冲clk2,实现a、b、c按脉冲轮流选通,在数码管上显示。
数据选择模块
useieee.std_logic_arith.all;
entitysjxzis
port(a,b,c:
instd_logic_vector(3downto0);
clk2,rst:
instd_logic;
s:
outstd_logic_vector(1downto0);
y:
outstd_logic_vector(3downto0));
endsjxz;
architecturebody_chooserofsjxzis
signalcount:
std_logic_vector(1downto0);
s<
=count;
process(clk2,rst)
if(rst='
)thencount<
00"
elsif(clk2'
)then
if(count>
10"
count<
elsecount<
=count+1;
endif;
casecountis
when"
=>
y<
=a;
01"
=b;
=c;
whenothers=>
null;
endcase;
endPROCESS;
endbody_chooser
报警模块:
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内有人抢答,有效电平输入信号i;
状态输出信号q;
计数脉冲clk2。
报警模块图
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYALARMIS
PORT(CLK,I:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
ENDALARM;
ARCHITECTUREBEHAVEOFALARMIS
SIGNALWARN:
STD_LOGIC;
SIGNALN:
INTEGERRANGE0TO20;
BEGIN
Q<
=WARN;
PROCESS(CLK)
BEGIN
IFCLK'
EVENTANDCLK='
THEN
IFI='
THEN
WARN<
ELSIF(I='
ANDN<
=19)THEN
=NOTWARN;
N<
=N+1;
ELSE
ENDIF;
ENDPROCESS;
ENDBEHAVE;
译码模块:
在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。
译码模块图
ENTITYYMQIS
PORT(AIN4:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYMQ;
ARCHITECTUREARTOFYMQIS
PROCESS(AIN4)
CASEAIN4IS
WHEN"
DOUT7<
1111110"
--0
0110000"
--1
1101101"
--2
1111001"
--3
0110011"
--4
1011011"
--5
1011111"
--6
0111"
1110000"
--7
1111111"
--8
1001"
1111011"
--9
WHENOTHERS=>
0000000"
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
译码显示电路图
顶层文件:
在这个模块中是对前面模块的综合编写的顶层文件。
entityqiangdaqiis
port(clk,clk2,s,s0,s1,s2,s3,s4,s5,stop,rst:
n,k,q_out:
outstd_logic;
m:
outstd_logic_vector(1downto0);
a,b,c,d,e,f,g:
endqiangdaqi;
architecturebhvofqiangdaqiis
componentqdjbis
port(clk2,rst:
tmp:
outstd_logic_vector(5downto0));
endcomponent;
componentjsis
port(clk,rst,s,stop:
warn:
ta,tb:
bufferstd_logic_vector(5downto0));
componentsjxzis
a,b,c:
instd_logic_vector(3downto0);
outstd_logic_vector(3downto0));
componentymqis
port(ain4:
instd_logic_vector(3downto0);
dout7:
outstd_logic_vector(6downto0));
componentalarmis
port(clk,i:
q:
signalstates_out,ta_out,tb_out,y_out:
std_logic_vector(3downto0);
signalledout:
std_logic_vector(6downto0);
signalw:
std_logic;
a<
=ledout(6);
b<
=ledout(5);
c<
=ledout(4);
d<
=ledout(3);
e<
=ledout
(2);
f<
=ledout
(1);
g<
=ledout(0);
u1:
qdjbportmap(clk2,rst,s0,s1,s2,s3,tmp=>
k,states=>
states_out);
u2:
jsportmap(clk,rst,s,stop,warn=>
n,ta=>
ta_out,tb=>
tb_out);
u3:
sjxzportmap(clk2=>
clk2,rst=>
rst,s=>
m,a=>
states_out,b=>
ta_out,c=>
tb_out,y=>
y_out);
u4:
ymqportmap(ain4=>
y_out,DOUT7=>
ledout);
u5:
alarmportmap(clk2,s,q_out);
endbhv;
2、仿真及仿真结果分析
抢答鉴别模块仿真图
数据选择模块仿真图
报警模块仿真图
译码模块仿真图
顶层文件仿真图
CLK接高电平,s0,s1,s2,sl3,s4,s5六个选手接低电平,鉴别器的输出接指示灯,译码器的输出接LED数码管,计分器的输出接显示译码器。
当主持人按下使能端时,六个选手同时抢答。
如图所示,若s0抢答,即为高电平时,s0灯亮,若回答正确,对其加分,即当时钟出现上升沿时就进行加一或者减一的操作。
3、实验调试结果
按下rst键清零,按下s键,观察数码管是否开始倒计时,扬声器是否发出报警声,按下s0,观察数码管是否显示1和抢答的时间,再按s1,s2,s3,s4.s5均不改变显示,按下rst键,观察是否清零,再按s键,不按别的,直到计时时间到,观察是否显示00,扬声器是否发出报警
第一个按下键的小组,抢答信号判定电路LOCK通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的锁存器清零,组别显示、计时和计分会保存到主持人对系统进行清零操作时为止。
当INI=1时系统复位,使组别显示信号G=0000,各组的指示灯信号S0=0,S1=0,S2=0,S3=0,S4=0,S5=0;
当INI=0,即低电平有效,使其进入抢答鉴别状态,到CLK的上升沿到来时,以A组抢答成功为例,当输入信号为A=1,B=0,C=0,D=0,输出信号G=1000,A1=1,即为鉴别出A组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。
三、结论及心得体会
这次EDA课程设计了一个星期,在这期间学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的数字抢答器还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
参考资料
[4]崔建明主编,电工电子EDA仿真技术北京:
高等教育出版社,2004
[5]侯继红,李向东主编,EDA实用技