您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于VHDL的智力竞赛抢答器的设计与实现
基于VHDL的智力竞赛抢答器设计第1页共15页摘要本课程设计主要内容是利用EDA技术设计一个可容纳四组选手的智力竞赛抢答器,全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程。本课程设计的开发仿真工具是MAX+plusII,采用自顶向下、逐层细化的设计方法设计整套系统,顶层模块用图形描述,底层文件用VHDL语言描述。通过波形仿真,实现了智力竞赛抢答器的基本功能,达到了设计要求。关键字智力竞赛抢答器;EDA技术;VHDL;MAX+plusII;自顶向下1引言20世纪90年代,引进数字系统设计方法发生突破性变革的技术是VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,超高速集成电路硬件描述语言)。它是一种IEEE-1076标准所规范的硬件描述语言,主要用于算法级、寄存器级到门级的多种抽象设计层次的数字系统建模,已成为电子设计自动化(EDA)的一种重要手段。本课程设计的主要目的是:全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养设计综合电路的能力,养成编写文档资料的习惯和规范编程的思想。2智力竞赛抢答器的主要功能设计一个4人参加的智力竞赛抢答计时器。该系统具有回答问题时间控制的功能,要求回答问题时间小于等于100秒(显示为0~99),时间显示采用倒计时方式。当达到限定时间时,发出声响以示警告;当有某一参赛者首先按下抢答开关时,相应显示灯亮并伴有声响,此时抢答器不再接受其他输入信号。智力竞赛抢答器的功能分块如图2-1所示。基于VHDL的智力竞赛抢答器设计第2页共15页图2-1智力竞赛抢答器功能模块划分图该智力竞赛抢答器分为七个模块,分别为:鉴别模块、锁存器模块、转换模块、选择输出模块、倒计时模块、片选模块和显示模块。3主要功能的实现3.1鉴别功能鉴别模块jianbie如图3-1所示,输入信号CLK和CLR,若CLR=“0”,表示无人按键,输出信号Q为0;若CLR=“1”,表示有人按键,输出信号Q为1。图3-1jianbie模块鉴别模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYjianbieISPORT(CLK,CLR:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDjianbie;ARCHITECTUREjianbie_mkOFjianbieIS顶层文件QDQdaojishi模块sanxuanyi模块pianxuan模块xianshi模块jianbie模块suocunqi模块zhuanhuan模块基于VHDL的智力竞赛抢答器设计第3页共15页BEGINPROCESS(CLK,CLR)BEGINIFCLR='0'THEN--利用IF_THEN_ELSE语句Q='0';ELSIFCLK'EVENTANDCLK='0'THEN--检测时钟下降沿Q='1';ENDIF;ENDPROCESS;ENDjianbie_mk;鉴别模块程序调试波形如图3-2所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟下降沿开始Q输出高电平。图3-2鉴别模块仿真波形图3.2锁存器功能锁存器模块suocunqi如图3-3所示,锁存器对四位答题者的结果进行锁存,并将其赋给输出信号Q1,Q2,Q3,Q4。图3-3suocunqi模块锁存器模块源代码如下:基于VHDL的智力竞赛抢答器设计第4页共15页LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYsuocunqiISPORT(D1,D2,D3,D4:INSTD_LOGIC;CLK,CLR:INSTD_LOGIC;Q1,Q2,Q3,Q4,ALM:OUTSTD_LOGIC);ENDsuocunqi;ARCHITECTUREsuocunqi_mkOFsuocunqiISBEGINPROCESS(CLK)BEGINIFCLR='0'THENQ1='0';Q2='0';Q3='0';Q4='0';ALM='0';ELSIFCLK'EVENTANDCLK='1'THEN--检测CLR为高电平,则有人抢答Q1=D1;Q2=D2;Q3=D3;Q4=D4;ALM='1';ENDIF;ENDPROCESS;ENDsuocunqi_mk;锁存器模块程序调试波形如图3-4所示,给CLK一个时钟信号,在某一时刻开始赋给CLR一个高电平,则从下一个时钟上升沿开始:将D1赋给Q1、将D2赋给Q2、将D3赋给Q3、将D4赋给Q4,并输出ALM为1;在CLR为低电平时无基于VHDL的智力竞赛抢答器设计第5页共15页输出。图3-4锁存器模块仿真波形图3.3转换功能转换模块zhuanhuan如图3-5所示,把抢答结果转化为一个四位二进制数,表示抢答者的编号。图3-5zhuanhuan模块转换模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYzhuanhuanISPORT(D1,D2,D3,D4:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDzhuanhuan;ARCHITECTUREzhuanhuan_mkOFzhuanhuanISBEGINPROCESS(D1,D2,D3,D4)VARIABLETMP:STD_LOGIC_VECTOR(3DOWNTO0);基于VHDL的智力竞赛抢答器设计第6页共15页BEGINTMP:=D1&D2&D3&D4;CASETMPISWHEN1000=Q=0001;--类似于真值表的CASE语句WHEN0100=Q=0010;WHEN0010=Q=0011;WHEN0001=Q=0100;WHENOTHERS=Q=0000;ENDCASE;ENDPROCESS;ENDzhuanhuan_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和基于VHDL的智力竞赛抢答器设计第7页共15页Q2输出抢答号或者倒计时,当SEL=‘0’时为输出倒计时状态,Q1代表高位,Q2代表低位;当SEL=‘1’时,为显示抢答号状态,Q1输出为‘0’,Q2的输出代表抢答者编号。图3-7sanxuanyi模块选择输出模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYsanxuanyiISPORT(SEL:INSTD_LOGIC;D1,D2,D3:INSTD_LOGIC_VECTOR(3DOWNTO0);Q1,Q2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDsanxuanyi;ARCHITECTUREsanxuanyi_mkOFsanxuanyiISBEGINPROCESS(SEL,D1,D2,D3)BEGINIFSEL='1'THENQ1=0000;Q2=D3;ELSEQ1=D1;Q2=D2;ENDIF;ENDPROCESS;ENDsanxuanyi_mk;选择输出模块程序调试波形如图3-8所示,由SEL控制Q的输出,当SEL为‘1’时,将D3赋给Q2,“0000”赋给Q1,输出结果代表抢答者编号;当SEL为‘0’时,将D2赋给Q2,D1赋给Q1,输出结果代表倒计时。基于VHDL的智力竞赛抢答器设计第8页共15页图3-8选择输出模块仿真波形图3.5倒计时功能倒计时模块daojishi如图3-9所示,用两个四位二进制数表示倒计时,定义变量HH,LL,由时钟CLK和使能信号EN控制,其中EN的值由锁存器模块中的ALM控制。当倒计时至HH==0,LL==0时,发出声音停止计时,输出H(XXX),L(XXX)。图3-9daojishi模块倒计时模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdaojishiISPORT(CLK,EN:INSTD_LOGIC;H,L:OUTSTD_LOGIC_VECTOR(3DOWNTO0);SOUND:OUTSTD_LOGIC);ENDdaojishi;ARCHITECTUREdaojishi_mkOFdaojishiISBEGIN基于VHDL的智力竞赛抢答器设计第9页共15页PROCESS(CLK,EN)VARIABLEHH,LL:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENIFEN='1'THEN--EN=1驱动倒计时模块开始倒计时SOUND='0';HH:=1001;LL:=1001;ELSIFLL=0THENIFHH=0THENSOUND='1';--倒计时至0时,输出超时报警信号ELSELL:=1001;HH:=HH-1;ENDIF;ELSELL:=LL-1;ENDIF;ENDIF;H=HH;L=LL;ENDPROCESS;ENDdaojishi_mk;倒计时模块程序调试波形如图3-10所示,当EN为“1”时,在时钟上升沿将“1001”赋给H和L,准备进入倒计时;从EN为“0”且时钟的上升沿到来时,H和L的值开始以逐渐递减,即从99倒计时到0,同时倒计时至0时,输出超时报警信号SOUND=1。基于VHDL的智力竞赛抢答器设计第10页共15页图3-10倒计时模块仿真波形图3.6片选功能片选模块pianxuan如图3-11所示,该模块用于控制选择输出模块输出倒计时或者抢答号,其中EN1的值由锁存器模块中的ALM控制。图3-11pianxuan模块片选模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpianxuanISPORT(CLK,EN1:INSTD_LOGIC;A:OUTSTD_LOGIC);ENDpianxuan;ARCHITECTUREpianxuan_mkOFpianxuanISBEGINPROCESS(CLK,EN1)BEGINIFEN1='0'THEN--利用IF_THEN_ELSE语句A='0';ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿基于VHDL的智力竞赛抢答器设计第11页共15页A='1';ENDIF;ENDPROCESS;ENDpianxuan_mk;片选模块程序调试波形如图3-12所示,EN1=’0’时,将‘0’赋给A;当EN1=’1’时,在CLK时钟信号的下一个时钟上升沿将‘1’赋给A。图3-12片选模块仿真波形图3.7显示功能显示模块如图3-13所示,将所有进程中的数值转换成七位二进制数。图3-13xianshi模块显示模块源代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYxianshiISPORT(D:INSTD_LOGIC_VECTOR(3DOWNTO0);Q:OUTSTD_LOGIC_VECTOR
本文标题:基于VHDL的智力竞赛抢答器的设计与实现
链接地址:https://www.777doc.com/doc-4279425 .html