基于VHDL的智力竞赛抢答器的设计与实现_第1页
基于VHDL的智力竞赛抢答器的设计与实现_第2页
基于VHDL的智力竞赛抢答器的设计与实现_第3页
基于VHDL的智力竞赛抢答器的设计与实现_第4页
基于VHDL的智力竞赛抢答器的设计与实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..摘要本课程设计主要内容是利用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所示。顶层文件QDQ顶层文件QDQdaojishi模块sanxuanyi模块pianxuan模块xianshi模块jianbie模块suocunqi模块zhuanhuan模块图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_mkOFjianbieISBEGINPROCESS<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模块锁存器模块源代码如下: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为低电平时无输出。图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>;BEGINTMP:=D1&D2&D3&D4;CASETMPISWHEN"1000"=>Q<="0001";--类似于真值表的CASE语句WHEN"0100"=>Q<="0010";WHEN"0010"=>Q<="0011";WHEN"0001"=>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和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,输出结果代表倒计时。图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_mkOFdaojishiISBEGINPROCESS<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。图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--检测时钟上升沿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<6DOWNTO0>>;ENDxianshi;ARCHITECTURExianshi_mkOFxianshiISBEGINPROCESS<D>BEGINCASEDISWHEN"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";WHENOTHERS=>Q<="0000000";ENDCASE;ENDPROCESS;ENDxianshi_mk;显示模块程序仿真波形如图3-14所示,将输入信号D转变成能在七段数码管上显示的七位二进制数。图3-14显示模块仿真波形图3.8顶层模块各模块连接后形成顶层文件的电路图如图3-15所示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论