VHDL语言四人抢答器Word格式文档下载.docx
- 文档编号:4331797
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:19
- 大小:446.85KB
VHDL语言四人抢答器Word格式文档下载.docx
《VHDL语言四人抢答器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VHDL语言四人抢答器Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。
2.学习怎样用vhdl语言来描述自己的设计思路,调试硬件后,能够使产品实现功能。
3.进一步掌握用vhdl语言编写数字电路。
4.在做课题过程中,掌握多位共阴极扫描显示数码管的驱动及编码,学会使用和调试硬件。
四、设计背景
现代电子产品几乎渗透了社会的各个领域EDA技术是电子设计的发展趋势,
EDA工具从数字系统设计的单一领域,应用范围己涉及模拟、微波等多个领域,可实现各个领域电子系统设计的测试、设计仿真和布局布线等。
设计者只要完成对电子系统的功能描述,就可利用计算机和EDA工具,进行设计处理,最终得到设计结果。
随着大规模集成电路技术和计算机技术的不断发展,即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。
不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
抢答器是一种应用非常广泛的设备,在各种竞猜、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管可控硅、发光管等组成,能通过发光管的指示辨认出选手。
现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新的功能,如选手号码显示、抢按器或抢按后的计时、选手得分显示等功能。
五、使用工具:
装有QuartusII软件的PC、Cyclone系列FPGA开发板(ep2c5t144c8)
六、设计原理
根据设计要求,我们经过分析应用分模块的方式比较容易设计该抢答器,我们底层应用VHDL语言,顶层应用原理图的方式进行设计,然后通过仿真验证并不断修改完善设计。
模块:
(1)四人按键抢答模块:
设计为五个输入按键,其实S键为主持人控制抢答过程的按键,当有选手抢答后使其他人的按键无效。
然后根据抢答成功者的编号使对应LED灯点亮,同时输出一个状态让数码管显示抢答者编号。
主持人S键复位,开始下一轮抢答。
(2)计时模块:
在有人抢答后开始一个60秒的倒计时,并输出道数码管显示,CLK来自1HZ分频模块。
(3)计分模块:
在选手答题正确后通过外接ADD键给该选手加分,每次加十分,并输出到数码管显示,CLEAR键为清空所有选手分数。
(4)译码模块:
讲选手序号,倒计时以及选手分数显示出来,CLK由1KHz分频模块提供。
(5)1HZ与1KHz分频模块:
程序由FPGA板的50MHz频率编写。
7、设计结构
8、原理图:
九、模块程序
1、抢答模块
程序:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Useieee.std_logic_arith.all;
EntityQDis
Port(
s,clk:
instd_logic;
s0,s1,s2,s3:
states:
bufferstd_logic_vector(3downto0);
T:
outstd_logic;
LIANG:
XI:
bufferstd_logic_vector(3downto0));
EndQD;
ArchitectureaaofQDis
signals_0,s_1,s_2,s_3,l_1,l_2,l_3,l_4:
std_logic;
begin
process(s0,s1,s2,s3,s,clk)
begin
XI<
="
1111"
;
if(s='
0'
)thens_0<
='
s_1<
s_2<
s_3<
LIANG<
elsif(clk'
eventandclk='
1'
)then
if(s_0='
ors_1='
ors_2='
ors_3='
)
thennull;
elsifs0='
thens_0<
states<
0001"
1110"
elsifs1='
thens_1<
0010"
1101"
elsifs2='
thens_2<
0011"
1011"
elsifs3='
thens_3<
0100"
0111"
elsestates<
0000"
endif;
T<
=s_0ors_1ors_2ors_3;
endprocess;
endaa;
说明:
S为主持人复位键;
S0,S1,S2,S3:
四个抢答选手;
STATES:
抢答组号输出
T:
在S按下后使倒计时停止;
LIANG:
控制四个LED灯,点亮选手对应LED灯;
XI:
使另外四个LED灯熄灭;
2、计时模块
libraryieee;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_1164.all;
entityJSis
port(clk,s,T:
sw,gw:
endJS;
architectureaaofJSis
process(clk,s,T)
)thensw<
0110"
gw<
elsif(clk'
)then
if(T='
)thengw<
=gw;
sw<
=sw;
elsif(gw="
1001"
if(sw="
elsesw<
=sw-1;
endif;
else
gw<
=gw-1;
if(sw=0andgw=0)thensw<
endaa;
S:
按下后倒计时开始;
SW:
输出倒计时十位数;
GW:
输出倒计时百位数
3、计分模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJFQIS
PORT(RST:
INSTD_LOGIC;
ADD:
CHOS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
OUT1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJFQ;
ARCHITECTUREARTOFJFQIS
BEGIN
PROCESS(RST,ADD,CHOS)IS
VARIABLEPOINTS_A0:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_B0:
VARIABLEPOINTS_C0:
VARIABLEPOINTS_D0:
BEGIN
IFRST='
THEN
POINTS_A0:
POINTS_B0:
POINTS_C0:
POINTS_D0:
ELSIF(ADD'
EVENTANDADD='
)THEN
IFCHOS="
THEN
IFPOINTS_A0="
ELSE
=POINTS_A0+1;
ENDIF;
IFPOINTS_B0="
=POINTS_B0+1;
IFPOINTS_C0="
=POINTS_C0+1;
IFPOINTS_D0="
=POINTS_D0+1;
IFchos="
thenout1<
=POINTS_a0;
ELSIFchos="
=POINTS_b0;
=POINTS_c0;
=POINTS_D0;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
RST:
分数清零按键;
ADD:
加分按键;
CHOS=STATES:
输入选手组号;
OUT1:
输出分数;
4、译码显示模块
entityYMis
port(a:
instd_logic_vector(3downto0);
b:
c:
clk1:
Y:
adres:
outstd_logic_vector(7downto0);
led7s:
outstd_logic_vector(7downto0));
endYM;
ARCHITECTUREsegledofYMis
signalS:
integerrange0to12;
signalD:
std_logic_vector(3downto0);
signalzero:
P1:
process(clk1)
begin
zero<
ifclk1'
eventandclk1='
then
ifS<
5then
S<
=S+1;
else
=1;
endif;
endprocessP1;
P2:
process(S)
caseSis
when1=>
D<
=a;
adres<
01111111"
when2=>
=b;
11011111"
when3=>
=c;
11101111"
when4=>
=Y;
11111101"
when5=>
=zero;
adres<
11111110"
whenothers=>
null;
endcase;
endprocessP2;
P3:
process(D)
caseDis
when"
=>
led7s<
11000000"
--0
11111001"
--1
10100100"
--2
10110000"
--3
10011001"
--4
0101"
10010010"
--5
10000010"
--6
11111000"
--7
1000"
10000000"
--8
10011000"
--9
endprocessP3;
endsegled;
A:
B:
倒计时十位;
C:
倒计时个位;
Y:
选手分数;
ADRES:
控制数码管位选;
LED7S:
控制数码管段选;
5、分频模块
entityFPis
port(clk:
inSTD_LOGIC;
clk1Hz:
outstd_logic);
endFP;
ARCHITECTUREsegledofFPis
PROCESS(clk)
VARIABLEcount:
INTEGERRANGE0TO49999999;
BEGIN
IFclk'
EVENTANDclk='
IFcount<
=24999999THEN
clk1Hz<
count<
=24999999时divls=0并且count加1
count:
=count+1;
ELSIFcount>
=24999999ANDcount<
=49999999THEN
ELSEcount:
=0;
ENDPROCESS;
ENDARCHITECTUREsegled;
(分频1HZ时将其中的数去掉三个9)
6、计分器ADD加分输入消抖模块
ENTITYXIAODIS
PORT(CLK,ADD:
INSTD_LOGIC;
ADD_EN:
OUTSTD_LOGIC);
ENDENTITY;
ARCHITECTUREBHVOFXIAODIS
PROCESS(CLK,ADD)
VARIABLECOUNT1:
INTEGERRANGE0TO100000;
IFADD='
IFRISING_EDGE(CLK)THEN
IFCOUNT1<
100000THENCOUNT1:
=COUNT1+1;
ELSECOUNT1:
=COUNT1;
IFCOUNT1=99999THENADD_EN<
ELSEADD_EN<
ELSECOUNT1:
END;
十:
引脚分配
11、设计结果验证
编译成功后下载到FPGA板上进行结果验证:
数码管显示06000;
按下S后,显示05900;
S0抢答后,显示1倒计时停止按下ADD显示10第一个LED灯点亮;
S1抢答后,显示2倒计时停止按下ADD显示10第二个LED灯点亮;
S2抢答后,显示3倒计时停止按下ADD显示10第三个LED灯点亮;
S3抢答后,显示4倒计时停止按下ADD显示10第四个LED灯点亮;
若按下RST键,所有选手得分清零。
十二:
总结
在这次的课程设计中,我对VHDL语言以及QUARTUSII软件的应用有了更深刻的认识。
一个个程序的编写及模块的生成锻炼了我的思维,让我对每个模块的功能、每段程序的作用有了更多的了解。
通过不断的思考,总的原理图才能够完成。
通过不断的出错与修改、完善,最终才能在FPGA上应用,我感觉付出都是值得的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 语言 抢答