数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统的设计

上传人:good****022 文档编号:116636524 上传时间:2022-07-06 格式:DOC 页数:28 大小:443.50KB
返回 下载 相关 举报
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统的设计_第1页
第1页 / 共28页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统的设计_第2页
第2页 / 共28页
数字电路课程设计:基于FPGA和VHDL语言的智能抢答器控制系统的设计_第3页
第3页 / 共28页
点击查看更多>>
资源描述
数字电路课程设计项目名称:基于FPGA和VHDL语言的智能抢答器控制系统设计设计者:刘伟谦学号:20080711210同组成员:陈显富 倪文斌设计时间: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; END PROCESS; PROCESS(CP,R) VARIABLE N:INTEGER RANGE 0 TO 12; BEGIN IF R=1 THEN S=S0;Y=0000000000000000;SROWSOROW=SROW;SSY(3 DOWNTO 0)Y(7 DOWNTO 4)Y(11 DOWNTO 8)Y(15 DOWNTO 12)NULL; END CASE; WHEN S3=IF N=12 THEN N:=0;S=S4;CTDELAY=0;SROW=1110; ELSE N:=N+4;S=S1;SROWIF CTDELAY=511 THEN S=S1;CTDELAY=0; ELSE CTDELAY=CTDELAY+1; END IF; END CASE;END IF;END PROCESS;END JGT;3LED显示模块程序01234567891011121314150FS1FS2FS3FS4FS5FS6FS7FS81TM:ZB:RINTHZXIN1. LCD显示器中各位置的显示内容为表中所示。2. 各符号说明: a. FS1FS8为本模块中输入端口输入的各组分数,为2位BCD码。在本模块中转换后可以得到相应的ASCII码。 b. TM: ZB: 分别为时间提示和组号提示,是不变显示,其后的显示单元用来显示时间,组号。 C. RIN 答题对错提示区 若答题正确 则显示字符R,若答题错误则显示字符W。未答题时提示空(为空格键)。 d. TH 题号显示区,可显示一个2位数。 e. ZXIN 抢答开始提示区,若抢答开始,则显示字符S,否则显示空(为空格键)。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity QDQLCD is port (CPIN,R,BUSY :IN STD_LOGIC; FS1,FS2,FS3,FS4,FS5,FS6,FS7,FS8
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 等级考试


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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