基于FPGA的采样状态机的设计与仿真本科毕业论文.docx

上传人:b****1 文档编号:14547552 上传时间:2023-06-24 格式:DOCX 页数:29 大小:578.67KB
下载 相关 举报
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第1页
第1页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第2页
第2页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第3页
第3页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第4页
第4页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第5页
第5页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第6页
第6页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第7页
第7页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第8页
第8页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第9页
第9页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第10页
第10页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第11页
第11页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第12页
第12页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第13页
第13页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第14页
第14页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第15页
第15页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第16页
第16页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第17页
第17页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第18页
第18页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第19页
第19页 / 共29页
基于FPGA的采样状态机的设计与仿真本科毕业论文.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的采样状态机的设计与仿真本科毕业论文.docx

《基于FPGA的采样状态机的设计与仿真本科毕业论文.docx》由会员分享,可在线阅读,更多相关《基于FPGA的采样状态机的设计与仿真本科毕业论文.docx(29页珍藏版)》请在冰点文库上搜索。

基于FPGA的采样状态机的设计与仿真本科毕业论文.docx

基于FPGA的采样状态机的设计与仿真本科毕业论文

南京林业大学

本科毕业设计(论文)

 

题目:

基于FPGA的采样状态机的设计与仿真

 

学院:

机械电子工程学院

专业:

测控技术与仪器

学号:

070307114

学生姓名:

万海洋

指导教师:

黄石红

职称:

副教授

 

二O一一年5月24日

摘要

采样是数字系统设计中的重要环节,而传统的A/D器件采样多是用CPU或单片机完成的。

这些方法编程简单,但控制周期长,速度慢。

而有限状态机(FiniteStateMachine,FSM)在数字系统设计中应用十分广泛,随着电子技术日新月异的发展。

大规模系统与电路的出现,传统的手工设计状态机已经不可能,而基于FPGA的VHDL语言描述状态机是大势所趋。

基于FPGA语言描述的硬件设计,能够充分利用A/D采样的速度快的高性能,有效提高工作效率与精度。

关键词:

EDAVHDLFPGA采样状态机数码管显示

Abstract

Digitalsamplingisanimportantpartofsystemdesign,andtraditionalA/DsamplingdevicewithaCPUormicrocontrollermostlycompleted.Thesemethodsaresimpletoprogram,butthecontrolcycleislongandslow.TheFSM(FiniteStateMachine,FSM)inthedesignofdigitalsystemsiswidelyused,withtherapiddevelopmentofelectronictechnology.Theemergenceoflarge-scalesystemsandcircuits,thetraditionalmanualdesignstatemachineshavebeenimpossible,andFPGA-basedVHDLlanguagetodescribethestatemachineisageneraltrend.FPGA-basedhardwaredescriptionlanguagedesignedtotakefulladvantageofA/Dsamplingspeed,high-performance,higherefficiencyandaccuracy.

Keywords:

EDAVHDLFPGAstatemachinedigitaldisplay

 

第一章:

绪论

1.1研究目的及意义:

从小型电子系统到大规模电路系统设计中,状态机是最典型、应用最广泛的时序电路模块,如何设计一个稳定可靠的状态机是我们必须面对的问题.传统的状态机设计方法复杂,首先要进行繁琐的状态化简,状态分配,状态编码,然后求输出与激励函数,最后画时序图或波形图。

而利用VHDL硬件设计描述语言设计状态机,只需利用状态转移图进行状态机的描述即可。

且由于状态机能构成性能良好的同步时序逻辑模块,能够做到结构相对简单,设计方案相对固定。

而基于FPGA的FSM设计使用同步时序方式设计,提高设计的稳定性,消除毛刺。

通过VHDL语言的描述,不仅仅便于阅读,理解,维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。

1.2国内外同类研究概况:

在国外,目前利用EDA技术设计电路已成为主流,其中,Verilog公司开发的VerilogHDL作为当今国际主流的HDL语言,在芯片的前端设计中有着广泛的应用。

而最具代表性的是美国国防部开发的VHDL语言。

国内外利用VHDL语言设计状态机例子有很多,因为大部分数字系统都可以分为控制单元和数据单元两个部分,控制单元的主体是一个状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号,因而状态机性能的好坏对系统性能有很大的影响。

故国内外电路方向的同行都把状态机作为电路设计的核心,目前有很多出色的VHLD/FPGA程序的状态机描述。

如现在十字路口的自动交通控制系统就是用基于FPGA的状态机来控制红黄绿三灯的有序亮灭,来保证车辆行人的安全出行。

再如加州技术大学的电脑科学博士后EricKlavic研究的状态机在机器人中的应用,这种即时环境能够管理机器人在现实世界中获取感知和做出行动所要执行的多重任务,也能作为API共编程人员方便的进行编码和整合新的行为及它其组件。

东华理工学院机械与电子学院的翟燕磊等人研究的VHDL描述的状态机在内存控制器中应用就很好的说明了有些芯片完全能够用VHDL语言在FPGA或CPLD上实现。

1.3研究内容:

熟悉数字电路与系统的EDA的设计流程,深入学习VHDL语句的硬件含义,理解状态机在电路中的关键作用。

写出正确高效的VHDL语言,达到仿真运行的目的。

 

第二章:

EDA技术及其开发工具简介

2.1EDA技术简介

随着电子电路的复杂化,设计人员将硬件的设计交给计算机去完成,于是电子设计自动化技术产生了。

这就是EDA(ElectronicDesignAutomatic)技术[1]。

对于EDA技术,可以理解于以大规模可编程器件为载体,以硬件描述语言(HDL,HardwareDescriptionLanguage)为系统逻辑描述的主要方式,借助计算机和可编程逻辑器件的软,硬开发系统等工具,通过相关的软件开发,自动完成用软件方式设计的电子系统到硬件系统的逻辑编译,逻辑简化,逻辑分割,逻辑总合计优化,逻辑布局布线,逻辑仿真,直至对特定目标芯片的适配编译,逻辑映射,编程下载等工作,最终形成集成电子系统或专用集成芯片ASICA的一门技术[2]。

目前,EDA已将逐渐成为电子电路系统的设计重要设计手段,目前广泛用于模拟与数字电路系统等许多领域。

而从广义上来看,EDA研究的对象是电子设计的全过程,从某一角度看,电子设计可分为三个层次:

即系统级,电路级和物理实现级。

2.2Quartus简介

本毕业设计采用的EDA工具是Alter公司的Quartusii9.0开发软件。

Quartusii是Altera公司在21世纪初推出的CPLD/FPGA集成开发环境,它是该公司前一代CPLD/FPGA集成开发环境MAX+PLUSII的更新换代产品[3]。

图1QUARTUSII9.0的界面截图

2.3设计的基本逻辑门例子

如用QuartusII原理图输入设计方式设计一个组合逻辑电路过程。

该程序实现的是与门,或门,非门,与非门,异或门,同或门。

图2程序截图如下

图3时序仿真图

 

图4生成的RTL电路图

图四中a,b代表输入端口,f5表示与非门,f4表示异或门,f3表示非门,f2表示或门。

f1表示与门。

2.4本章小结

本章熟悉了EDA技术的基本概念与FPGA设计的软件QUARTUS的使用的简单介绍。

并且通过举一个简单的例子了解怎样去设计FPGA电路。

 

第三章:

VHDL语言基础

3.1VHDL语言简介

VHDL语言即veryhighSpeedintegratedcricuithardwaredescriptionlanguage(超高速集成电路硬件描述语言),是电子设计的新技术,它符合美国电气和电子工程师协会标准(IEEE标准1076),利用一种和数字电路基本知识结合比较密切的语言来描述数字电路和设计数字电路系统[4]。

利用VHDL进行分块单元电路设计和整个系统设计,并结合一些先进的EDA工具软件(如QuartusII),通过计算机下载到硬件芯片上,实现电路功能,可以节省大量的设计周期。

VHDL语言不一定按顺序一条一条执行每一条语句,而是并行执行的语句同时也有按顺序执行的语句,来描述在同一时刻中可能发生的事件,这要求数字电路设计人员摆脱一维的思维模式,以多维并发的思路来完成VHDL语言的程序设计。

3.2VHDL语言设计例子

以上章的基本门电路为例,用VHDL语言描述的程序代码如下:

Libraryieee;

Useiee.std_logic_164.all--库说明

Entityfadderis

Port(a,b,ci:

INStd_ogic;--实体说明

s,co:

OUTStd_ogic);

ENDFadder;

Architecturestrucoffadderis

Componentor2gate--结构体说明

Port(a,b:

InStd_ogic;

f:

OUTStd_ogic);

Endcomponent;

Componethadder--元件例化语句

Port(a,b:

InStd_ogic;

s,co:

OutStd_ogic);

Endcomponent;

Signal:

tepms,tempcol2:

Std_logic;

Begin

U0:

hadderPortMAP(a,b,temps,tempco1);

U1:

hadderPortMAP(ci,tmps,s,tempco2);

U2:

or2gatePortmap(ci,tempco2,co);

Endstruc;

从该程序可以看出,一个完整的VHDL从描述层次上可以包括库说明,实体说明,结构体说明三个部分[5]。

例外,VHDL语言和其他软件一样,也有严格的标识符、数据对象,数据类型定义。

准确、熟练掌握基本的数据定义,对于初学者是非常必要的。

3.3本章小结

本章介绍了VHDL语言的概念进行了综述,然后对其结构进行了详细的说明。

通过这些内容,对FPGA设计的硬件描述语言VHDL有了大致了解‘

 

第四章:

FPGA基础

4.1CPLD分类

复杂的可编程逻辑器件CPLD(ComplexProgrammableLogicDevice)是由PAL或GAL发展而来的,基本上是扩充原始的可编程逻辑器件,它通常是由可编程逻辑的功能块围绕一个位于中心和延时固定的可编程互联矩阵构成。

为了增加电路密度而不使性能或功耗受到损失,复杂的可编程逻辑器件CPLD在结构上引入了各种特性。

从目前的趋势来看,CPLD又延伸出二大分支:

即可擦除可编程的逻辑器件EPLD(Erasableprogrammablelogicdevice)和现场可编程门阵列器件FPGA(Fieldprogrammablegateqrrery)[6].

总的来说,CPLD与FPGA的定义有所不同,根据结构特点和工作原理,CPLD与FPGA的分类方法是:

以乘积项结构方式构成逻辑行为的器件称为CPLD,以查表法结构方式构成逻辑行为的器件称为FPGA.

4.2FPGA简介

FPGA是由掩膜可编程门阵列和可编程逻辑器件演变而来的,将它们的特性结合在一起,使得FPGA具有门阵列的高逻辑密度和通用性,又有可编程逻辑器件的用户可编程特性。

而且,FPGA可以分成二大类:

即细粒度(Fine-grain)和粗粒度(coarce-grain)。

细粒度逻辑块是与半定制门阵列的基本单元相同,它由可以用可编程互连来连接的少数晶体管组成,规模都较小,主要优点是可用的功能块可以完全被利用;缺点是采用它通常需要大量的连线和可编程开光,使相对速度变慢。

而基于FPGA设计的硬件系统具有以下特点:

(1)无需投片生产,即可得到芯片

(2)可做ASIC的中试样片

(3)有丰富的触发器和I/O引脚

(4)设计周期最短、开发费用最低、风险最小

(5)采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容

图5FPGA设计流程[7]

FPGA的设计与传统的通用IC设计在许多方面有区别,可以归纳表格如下:

 

项目方法

通用IC设计

CPLD/FPGA设计

设计方向

从片子到系统

从系统到片子

成本限制

元件数量

工作量及芯片价格

性能限制

功能单元设计

设计及开发工具性能

设计方案选择

主要元件

FPGA芯片

可测试要求

可连接到PCB板上

只需要功能测试(注)

验证

制作印刷电路板

模拟

样机制作

通常在实验室内完成

可在实验室内完成

后期更改计划

不方便

方便

设计方法

不灵活

有很大的灵活性

工具

可以不依赖与CAE

强烈依赖于CAE

图6FPGA设计与传统IC设计区别

4.3本章小结

本章介绍了CPLD与FPGA的分类方法,详细做表介绍了一般FPGA的设计流程,并且比较了FPGA与传统IC设计的区别。

通过比较很容易得出FPGA设计比其它设计更有优势的结论。

从而在大型电路设计会考虑FPGA设计来提高效率。

 

第四章:

有限状态机的基本概念

5.1有限状态机设计硬件的优势

当前以硬件描述语言为工具,逻辑器件为载体的系统设计越来越广泛。

在设计中,状态机是最典型、应用最广泛的电路模块,其运行速度的高效、执行时间的确定性和高可靠性方面都显示出强大的优势。

有限状态机是一种时序逻辑电路,常用于数字电路中的控制单元。

有限状态机中的每一个状态对应控制单元中的一个控制步骤,有限状态机的次态对应控制单元中与每一个控制步骤有关的转移条件。

只要遵循这二条对应关系,就很容易利用有限状态机来描述数字电路系统中的控制单元了。

有限状态机的输出信号仅与当前状态有关时,称为Moore型有限状态机。

其输出不仅与当前状态有关,而且与所有的输入信号有关时。

这样的状态机称为Mealy型有限状态机[8]

有限状态机可应用于各种系统控制,如:

微处理机中的总线总裁、微处理机与外设之间的控制、工业控制、数据的加密与解密,数字信号与处理中的时序控制等。

5.2有限状态机的设计的一个代码例子

组合逻辑进程中有关状态机的代码:

PROCESS(input,current_state)

BEGIN

CASEcurrent_stateIS

WHENstateis

IF(input=......)THEN

Output<=;

Next_state<=stae1;

ELSE.......

ENDIF;

WHENSTATE1=>

IF(input=.....)THEN

Output<=;

Next_state<=state2;

ELSE......

ENDIF;

WHENstate2=>

IF(input=......)THEN

Ouput<=;

Next_state<=state3;

ELSE......

ENDIF;

.......

ENDCASE;

ENDPROCESS;

这段代码做了二件事:

对输出端口赋值和确定状态机的下一状态。

同样可以看出,它采用顺序代码设计组合逻辑电路的基本要求,即所有输入信号必须出现在PROCESS的敏感信号中,并且所有输入/输出信号的组合都必须完整列出。

在整个代码中,由于没有任何信号的赋值是通过其他某个信号的跳变来触发的,所以不会生成寄存器。

5.3状态机的时序逻辑进程

时序逻辑进程主要用于实现状态机的状态转化。

一般状态机是随外部时钟信号clock.以同步时序方式工作的。

该进程就是保证状态机的跳变与时钟信号同步,保证在时钟发生有效跳变时,状态机的状态发生变化。

时序逻辑进程的代码如下:

PROCESS(reset,clock)

BEGIN

IF(reset=‘1’)THEN

current_state<=state0;

ELSE(CLOCK’eventandclock=’1’)THEN

Current_state<=next_state;

ENDIF;

ENDPROCESS;

5.4本章小结

本章纤细的介绍了状态机的基本内容,包括状态机包括moore型与mealy型的区别,并且举了一个状态机的例子。

由于状态机的启动必须要有启动的时序逻辑进程,故本章还对逻辑启动进程的程序作了些讲解。

 

第五章:

基于FPGA的采样状态机

6.1设计总体思路

图7设计思路框图

本次课题研究的是由温度传感器得到数据后,怎样由AD采样,其中AD采样使用AD0809。

图8ADC0809的元器件内部结构图

6.2采样模块的设计

6.2.1AD0809的整体功能说明

本次设计采用ADC0809。

ADC0809是28引脚双列直插式,它是8通道a/d转换器,ADC0809是带8位a/d转换器,8路多路开关以及微处理机兼容的控制逻辑的cmos组件。

它是逐次逼近式A/D转换器,adc0809由一个8路模拟开关,一个地址锁存与译码组,一个ad转换器和一个三态三态锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟分量分时输入,共用啊A/D转换器进行转换。

三态输出锁存器用于锁存A/D转换完的数字量,当oe端为高电平时,才可以从三态输出锁存器取走转换完的数据。

图9ADC0809芯片引脚

6.2.20809的引脚功能说明

ADC0809主要信号引脚功能说明如下[9]:

ALE—地址锁存信号。

对应ALE上跳沿时。

A,B,C地址状态送入地址锁存器.

START—转换启动信号,该信号上升沿时,复位ADC0809,该信号下降沿时,启动芯片,开始进行A/D转换。

EOC—转换结束信号。

EOC=0.正在进行转换,EOC=1,转换结束。

使用中该信号状态即可作为查询的状态标志,又可作为中断信号使用。

OE—输出允许信号。

用于控制三态输出锁存器向单片机输出转换得到的数据。

OE=0,输出数据线呈高阻,0E=1,输出转换得到的数据。

图10ADC0809的元器件工作时序图

6.2.3AD0809的VHDL语言说明

ADC0809采样控制器的程序采用VHDL语言来描述。

由前面第二章有限状态机的设计知。

该程序语言必定包含二部分:

其中一部分REG是时序进程,它在时钟信号CLK的驱动下,将不断将next_state中的内容赋给current_state,并由此信号将状态变量传输给组合进程COM。

组合进程COM有两个功能:

首先是状态译码功能,即根据从current_state信号中获得的状态变量以及来自ADC0809的状态线信号EOC来决定下一状态的转移方向,即确定次态的状态变量;其次采样控制功能,即根据current_state中的状态变量确定对ADC0809的控制信号线ALE、START、OE等输出相应的控制信号,在本次设计中,为便将由ADC0809的std_logic_vector(0,1,...7)中的数据输出口输出的8位转换数据锁存起来。

在采样结束后增加一个通过通过LOCK向锁存器件进程LATCH1发出锁存信号的程序描述段[10]。

 

图11采样状态机

图12采样模块RTLviewer

6.3分频模块

分频模块在此此设计中用到二次,第一次是将系统的高频变为适当的低频控制采样的状态机的转换,第二次是变为适当的低频控制数码管的扫描,使数码管上的数字能够清楚显示。

 

图13分频RTLVIEWER

6.4显示模块

本次设计利用七段译码器驱动七段数码管将AD的七个端口的数据动态显示出来[11]。

图14七段译码器RTLVIEWER

6.5程序及仿真

6.5.1程序

利用ADC0809采集模拟信号的VHDL语言程序及其显示程序⑦如下:

定程序名为bishe.vhd:

Libraryieee;--库说明

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitybisheis--实体说明

port(

d:

instd_logic_vector(7downto0);

clk,eoc,rst:

instd_logic;

ale,start,oe:

outstd_logic;

shuma,scan:

outstd_logic_vector(7downto0);

lamp:

outstd_logic_vector(3downto0)

);

end;

 

architectureaofbisheis--结构体说明

signalregl,q:

std_logic_vector(7downto0);

signalxian_clkd:

std_logic;

signalad_clk:

std_logic;

signalclock0:

std_logic;

typestatesis(idle,s0,s1,s2,s3,s4);

signallock:

std_logic;

signalcurrent_state,next_state:

states;

signalcnt3:

std_logic_vector(3downto0);

begin

lamp<="1111";--将发光二极管熄灭

cae:

process(clk)--总进程

variablecnt2:

integerrange0to32;

begin

ifclk'eventandclk='1'then

ifcnt2<32then

cnt2:

=cnt2+1;

elsecnt2:

=0;

ad_clk<=notad_clk;

endif;

endif;

endprocesscae;--采样的分频

cma:

process(clk)

variablecnt0:

integerrange0to15000000;

begin

ifclk'eventandclk='1'then

ifcnt0<15000000then

cnt0:

=cnt0+1;

elsecnt0:

=0;

xian_clkd<=notxian_clkd;

endif;

endif;

endprocesscma;--显示的分频

pro:

process(current_state,next_state,eoc)--采样程序

begin

casecurrent_stateis

whenidle=>

if(rst='0')thennext_state<=s0;

elsenext_state<=idle;

endif;

whens0=>

ale<='0';

start<='0';

oe<='0';

lock<='0';

next_state<=s1;

whens1=>

ale<='1';

start<='1';

oe<='0';

lock<='0';

next_state<=s2;

whens2=>

ale<='0';

oe<='0';

lock<='0';

if(eoc='0')then

next_state<=s2;

else

next

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

当前位置:首页 > 工程科技 > 能源化工

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

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