数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统设计 _第1页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统设计 _第2页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统设计 _第3页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统设计 _第4页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统设计 _第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

数字电路课程设计项目名称:基于FPGA和VHDL语言的智能抢答器控制系统设计设计者:倪文斌学号:20080711212同组成员:陈显富 刘伟谦设计时间:2010年12月(1)智能抢答器功能描述: 通过实验平台的键盘和LED显示器来模拟实际场景中的抢答过程,所有功能在实验平台上都已模拟通过,其具体功能如下:1 根据设计要求设计8个抢答键、1个主持人开始抢答键、1个答题正确加分键、1个答题错误减分键、1个复位键。2 主持人开始抢答键按下后,系统可以锁存最先按下抢答键组的信息,并在LED上显示。3 在答题完成后,主持人可以根据答题正确与否,进行加减分操作,在LED上显示分数。4 可以在LED上显示抢答和答题时间。5 主持人按下开始抢答键前,若有抢答键被按下,则会在LED上显示犯规组号,同时蜂鸣器发声。6 实现系统总清零。7 具有一定扩展功能。(2)设计要求:1.分析设计任务,拟定多种设计方案,根据当时的制作条件,选定适合的方案绘制框图和设计流程。2.设计各部分单元电路或编写VHDL描述程序。3.对制作的电路进行功能测试,分析各项技术指标;或对设计的电路进行功能仿真,分析仿真波形。4.总结设计资料,但因包括原理电路、VHDL描述、仿真波形的设计报告,校验并演示电路装置。(3)程序说明1.抢答器主模块程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity qdq isport(cpin,zx,rin,win,RET,over:in std_logic; FAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); F1,F2,F3,F4,F5,F6,F7,F8:OUT STD_LOGIC_VECTOR( 7 DOWNTO 0); zhout:out std_logic_vector(3 downto 0); timeout:out std_logic_vector(7 downto 0); ledout:out std_logic_vector( 7 downto 0); RST,feng:out std_logic; TH:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ROUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ZXOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );end qdq;以上为程序端口定义部分,注意看清端口类型,其作用会在下面程序中说明。architecture tran of qdq istype states is (s0,S1,s2,s3,s4,s5,S6,s7); signal s: states; -定义状态 signal xtzz: STD_LOGIC_VECTOR(7 DOWNTO 0); signal cpct: integer range 0 to 10000000; signal cpct20:integer range 0 to 10000000; signal cp: STD_LOGIC; SIGNAL cp20: STD_LOGIC:=0; signal js0h: std_logic_vector(3 downto 0):=0000; SIGNAL JS0L:STD_LOGIC_VECTOR(3 DOWNTO 0):=1001; signal js2h: std_logic_vector (3 downto 0):=0001; SIGNAL JS2L:STD_LOGIC_VECTOR( 3 DOWNTO 0):= 1001; signal jsret0,Jsret2: std_logic; SIGNAL zhin:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL EN:STD_LOGic; signal CLR: STD_LOGIC ; SIGNAL DIR:STD_LOGIC; SIGNAL RCPPJ,RCP:STD_LOGIC; SIGNAL CPJJ:STD_LOGIC; SIGNAL FENJ:STD_LOGIC; SIGNAL F1H,F1L,F2H,F2L,F3H,F3L,F4H,F4L,F5H,F5L,F6H,F6L,F7H,F7L,F8H,F8L: STD_LOGIC_VECTOR(3 DOWNTO 0); signal ledout1: std_logic_vector(7 downto 0); SIGNAL CPFENGM,CPFENGMF: STD_LOGIC; SIGNAL CPFENGM0: INTEGER RANGE 0 TO 100000; SIGNAL CPFM,CPFMF,CPEN: STD_LOGIC; SIGNAL CPFM0: INTEGER RANGE 0 TO 100000; SIGNAL ZDFP:STD_LOGIC_VECTOR(2 DOWNTO 0);程序中间信号量定义部分,注意看清变量类型,具体作用会在下面程序中说明。 - - -begin dir=rin; feng=cpfm; LEDOUT=LEDOUT1;将输入端口rin信号传给dir,dir作为分数加减的方向信号。将cpfm赋给输出端口feng,feng为蜂鸣器的控制信号。Ledout1赋给输出端口ledout,ledout为led灯控制信号。- PROCESS(CPIN,WIN,RIN) BEGIN IF RCPPJ=1 THEN CPJJ=0; ELSIF RISING_EDGE(CPIN) THEN CPJJ=WIN OR RIN; END IF;END PROCESS;进程1:获取一个加减脉冲信号cpjj,给分数加减提供脉冲,rcppj为此脉冲的复位信号,“1”有效。 -PROCESS(CPIN) BEGIN IF CPFENGMF=1 THEN CPFENGM=0; ELSIF rising_edge(cpin) then if CPFENGM0=4999 THEN CPFENGM0=0; CPFENGM= NOT CPFENGM; ELSE CPFENGM0=CPFENGM0+1; END IF; end if;END PROCESS;进程2:获取一个2khz的脉冲cpfengm,其中cpfengmf为此脉冲的复位信号,“1”有效。PROCESS(CPFENGM) BEGIN IF CPFMF=1 THEN CPFM=0; ELSIF RISING_EDGE(CPFENGM) THEN IF CPEN=0 THEN IF CPFM0=ZDFP THEN CPFM0=0; CPFM=NOT CPFM; ELSE CPFM0=CPFM0+1; END IF; END IF;END IF; END PROCESS;进程3:获取一个动态分频信号cpfm,具体的频率和变量zdfp有关,cpfmf为复位信号,“1”有效。 -process(cpin)begin If rising_edge(cpin) then if cpct20=499999 then cp20=not cp20; cpct20=0; else cpct20=cpct20+1; end if;end if;end process;进程4:获取一个键盘扫描频率cp20,cp20初值为“0”,频率为20hz,此进程为复位信号。 -process(cpin) begin IF CPIN=1 AND CPIN EVENT THEN IF CPCT=9999999 THEN CPCT=0; CP= NOT CP; ELSE CPCTzhinzhinzhinzhinzhinzhinzhinzhin zhin=0000; END CASE; END IF; END PROCESS;进程6:对每个组进行编码。Fain为输入端口信号,此信号从键盘输入,经过键盘模块后输出只有一个高电平的8位2进制码,进入主程序模块后进行编码,分别赋给zhin,具体编码如程序。-进程7:此进程为此模块的主进程。process(cp,OVER,ret) begin if ret=1 then xtzz=x00;RST=1; zhout=0000; CLR=1; FENJ=0; RCPPJ=1;RCP=0; CPFMF=1;CPFENGMF=1;复位操作:外部端口ret输入复位信号“1”,题目对应指针xtzz回零;rst输出“1”提供给后面模块复位;组号输出端清零;clr为“1”,分数复位;rxppj为“1”,cppj脉冲复位;cpfengm复位;cpfm复位;同时fenj和rcp赋“0”。 s CPEN=1; ledout1(0)= not ledout1(0); S ledout1(1)=not ledout1(1); RST=0; en=0;CLR=0;RCPPJ=0; TIMEOUT=X00; FENJ=0; js0h=0000;js0l=1001; js2h=0001;js2l=1001; CPEN=1; CPFMF=0; CPFENGMF=0; S ledout1(2)=not ledout1(2); if over=1 then s=s7; elsif zx=1 and zhin=0000 then s=s4; elsif zx=0 and zhin/=0000 then s=s3; elsif zx=0 and zhin=0000 then - s ledout1(3)=not ledout1(3); CPEN=0;ZDFP=000; IF XTZZ( 3 DOWNTO 0)=1001 THEN XTZZ( 3 DOWNTO 0) =0000; XTZZ( 7 DOWNTO 4)=XTZZ( 7 DOWNTO 4)+1; ELSE XTZZ( 3 DOWNTO 0 )=XTZZ( 3 DOWNTO 0)+1; END IF; s ledout1(4)=not ledout1(4); TIMEOUT=JS0H&JS0L; if jsret0=1 then - js0h=0000;js0l=1001; elsif zhin/=0000 and js0l/=0000 then en=1; zhout=zhin; s=s5; elsif js0l=0000 and js0h=0000 then js0l=1001;js0h=0000; IF XTZZ( 3 DOWNTO 0)=1001 THEN XTZZ( 3 DOWNTO 0) =0000; XTZZ( 7 DOWNTO 4)=XTZZ( 7 DOWNTO 4)+1; ELSE XTZZ( 3 DOWNTO 0 )=XTZZ( 3 DOWNTO 0)+1; END IF; CPEN=0;ZDFP=010 ; s=s1; ELSE JS0L ledout1(5)=not ledout1(5); timeout=js2h&js2l; FENJ=1; if jsret2=1 then js2h=0001;js2l=1001; elsif (js2h/=0000 OR js2l/=0000) AND (RIN=1 OR WIN=1) then ZHOUT=0000; IF XTZZ( 3 DOWNTO 0) = 1001 THEN XTZZ( 3 DOWNTO 0)= 0000; XTZZ( 7 DOWNTO 4)=XTZZ( 7 DOWNTO 4)+1; ELSE XTZZ( 3 DOWNTO 0 )=XTZZ( 3 DOWNTO 0)+1; END IF; S=S1; elsif js2h=0000 and js2l=0000 then js2h=0001; js2l=1001; S=S6; else IF JS2L=0000 THEN JS2L=1001; IF JS2H=0000 THEN JS2H=0001; ELSE JS2H=JS2H-1; END IF; ELSE js2l ledout1(6)=not ledout1(6); CPEN=0;ZDFP=100; ZHOUT=0000; IF XTZZ( 3 DOWNTO 0)=1001 THEN XTZZ( 3 DOWNTO 0) =0000; XTZZ( 7 DOWNTO 4)=XTZZ( 7 DOWNTO 4)+1; ELSE XTZZ( 3 DOWNTO 0 )=XTZZ( 3 DOWNTO 0)+1; END IF; s CPEN=0;ZDFP=111; ledout1(7)=not ledout1(7); Ss=s0; END CASE; end if; end process ;其它状态,此进程结束。 -进程8:此进程主要作用是为各组计分。 PROCESS(CLR,CPJJ,DIR,zhin) BEGIN IF CLR=1 THEN F1H=0011;F1L=0000; F2H=0011;F2L=0000; F3H=0011;F3L=0000; F4H=0011;F4L=0000; F5H=0011;F5L=0000; F6H=0011;F6L=0000; F7H=0011;F7L=0000; F8H=0011;F8L IF F1L=1001 THEN F1L=0000; F1H=F1H+1; ELSE F1L IF F2L=1001 THEN F2L=0000; F2H=F2H+1; ELSE F2L IF F3L=1001 THEN F3L=0000; F3H=F3H+1; ELSE F3L IF F4L=1001 THEN F4L=0000; F4H=F4H+1; ELSE F4L IF F5L=1001 THEN F5L=0000; F5H=F5H+1; ELSE F5L IF F6L=1001 THEN F6L=0000; F6H=F6H+1; ELSE F6L IF F7L=1001 THEN F7L=0000; F7H=F7H+1; ELSE F7L IF F8L=1001 THEN F8L=0000; F8H=F8H+1; ELSE F8L NULL; END CASE;对每组而言,答对后加1分。 ELSE CASE ZHin IS WHEN 0001 = IF F1L=0000 THEN F1L=1001; F1H=F1H-1; ELSE F1L IF F2L=0000 THEN F2L=1001; F2H=F2H-1; ELSE F2L IF F3L=0000 THEN F3L=1001; F3H=F3H-1; ELSE F3L IF F4L=0000 THEN F4L=1001; F4H=F4H-1; ELSE F4L IF F5L=0000 THEN F5L=1001; F5H=F5H-1; ELSE F5L IF F6L=0000 THEN F6L=1001; F6H=F6H-1; ELSE F6L IF F7L=0000 THEN F7L=1001; F7H=F7H-1; ELSE F7L IF F8L=0000 THEN F8L=1001; F8H=F8H-1; ELSE F8L NULL; END CASE; END IF; END IF; END IF;END PROCESS;进程9:PROCESS(F1H,F1L,F2H,F2L,F3H,F3L,F4H,F4L,F5H,F5L,F6H,F6L,F7H,F7L,F7H,F8L,F8H) BEGIN F1=F1H&F1L; F2=F2H&F2L; F3=F3H&F3L; F4=F4H&F4L; F5=F5H&F5L; F6=F6H&F6L; F7=F7H&F7L; F8=F8H&F8L; END PROCESS;将每组的分数值赋给输出端口,在lcd模块中会转换为相应的ASC码。-进程10:PROCESS(RIN,WIN) BEGIN IF RIN=1 THEN ROUT=X52; ELSIF WIN=1 THEN ROUT=x57; else rout=x20; END IF; END PROCESS;答对则在lcd相应的显示区显示字符R,答错则显示W。进程11: PROCESS(XTZZ) BEGIN TH=XTZZ;END PROCESS;将题号输出。进程12: PROCESS(ZX) BEGIN IF ZX=1 THEN ZXOUT=X53 ; ELSE ZXOUT=X20; END IF;END PROCESS;主持人按下开始抢答键后,在lcd的相应显示区显示字符S。end tran;2抢答器键盘转换模块程序键盘按键如下抢答键1抢答键2抢答键3抢答键4抢答键5抢答键6抢答键7抢答键8OVERRETRINWINZXLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity PADTOKEY is port (CPIN,R :IN STD_LOGIC; Y: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); ICOL : IN STD_LOGIC_VECTOR(3 DOWNTO 0); OROW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY;architecture JGT of PADTOKEY is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL SROW : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CPCT : INTEGER RANGE 0 TO 255; SIGNAL CTDELAY: INTEGER RANGE 0 TO 511; SIGNAL CP:STD_LOGIC; BEGIN PROCESS(CPIN) BEGIN IF CPIN=1 AND CPIN EVENT THEN IF CPCT=255 THEN CPCT=0;CP= NOT CP; ELSE CPCT=CPCT+1; END IF; END IF; EN

温馨提示

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

评论

0/150

提交评论