FPGA智能抢答器实验报告.doc

上传人:叶*** 文档编号:35120042 上传时间:2022-08-20 格式:DOC 页数:19 大小:80.50KB
返回 下载 相关 举报
FPGA智能抢答器实验报告.doc_第1页
第1页 / 共19页
FPGA智能抢答器实验报告.doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《FPGA智能抢答器实验报告.doc》由会员分享,可在线阅读,更多相关《FPGA智能抢答器实验报告.doc(19页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、现代电子技术综合实验实验报告2011059010015 王健摘要 智力抢答器是各种竞赛中很常用的一种抢答工具。本项目主要研究6人智力抢答器的设计。关键词:VHDL、FPGA、抢答器。第1章 引言1.1 项目研究现状 智力抢答器由于其应用极广,所以各种技术已经趋于成熟。已有的设计包括四人到16人乃至更多人数同时带有计分功能的抢答器等。本项目设计智力抢答器为六人智力抢答器,主要是为了深入了解VHDL语言和FPGA器件的应用。1.2 本文研究的主要内容及关键技术本项目设计的抢答器为六人智力抢答器。编号为1-6的选手在规定的时间(10s)内按键抢答,抢中时锁定选手编号并显示,其他无效,当选手抢中时,开

2、始30s答题倒计时。主持人控制开始和清零。当抢答开始、有人抢答、抢答或答题时间到时有报警功能,报警延时500ms后停止。第2章 实验项目方案设计2.1 项目系统设计原理主持人按下开始键后系统开始工作。当有抢答信号输入系统后,系统对最先抢到的选手号码进行编码锁存,并将这个号码显示输出,所以需要编码器锁存器和译码显示电路。选手的抢答有效时间为10s,答题时间为30s,所以需要定时器,当系统在主持人按键开始、有人抢中、定时时间到三种情况下要发出报警信号,于是需要一个报警模块。我们用的实验板上LED数码管的段信号是连到一起的,所以要显示两位或多位数则需要扫描电路,在1khz左右的频率下扫描位电极,在不

3、同周期分时显示十位和个位,从而实现两位或多位显示。主持人按键有清零和开始功能,当第一次按下时为开始。系统报警提示并进入10s倒计时阶段。选手开始按键抢答。如果没有选手抢答,则系统倒计时到0时报警。如果有选手抢答,则系统报警,并且显示选手编号,时间变为30s倒计时。答题时间到时系统报警。支持人按键清零准备下一轮抢答。2.2 项目系统设计方案及模块组成 系统的总输入有选手按键和主持人按键以及时钟信号。输出显示到LED七段数码管上,所以输入需要进行消抖后进行编码锁存,倒计时需要一个定时器来实现,报警器需要一个单独的模块,因为本项目采用的硬件比较特殊,需要一个扫面电路才能实现多位显示,所以需要一个扫描

4、电路。最后的LED段电极需要一个译码电路才能正常显示。所以总的模块主要有:按键消抖模块、编码锁存模块、定时模块、扫描电路模块、报警电路模块、译码器模块。第3章 实验项目单元模块电路设计3.1 按键消抖模块设计 3.1.1 模块描述消抖模块主要对按键进行消抖功能,防止误按。主要原理是当外部输入信号来时,内部计数器开始计时,如果在规定的时间内按键一直保持按下状态,则判断为按下状态,否则为误按。模块输入为主持人按键信号(star_t),时钟信号(clk),输出信号为处理后的主持人按键信号(start)。模块符号为“xd”,模块程序如下:library IEEE;use IEEE.STD_LOGIC_

5、1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity xd isport( clk, star_t : in STD_LOGIC; start: out STD_LOGIC);end xd;architecture Behavioral of xd issignal cnt : integer :=0;signal q : integer ;beginxd : process (clk,star_t) begin q=24000; if clkevent and clk=1 thenif sta

6、r_t=1 then if cnt=q then cnt=cnt; else cnt=cnt+1; end if; if cnt = q-10 then start = 1; else start = 0; end if; else cnt clk, star_t = star_t, start = start - Clock process definitions clk_process :process beginclk = 0;wait for clk_period/2;clk = 1;wait for clk_period/2; end process; - Stimulus proc

7、ess stim_proc: process beginstar_t = 0; wait for 1 ms; star_t = 1;wait for 100 ms; end process;END;仿真波形及说明:从图中可以看出,当star_t输入一个上升沿并保持一段时间后,start才输出一个上升沿,符合要求。3.2 编码锁存模块设计3.2.1 模块描述编码锁存模块主要对选手按键的输入进行编码锁存,并且对外输出抢中信号(qz)和选手编码信号(s)。输入信号有时钟信号(clk)、主持人信号(start)、时间到信号(sjd)和选手输入信号(key1-key6)。当主持人按键开始时,最先输入模块

8、的选手编号被编码锁存,从选手编码信号输出。模块符号为:“bmsc”。模块程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity bmsc isport( clk : in STD_LOGIC; start : in STD_LOGIC; sjd : in STD_LOGIC;key1, key2, key3, key4, key5, key6 : in STD_LOGIC;qz : out STD_LOGIC;s : out

9、 STD_LOGIC_VECTOR (3 downto 0);end bmsc;architecture Behavioral of bmsc issignal q_z : STD_LOGIC:=1;signal en : std_logic:= 0;signal q : std_logic_vector (3 downto 0):= 0000;signal x_s :std_logic_vector(5 downto 0);beginstate : process (start) begin if startevent and start = 1 then en = not en; end

10、if; end process;bm_sc : process (clk, en, sjd,x_s) begin if clkevent and clk = 1 then if en = 1 and sjd = 1 then if q_z = 1 then if key1=1 thenx_s(0)=1;else x_s(0)=0;end if;if key2=1 thenx_s(1)=1;else x_s(1)=0;end if;if key3=1 thenx_s(2)=1;else x_s(2)=0;end if;if key4=1 thenx_s(3)=1;else x_s(3)=0;en

11、d if;if key5=1 thenx_s(4)=1;else x_s(4)=0;end if;if key6=1 thenx_s(5)=1;else x_s(5) q = 0001; q_z q = 0010; q_z q = 0011; q_z q = 0100; q_z q = 0101; q_z q = 0110; q_z q = 0000; end case;end if; else q = 0000; q_z = 1;x_s=000000; end if; end if;end process;s = q;qz clk, start = start, sjd = sjd, key

12、1 = key1, key2 = key2, key3 = key3, key4 = key4, key5 = key5, key6 = key6, qz = qz, s = s - Clock process definitions clk_process :process beginclk = 0;wait for clk_period/2;clk = 1;wait for clk_period/2; end process; - Stimulus process stim_proc: process begin start=0;key1=0;key2=0;key3=0;key4=0;ke

13、y5=0;key6=0;sjd=1;wait for 50 ns;start=1;wait for 100 ns;start=0;wait for 200 ns;key1=1;wait for 300 ns;key2=1;wait for 300 ns; end process;END;仿真波形及说明: 从图中可以看出,start有一个上升沿后,1号选手开始抢答,然后抢中信号变为低电平,同时选手编码信号s变为0001,并锁存,2号选手抢答无效,符合要求。3.3 定时模块设计3.3.1 模块描述定时电路模块主要负责电路的倒计时功能。当主持人从、按键开始时,开始从10s倒计时,当有选手抢答时改为从

14、30s开始倒计时,时间倒计时为0时发出时间到信号。模块输入为时钟信号(clk)、抢中信号(qz)、主持人按键信号(start)、输出为时间到信号(sjd)、计时十位信号(t10)、计时个位信号(t0)。模块符号为:“dsp”。模块程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity dsp isport( clk ,qz,start: in STD_LOGIC; sjd : out STD_LOGIC;t10,t0:out

15、 STD_LOGIC_VECTOR (3 downto 0);end dsp;architecture Behavioral of dsp issignal cnt : integer range 1 to 24000000 := 1;signal clk_1hz : std_logic := 1;signal en : std_logic := 0;signal m10 : integer range 0 to 9;signal m0 : integer range 0 to 9;signal p10 : integer range 0 to 9;signal p0 : integer ra

16、nge 0 to 9;signal u10 : std_logic_vector(3 downto 0);signal u0 : std_logic_vector(3 downto 0);beginFP: process (clk) is -分频产生1hz信号 begin if clkevent and clk = 1 then if cnt = 24000000 then cnt =1;clk_1hz = not clk_1hz; else cnt = cnt+1; END IF;end if; end process;state: process (start) -开始和清零控制 begi

17、n if startevent and start = 1 then en = not en;end if; end process;jsq: process (en, qz, clk_1hz,m10,m0,p10,p0) is -定时部分 begin if en = 0 then -未使能 计数器显示10 m10 = 1; m0 = 0;p10=3;p0=0; sjd = 1; elsif clk_1hzevent and clk_1hz = 1 then if qz = 1 then if m10 = 0 and m0 = 0 then m10=0;m0=0; sjd=0; else if

18、 m0 = 0 and m10 /= 0 then m0 = 9; m10 = m10-1; else m0 = m0-1; end if; end if; else if p10 = 0 and p0 = 0 then p10= 0;p0=0; sjd=0; else if p0 = 0 and p10 /= 0 then p10 = p10-1; p0 = 9; else p0 = p0-1; end if; end if; end if;end if;if en=0 thenu0=0000;u10=0001;else if qz=1 then u0 = conv_std_logic_ve

19、ctor(m0,4); u10 =conv_std_logic_vector(m10,4); else u0 = conv_std_logic_vector(p0,4); u10 =conv_std_logic_vector(p10,4); end if;end if;end process;t0=u0;t10 clk, qz = qz, start = start, sjd = sjd, t10 = t10, t0 = t0 - Clock process definitions clk_process :process beginclk = 0;wait for clk_period/2;

20、clk = 1;wait for clk_period/2; end process; - Stimulus process stim_proc: process beginstart=0;qz=1;wait for 100 ns;start=1;wait for 100 ns;start=0;wait for 10 us;qz=0;wait for 1 ms;start=1;wait for 100 ns;start=0;wait for 10 us; end process;END;仿真波形及说明:从图中可以看出,当start上升沿来时,定时器开始工作,这里仿真时间比较短,所以一直保持10

21、,当抢中信号qz有效时,开始从30s倒计时,符合要求。3.4 报警模块设计3.4.1 模块描述报警器模块主要在抢答开始、抢答时间到、有选手抢中、答题时间到几种情况下进行报警。报警信号低有效,当几种情况中有一种情况为0则输出为0,所以这几种情况用与门连接就行。报警器报警后500ms后停止。模块输入为时钟信号(clk)、抢中信号(qz)、时间到信号(sjd)、主持人按键信号(start)。输出为:报警信号(bj)。模块符号为:“bjq”。模块程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use

22、IEEE.STD_LOGIC_unsigned.ALL;entity bjq isport( clk : in STD_LOGIC; start : in STD_LOGIC; sjd : in STD_LOGIC;qz : in STD_LOGIC;bj : out std_logic);end bjq;architecture Behavioral of bjq issignal bj1, bj2, bj3: std_logic;signal en: std_logic:= 0;signal b_j: std_logic;beginstate : process(start)begin i

23、f startevent and start = 1 then en = not en; end if;end process;t1 : process(clk, en) variable q : integer range 1 to 24000000 := 1; begin if en = 0 then bj1 = 1 ; q := 1; else if clkevent and clk = 1 then if q = 24000000 then bj1 = 1; else q := q+1; bj1 = 0; end if; end if; end if;end process;t2 :

24、process (clk, qz) variable q : integer range 1 to 24000000 := 1; begin if qz = 1 then bj2 = 1; q :=1; else if clkevent and clk = 1 then if q= 24000000 then bj2 = 1; else q := q+1; bj2 = 0; end if; end if; end if;end process;t3 : process (clk, sjd) variable q : integer range 1 to 24000000 := 1; begin

25、 if sjd = 1 then bj3 = 1; q := 1; else if clkevent and clk = 1 then if q = 24000000 then bj3 = 1; else q := q+1; bj3 = 0; end if; end if; end if;end process;b_j = bj1 and bj2 and bj3;bj clk, start = start, sjd = sjd, qz = qz, bj = bj - Clock process definitions clk_process :process beginclk = 0;wait

26、 for clk_period/2;clk = 1;wait for clk_period/2; end process; - Stimulus process stim_proc: process beginstart=0;sjd=1;qz=1;wait for 1 ms;start=1;wait for 100 us;start=0;wait for 1 ms;sjd=0;wait for 1 ms;sjd=1;wait for 1 ms;qz=0;wait for 1 ms;qz=1;wait for 1 ms; end process;END;仿真波形及说明:从图中可以看出,当star

27、t、qz、和sjd信号分别有效时,都会输出报警信号,并且持续一段时间,符合要求。3.5 扫描模块设计3.5.1 模块描述扫描电路模块主要负责led数码管的正常显示,同时也决定哪个数码管用于显示。主要有一个计数器进行扫描,在计数器为不同值时,显示不同的信号。由于频率很高肉眼无法分辨,所以看起来就是同时显示。模块输入为时钟信号(clk)、选手编码信号(s)、十位信号(t10)、个位信号(t0)。输出为:位选信号(dig)、数据信号(dout)。模块符号为:“scan”。模块程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGI

28、C_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity scan isport( clk : in STD_LOGIC; t10:in STD_LOGIC_VECTOR (3 downto 0);t0:in STD_LOGIC_VECTOR (3 downto 0);s : in STD_LOGIC_VECTOR (3 downto 0);dig : out STD_LOGIC_VECTOR (7 downto 0);dout : out STD_LOGIC_VECTOR (3 downto 0);end scan;architecture Behavioral of scan issignal cnt : integer range 1 to 24000 := 1;signal clk1k : std_logic := 0;signal q : std_logic_vector (2 downto 0) := 000;beginprocess (clk)begin if clkevent and clk = 1 then if cnt = 24000 then cnt = 1; clk1k = not clk1k; else cnt = cnt+1; end if; en

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com