基于FPGA的数字温度计设计.docx
《基于FPGA的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字温度计设计.docx(29页珍藏版)》请在冰豆网上搜索。
基于FPGA的数字温度计设计
基于FPGA的数字温度设计
摘要:
本设计有效的克服了传统的数字温度计的缺点,采用EDA技术自上而下的设计思路,绘制出了具体的逻辑电路,最后又在硬件上通过对其进行调试和验证。
基于FPGA在QuartusII9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。
该电路能够实现很好的测温功能。
关键字:
数字温度计;EDA;FPGA;VHDL;QuartusII9.0sp2;EP2C8Q208
ThedesignofdigitalthermometerbasedonFPGA
Abstract:
Thisdesigneffectivelyovercomesthetraditionaldigitalthermometer’sweaknessesandtakesatop-downapproachtodesign.Drawoutaparticularlogiccircuits,andfinallypassthecircuitstothehardwaretodebugandverifyit.ThisdesignisbasedonFPGAusingVHDLlanguagetowriteprograminQuartusIIsoftware,adoptingEP2C8Q208chipofCyclone-IIseriesofALTRAcompanyforcomputersimulationandatthesametimeshowingthecorrespondingsimulationresult.Thiscircuitisabletocarryoutexcellenttemperature-measurementfunction.
KeyWords:
Digitalthermometer;EDA;FPGA;VHDL;QuartusII;EP2C8Q208
引言
检测是控制的基础和前提,而检测的精度必须高于控制的精确度,否则无从实现控制的精度要求。
不仅如此,检测还涉及国计民生各个部门,可以说在所以科学技术领域无时不在进行检测。
科学技术的发展和检测技术的发展是密切相关的。
现代化的检测手段能达到的精度、灵敏度及测量范围等,在很大程度上决定了科学技术的发展水平。
同时,科学技术的发展达到的水平越高,又为检测技术、传感器技术提供了新的前提手段。
目前温度计技术的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等。
目前的温度计中传感器是它的重要组成部分,它的精度灵敏度基本决定了温度计的精度、测量范围、控制范围和用途等[1]。
传感器应用极其广泛,目前已经研制出多种新型传感器。
1.设计要求
现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronicdesignautomatic,EDA)技术[5]。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。
而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点[2]。
温度的数字化给人们生产生活带来了极大的方便。
因此,研究数字温度计及其应用,有着非常现实的意义。
1.1选题背景
本节将从FPGA嵌入式应用开发技术与温度计发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字温度计的设计与实现的必要性[3]。
1.1.1课题相关技术的发展
当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计[4]。
EDA技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。
最终形成集成电子系统或专用集成芯片的一门新技术[5]。
1.1.2课题研究的必要性
新产品、新技术层出不穷,电子技术的发展更是日新月异。
可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
近些年,随着科技的发展和社会的进步,人们对温度计的要求也越来越高,不管在哪里,人们都想知道此刻的温度和天气状况等一些信息,传统的温度计由于它的局限性以及不方便性,已不能满足人们的需求。
温度计亟待一次革命,不管在性能还是在样式上它都将发生质的变化,于是数字温度计的时代悄然来临了。
1.2课题研究的内容
本设计主要研究基于FPGA的数字温度计设计,要求温度采集准确精确,精确度达到0.0625摄氏度,对温度的采集由4×1矩形键盘进行控制。
2.FPGA简介
2.1FPGA概述
FPGA是现场可编程门阵列(FieldProgrammableGateArray)的简称,与之相应的CPLD是复杂可编程逻辑器件(ComplexProgrammableLogicDevice)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/PGFA。
CPLD/PGFA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。
它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。
通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。
使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步[4]。
2.2FPGA基本结构
FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。
FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。
这3种可编程电路是:
可编程逻辑模块、输入/输出模块(IOB--I/OBlock)和互连资源。
可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。
(1)CLB是FPGA的主要组成部分。
图2-1是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。
CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G’、F’和H’。
G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。
这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。
逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G’和F’,而另一个输入信号是来自信号变换电路的输出H1。
这个函数发生器能实现3输入变量的各种组合函数。
这3个函数发生器结合起来,可实现多达9变量的逻辑函数。
CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。
这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。
CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。
F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。
另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。
(2)输入/输出模块IOB。
IOB提供了器件引脚和内部逻辑阵列之间的连接。
它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。
每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。
当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。
缓冲器的输出分成两路:
一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发器,再送到数据选择器。
通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。
图2-1CLB基本结构
当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:
一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。
IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通Vcc、地线或者不接通,用以改善输出波形和负载能力。
(3)可编程互连资源IR。
可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。
IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。
2.3FPGA系统设计流程
一般说来,一个比较大的完整的项目应该采用层次化的描述方法:
分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOPDOWN(自顶向下)的设计方法。
目前这种高层次的设计方法已被广泛采用。
高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。
CPLD/FPGA系统设计的工作流程如图2-2所示[6]。
图2-2CPLD/FPGA系统设计流程
流程说明:
(1)工程师按照“自顶向下”的设计方法进行系统划分。
(2)输入VHDL代码,这是设计中最为普遍的输入方式。
此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。
(3)将以上的设计输入编译成标准的VHDL文件。
(4)进行代码级的功能仿真,主要是检验系统功能设计的正确性。
这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。
一般情况下,这一仿真步骤可略去。
(5)利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。
综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
(6)利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。
一般的设计,也可略去这一步骤。
(7)利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
(8)在适配完成后,产生多项设计结果:
(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。
根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。
如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求[7]。
最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。
2.4FPGA开发编程原理
硬件设计需要根据各种性能指标、成本、开发周期等因素,确定最佳的实现方案,画出系统框图,选择芯片,设计PCB并最终形成样机。
CPLD/FPGA软件设计可分为两大块:
编程语言和编程工具。
编程语言主要有VHDL和Verilog两种硬件描述语言;编程工具主要是两大厂家Altera和Xilinx的集成综合EDA软件(如MAX+plusII、QuartusII、Foundation、ISE)以及第三方工具(如FPGAExpress、Modelsim、SynposysSVS等)。
具体的设计输入方式有以下几种[8]:
(1)HDL语言方式。
HDL既可以描述底层设计,也可以描述顶层的设计,但它不容易做到较高的工作速度和芯片利用率。
用这种方式描述的项目最后所能达到的性能与设计人员的水平、经验以及综合软件有很大的关系。
(2)图形方式。
可以分为电路原理图描述,状态机描述和波形描述3种形式。
有的软件3种输入方法都支持,如Active-HDL。
MAX+plusII图形输入方式只支持电路原理图描述和波形描述两种。
电路原理图方式描述比较直观和高效,对综合软件的要求不高。
一般大都使用成熟的IP核和中小规模集成电路所搭成的现成电路,整体放到一片可编程逻辑器件的内部去,所以硬件工作速度和芯片利用率很高,但是但项目很大的时候,该方法就显得有些繁琐;状态机描述主要用来设计基于状态机思想的时序电路[9]。
在图形的方式下定义好各个工作状态,然后在各个状态上输入转换条件以及相应的输入输出,最后生成HDL语言描述,送去综合软件综合到可编程逻辑器件的内部。
由于状态机到HDL语言有一种标准的对应描述方式,所以这种输入方式最后所能达到的工作速度和芯片利用率主要取决于综合软件;波形描述方式是基于真值表的一种图形输入方式,直接描述输入与输出的波形关系。
这种输入方式最后所能达到的工作速度和芯片利用率也是主要取决于综合软件[10]。
2.5DS18B20的性能特点
(1)DS18B20的性能特点:
①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种系统,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源[11]。
(2)DS18B20内部结构
图2-3DS18B20内部结构
DS18B20内部结构主要由四部分组成:
64位光刻ROM,温度传感器,掉电后仍能保存的温度报警触发器TH和TL(存储在EEPROM),高速暂存器。
DS18B20的管脚排vccdqgnd。
64位光刻ROM是出厂前被光刻好的,它是该DS18B20的序列号。
每一个DSl820包括一个唯一的64位长的序号[12]。
开始8位是产品类型编码(DS18B20编码均为10H)。
接着的48位是每个器件唯一的序号最后8位是前面56位的CRC(循环冗余校验)码。
DS18B20中还有用于存储测得的温度值的两个8位存贮器RAM,编号为0号和1号。
1号存贮器存放温度值的符号如果温度为负,则1号存贮器8位全为1,否则全为0。
0号存贮器用于存放温度值的补码,LSB(最低位)的1表示0.5℃。
将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值
DS18B20有两种供电方式即数据总线供电方式和外部供电方式采取数据总线供电方式可以节省一根导线但完成温度测量的时间较长采取外部供电方式则多用一根导线但测量速度较[13]。
3.设计过程
3.1总体方案设计
3.1.1FPGA控制DS18B20
FPGA需要完成DS18B20的初始化、读取DS18B20的48位ID号、启动DS18B20温度转换、读取温度转化结果。
读取48位ID号和读取温度转换结果过程中,FPGA还要实现CRC校验码的计算,保证通信数据的可靠性[14]。
以上操作反复进行,可以用状态机来实现。
状态机的各种状态如下:
RESET1:
对DS18B20进行第一次复位,然后进入等待,等待800μs后,进入下一状态。
CMD33:
对DS18B20发出0×33命令,读取48位ID值。
GET_ID:
从DS18B20中读取48位ID值。
RESET2:
对DS18B20进行第二次复位,然后进入DELAY状态等待800μs后,进入CMDCC状态。
CMDCC:
向DS18B20发出忽略ROM命令,为进入下一状态作准备。
CMD44:
向DS18B20发出启动温度转换命令,然后进入等待,900ms后进入下一状态。
RESET3:
对DS18B20进行第三次复位。
CMDCC2:
向DS18B20发出忽略ROM命令,为了进入下一状态作准备。
GET_TEMP:
从DS18B20中读取温度测量数值。
DELAY:
等待状态。
WRITE_BIT:
向DS18B20中写入数据位状态。
READ_BIT:
从DS18B20中读取数据位状态。
在该状态中每读取1位数据,同时完成该数据位的CRC校验计算[15]。
所有数据都读取后,还要读取8位CRC校验位。
这8位校验位也经过CRC校验计算,如果通信没有错误,总的CRC校验结果应该是0。
这时可将通信正确的数据保存到id和temp_data寄存器中。
3.2单元电路设计
3.2.1DS18B20温度采集在开发板上的原理图
图3-1开发板上输出显示的按键原理图
图3-2开发板上的按键实物图
图3-3发板上DS18B20实物图
4.装调与测试
4.1EP2C8Q208FPAG开发板装调
图 4-1开发板实物图
核心系统:
(1)CycloneII核心:
EP2C8Q208:
(2)SDRAM:
64Mbit为满足用户海量存储:
(为做SOPC或者NIOSII系统提供足够的内存);
(3)Flash:
16Mbit能满足大中小型开发,为用户配置NIOS的镜像文件:
(4)EPCS4配置芯片:
(5)提供配置模式:
JTAG和AS。
此外配置管脚通过插针引出:
(6)核心板的有源时钟为50Mhz):
(7)将所有IO、Avalon总线、配置管脚等都通过3排插针引出,可以充分自由发挥,扩展更灵活:
(扩展I/O完全考虑了电磁兼容的问题,满足信号完整性)
(8)FPGA供电系统:
外接5V的直流电:
4.2外围I/O资源
(1)6位LED发光二极管(做流水等实验)
(2)8位LED数码管(做动态或静态数码管显示实验,频率计;秒表....)
(3)一路蜂鸣器(用作发声实验)
(4)4只独立按键(做按键控制实验)
(5)I2C串行EEPROM24C04(做IIC总线实验)
(6)VGA接口(做VGA实验)
(7)MAX232专用串口通讯电路(做和其他系统的串口通讯实验)
(8)1602LCD字符型液晶接口(做字符显示实验)
(9)12864LCD图形液晶接口(做图形汉字等显示实验)
(10)双PS/2键盘接口(做PS/2键盘实验)
(11)SD卡接口。
可以读取SD卡的数据:
例如图片。
(12)DS1302时钟芯片,
(13)DS18B20温度传感器
(14)红外线接收头
4.3开发板源程序测试
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityds18B20is
port(clk:
instd_logic;--原程序可能为50MHz
dq:
inoutstd_logic;
--temp_h:
outstd_logic_vector(7downto0);
--temp_l:
outstd_logic_vector(7downto0);
LED:
outstd_logic;
LED2:
outstd_logic;
LED3:
outstd_logic;
rst:
instd_logic;
----------------
dataout:
outstd_logic_vector(7downto0);
seg:
outstd_logic_vector(5downto0));
endds18B20;
architectureBehavioralofds18B20is
TYPESTATE_TYPEis(RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,WRITE_HIGH,READ_BIT,
CMD_44,CMD_BE,WAIT800MS,GET_TMP,WAIT4MS);
signalSTATE:
STATE_TYPE:
=RESET;
signalclk_temp:
std_logic:
='0';
signalclk1m:
std_logic;--分频后得到的1M时钟
signalwrite_temp:
std_logic_vector(7downto0):
="00000000";
signalTMP:
std_logic_vector(11downto0);
signaltmp_bit:
std_logic;
signalWRITE_BYTE_CNT:
integerrange0to8:
=0;
signalWRITE_LOW_CNT:
integerrange0to2:
=0;
signalWRITE_HIGH_CNT:
integerrange0to2:
=0;
signalREAD_BIT_CNT:
integerrange0to3:
=0;
signalGET_TMP_CNT:
integerrange0to13:
=0;
signalcnt:
integerrange0to100001:
=0;
----------******************************
signalcnt2:
integerrange0to4000001:
=0;
signalseg_temp:
std_logic_vector(5downto0);
--signaltemp_h:
std_logic_vector