VHDL抢答器设计LC.docx

上传人:b****8 文档编号:12948796 上传时间:2023-06-09 格式:DOCX 页数:12 大小:71.23KB
下载 相关 举报
VHDL抢答器设计LC.docx_第1页
第1页 / 共12页
VHDL抢答器设计LC.docx_第2页
第2页 / 共12页
VHDL抢答器设计LC.docx_第3页
第3页 / 共12页
VHDL抢答器设计LC.docx_第4页
第4页 / 共12页
VHDL抢答器设计LC.docx_第5页
第5页 / 共12页
VHDL抢答器设计LC.docx_第6页
第6页 / 共12页
VHDL抢答器设计LC.docx_第7页
第7页 / 共12页
VHDL抢答器设计LC.docx_第8页
第8页 / 共12页
VHDL抢答器设计LC.docx_第9页
第9页 / 共12页
VHDL抢答器设计LC.docx_第10页
第10页 / 共12页
VHDL抢答器设计LC.docx_第11页
第11页 / 共12页
VHDL抢答器设计LC.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VHDL抢答器设计LC.docx

《VHDL抢答器设计LC.docx》由会员分享,可在线阅读,更多相关《VHDL抢答器设计LC.docx(12页珍藏版)》请在冰点文库上搜索。

VHDL抢答器设计LC.docx

VHDL抢答器设计LC

河南科技学院机电学院

EDA课程设计报告

题目:

基于VHDL的抢答器设计

 

专业班级:

姓  名:

LC

时间:

2012.12.10~2012.12.28

指导教师:

 

完成日期:

2012年12月27日

 

基于VHDL的抢答器设计任务书

要求设计一个16用户的抢答器。

每个用户使用一个按键,有清零端,自动显示用户所在的线号。

 

基于VHDL的抢答器设计

1智能抢答器系统的设计与实现3

1.1抢答器系统设计要求3

1.2系统总体设计思想3

1.3子模块的设计思想和实现4

1.3.1锁存模块的设计与实现4

1.3.2编码模块的设计与实现4

1.3.3译码模块的设计与实现5

1.4抢答器的系统实现6

2抢答器的仿真验证7

3实习心得与体会7

参考文献7

附录8

附录1锁存模块VHDL程序8

附录2编码模块VHDL程序9

附录3译码模块VHDL程序10

 

基于VHDL的抢答器设计

摘要:

伴随着集成电路(IC)技术的发展,EDA技术已经成为现代电子设计的发展趋势,并在各大公司、企事业单位和科研教学部门广泛使用。

VHDL是一种全方位的硬件描述语言,几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。

本文阐述了EDA的概念和发展、VHDL语言的优点和语法结构并分析讲解了智能抢答器的各模块的功能要求、基本原理以及实现方法。

本系统的设计就是采用VHDL硬件描述语言编程,基于QuartusII平台进行编译和仿真来实现的,其采用的模块化、逐步细化的设计方法有利于系统的分工合作,并且能够及早发现各子模块及系统中的错误,提高系统设计的效率。

关键词:

电子设计自动化(EDA);VHDL;抢答器;

1抢答器系统的设计与实现

1.1抢答器系统设计要求

一般来说,设计一个抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者所以我们在设计智能抢答器的模块需要满足鉴别数显等功能,具体设计要求如下:

(1)抢答器可容纳16组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始;

(2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。

在主持人将系统复位并发出抢答指令后,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在数码显示管上显示该组别,此时,电路具备自锁功能,使其他抢答按钮不起作用。

1.2系统总体设计思想

本设计为16路抢答器,所以这种抢答器要求有16路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别。

抢答过程:

主持人按下系统复位键(RST),系统进入抢答状态,当某参赛组抢先将抢答键按下时,系统将其余15路抢答信号封锁,同时扬声器发出声音提示,译码显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。

主持人对抢答结果进行确认,主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。

此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。

系统的总体框图如下:

图一系统的总体框图

1.3子模块的设计思想和实现

根据对抢答器的功能要求,把要设计的系统划分为3个功能模块:

锁存模块、编码模块和译码模块。

1.3.1锁存模块的设计与实现

锁存模块对第一抢答信号的锁存,同时屏蔽非第一抢答信号的输入信号,以免发生错误;并为编码器送出信号。

图二锁存器模块元件框图

引脚作用:

RET:

清零端,高电平有效。

EN:

锁存器使能端,高电平锁存。

1.3.1编码模块的设计与实现

用来准确直观地判断16组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功。

图三编码器模块元件框图

原理:

编码器通过锁存器的输入信号鉴别第一个按下键的小组。

以一号用户抢答成功为例,当输入信号为Q1=0,Q2=1,Q3=1,Q4=1,Q5=1,Q6=1,Q7=1,Q8=1,Q9=1,Q10=1,Q11=1,Q12=1,Q13=1,Q14=1,Q15=1,Q16=1输出信号CQ=0001,即为鉴别出一号用户抢答成功,同理其他组别抢答成功也是这样的鉴别过程。

备注:

理论上来说16路用户抢答,应该有从0000000000000000—111111*********1等216种可能情况,但是由于时钟信号的频率很高而且是在时钟信号上升沿的状况下才做出的鉴别,所以在这里两组以上同时抢答成功的可能性非常小,因此可以只设计16种情况,即分别为:

0111111111111111、1011111111111111、110111*********1、111011*********1、111101*********1、111110*********1、111111*********1、111111*********1、1111111101111111、1111111110111111、1111111111011111、111111*********1、

1111111111110111、1111111111111011、1111111111111101、111111*********0

这样就大大简化了电路的设计复杂性。

1.3.3译码模块的设计与实现

该模块实际上是一个译码器,作用是用来显示组别,其主要原理是四位二进制BCD编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,使观众能够更直观的看到结果。

图四译码器模块元件框图

译码器的译码对照表如下所示:

表一译码器的译码对照表

显示的数字/字母

二进制

编码

七段数码

管2进制

0

00000

0111111

1

00001

0000110

2

00000

1011011

3

00011

1001111

4

00100

1100110

5

00101

1101101

6

00110

1111101

7

00111

0000111

8

01000

1111111

9

01001

1101111

10

01010

1110111

11

01011

1111100

12

01100

0111001

13

01101

1011110

14

01110

1111001

15

01111

1110001

16

10000

0000000

1.4抢答器的系统实现

单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:

①元件例化。

也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。

这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。

在设计中选择的是这种方法。

通过总的顶层元件图可以很清晰的看到模块连接的原理。

图五抢答器电路图

2抢答器的仿真验证

3实习心得与体会

在设计过程中,由于我对于VHDL语言的了解不多,在变量的定义,以及过程(process)的定义与应用等方面遇到了很大的阻力,也让我吃了不少的苦头,但是在老师的耐心指导下,我最终还是克服了重重难关。

虽然在程序的编写方面还不是很完善,我还是设计出了我需要的模块。

此次实习前我对于EDA技术这门课程的学习仅是纸上谈兵,在头脑中抽象地记忆、理解那些课本上的理论知识,有些理论知识晦涩难懂,甚至要靠自己死记硬背。

而这次的实习就提供机会让我们在实践中灵活运用知识。

我们通过在实践中发现问题,进而去书本中找相关的知识去解决问题,从而巩固了理论知识,同时也增强了我们以后的学习兴趣,为以后的工作积累了一定的经验。

经过这次实习,我们有了很深刻的体会。

首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。

其次,在遇到困难时要勇于面对,其实只要有耐心,再加上试验中的细心操作,一切困难都将迎刃而解。

 

参考文献

[1]沈明山. EDA技术及可编程器件应用实训. 科学出版社

[2]曾繁泰,陈美金. VHDL程序设计. 北京:

清华大学出版社

[3]谭会生,张昌凡. EDA技术及应用. 西安:

西安电子科技大学出版社

[4]李国丽,朱维勇. EDA与数字系统设计. 北京:

机械工业出版社

 

附录1

锁存模块VHDL程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLCDFIS

PORT(RST,EN:

INSTD_LOGIC;

G1,G2,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16:

INSTD_LOGIC;

Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16:

OUTSTD_LOGIC);

END;

ARCHITECTUREbhvOFLCDFIS

BEGIN

PROCESS(RST,EN)

BEGIN

IFRST='1'THENQ1<='1';Q2<='1';Q3<='1';Q4<='1';

Q5<='1';Q6<='1';Q7<='1';Q8<='1';

Q9<='1';Q10<='1';Q11<='1';Q12<='1';

Q13<='1';Q14<='1';Q15<='1';Q16<='1';

ELSIFEN='1'THENQ1<=G1;Q2<=G2;Q3<=G3;Q4<=G4;

Q5<=G5;Q6<=G6;Q7<=G7;Q8<=G8;

Q9<=G9;Q10<=G10;Q11<=G11;Q12<=G12;

Q13<=G13;Q14<=G14;Q15<=G15;Q16<=G16;

ENDIF;

ENDPROCESS;

END;

 

附录2

编码模块VHDL程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLCBMIS

PORT(Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(4DOWNTO0));

END;

ARCHITECTUREoneOFLCBMIS

BEGIN

PROCESS(Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16)

BEGIN

IFQ1='1'ANDQ2='1'ANDQ3='1'ANDQ4='1'

ANDQ5='1'ANDQ6='1'ANDQ7='1'ANDQ8='1'

ANDQ9='1'ANDQ10='1'ANDQ11='1'ANDQ12='1'

ANDQ13='1'ANDQ14='1'ANDQ15='1'ANDQ16='1'

THENCQ<="00000";

ELSIFQ1='0'THENCQ<="00001";

ELSIFQ2='0'THENCQ<="00010";

ELSIFQ3='0'THENCQ<="00011";

ELSIFQ4='0'THENCQ<="00100";

ELSIFQ5='0'THENCQ<="00101";

ELSIFQ6='0'THENCQ<="00110";

ELSIFQ7='0'THENCQ<="00111";

ELSIFQ8='0'THENCQ<="01000";

ELSIFQ9='0'THENCQ<="01001";

ELSIFQ10='0'THENCQ<="01010";

ELSIFQ11='0'THENCQ<="01011";

ELSIFQ12='0'THENCQ<="01100";

ELSIFQ13='0'THENCQ<="01101";

ELSIFQ14='0'THENCQ<="01110";

ELSIFQ15='0'THENCQ<="01111";

ELSIFQ16='0'THENCQ<="10000";

ENDIF;

ENDPROCESS;

END;

附录3

译码模块VHDL程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLCYMIS

PORT(A:

INSTD_LOGIC_VECTOR(4DOWNTO0);

LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

END;

ARCHITECTUREoneOFLCYMIS

BEGIN

PROCESS(A)

BEGIN

CASEAIS

WHEN"00000"=>LED7S<="0111111";

WHEN"00001"=>LED7S<="0000110";

WHEN"00010"=>LED7S<="1011011";

WHEN"00011"=>LED7S<="1001111";

WHEN"00100"=>LED7S<="1100110";

WHEN"00101"=>LED7S<="1101101";

WHEN"00110"=>LED7S<="1111101";

WHEN"00111"=>LED7S<="0000111";

WHEN"01000"=>LED7S<="1111111";

WHEN"01001"=>LED7S<="1101111";

WHEN"01010"=>LED7S<="1110111";

WHEN"01011"=>LED7S<="1111100";

WHEN"01100"=>LED7S<="0111001";

WHEN"01101"=>LED7S<="1011110";

WHEN"01110"=>LED7S<="1111001";

WHEN"01111"=>LED7S<="1110001";

WHEN"10000"=>LED7S<="0000000";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

 

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2