VHDL语言四人抢答器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南林业科技大学
课程设计报告
设计名称:基于VHDL语言的四人抢答器
姓名:杜涵学号:******** 专业班级:电子信息工程一班
院(系):计算机与信息工程学院
设计时间:2015年12月8日
设计地点:东园22栋201
目录
一、设计题目………………………………………………
二、设计要求………………………………………………
三、设计目的………………………………………………
四、设计背景………………………………………………
五、使用工具………………………………………………
六、设计原理………………………………………………
七、设计结构………………………………………………
八、原理图…………………………………………………
九、模块程序………………………………………………
十、引脚分配………………………………………………十一、设计结果验证………………………………………十二、总结…………………………………………………
一、设计题目:基于VHDL语言的四路抢答器
二丶设计要求:
1、设计制作一个竞赛抢答器,每组受控于一个抢答开关,分别为S1, S2, S3, S4。
2、控制键K,用于控制整个系统清零, K=0,系统清零;抬起复位键时,K=1,抢答开始。
3、每答对一题计十分,每次答题时间不能超过60秒。
4、第一抢答者按下抢答按钮,对应的led灯点亮,同时数码管显示是第几位抢答者,并封锁其他各组的按钮,即其他任何一组按键都不会再使电路响应。与此同时,数码管开始显示60秒的倒计时。通过K键复位,开始下一轮抢答。
三、设计目的
1.通过设计竞赛抢答器的实例来体会设计实际产品的过程,在学好理论的基础上,提高动手实践能力。
2.学习怎样用vhdl语言来描述自己的设计思路,调试硬件后,能够使产品实现功能。
3.进一步掌握用vhdl语言编写数字电路。
4.在做课题过程中,掌握多位共阴极扫描显示数码管的驱动及编码,学会使用和调试硬件。
四、设计背景
现代电子产品几乎渗透了社会的各个领域EDA技术是电子设计的发展趋势,EDA工具从数字系统设计的单一领域,应用范围己涉及模拟、微波等多个领域,可实现各个领域电子系统设计的测试、设计仿真和布局布线等。设计者只要完成对电子系统的功能描述,就可利用计算机和EDA工具,进行设计处理,最终得到设计结果。随着大规模集成电路技术和计算机技术的不断发展,即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。不言而喻,EDA 技术将迅速成为电子设计领域中的极其重要的组成部分。从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
抢答器是一种应用非常广泛的设备,在各种竞猜、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管可控硅、发光管等组成,能通过发光管的指示辨认出选手。现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新的功能,如选手号码显示、抢按器或抢按后的计时、选手得分显示等功能。
五、使用工具:装有Quartus II软件的PC、Cyclone 系列FPGA开发板(ep2c5t144c8)
六、设计原理
根据设计要求,我们经过分析应用分模块的方式比较容易设计该抢答器,我们底层应用VHDL语言,顶层应用原理图的方式进行设计,然后通过仿真验证并不断修改完善设计。
模块:
(1)四人按键抢答模块:设计为五个输入按键,其实S键为主持人控制抢答过程的按键,当有选手抢答后使其他人的按键无效。然后根据抢答成功者的编号使对应LED灯点亮,同时输出一个状态让数码管显示抢答者编号。主持人S键复位,开始下一轮抢答。
(2)计时模块:在有人抢答后开始一个60秒的倒计时,并输出道数码管显示,CLK来自1HZ分频模块。
(3)计分模块:在选手答题正确后通过外接ADD键给该选手加分,每次加十分,并输出到数码管显示,CLEAR键为清空所有选手分数。
(4)译码模块:讲选手序号,倒计时以及选手分数显示出来,CLK由1KHz分频模块提供。
(5)1HZ与1KHz分频模块:程序由FPGA板的50MHz频率编写。
七、设计结构
八、原理图:
九、模块程序
1、抢答模块
程序:
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity QD is
Port(
s,clk:in std_logic;
s0,s1,s2,s3:in std_logic;
states:buffer std_logic_vector(3 downto 0);
T:out std_logic;
LIANG:buffer std_logic_vector(3 downto 0);
XI:buffer std_logic_vector(3 downto 0)); End QD;
Architecture aa of QD is
signal s_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') then
s_0<='0';s_1<='0';s_2<='0';s_3<='0';LIANG<="1111";
elsif (clk'event and clk='1') then
if (s_0='1' or s_1='1' or s_2='1' or s_3='1')
then null;
elsif s0='0' then
s_0<='1';states<="0001";LIANG<="1110";
elsif s1='0' then
s_1<='1';states<="0010";LIANG<="1101";
elsif s2='0' then
s_2<='1';states<="0011";LIANG<="1011";
elsif s3='0' then
s_3<='1';states<="0100";LIANG<="0111";
else states<="0000";