您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于CPLD的智力竞赛抢答器
湖南工程学院课程设计课程名称嵌入式系统课题名称基于CPLD的智力竞赛抢答器专业电子信息工程班级电子信息0703学号200701030302姓名田博文指导教师陈爱萍2010年12月20日湖南工程学院课程设计任务书课程名称:嵌入式系统题目:基于CPLD的智力竞赛抢答器专业班级:电子信息0703学生姓名:田博文指导老师:陈爱萍审批:任务书下达日期2010年12月20日设计完成日期2010年12月31日设计内容与设计要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。有关知识可参见相关教材或参考书。一.设计内容1.设计一智力竞赛抢答器,可同时供8名选手参加比赛。2.给节目主持人设置一个控制开关,控制系统清零和抢答开始。3.抢答器具有锁存功能和显示功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示选手编号,同时扬声器响,禁止其他选手抢答。4.抢答器具有抢答定时功能,时间由主持人确定。5.参赛选手在设定的时间内抢答有效,定时器停止工作。6.如果定时时间到,无人抢答,本次抢答无效,系统报警,并封锁输入电路,禁止超时抢答,定时器显示00。7.为每组设计一个计分电路,0~999分,可加分,也可减分。二、设计要求:1、设计思路清晰,给出整体设计框图;2、设计各单元电路,完成其功能仿真和编译并生成低层模块;3、完成顶层设计并编译通过;4、完成设计下载并调试电路;5、写出设计报告;主要设计条件1.提供EDA实验室;2.提供EL实验箱和CPLD芯片;3.提供设计软件说明书格式1.课程设计封面;2.任务书;3.说明书目录;4.设计总体思路,基本原理和框图(顶层电路图);5.单元电路设计(各次级模块电路图);6.设计仿真;7.编程下载;8.总结与体会;9.附录;10.参考文献。进度安排星期一、二:下达设计任务书,介绍课题内容与要求;查找资料,确定总体设计方案和单元电路设计;星期三~第二周星期一:单元电路设计与仿真,硬件下载;第二周星期二、三:硬件下载;第二星期四、五:书写设计报告,打印相关图纸;答辩参考文献1.康华光主编.电子技术基础(数字部分),高等教育出版社。2.阎石主编.电子技术基础(数字部分),清华大学出版社。3.陈大钦主编,电子技术基础实验,高等教育出版社。4.彭介华主编,电子技术课程设计指导,高等教育出版社。5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。7.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社目录一、总体思路及原理…………………………………………………1二、各级模块设计及仿真……………………………………………11、抢答启动模块……………………………………………………1(1)按键识别子模块………………………………………………2(2)倒计时子模块…………………………………………………42、选手抢答模块……………………………………………………6(1)单个选手按键子模块…………………………………………6(2)判断抢答选手子模块…………………………………………73、加减分模块………………………………………………………9(1)组别判断子模块………………………………………………9(2)加减及寄存器子模块…………………………………………11(3)分数选择输出模块……………………………………………134、显示模块…………………………………………………………145、蜂鸣器模块………………………………………………………16四、实验箱的调试……………………………………………………18五、总结与体会………………………………………………………19六、参考文献…………………………………………………………21七、总原理图…………………………………………………………22-1-一、总体思路及原理抢答器原理是根据所要设计的系统功能,将整个系统划分成几个主要模块,再将每个模块细分成几个子模块,直到最底层的小模块容易编程实现为止。只需对底层元件编程实现,最后将各模块连接起来组成所需的系统。对于一个抢答器系统,可将其分为五个模块:选手抢答模块、抢答启动模块、加减分模块、显示模块、蜂鸣器控制模块,其中抢答启动模块具有启动抢答及启动定时功能,输出使能信号给选手识别模块,以及抢答剩余时间给显示模块;选手识别模块完成锁存抢答信号的功能,并输出选手号给显示模块;蜂鸣器对抢答成功以及超时鸣声报警;显示模块对输入的数据进行显示。二、各级模块设计1、抢答启动模块启动模块除了有启动的功能外,还有启动定时的功能。定时时间分为5秒和20秒两种,使用两个按键对应两种限时抢答。为此,将本模块再划分为2个子模:1)按键识别子模块按键的识别即对输入信号进行电平变化检测,电平发生跳变就认为是键被按下。但VHDL程序中一个结构体内不能同时对两个信号进行电平跳变的检测,所以对本模块的程序设计采用状态机来实现,并使用统一的时钟信号来扫描按键的电平状态。蜂鸣器模块选手抢答模块抢答启动模块加减分模块显示模块2.得分1.选手号3.倒计时-2-CLK1START5STAR20RSTBAS_FLAG按键识别子模块对START5和START20两个按键定义三种状态,START5按下为ST1状态,此时两个按键“START5&START20”输入电平为“01”;START20按下为ST2状态,此时电平为“10”;两个都没按下为ST0状态,此时电平为“11”。状态转换图如图所示。本模块程序为:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSTART_5_20ISPORT(CLK1,RST,START5,START20:INSTD_LOGIC;B,A:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--输出定时初值S_FLAG:OUTSTD_LOGIC);--置数信号ENDENTITY;ARCHITECTUREONEOFSTART_5_20ISSIGNALDATAIN:STD_LOGIC_VECTOR(1DOWNTO0);TYPEST_TYPEIS(ST0,ST1,ST2);--定义状态SIGNALC_ST:ST_TYPE;BEGINDATAIN=START5&START20;--两个输入信号放在一起判断PROCESS(RST,CLK1)BEGINIFRST='0'THEN--复位B=0000;A=0000;C_ST=ST0;S_FLAG='0';ELSIFCLK1'EVENTANDCLK1='1'THENCASEC_STISWHENST0=IFDATAIN=01THENC_ST=ST1;--输入信号为01,转ST1状态按键识别模块状态转换图ST0ST1ST2“01”其他“11”“11”其他“10”其他-3-按键识别模块仿真波形S_FLAG='1';--置数信号有效B=0000;A=0101;--定时初值“05”ELSIFDATAIN=10THENC_ST=ST2;--输入信号为10,转ST1状态S_FLAG='1';--置数信号有效B=0011;A=0000;--定时初值“30”ELSEC_ST=ST0;--输入信号为11,保持ST0状态ENDIF;WHENST1=IFDATAIN=11THENC_ST=ST0;--防按键抖动,为11时才转ST0状态S_FLAG='0';--置数信号无效ELSEC_ST=ST1;--按键没弹起,继续等待ENDIF;WHENST2=IFDATAIN=11THENC_ST=ST0;S_FLAG='0';ELSEC_ST=ST2;ENDIF;WHENOTHERS=C_ST=ST0;B=0000;A=0000;ENDCASE;ENDIF;ENDPROCESS;ENDARCHITECTURE;本模块仿真波形如图所示。-4-2)倒计时子模块倒计时需要1Hz的脉冲输入,每来一个上升沿,进行一次减一运算,将结果输出到TIMEB、TIMEA;置数信号LOAD输入有效,读入B、A端口的数据;输入L_CR信号与选手识别模块连接,当选手抢答成功后,L_CR信号为0,将倒计时清0.;若倒计时到,没有选手抢答,则在SR1输出1使扬声器发声。同时输出信号给选手抢答模块,禁止选手抢答。本模块程序为:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDE_COUNTISPORT(CLK2,LOAD,L_CR,RST:INSTD_LOGIC;B,A:INSTD_LOGIC_VECTOR(3DOWNTO0);TIMEB,TIMEA:OUTSTD_LOGIC_VECTOR(3DOWNTO0);TIMEOUT,SR1:OUTSTD_LOGIC);ENDENTITY;ARCHITECTURETWOOFDE_COUNTISBEGINPROCESS(LOAD,L_CR,RST,CLK2)VARIABLEP1,P0:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFLOAD='1'THENP1:=B;P0:=A;--指数信号有效,将B、A值读入P1、P0ELSIFL_CR='0'THEN--有选手抢答成功,L_CR输入为0,定时时间清0P1:=0000;P0:=0000;TIMEOUT='0';SR1='1';ELSIFRST='0'THENP1:=0000;P0:=0000;TIMEOUT='1';SR1='0';ELSIF(CLK2'EVENTANDCLK2='1')THENIFP0=0000THENIFP10THENP1:=P1-1;P0:=1001;--若个位为0,十位减1,个位赋为9ENDIF;ELSEP0:=P0-1;--若个位不为0,个位直接减一IFP0=0000ANDP1=0000THENTIMEOUT='1';SR1='1';--若时间到,输出锁存信号ENDIF;CLK2BALOADRSTL_CRTIMEBTIMEATIMEOUTSR1倒计时模块-5-倒计时模块仿真波形ENDIF;ENDIF;TIMEB=P1;TIMEA=P0;ENDPROCESS;ENDARCHITECTURE;程序中,因为每次减一后的时间值需要保存,用于下次继续减一,所以程序中使用了不完整的IF语句引入寄存器,用于保存每次减一后的时间值。P1、P0定义为变量而不是信号的原因是,变量的赋值是即时的,减一后可以马上进行判断;若定义为信号,不能即时进行判断,并且减一操作后的赋值要经过一个δ延时,程序不好控制。本模块仿真波形如图所示。两个子模块组合的程序为:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSTARTERISPORT(CLK1,CLK2,L_CR,RST,START5,START20:INSTD_LOGIC;TIMEB,TIMEA:OUTSTD_LOGIC_VECTOR(3DOWNTO0);TIMEOUT,SR1:OUTSTD_LOGIC);ENDENTITY;ARCHITECTURETHREEOFSTARTERISCOMPONENTSTART_5_20IS--调用元件START_5_20声明PORT(CLK1,RST,START5,START20:INSTD_LOGIC;B,A:OUTSTD_LOGIC_VECTOR(3DOWNTO0);S_FLAG:OUTSTD_LOGIC);ENDCOMPONENT;-6-COMPONENTDE_COUNTIS--调用元件DE_COUNT声明PORT(CLK2,LOAD,L_CR,R
本文标题:基于CPLD的智力竞赛抢答器
链接地址:https://www.777doc.com/doc-2537887 .html