EDA抢答器课程设计.docx

上传人:b****7 文档编号:9633697 上传时间:2023-02-05 格式:DOCX 页数:32 大小:259.62KB
下载 相关 举报
EDA抢答器课程设计.docx_第1页
第1页 / 共32页
EDA抢答器课程设计.docx_第2页
第2页 / 共32页
EDA抢答器课程设计.docx_第3页
第3页 / 共32页
EDA抢答器课程设计.docx_第4页
第4页 / 共32页
EDA抢答器课程设计.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

EDA抢答器课程设计.docx

《EDA抢答器课程设计.docx》由会员分享,可在线阅读,更多相关《EDA抢答器课程设计.docx(32页珍藏版)》请在冰豆网上搜索。

EDA抢答器课程设计.docx

EDA抢答器课程设计

湖南工程学院

课程设计

课程名称嵌入式系统

课题名称基于CPLD的智力竞赛抢答器

专业电子信息工程

班级电子信息0703

学号************

姓名李涛

指导教师陈爱萍

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

二、各级模块设计及仿真…………………………………………1

1、抢答启动模块……………………………………………………1

(1)按键识别子模块………………………………………………1

(2)倒计时子模块…………………………………………………4

2、选手抢答模块……………………………………………………7

(1)单个选手按键子模块…………………………………………7

(2)判断抢答选手子模块…………………………………………9

3、加减分模块………………………………………………………12

(1)组别判断子模块………………………………………………12

(2)加减及寄存器子模块…………………………………………13

(3)分数选择输出模块……………………………………………16

4、显示模块…………………………………………………………17

5、蜂鸣器模块………………………………………………………19

三、实验箱的调试…………………………………………………20

四、总结与体会……………………………………………………22

五、参考文献………………………………………………………24

六、整机原理图……………………………………………………24

 

一、原理及总体框架

抢答器原理是根据所要设计的系统功能,将整个系统划分成几个主要模块,再将每个模块细分成几个子模块,直到最底层的小模块容易编程实现为止。

只需对底层元件编程实现,最后将各模块连接起来组成所需的系统。

对于一个抢答器系统,可将其分为五个模块:

选手抢答模块、抢答启动模块、加减分模块、显示模块、蜂鸣器控制模块。

整体框图如下:

其中抢答启动模块具有启动抢答及启动定时功能,输出使能信号给选手识别模块,以及抢答剩余时间给显示模块;选手识别模块完成锁存抢答信号的功能,并输出选手号给显示模块;蜂鸣器对抢答成功以及超时鸣声报警;显示模块对输入的数据进行显示。

二、各级模块设计

1、抢答启动模块

启动模块除了有启动的功能外,还有启动定时的功能。

定时时间分为5秒和20秒两种,使用两个按键对应两种限时抢答。

将本模块再划分为2个子模:

一个模块完成按键识别的功能,另一模块完成倒计时功能。

1)按键识别子模块

按键的识别即对输入信号进行电平变化检测,电平发生跳变就认为是键被按下。

但VHDL程序中一个结构体内不能同时对两个信号进行电平跳变的检测,所以对本模块的程序设计采用状态机来实现,并使用统一的时钟信号来扫描按键的电平状态。

模块图如下:

 

对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_20IS

PORT(CLK1,RST,START5,START20:

INSTD_LOGIC;

B,A:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);--输出定时初值

S_FLAG:

OUTSTD_LOGIC);--置数信号

ENDENTITY;

ARCHITECTUREONEOFSTART_5_20IS

SIGNALDATAIN:

STD_LOGIC_VECTOR(1DOWNTO0);

TYPEST_TYPEIS(ST0,ST1,ST2);--定义状态

SIGNALC_ST:

ST_TYPE;

BEGIN

DATAIN<=START5&START20;--两个输入信号放在一起判断

PROCESS(RST,CLK1)

BEGIN

IFRST='0'THEN--复位

B<="0000";A<="0000";C_ST<=ST0;S_FLAG<='0';

ELSIFCLK1'EVENTANDCLK1='1'THEN

CASEC_STIS

WHENST0=>IFDATAIN="01"THEN

C_ST<=ST1;--输入信号为01,转ST1状态

S_FLAG<='1';--置数信号有效

B<="0000";A<="0101";--定时初值“05”

ELSIFDATAIN="10"THEN

C_ST<=ST2;--输入信号为10,转ST1状态

S_FLAG<='1';--置数信号有效

B<="0011";A<="0000";--定时初值“30”

ELSEC_ST<=ST0;--输入信号为11,保持ST0状态

ENDIF;

WHENST1=>IFDATAIN="11"THEN

C_ST<=ST0;--防按键抖动,为11时才转ST0状态

S_FLAG<='0';--置数信号无效

ELSEC_ST<=ST1;--按键没弹起,继续等待

ENDIF;

WHENST2=>IFDATAIN="11"THENC_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_COUNTIS

PORT(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_COUNTIS

BEGIN

PROCESS(LOAD,L_CR,RST,CLK2)

VARIABLEP1,P0:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFLOAD='1'THEN

P1:

=B;P0:

=A;--指数信号有效,将B、A值读入P1、P0

ELSIFL_CR='0'THEN--有选手抢答成功,L_CR输入为0,定时时间清0

P1:

="0000";P0:

="0000";TIMEOUT<='0';SR1<='1';

ELSIFRST='0'THENP1:

="0000";P0:

="0000";TIMEOUT<='0';SR1<='0';

ELSIF(CLK2'EVENTANDCLK2='1')THEN

IFP0="0000"THEN

IFP1>0THEN

P1:

=P1-1;P0:

="1001";--若个位为0,十位减1,个位赋为9

ENDIF;

ELSEP0:

=P0-1;--若个位不为0,个位直接减一

IFP0="0000"ANDP1="0000"THEN

TIMEOUT<='0';SR1<='1';--若时间到,输出锁存信号

ENDIF;

ENDIF;

ENDIF;

TIMEB<=P1;TIMEA<=P0;

ENDPROCESS;

ENDARCHITECTURE;

 

程序中,因为每次减一后的时间值需要保存,用于下次继续减一,所以程序中使用了不完整的IF语句引入寄存器,用于保存每次减一后的时间值。

P1、P0定义为变量而不是信号的原因是,变量的赋值是即时的,减一后可以马上进行判断;若定义为信号,不能即时进行判断,并且减一操作后的赋值要经过一个δ延时,程序不好控制。

本模块仿真波形如图所示:

图6倒计时模块仿真波形

用元件例化语句将以上两个子模块组合,得到整个抢答启动模块。

如下图所示:

 

两个子模块组合的程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSTARTERIS

PORT(CLK1,CLK2,L_CR,RST,START5,START20:

INSTD_LOGIC;

TIMEB,TIMEA:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

TIMEOUT,SR1:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTURETHREEOFSTARTERIS

COMPONENTSTART_5_20IS--调用元件START_5_20声明

PORT(CLK1,RST,START5,START20:

INSTD_LOGIC;

B,A:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_FLAG:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTDE_COUNTIS--调用元件DE_COUNT声明

PORT(CLK2,LOAD,L_CR,RST:

INSTD_LOGIC;

B,A:

INSTD_LOGIC_VECTOR(3DOWNTO0);

TIMEB,TIMEA:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

TIMEOUT,SR1:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALm,n:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALp:

STD_LOGIC;--对应图7中的中间信号

BEGIN--按照图7将两个元件连接起来

U1:

START_5_20PORTMAP(CLK1=>CLK1,START5=>START5,START20=>START20,

RST=>RST,B=>m,A=>n,S_FLAG=>p);

U2:

DE_COUNTPORTMAP(CLK2=>CLK2,B=>m,A=>n,LOAD=>p,RST=>RST,

L_CR=>L_CR,TIMEB=>TIMEB,TIMEA=>TIMEA,

TIMEOUT=>TIMEOUT,SR1=>SR1);

ENDARCHITECTURE;

2、选手抢答模块

在一个结构体中用8个进程同时对8个选手按键电平变化的监测是不可实现的,所以将本模块划分为两个子模块:

单个选手按键模块和判断抢答选手模块。

最后将8个选手按键模块和1个判断抢答选手模块连接起来,得到整个选手抢答模块。

1)单个选手按键子模块

按键输入相当于该实体的时钟信号,键被按下,等于来一个脉冲,输出信号给判断模块进行选手号的判断。

只要有选手抢答成功,相关模块会输出信号使8个按键模块的LOCK信号有效,禁止其他选手抢答。

如图所示。

 

 

本模块程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYBUTTON1IS

PORT(LOCK,BUTTON,RST:

INSTD_LOGIC;

PRESSED:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTUREB1OFBUTTON1IS

BEGIN

PROCESS(RST,BUTTON)--使用进程时刻监测RST、BUTTON信号

BEGIN

IFRST='0'THEN

PRESSED<='0';--复位

ELSIFBUTTON'EVENTANDBUTTON='0'THEN

IFLOCK='1'THEN--键被按下并且LOCK信号无效

PRESSED<='1';--则输出信号给判断模块

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTURE;

图9倒计时模块仿真波形

 

2)判断抢答选手子模块

本子模块接收8个按键子模块的输出信号,如收到1号子模块输出的高电平,则输出选手号“0001”;并发出信号使扬声器发声并控制8个按键子模块使它们的LOCK信号有效,禁止其他选手抢答。

本子模块端口设置如图所示。

 

本子模块程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYIDENTIFIERIS

PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:

INSTD_LOGIC;

P_NUM:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

LOCK,SR1:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTUREONEOFIDENTIFIERIS

SIGNALP:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

P<=PP8&PP7&PP6&PP5&PP4&PP3&PP2&PP1;--8个输入放在一起判断

PRO1:

PROCESS(P)--输入若发生变化,马上启动进程进行判断

BEGIN

CASEPIS

WHEN"00000001"=>P_NUM<="0001";LOCK<='0';SR1<='1';--1号选手

WHEN"00000010"=>P_NUM<="0010";LOCK<='0';SR1<='1';--2号选手

WHEN"00000100"=>P_NUM<="0011";LOCK<='0';SR1<='1';--3号选手

WHEN"00001000"=>P_NUM<="0100";LOCK<='0';SR1<='1';--4号选手

WHEN"00010000"=>P_NUM<="0101";LOCK<='0';SR1<='1';--5号选手

WHEN"00100000"=>P_NUM<="0110";LOCK<='0';SR1<='1';--6号选手

WHEN"01000000"=>P_NUM<="0111";LOCK<='0';SR1<='1';--7号选手

WHEN"10000000"=>P_NUM<="1000";LOCK<='0';SR1<='1';--8号选手

WHENOTHERS=>P_NUM<="0000";LOCK<='1';SR1<='0';

ENDCASE;

ENDPROCESS;

ENDARCHITECTURE;

图11判断抢答选手模块仿真波形

所以将以上两个子模块用元件例化语句连接起来,组成整个选手抢答模块,如下图所示。

实现程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYBUTTONIS

PORT(P1,P2,P3,P4,P5,P6,P7,P8,RST,LOCK:

INSTD_LOGIC;

P_NUM:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

LOCK_S,SR1:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTUREBB1OFBUTTONIS

COMPONENTBUTTON1IS--调用元件BUTTON1声明

PORT(LOCK,B,RST:

INSTD_LOGIC;

PRESSED:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTIDENTIFIERIS--调用元件IDENTIFIER声明

PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:

INSTD_LOGIC;

P_NUM:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

LOCK,SR1:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa1,a2,a3,a4,a5,a6,a7,a8:

STD_LOGIC;--定义图12中的中间信号

BEGIN--按照图12将两个元件连接起来

U1:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P1,RST=>RST,PRESSED=>a1);

U2:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P2,RST=>RST,PRESSED=>a2);

U3:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P3,RST=>RST,PRESSED=>a3);

U4:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P4,RST=>RST,PRESSED=>a4);

U5:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P5,RST=>RST,PRESSED=>a5);

U6:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P6,RST=>RST,PRESSED=>a6);

U7:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P7,RST=>RST,PRESSED=>a7);

U8:

BUTTON1PORTMAP(LOCK=>LOCK,B=>P8,RST=>RST,PRESSED=>a8);

U9:

IDENTIFIERPORTMAP(PP1=>a1,PP2=>a2,PP3=>a3,PP4=>a4,PP5=>a5,PP6=>a6,

PP7=>a7,PP8=>a8,P_NUM=>P_NUM,LOCK=>LOCK_S,SR1=>SR1);

ENDARCHITECTURE;

3、加减分模块

加减分模块要识别按下的按键:

加5分按键及减5分按键。

所以采用状态机的方法来识别。

将本模块划分为三个子模块:

组别判断子模块,加减及寄存器子模块,分数选择输出子模块。

1)组别判断子模块

该模块要实现的功能是根据抢答成功的选手编号,判断出该选手属于哪组,并输出使能信号允许该组的分数寄存器进行加减操作。

如图所示。

 

实现程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDECODEIS

PORT(CLK:

INSTD_LOGIC;

P_NUM:

INSTD_LOGIC_VECTOR(3DOWNTO0);

EN1,EN2,EN3,EN4:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTUREONEOFDECODEIS

SIGNALE:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(CLK)--引入时钟信号,协调各部分电路的工作

BEGIN

IFCLK'EVENTANDCLK='1'THEN

CASEP_NUMIS

WHEN"0001"=>E<="0001";WHEN"0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1