基于cpldfpga的车库计数器设计.docx

上传人:b****2 文档编号:23003328 上传时间:2023-04-30 格式:DOCX 页数:15 大小:298.62KB
下载 相关 举报
基于cpldfpga的车库计数器设计.docx_第1页
第1页 / 共15页
基于cpldfpga的车库计数器设计.docx_第2页
第2页 / 共15页
基于cpldfpga的车库计数器设计.docx_第3页
第3页 / 共15页
基于cpldfpga的车库计数器设计.docx_第4页
第4页 / 共15页
基于cpldfpga的车库计数器设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于cpldfpga的车库计数器设计.docx

《基于cpldfpga的车库计数器设计.docx》由会员分享,可在线阅读,更多相关《基于cpldfpga的车库计数器设计.docx(15页珍藏版)》请在冰豆网上搜索。

基于cpldfpga的车库计数器设计.docx

基于cpldfpga的车库计数器设计

电子应用系统(三级项目)

设计说明书

(2015/2016学年第二学期)

 

题目:

基于CPLD/FPGA的车库计数器设计

专业班级:

电子信息工程13级2班

学号:

学生姓名:

指导教师:

设计周数:

3周

 

设计成绩:

2016年7月8日

1绪论

1.1FPGA简介

FPGA是现场可编程门阵列(FieldProgrammableGateArray)的简称。

FPGA器件及其开发系统是开发大规模数字集成电路的新技术。

它利用计算机辅助设计,绘制出实现用户逻辑的原理图、编辑布尔方程或用硬件描述语言等方式作为设计输入;然后经一系列转换程序、自动布局布线、模拟仿真的过程;最后生成配置FPGA器件的数据文件,对FPGA器件初始化。

这样就实现了满足用户要求的专用集成电路,真正达到了用户自行设计、自行研制和自行生产集成电路的目的。

FPGA是一种半定制的集成电路,其特点是直接面向用户,具有极大的灵活性和通用性,开发效率高,硬件测试和实现快捷,工作可靠性好而且技术维护简单。

1.2开发工具QuartusII简介

QuartusII是Altera公司推出的CPLD/FPGA集成化开发软件,可以完成设计输入、逻辑综合、布局与布线、仿真、时序分析、硬件配置完整的PLD设计流程。

QuartusⅡ提供了多种设计输入方式、快速的编译和直接易懂的器件编程。

具有友好的用户界面,快速的综合速度和更优化的综合和适配功能。

QuartusII自带宏功能模块库,大大减轻了用户的工作量,加快设计速度。

QuartusII内置仿真器可以在工程中仿真任何设计。

可进行功能仿真、时序仿真来检验设计的逻辑功能和计算设计的内部定时是否符合设计。

仿真器可以仿真整个设计,或仿真设计的任何部分。

支持可编程系统(SOPC)和大规模FPGA设计开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

2项目的设计目的和技术要求

2.1设计目的

(1)掌握车库计数器的设计方法;

(2)掌握VHDL语句的使用方法;

(3)熟悉使用QuartusII软件;

(4)熟悉掌握各种外围接口电路芯片的工作原理和控制方法。

2.2设计要求

(1)利用CPLD/FPGA开发板结合外围设计电路,实现基于CPLD/FPGA的车库计数器设计;

(2)通过数码管显示、达到规定数目报警;

(3)确定元器件及元件参数,实现其功能;

2.3程序设计框图

图2-1

3显示部分的设计

3.1七段数码管显示原理

对于人机交互式单片机系统来说,不仅需要响应用户输入,同时也需要将一些测控信息输出显示。

这些显示信息可以提供实时的数据或图形结果,以便于掌握系统的状态并进行分析处理。

目前,最常用的是LED数码管显示。

其成本低廉、使用简便,可以显示数字或几个特定的字符。

数码管数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个发光二极管单元,其基本单元是发光二极管。

数码管通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数的器件。

在电器特别是家电领域应用极为广泛,如显示屏、空调、热水器、冰箱等等。

绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。

按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

7段共阳极LED数码管是由7个条形发光二极管和一个小数点位构成,其引脚配置,如下图3-1所示,其内部结构,如下图3-2所示。

从图中可以看出,其中7个发光二极管构成字形“8”,可以用来显示数字,另一个发光二极管构成小数点。

因此,这种数码管有时也被称为8段LED数码管显示器。

图3-1图3-2

LED数码管及引脚图资料LED数码管实际上是由七个发光管组成8字形构成的,加上一个小数点单元。

这些段分别由字母a,b,c,d,e,f,g来表示。

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。

如:

显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮。

 

表3-1七段LED段码表

3.2七段数码管显示源程序及波形仿真

--以下是显示数码管进程,被显示的数据在数组中data(7),data(6),data(5),data(4),data(3),data

(2),data

(1),data(0)中

process(clk)--CLK:

50M的时钟信号

variablecount:

integerrange0to65535;

variableposition:

std_logic_vector(7downto0):

="11111110";--"0",亮的那一位

variablei:

integerrange0to7;

begin

ifclk'eventandclk='0'then

ifcount<65535thencount:

=count+1;

else

count:

=0;

i:

=i+1;

position:

=position(6downto0)&position(7);--循环左移

seg<=datamod(data(i));--两个数组套用,取出要显示的字模。

posi<=position;

endif;

endif;

endprocess;

图3-3七段数码管显示时序仿真

4硬件仿真

电路原理图如图4-1

图4-1

硬件仿真如图4-2

图4-2

功能描述:

k1加1,k2减1,减到0后再按k1报警,最多能加到40,到40后再按k2报警,每次报警蜂鸣器响1秒。

5程序源代码

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYlightIS

PORT(

seg:

outSTD_LOGIC_vector(7downto0);--数码管位码,规定显示哪一个数码管

posi:

OUTSTD_LOGIC_vector(7downto0);--数码管段码,决定显示什么数

clk:

INSTD_LOGIC;--50M的时钟,1、分频后,提供秒信号。

2、数码近显示的时钟信号

BEEP:

bufferSTD_LOGIC;

key1,key2,key3:

inSTD_LOGIC

);

ENDENTITYlight;

ARCHITECTURETESTANDOFlightIS

TYPEhistrymodeisARRAY(0TO4)OFstd_logic_vector(0to1);

TYPEledisARRAY(0TO9)OFSTD_LOGIC_VECTOR(7DOWNTO0);--数组类型,10个元素。

TYPElednumisARRAY(7downTO0)OFintegerrange0to10;--数组类型,8个元素。

SIGNALdatamod:

led:

=(X"C0",X"F9",X"A4",X"B0",X"99",X"92",X"82",X"F8",X"80",X"90");

--0,1,2,3,4,5,6,7,8,9,10个数字的字模

SIGNALdata:

lednum:

=(0,0,0,0,0,0,0,0);--要显示的8个数

SIGNALkk1,kk2:

std_logic;

SIGNALlk1,lk2:

std_logic;

SIGNALbeeptime:

integerrange0to10;

BEGIN

--*******************************************************************

--以下是显示数码管进程,被显示的数据在数组中data(7),data(6),data(5),data(4),data(3),data

(2),data

(1),data(0)中

process(clk)--CLK:

50M的时钟信号

variablecount:

integerrange0to65535;

variableposition:

std_logic_vector(7downto0):

="11111110";--"0",亮的那一位

variablei:

integerrange0to7;

begin

ifclk'eventandclk='0'then

ifcount<65535thencount:

=count+1;

else

count:

=0;

i:

=i+1;

position:

=position(6downto0)&position(7);--循环左移

seg<=datamod(data(i));--两个数组套用,取出要显示的字模。

posi<=position;

endif;

endif;

endprocess;

--以下是按键消抖程序

process(clk,key1,key2,key3)

variablecount:

integerrange0to65535;

variablehistory:

histrymode;

begin

if(clk'eventandclk='0')thencount:

=count+1;--延时1.3毫秒

ifcount=0then

history(4):

=history(3);

history(3):

=history

(2);

history

(2):

=history

(1);

history

(1):

=history(0);

history(0):

=key1&key2;--数组中的五个元素,5.2毫秒前、3.9毫秒前、2.6毫秒前、1.3毫秒前、当前的按键状态

endif;

ifhistory(0)=history

(1)andhistory(0)=history

(2)andhistory(0)=history(3)andhistory(0)=history(4)--进入稳态

then

kk1<=history(0)(0);

kk2<=history(0)

(1);

--kk1、kk2、kk3分别是经过消除抖动处理的信号

--kk4<=history(0)(3);

endif;

endif;

endprocess;

--*******************************************************************

process(clk)

variablecount:

integerrange0to4999999;

begin

if(clk'eventandclk='0')then

lk1<=kk1;--记录历史

lk2<=kk2;

--*********************当前车辆数目调整*******************

--******************减一************************************

iflk1='1'andkk1='0'then--软件下降沿

ifdata(0)>0thendata(0)<=data(0)-1;

else

ifdata

(1)>0thendata(0)<=9;data

(1)<=data

(1)-1;

else

beeptime<=1;

endif;

endif;

endif;

--*******************加一**************************************

iflk2='1'andkk2='0'then--软件下降沿

ifdata

(1)<4then

ifdata(0)<9thendata(0)<=data(0)+1;

else

ifdata

(1)<9thendata(0)<=0;data

(1)<=data

(1)+1;

else

beeptime<=1;

endif;

endif;

else

beeptime<=1;

endif;

endif;

ifcount<4999999thencount:

=count+1;

else

count:

=0;

ifbeeptime>0thenBEEP<='0';beeptime<=beeptime-1;

elseBEEP<='1';

endif;

endif;

endif;

endprocess;

ENDARCHITECTURETESTAND;

5总结

回顾起此设计过程,我仍感慨颇多,在短短三个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。

一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。

对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。

因此在整个设计过程中大部分时间是用在程序上面的。

很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。

通过这次设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。

 

参考文献

[1]罗朝霞.高书莉.CPLD/FPGA设计及应用.人民邮电出版社.2007.

[2]康华光.《电子技术基础数字部分》.高等教育出版社.2006.

[3]褚振勇.FPGA设计及应用(第三版)[M].西安电子科技大学出版社.2012,4

[4]王新安.FPGA/CPLD最新实用技术指南第一版[M].北京.清华大学出版社2005

 

评语

成绩

指导教师

(签字)

年月日

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1