您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于VHDL的智力竞赛抢答器的设计与实现

基于VHDL的智力竞赛抢答器的设计与实现

来源:华佗小知识
 基于VHDL的智力竞赛抢答器设计

第 1 页 共 11 页

摘 要 本课程设计主要内容是利用EDA技术设计一个可容纳四组选手的智力竞赛抢答器,全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程。本课程设计的开发仿真工具是MAX+plus II,采用自顶向下、逐层细化的设计方法设计整套系统,顶层模块用图形描述,底层文件用VHDL语言描述.通过波形仿真,实现了智力竞赛抢答器的基本功能,达到了设计要求。

关键字 智力竞赛抢答器;EDA技术;VHDL;MAX+plus II;自顶向下

1 引 言

20世纪90年代,引进数字系统设计方法发生突破性变革的技术是VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言).它是一种IEEE—1076标准所规范的硬件描述语言,主要用于算法级、寄存器级到门级的多种抽象设计层次的数字系统建模,已成为电子设计自动化(EDA)的一种重要手段。

本课程设计的主要目的是:全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养设计综合电路的能力,养成编写文档资料的习惯和规范编程的思想.

2 智力竞赛抢答器的主要功能

设计一个4人参加的智力竞赛抢答计时器.该系统具有回答问题时间控制的功能,要求回答问题时间小于等于100秒(显示为0~99),时间显示采用倒计时方式.当达到限定时间时,发出声响以示警告;当有某一参赛者首先按下抢答开关时,相应显示灯亮并伴有声响,此时抢答器不再接受其他输入信号.智力竞赛抢答器的功能分块如图2-1所示。

基于VHDL的智力竞赛抢答器设计

顶层文件QDQ 第 2 页 共 11 页

jianbie模块 suocunqi 模块 zhuanhuan模块 sanxuanyi模块 daojishi 模块 pianxuan模块 xianshi模块 图2—1智力竞赛抢答器功能模块划分图

该智力竞赛抢答器分为七个模块,分别为:鉴别模块、锁存器模块、转换模块、选择输出模块、倒计时模块、片选模块和显示模块。

3 主要功能的实现

3.1 鉴别功能

鉴别模块jianbie如图3—1所示,输入信号CLK和CLR,若CLR=“0\",表示无人按键,输出信号Q为0;若CLR=“1”,表示有人按键,输出信号Q为1。 图3—1 jianbie模块 鉴别模块源代码如下:

LIBRARY IEEE;

USE IEEE。STD_LOGIC_11。ALL; ENTITY jianbie IS

PORT(CLK,CLR:IN STD_LOGIC; Q :OUT STD_LOGIC); END jianbie;

ARCHITECTURE jianbie_mk OF jianbie IS BEGIN

PROCESS(CLK,CLR) BEGIN

IF CLR='0’THEN ——利用IF_THEN_ELSE语句 Q〈=’0’;

基于VHDL的智力竞赛抢答器设计

第 3 页 共 11 页

ELSIF CLK’EVENT AND CLK=’0’THEN -—检测时钟下降沿 Q〈='1’; END IF; END PROCESS; END jianbie_mk;

鉴别模块程序调试波形如图3—2所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟下降沿开始Q输出高电平.

图3—2鉴别模块仿真波形图

3.2 锁存器功能

锁存器模块suocunqi如图3-3所示,锁存器对四位答题者的结果进行锁存,并将其赋给输出信号Q1,Q2,Q3,Q4.

图3—3 suocunqi模块

锁存器模块源代码如下:

LIBRARY IEEE;

USE IEEE。STD_LOGIC_11。ALL; ENTITY suocunqi IS

PORT(D1,D2,D3,D4:IN STD_LOGIC;

CLK,CLR:IN STD_LOGIC; Q1,Q2,Q3,Q4,ALM:OUT STD_LOGIC); END suocunqi;

ARCHITECTURE suocunqi_mk OF suocunqi IS BEGIN PROCESS(CLK) BEGIN IF CLR='0'THEN Q1〈=’0’; Q2<='0’; Q3〈='0’; Q4<=’0’;

基于VHDL的智力竞赛抢答器设计

第 4 页 共 11 页

ALM〈='0';

ELSIF CLK’EVENT AND CLK=’1'THEN ——检测CLR为高电平,则有人抢答

Q1〈=D1; Q2〈=D2; Q3<=D3; Q4〈=D4; ALM〈=’1’; END IF; END PROCESS; END suocunqi_mk;

锁存器模块程序调试波形如图3-4所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟上升沿开始:将D1赋给Q1、将D2赋给Q2、将D3赋给Q3、将D4赋给Q4,并输出ALM为1;在CLR为低电平时无 输出。

图3-4锁存器模块仿真波形图

3。3 转换功能

转换模块zhuanhuan如图3—5所示,把抢答结果转化为一个四位二进制数,表示抢答者的编号。

图3—5 zhuanhuan模块

转换模块源代码如下: LIBRARY IEEE;

USE IEEE。STD_LOGIC_11。ALL; ENTITY zhuanhuan IS

PORT(D1,D2,D3,D4:IN STD_LOGIC;

Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END zhuanhuan;

ARCHITECTURE zhuanhuan_mk OF zhuanhuan IS BEGIN

基于VHDL的智力竞赛抢答器设计

PROCESS(D1,D2,D3,D4)

VARIABLE TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

TMP:=D1&D2&D3&D4; CASE TMP IS

第 5 页 共 11 页

WHEN ”1000\"=>Q〈=\"0001\"; -—类似于真值表的CASE语句 WHEN ”0100”=〉Q〈=”0010\"; WHEN ”0010”=〉Q<=”0011”; WHEN ”0001\"=〉Q<=”0100”; WHEN OTHERS=>Q〈=”0000\"; END CASE; END PROCESS; END zhuanhuan_mk;

转换模块程序调试波形如图3—6所示,通过此模块将D1D2D3D4的输入结果转换成Q1Q2Q3Q4这种四位二进制数,当D1=‘1',其他三位为‘0’时,输出Q为“0001\";当D2=‘1',其他三位为‘0’时,输出Q为“0010”;当D3=‘1’,其他三位为‘0’时,输出Q为“0011”;当D4=‘1',其他三位为‘0’时,输出Q为“0100\";其他情况下,输出Q为“0000”。

图3—6 转换模块仿真波形图

3。4 选择输出功能

选择输出模块sanxuanyi如图3—7所示,用两个四位二进制数表示倒计时,其中D1为高位,D2为低位,用一个四位二进制数D3表示抢答号,输出信号Q1和Q2,其中Q1和Q2作为显示模块中数码管的输入值.通过SEL的值控制Q1和 Q2输出抢答号或者倒计时,当SEL=‘0'时为输出倒计时状态,Q1代表高位,Q2代表低位;当SEL=‘1’时,为显示抢答号状态,Q1输出为‘0’,Q2的输出代表抢答者编号。

图3—7 sanxuanyi模块

选择输出模块源代码如下:

LIBRARY IEEE;

基于VHDL的智力竞赛抢答器设计

USE IEEE。STD_LOGIC_11。ALL; ENTITY sanxuanyi IS PORT(SEL:IN STD_LOGIC;

D1,D2,D3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q1,Q2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END sanxuanyi;

ARCHITECTURE sanxuanyi_mk OF sanxuanyi IS BEGIN

PROCESS(SEL,D1,D2,D3) BEGIN

IF SEL='1' THEN

Q1〈=”0000”;Q2<=D3; ELSE Q1〈=D1;Q2〈=D2; END IF;

END PROCESS; END sanxuanyi_mk;

第 6 页 共 11 页

选择输出模块程序调试波形如图3—8所示,由SEL控制Q的输出,当SEL为‘1’时,将D3赋给Q2,“0000\"赋给Q1,输出结果代表抢答者编号;当SEL为‘0'时,将D2赋给Q2,D1赋给Q1,输出结果代表倒计时.

图3—8 选择输出模块仿真波形图

3。5 倒计时功能

倒计时模块daojishi如图3—9所示,用两个四位二进制数表示倒计时,定义变量HH,LL,由时钟CLK和使能信号EN控制,其中EN的值由锁存器模块中的ALM控制.当倒计时至HH==0,LL==0时,发出声音停止计时,输出H(XXX),L(XXX)。

图3—9 daojishi模块

倒计时模块源代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11。ALL;

基于VHDL的智力竞赛抢答器设计

USE IEEE。STD_LOGIC_UNSIGNED。ALL; ENTITY daojishi IS

PORT(CLK,EN:IN STD_LOGIC; H,L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SOUND:OUT STD_LOGIC); END daojishi;

ARCHITECTURE daojishi_mk OF daojishi IS BEGIN

PROCESS(CLK,EN)

VARIABLE HH,LL:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK=’1’THEN

第 7 页 共 11 页

IF EN=’1'THEN —-EN=1驱动倒计时模块开始倒计时 SOUND〈=’0'; HH:=”1001\"; LL:=”1001\"; ELSIF LL=0 THEN IF HH=0 THEN

SOUND〈=’1’; -—倒计时至0时,输出超时报警信号

ELSE LL:=”1001”; HH:=HH—1; END IF; ELSE LL:=LL-1; END IF; END IF; H〈=HH; L<=LL;

基于VHDL的智力竞赛抢答器设计

END PROCESS; END daojishi_mk;

第 8 页 共 11 页

倒计时模块程序调试波形如图3-10所示,当EN为“1”时,在时钟上升沿将“1001\"赋给H和L,准备进入倒计时;从EN为“0\"且时钟的上升沿到来时,H和L的值开始以逐渐递减,即从99倒计时到0,同时倒计时至0时,输出超时报警信号SOUND=1。

图3—10 倒计时模块仿真波形图

3。6 片选功能

片选模块pianxuan如图3—11所示,该模块用于控制选择输出模块输出倒计时或者抢答号,其中EN1的值由锁存器模块中的ALM控制。

图3—11 pianxuan模块

片选模块源代码如下:

LIBRARY IEEE;

USE IEEE。STD_LOGIC_11。ALL; ENTITY pianxuan IS

PORT(CLK,EN1:IN STD_LOGIC; A :OUT STD_LOGIC); END pianxuan;

ARCHITECTURE pianxuan_mk OF pianxuan IS BEGIN

PROCESS(CLK,EN1) BEGIN

IF EN1='0'THEN --利用IF_THEN_ELSE语句 A<=’0’;

ELSIF CLK'EVENT AND CLK=’1’THEN ——检测时钟上升沿 A〈=’1’; END IF; END PROCESS; END pianxuan_mk;

基于VHDL的智力竞赛抢答器设计

第 9 页 共 11 页

片选模块程序调试波形如图3—12所示,EN1=’0’时,将‘0'赋给A;当EN1='1'时,在CLK时钟信号的下一个时钟上升沿将‘1’赋给A.

图3-12 片选模块仿真波形图

3.7 显示功能

显示模块如图3—13所示,将所有进程中的数值转换成七位二进制数.

图3—13 xianshi模块

显示模块源代码如下: LIBRARY IEEE;

USE IEEE。STD_LOGIC_11.ALL; ENTITY xianshi IS PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END xianshi;

ARCHITECTURE xianshi_mk OF xianshi IS BEGIN PROCESS(D)

BEGIN CASE D IS WHEN\"0000\"=>Q〈=\"0111111\"; WHEN\"0001\"=>Q<=”0000110”; WHEN”0010\"=〉Q〈=”1011011”; WHEN”0011\"=〉Q〈=\"1001111\"; WHEN\"0100”=〉Q<=”1100110”; WHEN\"0101”=〉Q<=”1101101\"; WHEN\"0110\"=〉Q<=”1111101”; WHEN”0111”=>Q〈=”0000111\"; WHEN\"1000”=〉Q〈=”1111111”; WHEN\"1001”=〉Q〈=\"1101111”; WHEN OTHERS=〉Q〈=”0000000”;

基于VHDL的智力竞赛抢答器设计

END CASE; END PROCESS; END xianshi_mk;

第 10 页 共 11 页

显示模块程序仿真波形如图3—14所示,将输入信号D转变成能在七段数码管上显示的七位二进制数。

图3—14 显示模块仿真波形图

3.8 顶层模块

各模块连接后形成顶层文件的电路图如图3—15所示。

图3—15 各模块连接后的电路图

顶层文件仿真波形如图3-16所示,D2最先获得抢答权,输出声音信号SOUND=1,在数码管上显示抢答号,Q1输出“0111111”(0),Q2输出“1011011”(2),代表抢答号为02;之后自动进入倒计时状态,将“1101111\"(9)赋给Q1和Q2,同时开始自动倒计时,倒计时至0时,输出超时报警信号SOUND=1,停止倒计时。

图3—16 顶层文件仿真波形图

4 总结

4。1 智力竞赛抢答器设计结果

通过MAX+plus II的仿真,证明了本系统在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后发出声音提示,并能通过译码器显示抢答号;在两组或者两组以上信号同时抢答时视抢答无效。抢答成功后,系统开启倒计时功能,并且能够准确计时将时间呈两位数显示;倒计时开始后从99秒倒计时至0秒并通过译码器实时显示计时结果,当倒计时至0秒时,停止倒计时,发出超时报警信号。

4。2 学习总结

在整个设计过程中,主要需要考虑的问题如下:将整套系统划分成多个子 模块,通过画流程图分析各模块之间的联系,以达到设计要求;程序中电路的时序设计;修改程序中的语法错误;程序仿真时波形的设计;根据波形仿真现象修改程序逻辑错误;对VHDL基本语法的掌握;掌握使用MAX+plus II编辑程序、

基于VHDL的智力竞赛抢答器设计

编译、设计波形、仿真的方法。

第 11 页 共 11 页

通过本次课程设计,我们加深了对EDA技术、VHDL语言基本语法知识及程序基本框架的理解,将理论知识应用到实践中,提高了动手能力,同时养成了编写文档的习惯.整套系统运用MAX+plus II编程、调试、仿真,使我们对这个软件的使用熟练了很多。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务