四人抢答器Word文档下载推荐.docx
- 文档编号:21028282
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:15
- 大小:122.17KB
四人抢答器Word文档下载推荐.docx
《四人抢答器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《四人抢答器Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
对各种方案进行比较,以电路的先进性、结构的繁简、成本的高低及制作的难易等方面作综合比较,并考虑器件的来源,敲定可行方案。
(3)设计各单元电路。
总体方案化整为零,分解成若干子系统或单元电路,逐个设计。
(4)组成系统。
在一定幅面的图纸上合理布局,通常是按信号的流向,采用左进右出的规律摆放各电路,并标出必要的说明。
3整体设计方案
3.1概述
将该任务分成五个模块进行设计,分别为:
抢答器鉴别模块、抢答器计时模块、报警模块、分频模块、译码模块。
3.2抢答器鉴别模块:
在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是朝前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余的抢答信号封锁的功能。
其中有四个抢答信号s0、s1、s2、s3;
抢答状态显示信号states;
抢答与警报时钟信号clk2;
系统复位信号rst;
警报信号warm。
3.3抢答器计数模块:
在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行20秒的倒计时,并且在20秒倒计时后无人抢答显示超时并报警。
其中有抢答时钟信号clk1;
抢答使能信号start;
无人抢答警报信号warn;
计时中止信号stop;
计时十位和个位信号tb,ta。
3.4报警模块:
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内有人抢答或是计数到时蜂鸣器开始报警,计数停止信号stop;
状态输出信号alm;
计数脉冲clk。
3.5译码模块:
在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。
3.6分频模块:
在这个模块中主要实现抢答过程中所需的时钟信号。
3.7顶层文件:
在这个模块中是对前五个模块的综合编写的顶层文件。
4硬件电路的设计
4.1QDQ_4主电路图连线(如图1)
图1主电路图
5软件设计
5.1抢答鉴别模块
5.1.1VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityxuanshouis
port(rst,clk2:
instd_logic;
s0,s1,s2,s3:
states:
bufferstd_logic_vector(3downto0);
light:
warm:
outstd_logic);
endxuanshou;
architectureoneofxuanshouis
signalst:
std_logic_vector(3downto0);
begin
p1:
process(s0,rst,s1,s2,s3,clk2)
begin
ifrst='
0'
then--清零复位
warm<
='
;
st<
="
0000"
elsifclk2'
eventandclk2='
1'
then
if(s0='
orst(0)='
)andnot(st
(1)='
orst
(2)='
orst(3)='
)
thenst(0)<
--保证有一个人最先抢答
endif;
if(s1='
orst
(1)='
)andnot(st(0)='
thenst
(1)<
if(s2='
thenst
(2)<
if(s3='
thenst(3)<
warm<
=st(0)orst
(1)orst
(2)orst(3);
endif;
endprocessp1;
p2:
process(states(0),states
(1),states
(2),states(3),light)
if(st="
)thenstates<
elsif(st<
0001"
0010"
0100"
0011"
1000"
endif;
light<
=st;
endprocessp2;
endone;
5.2计数模块
5.2.1VHDL源程序
entityJSis
port(clk1,rst,start,stop:
ta,tb:
bufferstd_logic_vector(3downto0));
endJS;
architectureoneofJSis
signalco:
std_logic;
process(clk1,rst,start,stop,ta)
orstop='
then--复位清零
ta<
elsifclk1'
eventandclk1='
co<
ifstart='
ifta="
1001"
co<
--十进制计数
elseta<
=ta-1;
endif;
process(co,rst,start,stop,tb)
tb<
--二进制计数
elsifco'
eventandco='
iftb="
thentb<
elsetb<
=tb-1;
endone;
5.3报警模块
5.3.1VHDL源程序
entityshengyinis
port(rst:
warn:
clk:
inintegerrange0to9;
stop:
alm:
outstd_logic);
end;
architecturebhvofshengyinis
process(warn,ta,tb,stop,clk)
then--复位清零,报警清零
alm<
elsifstop='
then--当按下停止键时报警清零
elsifta=0andtb=0then
=clk;
elsifwarn='
then
elsealm<
endprocess;
5.4七段译码器模块
5.4.1VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYYMQIS
PORT(bcd:
INSTD_LOGIC_VECTOR(3DOWNTO0);
dout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYMQ;
ARCHITECTURErtlOFYMQIS
BEGIN
PROCESS(bcd)
BEGIN
CASEbcdIS
WHEN"
=>
dout<
1000000"
--共阴数码管,七段译码显示“0”
1111001"
0100100"
0110000"
0011001"
0101"
0010010"
0110"
0000010"
0111"
1111000"
0000000"
0010000"
WHENOTHERS=>
1111111"
ENDCASE;
ENDPROCESS;
ENDrtl;
5.5分频模块(用500HZ的时钟和1HZ的计数时钟)
5.5.1Div100
entitydiv100is
port(
clk:
clk100:
outstd_logic
);
enddiv100;
architectureartofdiv100is
signalnum:
integerrange0to99;
signaltemp:
begin
process(clk)
ifclk'
eventandclk='
ifnum=99then--100分频
num<
=0;
temp<
=nottemp;
elsenum<
=num+1;
clk100<
=temp;
endprocess;
endart;
5.5.2DIV50M:
这是一个50M分频,将50MHZ的信号分为1HZ。
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfenpinIS
PORT(clk:
INSTD_LOGIC;
clk50:
OUTSTD_LOGIC);
ENDfenpin;
ARCHITECTURErtlOFfenpinIS
SIGNALcount:
STD_LOGIC_VECTOR(25DOWNTO0);
BEGIN
PROCESS(clk)
IF(clk'
eventANDclk='
)THEN
IF(count="
10111110101111000010000000"
)THEN--50M分频
Count<
00000000000000000000000000"
ELSE
=count+1;
ENDIF;
ENDPROCESS;
clk50<
='
END;
6系统仿真
6.1抢答鉴别模块
6.1.1抢答鉴别元件图(如图2)
图中rst为复位端,clk为时钟端,s0,s1,s2,s3为抢答输入端,states为状态输出端,light为抢答输出显示端,warm为报警端。
图2抢答鉴别元件图
6.1.2抢答鉴别仿真图(如图3)
当s0或s1或s2或s3键有人按下时,报警器便置位,当rst复位键按下时则清零,且经仿真图分析,可以实现抢答鉴别功能。
图3抢答鉴别仿真图
6.2计数模块
6.2.2计数元件图(如图4)
图中clk1为时钟输入端,rst为复位端,start为开始计数输入端,stop为停止计数端,ta为十进制输出端,tb为二进制输出端,2个端口合起来便实现了20秒得计数功能。
图4计数元件图
6.2.1计数仿真图
当start高电平有效时,计数器ta,tb开始工作,计满20时便清零。
且当stop有效时,也清零,回到最开始的20,开始重新倒计时。
且经仿真图分析,可以实现计数功能。
图5计数仿真图
6.3报警模块
6.3.1报警元件图(如图6)
图中rst为复位端,warn为报警端,clk为时钟输入端,ta为十进制输出端,tb为二进制输出端,2个端口合起来便实现了20秒得计数功能,stop为停止计数端,alm为报警输出端。
图6报警元件图
6.3.2报警仿真图(如图7)
当warn高电平有效,且rst为低电平或stop为高电平时,报警器不工作,当rst为高电平或stop为低电平时,报警器工作。
且经仿真图分析,可以实现报警功能。
图7报警仿真图
6.4七段译码器模块
6.4.2译码元件图(如图8)
图中bcd为4为十进制输入端,dout为7为译码显示输出端。
图8译码元件图
6.4.1译码器仿真图(如图9)
当输入端为“0000”至“1111”时,输出端依次为“10000000”,“1111001”等,依次对应七段共阴极数码管显示“0”至“F”。
经仿真图分析,可以实现次译码功能。
图9译码器仿真图
6.5分频模块(用500HZ的时钟和1HZ的计数时钟)
6.5.2Div100元件图(如图10)
图中clk为时钟输入端,clk100为时钟100分频后的输出端。
图10Div100元件图
6.5.1Div100仿真图(如图11)
当时钟输入时,输出为此输入的100分频结果。
经仿真图分析,可以实现次100分频功能。
图11Div100仿真图
7使用说明
7.1选择锁定引脚,再重新编译一次。
在编程窗的Mode中选择ActiveSerialprogramming编程模式,打开编程文件,选中QDQ.pof,并选中打钩前3个编程项目,在ED2板上选择PROG模式,然后下载。
7.2锁定引脚:
时钟信号clkN2
发光二极管LEDRO-LEDR3(AE23.AF23.AB21.AC22)
数码管num0-num6(AB12.AC12.AD11.AE11.V14.V13)
ta0-ta6(AB23.V22.AC25.AC26.AB26.AB25.Y24)
tb0-tb6(Y23.AA25.AA26.Y26.Y25.U22.W24)
开关rstAF14
SW0-SW3(N25.N26.P25.AE14)
SOUNDAA14
STARTAD13
STOPAC13
8设计总结
这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:
在设定输入的时钟信号后,数字秒表开始计数,但是始终看不到秒和小时的循环计数。
后来,在数十次的调试之后,才发现是因为输入的时钟信号对于器件的延迟时间来说太短了。
经过屡次调试,终于找到了比较合适的输入数值:
时钟周期设置在15秒左右比较合适。
另外,Endtime的值需要设置的长一点:
500us左右,这样就可以观察到完整的仿真结果。
参考文献
[1]彭介华.电子技术课程设计指导[J].1997
[2]张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术[M].2001
[3]李国丽,朱维勇.电子技术实验指导书[J].2000
[4]郑家龙,王小海,章安元.集成电子技术基础教程[M].2002
[5]卢杰,赖毅.VHDL与数字电路设计[J].2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 抢答