基于FPGA四路电子抢答器设计

更新时间:2023-07-28 19:16:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA课程设计四路电子抢答器设计

基于FPGA四路电子抢答器设计

基于FPGA四路电子抢答器设计

摘要:介绍一种基于FPGA的抢答器设计,给出了顶层电路原理图和主模块的部分VHDL源程序。利用MAX+PLUSⅡ开发平台完成了编译、仿真,并下载到EPF10K10LC84-4器件中进行测试。该抢答器不仅能实现互锁、自锁和倒计时功能,而且能用声音、数码管准确提示抢答的优先结果和犯规情况,具有广泛的应用前景。

关键词:抢答器;FPGA;VHDL;仿真

EDA课程设计四路电子抢答器设计

Abstrsct :This paper introduces the design of answering racer based on FPGA.The toplayer schematic and parts of VHDL source

Program are presented.Its encoding and simulation are compeleted with MAX+PLUSⅡ.The program is tested by EPF10LC84-4.The function of interlock,self lock and invert counter is performed with sound and BCD-TO-SEVEN-SEGMENT showwing the priority and rule-broken.

Key worlds:answering racer;FPGA;VHDL;simulation

一、引言

现场可编程门阵列(简称FPGA)是20世纪80年代末出现的高密度可编程逻辑器件,采用基于静态随机存储器的FPGA是易失性的,每次重新加电,FPGA都要重新装入配置数据。

突出优点是可反复编程,系统上电时,给FPGA加载不同的配置数据,即可令其完成不同的硬件功能[1]。本文利用Max+plusⅡ软件作为开发工具,设计了一种基于FPGA的抢答器。该抢答器具有外围电路少,系统功能扩展性强,大

EDA课程设计四路电子抢答器设计

大缩短了产品的研发周期,提高了设计的可靠性和成功率。

VHDL语言是一种用于电路设计的高级语言。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体分成外部和内部,既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

二、设计要求

抢答器主要由抢答模块、计时模块、选择模块,位循环模块和译码模块组成。在整个抢答器中主持人在抢答前设置好抢答时间,在复位开始按键按下后,抢答器开始倒计时,若在计时时间内无人抢答,则抢答器报警提示,若在计时过程中有人抢答,则数码管显示第一个抢答的人的编号,同时停止计时。抢答器共有3个输出显示,选手代号、计数器的个位和十位,他们输出全都为BCD码输出,这样便于和显示译码器连接。

(1) 抢答器可容纳四位选手使用。

(2)电路具有第一抢答信号的鉴别和清零功能。在主持人将系统复位并发出抢答指令后,抢答开始,若参赛选手按抢答按钮,则该组指示灯亮并用显示器显示选手的号码,此时,电路具备自锁功能,使其它抢答按钮不起作用。如果无人抢答,主持人可以按复位键,开始新一轮的抢答。

三、 设计方案

1、抢答锁存模块;

在这个模块中主要实现抢答过程中的抢答功能。在抢答开始后,当任意一路抢答器按下后,信号输入并进行锁存,这时其它抢答按键再按下也不起作用。此

EDA课程设计四路电子抢答器设计

模块有A、B、C、D四路抢答输入信号;复位信号R;输出报警信号BJ;数据输出信号Y。

2、抢答器计时模块:

在这个模块中主要实现抢答过程中的计时功能。在抢答开始主持人按下复位键后进行60秒的倒计时,并且在60秒倒计时后无人抢答显示超时并报警,若有选手抢答则计时停止,主持人也可以手动设置计时时间。此模块包含时钟信号CLK;系统复位信号R;修改时间使能信号EN;无人抢答警报信号BJ;有人抢答停止计时信号ST;时间设置输入十位和个位信号cg,cs;计时十位和个位输出信号SW,GW。

3、数据选择模块:

在这个模块中主要实现抢答过程中的数据循环显示功能,通过SEL信号的循环输入,从而控制数码管的循环显示,利用人眼的视觉停留使人感觉数码管是同时常亮的。此模块包含输入显示位控制信号SEL;数据输入信号H,G,S;数据输出信号Z 。

4、译码模块:

在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。在本 次课设中主要用于对时间的个位、十位的数值进行相应的译码,使其在数码 管上能显示出正常数字。此模块包含输入信号SJ,输出信号Y。

5、位循环模块:

实现抢答过程中对数码管扫描显示位的控制。在本次课设中共利用了三个数码管,所以将SEL设置在000,001,010三个数之间循环,使得数 码管仅显示后三位。此模块包含CLK控制信号,复位控制信号R,输出信号SEL。

四、子模块设计与仿真

(一)抢答锁存模块

1、VHDL源程序

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY QDMK IS

EDA课程设计四路电子抢答器设计

PORT(A,B,C,D:IN std_logic;

R:IN std_logic;

SIGNAL CLK:IN std_logic;

BJ:OUT std_logic;

Y:buffer std_logic_vector(6 DOWNTO 0));

END QDMK;

ARCHITECTURE behave OF QDMK IS

BEGIN

PROCESS(A,B,C,D,R,CLK)

BEGIN

IF R='1'THEN

Y<="0000000";

BJ<='0';

ELSIF CLK'event AND CLK='1'THEN

IF Y<="0000000" THEN

IF A='1' THEN

Y<="0110000";

ELSIF B='1' THEN

Y<="1101101";

ELSIF C='1' THEN

Y<="1111001";

ELSIF D='1' THEN

Y<="0110011";

END IF;

ELSE NULL;

END IF;

BJ<=A OR B OR C OR D;

END IF;

END PROCESS;

END behave;

2、仿真图

EDA课程设计四路电子抢答器设计

由图中可看出在复位信号R从高电平降到低电平后,抢答器开始正常工作,A最先抢答,这时开始报警,数码管输出显示1,说明A最先抢答。

(二)计时模块

1、VHDL源程序

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY JS IS

PORT(R,ST,EN,CLK:IN std_logic;

cg,cs:IN std_logic_vector(3 DOWNTO 0);

GW,SW:BUFFER std_logic_vector(3 DOWNTO 0);

BJ:OUT std_logic);

END JS;

ARCHITECTURE behave OF JS IS

BEGIN

PROCESS(R,EN,ST,CLK)

BEGIN

IF ST='0'THEN

IF R='1'THEN

IF EN='1'THEN

GW<=cg;

SW<=cs;

BJ<='0';

ELSE GW<="0000";

SW<="0110";

BJ<='0';

END IF;

ELSIF CLK'EVENT AND CLK='1'THEN

IF GW<="0000"THEN

GW<="1001";

IF SW="0000"THEN

SW<="0110";

ELSE SW<=SW-1;

END IF;

ELSE GW<=GW-1;

END IF;

IF GW="0000"AND SW<="0000"THEN

GW<="0000";

SW<="0110";

BJ<='1';

EDA课程设计四路电子抢答器设计

END IF;

END IF;

ELSE BJ<='0';

END IF;

END PROCESS;

END behave;

2、仿真图

从图中可看出,在复位信号为1时,始能信号EN为1,这时计时时间改变为cs,cg中输入的06秒,在复位信号变为0后开始计时,在计时时间到达0时由于无人抢答(由停止信号ST控制),故产生报警信号开始报警。在停止信号为1后,停止计时,在停止信号为0时,计时再次开始。

(三)数据选择模块

1、VHDL源程序

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY XZMK IS

PORT(SEL:IN std_logic_vector(2 DOWNTO 0);

H,S,G:IN std_logic_vector(6 DOWNTO 0);

Z:OUT std_logic_vector(6 DOWNTO 0));

END XZMK;

ARCHITECTURE behave OF XZMK IS

BEGIN

WITH SEL SELECT

Z<=H when"000",

G when"001",

S when"010",

EDA课程设计四路电子抢答器设计

"0000000" when others;

END behave;

2、仿真图

从图中可看出,在SEL信号为2时,输出计时时间的十位(S信号),在SEL信号为1时,输出计时时间的个位(G信号),在SEL信号为0时,输出最先抢答的抢答器的编号(H信号)。

(四)译码模块

1、VHDL源程序

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY YMMK IS

PORT(SJ:IN std_logic_vector(3 DOWNTO 0);

Y:OUT std_logic_vector(6 DOWNTO 0));

END ENTITY;

ARCHITECTURE behave OF YMMK IS

BEGIN

PROCESS(SJ)

BEGIN

CASE SJ IS

WHEN"0000"=>Y<="1111110";

WHEN"0001"=>Y<="0110000";

WHEN"0010"=>Y<="1101101";

WHEN"0011"=>Y<="1111001";

WHEN"0100"=>Y<="0110011";

WHEN"0101"=>Y<="1011011";

WHEN"0110"=>Y<="1011111";

WHEN"0111"=>Y<="1110000";

WHEN"1000"=>Y<="1111111";

WHEN"1001"=>Y<="1110011";

EDA课程设计四路电子抢答器设计

WHEN OTHERS=>Y<="0000000";

END CASE;

END PROCESS;

END behave;

2、仿真

从图中可看出,本模块对输入的BCD码信号(SJ信号)进行了编译,输出信号Y,使其能在数码管上对应显示出相应的数值。

(五)位循环模块

1、VHDL源程序

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY SEL IS

PORT(CLK,R:IN std_logic;

SEL:buffer std_logic_vector(2 DOWNTO 0));

END SEL;

ARCHITECTURE behave OF SEL IS

BEGIN

PROCESS(CLK,R)

BEGIN

IF R='1' THEN

SEL<="000";

ELSIF CLK'EVENT AND CLK='1'THEN

IF SEL="010"THEN

SEL<="000";

EDA课程设计四路电子抢答器设计

ELSE SEL<=SEL+1;

END IF;

END IF;

END PROCESS;

END behave;

2、仿真

从图中看出,在复位开始信号为1时不工作,在为0后开始工作,SEL信号在0-2这三个数内随CLK信号的变化循环,实现数码管的循环显示。

五、完整电路设计与分析

(一)主电路图

下图为具有完整抢答器功能的结构图,其中用到了抢答模块一个,计时模块一个,

译码模块两个,选择模块一个,位循环模块一个。共有17个输入,11个输出。

EDA课程设计四路电子抢答器设计

(二)时序仿真图

下图为整个模块的时序仿真图,由图中可看出,在复位信号为0后,抢答器开始工作,在有抢答信号后抢答器报警,数码管轮流显示计时时间及最先抢答的抢答器对应的号码。

(三)芯片引脚分布图

下图为将程序下载到芯片前设置的引脚分布。

EDA课程设计四路电子抢答器设计

六、性能测试与分析

将R键拨到0观察数码管是否开始从60倒计时,然后再将R键拨回1,之后将使能信号EN拨至1,将cs,cg设置为想要输入的时间,然后将R拨至0,观察数码管是否显示修改过之后的时间,并从设置好的时间开始计时。在计时功能验证完成后,按下抢答信号,此时抢答器发出警报声,并在数码管上显示出最先抢答的组对应的编号,说明抢答器功能正常。

七、实验设备

装有QuartusⅡ的计算机,教学实验箱,导线若干。

八、心得体会

在EDA技术中最为瞩目的是以现代电子技术为特征的逻辑设计仿真测试技术。该技术只需要通过计算机就能对所设计的电子系统从不同层次的性能特点上,进行一系列准确的测试和仿真,大大的方便了我们的设计,避免了受现实中有限的器件的限制。

EDA课程设计四路电子抢答器设计

在本次课程设计中,我做的是四路抢答器。在最开始的一个礼拜,我先是从网络上找到了类似题目的课程设计,参考并阅读了他人的程序,然后再在电脑上按模块编写成序,编写完成后进行了仿真。在编写程序的过程中,我发现自己在对VHDL语言的掌握上还有很多欠缺,程序也是经过了许多遍的修改之后,才做到了在尽可能简练的基础上将功能完整实施出来。在自模块编写完成后我又开始进行了完整电路的设计,在电路连接完成后进行了时序仿真,在第一次仿真完成后我发现电路仿真结果与预期所设想的还存在一些差距,经检查发现是计时模块有一点问题,在经过改正之后,终于仿真出理想的时序图。

在这次课程设计中,我体会到了要想完成一个完整的设计是多么复杂与不易。通过这次课设,锻炼了我进行编程以及设计的能力,也让我认识到了自己的不足,更坚定了我认真学习的决心。

本文来源:https://www.bwwdw.com/article/dphm.html

Top