VHDL语言四人抢答器_第1页
VHDL语言四人抢答器_第2页
VHDL语言四人抢答器_第3页
VHDL语言四人抢答器_第4页
VHDL语言四人抢答器_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中南林业科技大学课程设计报告 设计名称: 基于VHDL语言的四人抢答器 姓 名: 杜涵 学 号: 20134491 专业班级: 电子信息工程 一班 院(系): 计算机与信息工程学院 设计时间: 2015年12月8日 设计地点: 东园22栋201 目录1、 设计题目2、 设计要求3、 设计目的4、 设计背景5、 使用工具6、 设计原理7、 设计结构8、 原理图9、 模块程序10、 引脚分配11、 设计结果验证12、 总结1、 设计题目:基于VHDL语言的四路抢答器二丶设计要求: 1、设计制作一个竞赛抢答器,每组受控于一个抢答开关,分别为S1, S2, S3, S4。 2、控制键K,用于控制整个系

2、统清零, K=0,系统清零;抬起复位键时,K=1,抢答开始。 3、每答对一题计十分,每次答题时间不能超过60秒。 4、第一抢答者按下抢答按钮,对应的led灯点亮,同时数码管显示是第几位抢答者,并封锁其他各组的按钮,即其他任何一组按键都不会再使电路响应。与此同时,数码管开始显示60秒的倒计时。通过K键复位,开始下一轮抢答。3、 设计目的 1.通过设计竞赛抢答器的实例来体会设计实际产品的过程,在学好理论的基础上,提高动手实践能力。 2.学习怎样用vhdl语言来描述自己的设计思路,调试硬件后,能够使产品实现功能。 3.进一步掌握用vhdl语言编写数字电路。4.在做课题过程中,掌握多位共阴极扫描显示数

3、码管的驱动及编码,学会使用和调试硬件。四、设计背景现代电子产品几乎渗透了社会的各个领域EDA技术是电子设计的发展趋势, EDA工具从数字系统设计的单一领域,应用范围己涉及模拟、微波等多个领域,可实现各个领域电子系统设计的测试、设计仿真和布局布线等。设计者只要完成对电子系统的功能描述,就可利用计算机和EDA工具,进行设计处理,最终得到设计结果。  随着大规模集成电路技术和计算机技术的不断发展,即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成

4、部分。从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。抢答器是一种应用非常广泛的设备,在各种竞猜、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管可控硅、发光管等组成,能通过发光管的指示辨认出选手。现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新的功能,如选手号码显示、抢按器或抢按后的计时、选手得分显示等功能。五、使用工具:装有Quartus II软件的PC、Cyclone系列FPGA开发板(ep2c5t144c8)六、设计原理根据设计要求,我们经过分析应用分模块的方式比较容易设计该抢答器,我们底层应用VHD

5、L语言,顶层应用原理图的方式进行设计,然后通过仿真验证并不断修改完善设计。模块:(1) 四人按键抢答模块:设计为五个输入按键,其实S键为主持人控制抢答过程的按键,当有选手抢答后使其他人的按键无效。然后根据抢答成功者的编号使对应LED灯点亮,同时输出一个状态让数码管显示抢答者编号。主持人S键复位,开始下一轮抢答。(2) 计时模块:在有人抢答后开始一个60秒的倒计时,并输出道数码管显示,CLK来自1HZ分频模块。(3) 计分模块:在选手答题正确后通过外接ADD键给该选手加分,每次加十分,并输出到数码管显示,CLEAR键为清空所有选手分数。(4) 译码模块:讲选手序号,倒计时以及选手分数显示出来,C

6、LK由1KHz分频模块提供。(5)1HZ与1KHz分频模块:程序由FPGA板的50MHz频率编写。7、 设计结构主持人显示分数显示组号选手抢答S开始抢答倒计时ADD加分CLEAR清分8、 原理图:九、模块程序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_log

7、ic_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 issignal s_0,s_1,s_2,s_3,l_1,l_2,l_3,l_4:std_logic;beginprocess(s0,s1,s2,s3,s,clk)begin XI<="1111"if (s='0') then s_0<='0&#

8、39;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

9、<="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<

10、;="0111" else states<="0000" end if; end if;T<= s_0 or s_1 or s_2 or s_3;end process;end aa ;说明:S为主持人复位键; S0,S1,S2,S3:四个抢答选手; STATES:抢答组号输出 T:在S按下后使倒计时停止; LIANG:控制四个LED灯,点亮选手对应LED灯; XI:使另外四个LED灯熄灭;2、 计时模块程序:library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_unsign

11、ed.all;use ieee.std_logic_1164.all;entity JS isport(clk,s,T:in std_logic;sw,gw:buffer std_logic_vector(3 downto 0);end JS;architecture aa of JS isbeginprocess(clk,s,T)beginif (s='0') then sw<="0110"gw<="0000" elsif(clk'event and clk='1') then if(T='0

12、') then gw<=gw;sw<=sw; elsif (gw="0000") then gw<="1001" if(sw="0000") then sw<="0000" else sw<=sw-1; end if; else gw<=gw-1; end if; if (sw=0 and gw=0) then sw<="0000"gw<="0000" end if; end if;end process;end aa;

13、说明:S:按下后倒计时开始; SW:输出倒计时十位数; GW:输出倒计时百位数3、 计分模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JFQ IS PORT(RST: IN STD_LOGIC; ADD: IN STD_LOGIC; CHOS: IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUT1: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTITY JFQ ; ARCHITECTURE ART OF JFQ I

14、S BEGIN PROCESS(RST,ADD,CHOS) IS VARIABLE POINTS_A0: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_B0: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_C0: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_D0: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST='1' THEN POINTS_A0:="0000" POINTS_B0

15、:="0000" POINTS_C0:="0000" POINTS_D0:="0000" ELSIF (ADD'EVENT AND ADD='0') THEN IF CHOS="0001" THEN IF POINTS_A0="1001" THEN POINTS_A0:="0000" ELSE POINTS_A0:=POINTS_A0+1; END IF; END IF; IF CHOS="0010" THEN IF POINTS_

16、B0="1001" THEN POINTS_B0:="0000" ELSE POINTS_B0:=POINTS_B0+1; END IF; END IF; IF CHOS="0011" THEN IF POINTS_C0="1001" THEN POINTS_C0:="0000" ELSE POINTS_C0:=POINTS_C0+1; END IF; END IF; IF CHOS="0100" THENIF POINTS_D0="1001" THEN

17、POINTS_D0:="0000" ELSE POINTS_D0:=POINTS_D0+1; END IF; END IF; END IF; IF chos="0001" then out1<=POINTS_a0;ELSIF chos="0010" then out1<=POINTS_b0;ELSIF chos="0011" then out1<=POINTS_c0;ELSIF chos="0100" then out1<=POINTS_D0;ELSIF chos=&qu

18、ot;0000" then out1<="0000"END IF;END PROCESS; END ARCHITECTURE ART; 说明:RST:分数清零按键; ADD:加分按键; CHOS=STATES:输入选手组号; OUT1:输出分数;4、 译码显示模块程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity YM is port(a:in std_logic_vector(3 dow

19、nto 0); b:in std_logic_vector(3 downto 0); c:in std_logic_vector(3 downto 0); clk1:in std_logic; Y:in std_logic_vector(3 downto 0); adres: out std_logic_vector(7 downto 0); led7s: out std_logic_vector(7 downto 0) );end YM;ARCHITECTURE segled of YM issignal S:integer range 0 to 12;signal D:std_logic_

20、vector(3 downto 0);signal zero:std_logic_vector(3 downto 0);beginP1: process(clk1) begin zero<="0000"if clk1'event and clk1='1' then if S<5 then S<=S+1; else S<=1; end if;end if;end process P1;P2:process(S) begincase S iswhen 1 =>D<=a; adres<="01111111

21、"when 2 =>D<=b; adres<="11011111"when 3 =>D<=c; adres<="11101111"when 4 =>D<=Y; adres<="11111101"when 5 =>D<=zero;adres<="11111110"when others =>null;end case;end process P2;P3:process(D) begin case D iswhen "00

22、00" =>led7s<="11000000"-0when "0001" =>led7s<="11111001"-1when "0010" =>led7s<="10100100"-2when "0011" =>led7s<="10110000"-3when "0100" =>led7s<="10011001"-4when "0101&qu

23、ot; =>led7s<="10010010"-5when "0110" =>led7s<="10000010"-6when "0111" =>led7s<="11111000"-7when "1000" =>led7s<="10000000"-8when "1001" =>led7s<="10011000"-9when others =>null;e

24、nd case;end process P3;end segled;说明:A:输入选手组号; B:倒计时十位; C:倒计时个位; Y:选手分数; ADRES:控制数码管位选; LED7S:控制数码管段选;5、 分频模块程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity FP is port( clk: in STD_LOGIC; clk1Hz: out std_logic);end FP;ARCHITECTURE segle

25、d of FP isbegin PROCESS (clk) VARIABLE count:INTEGER RANGE 0 TO 49999999;BEGIN IF clk'EVENT AND clk='1' THEN IF count<=24999999 THEN clk1Hz<='0' count<=24999999时divls=0并且count加1 count:=count+1; ELSIF count>=24999999 AND count<=49999999 THEN clk1Hz<='1' count:=count+1; ELSE count:=0; END IF; END IF; END PROCESS ; END ARCHITECTURE segled;(分频1HZ时将其中的数去掉三个9)6、 计分器ADD加分输入消抖模块程序:LIBRARY IEEE;USE IEEE.STD_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论