1、 1 草鱼 基于 FPGA 的数字温度设计 草鱼 摘要 : pork本设计有效的克服了传统的数字温度计的缺点 , 鲤鱼 采用 EDA 技术自上而下的设计思路 , 鲤鱼 绘制出了具体的逻辑电路 , 鲤鱼 最后又 在 硬件上通过对其进行调试和验证 。草鱼 基于 FPGA 在 Quartus 草鱼 II 草鱼 9.0sp2 软件下应用 VHDL 语言编写程序 ,采用 ALTRA 公司 CycloneII 系列的 EP2C8Q208 芯片进行了计算机仿真 , 鲤鱼 并给出了相应的仿真结果 。 草鱼 该电路能够实现很好的测温功能 。 草鱼 草鱼 关键字 : p ork数字温度计 ; porkEDA; p
2、orkFPGA; porkVHDL; porkQuartus 草鱼 II 草鱼 9.0sp2; porkEP2C8Q208 草鱼 草鱼 The 草鱼design 草鱼 of 草鱼digital 草鱼 thermometer 草鱼 based 草鱼 on 草鱼 FPGA 草鱼 草鱼 Abstract: 草鱼 This 草鱼 design 草鱼 effectively 草鱼 overcomes 草鱼 the 草鱼 traditional 草鱼 digital 草鱼thermometers 草鱼 weaknesses 草鱼 草鱼 and 草鱼 takes 草鱼 a 草 鱼top-down 草鱼 ap
3、proach 草鱼 to 草鱼 design.Draw 草鱼 out 草鱼a 草鱼 particular 草鱼 logic 草鱼 circuits, 草鱼 草鱼 and 草鱼 finally 草鱼 pass 草鱼 the 草鱼 circuits 草鱼 to 草鱼 the 草鱼 hardware 草鱼 to 草鱼debug 草鱼 and 草鱼 verify 草鱼 it.This 草鱼 design 草鱼 is 草鱼 based 草鱼 on 草鱼 FPGA 草鱼 using 草鱼 VHDL 草鱼 language 草鱼 to 草鱼write 草鱼 program 草鱼 in 草鱼 Quartus
4、草鱼 II 草鱼 software, 草鱼 adopting 草鱼 EP2C8Q208 草鱼 chip 草鱼 of 草鱼 Cyclone-II 草鱼 series 草鱼 of 草鱼 ALTRA 草鱼 company 草鱼 for 草鱼 computer 草鱼 simulation 草鱼 and 草鱼 at 草鱼 the 草鱼 same 草鱼 time 草鱼showing 草鱼 the 草鱼 corresponding 草鱼 simulation 草鱼 result. 草鱼 This 草鱼 circuit 草鱼 is 草鱼 able 草鱼 to 草鱼 carry 草鱼 out 草鱼excelle
5、nt 草鱼 temperature- 草鱼 measurement 草鱼 function. 草鱼 Key ords: 草鱼 Digital 草鱼 thermometer; porkEDA; porkFPGA; porkVHDL; porkQuartus 草鱼 II; porkEP2C8Q208草鱼 引 言 草鱼 检测是控制的基础和 前提 , 鲤鱼 而检测的精度必须高于控制的精确度 , 鲤鱼 否则无从实现控制的精度 要求 。 草鱼 不仅如此 , 鲤鱼 检测还涉及国计民生各个部 门 , 鲤鱼 可以说在所以科学技术领域无时不在进行检测 。 草鱼 科学技术的发展和检测技术的发展是密切相关的 。草鱼
6、现代化的检测手段能达到的精度 、 pork灵敏度及测量范围等 , 鲤鱼 在很大程度上决定了科学技术的发展水平 。 草鱼 同时 , 鲤鱼 科学技术的发展达到的水平越高 , 鲤鱼 又为检测技术 、 po r k传感器技术提供了新的前提手段 。 草鱼 目前温度计技术的发展很快 , 鲤鱼 从原始的玻璃管温度计发展到了现在的热电阻温度计 、 pork热电偶温度计 、 pork数字温度计 、 pork电子温度计等等 。 草鱼 目前的温度计中传感器是它的重要组成部分 , 鲤鱼 它的精度灵敏度 基本决定了温度计的精度 、 pork测量范围 、 pork控制范围和用途等 1。 草鱼 传感器应用极其广泛 , 鲤鱼
7、 目前已经研制出多种新型传感器 。 草鱼 草鱼 1设计要求 草鱼 现代社会的标志之一就是信息产品的广泛使用 , 鲤鱼 而且是产品的性能越来越强 , 鲤鱼复杂程度越来越高 , 鲤鱼 更新步伐越来越快 。 草鱼 支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展 。 草鱼 前者以微细加工技术为代表 , 鲤鱼 而后者的代表就是电子设计自动化( electronic 草鱼 design 草鱼automatic,EDA)技术 5。 草鱼草鱼 本设计采用的 VHDL 是一种全方位的硬件描述语言 , 鲤鱼 具有极强的描述能力 , 鲤鱼 能支持系统行为级 、 pork寄存器
8、传输级和逻辑门级三个不同层次的设计 ; pork支持结构 、 pork数据流 、 pork行为三种描述形式的混合描述 、 pork覆盖面广 、 pork抽象能力强 , 鲤鱼 因此在实际应用中2 越来越广泛 。 草鱼 ASIC 是专用的系统集成电路 , 鲤鱼 是一种带有逻辑处理的加速处理器 。草鱼 而 FPGA 是特殊的 ASIC 芯片 , 鲤鱼 与其他的 ASIC 芯片相比 , 鲤鱼 它具有设计开发周期短 、pork设计制造成本低 、 pork开发工具先进 、 pork标准产品无需测试 、 pork质量稳定以及可实时在线检测等优点 2。 草鱼草鱼 温度的数字化给人们生产生活带来了极大的方便 。
9、 草鱼 因此 , 鲤鱼 研究数字温度计及其应用 , 鲤鱼 有着非常现实的意义 。 草鱼草鱼 1.1 草鱼 草鱼 选题背景 草鱼 本节将从 FPGA 嵌入式应用开发技术与温度计发展的客观实际出发 , 鲤鱼 通过对该技术发展状况的了解 , 鲤鱼 以及课题本身的需要 , 鲤鱼 指出研究基于 FPGA 的芯片系统与设计 数字温度计的设计与实现的必要性 3。 草鱼 草鱼 1.1.1 草鱼 草鱼 课题相关技术的发展 草鱼 当今电子产品正向功能多元化 ,体积最小化 ,功耗最低化的方向发展 。 草鱼 它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件 , 鲤鱼 使产品的性能提高 , 鲤鱼 体积
10、缩小 , 鲤鱼 功耗降低 .同时广泛运用现代计算机技术 , 鲤鱼 提高产品的自动化程度和竞争力 , 鲤鱼 缩短研发周期 。 草鱼 EDA 技术正是为了适应现代电子技术的要求 , 鲤鱼吸收众多学科最新科技成果而形成的一门新技术 。 草鱼 草鱼 美国 ALTERA 公司的可编程逻辑器件采用全新的结构和先进的技术 , 鲤鱼 加上MaxplusII(或最新的 QUARTUS)开发环境 , 鲤鱼 更具有高性能 , 鲤鱼 开发周期短等特点 , 鲤鱼十 分方便进行电子产品的开发和设计 4。 草鱼草鱼 EDA 技术以大规模可编程逻辑器件为设计载体 , 鲤鱼 以硬件描述语言为系统逻辑描述主要表达方式 , 鲤鱼
11、以计算机 、 pork大规模可编程逻辑器件的开发软件及实验开发系统为设计工具 , 鲤鱼 通过有关的开发软件 , 鲤鱼 自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译 , 鲤鱼 逻辑化简 , 鲤鱼 逻辑分割 , 鲤鱼 逻辑映射 , 鲤鱼 编程下载等工作 。 草鱼 最终形成集成电子系统或专用集成芯片的一门新技术 5。 草鱼草鱼 1.1.2 草鱼 草鱼 课题研究的必要性 草鱼 新产品 、 pork新技术层出不穷 , 鲤鱼 电 子技术的发展更是日新月异 。 草鱼 可以毫不夸张的说 ,鲤鱼 电子技术的应用无处不在 , 鲤鱼 电子技术正在不断地改变我们的生活 , 鲤鱼 改变着我们的世界 。 草鱼
12、近些年 , 鲤鱼 随着科技的发展和社会的进步 , 鲤鱼 人们对温度计的要求也越来越高 ,鲤鱼 不管在哪里 , 鲤鱼 人们都想知道此刻的温度和天气状况等一些信息 , 鲤鱼 传统的温度计由于它的局限性以及不方便性 , 鲤鱼 已不能满足人们的需求 。 草鱼 温度计亟待一次革命 , 鲤鱼不管在性能还是在样式上它都将发生质的变化 , 鲤鱼 于是数字温度计的时代悄然来临了 。 草鱼 草鱼 草鱼 1.2 草鱼 草鱼 课题研究的内容 草鱼 本设 计主要研究基于 FPGA 的数字温度计设计 , 鲤鱼 要求温度采集准确精确 , 鲤鱼 精确度达到 0.0625 摄氏度 , 鲤鱼 对温度的采集由 4 1 矩形键盘进行
13、控制 。 草鱼草鱼 2. 草鱼 草鱼FPGA 简介 草鱼 2.1 草鱼 草鱼 FPGA 概述 草鱼 FPGA 是现场可编程门阵列( Field 草鱼 Programmable 草鱼 Gate 草鱼 Array)的简称 , 鲤鱼 与之相应的 CPLD 是复杂可编程逻辑器件( Complex 草鱼 Programmable 草鱼 Logic 草鱼 Device)的简称 , 鲤鱼 两者的功能基本相同 , 鲤鱼 只是实现原理略有不同 , 鲤鱼 所以有时可以忽略这两者的区别 , 鲤鱼 统称为可编程逻辑器件或 CPLD/PGFA。 草鱼 CPLD/PGFA 几乎能完成任何数字器3 件的功能 , 鲤鱼 上至
14、高性能 CPU, 鲤鱼 下至简单的 74 电路 。 草鱼 它如同一张白纸或是一堆积木 , 鲤鱼 工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统 。 草鱼 通过软件仿真可以事先验证设计的正确性 , 鲤鱼 在 PCB 完成以后 , 鲤鱼 利用 CPLD/FPGA的在线修改功能 , 鲤鱼 随时修改设计而不必改动硬件电路 。 草鱼 使用 CPLA/FPGA 开发数字电路 , 鲤鱼 可以大大缩短设计时间 , 鲤鱼 减少 PCB 面积 , 鲤 鱼 提高系统的可靠性 。 草鱼 这些优点使得 CPLA/FPGA 技术在 20 世纪 90 年代以后得到飞速的发展 , 鲤鱼 同时也大大推动了E
15、DA 软件和硬件描述语言 HDL 的进步 4。 草鱼草鱼 2.2 草鱼 草鱼 FPGA 基本结构 草鱼 FPGA 具有掩膜可编程门阵列的通用结构 , 鲤鱼 它由逻辑功能块排成阵列 , 鲤鱼 并由可编程的互连资源连接这些逻辑功能块来实现不同的设计 。 草鱼 草鱼 FPGA 一般由 3 种可编程电路和一个用于存放编程数据的静态存储器 SRAM 组成 。草鱼 这 3 种可编程电路是 : pork可编程逻辑模块 、 pork输入 /输出模块( IOB-I/O 草鱼 Block)和互连资源 。 草鱼 可编程逻辑模块 CLB 是实现逻辑功能的基本单元 , 鲤鱼 它们通常规则的排列成一个阵列 , 鲤鱼 散布
16、于整个芯片 ; pork可编程输入 /输出模块( IOB)主要完成芯片上的逻辑与外部封装脚的接口 , 鲤鱼 它通常排列在芯片的四周 ; pork可编程互连资源包括各种长度的连接线段和一些可编程连接开关 , 鲤鱼 它们将各个 CLB 之间或 CLB、 porkIOB 之间以及 IOB 之间连接起来 , 鲤鱼 构成特定功能的电路 。 草鱼草鱼 (1) 草鱼 CLB 是 FPGA 的主要组成部分 。 草鱼 图 2-1 是 CLB 基本结构框图 , 鲤鱼 它主要由逻辑函 数发生器 、 pork触发器 、 pork数据选择器等电路组成 。 草鱼 CLB 中 3 个逻辑函数发生器分别是 G、 porkF
17、和 H, 鲤鱼 相应的输出是 G 、 porkF和 H 。 草鱼 G有 4 个输入变量 G1、 porkG2、 porkG3 和 G4;p orkF 也有 4 个输入变量 F1、 porkF2、 porkF3 和 F4。 草鱼 这两个函数发生器是完全独立的 , 鲤鱼 均可以实现 4 输入变量的任意组合逻辑函数 。 草鱼 逻辑函数发生器 H 有 3 个输入信号 ; po r k前两个是函数发生器的输出 G和 F , 鲤鱼 而另一个输入信号是来自信号变换电路的输出 H1。 草鱼 这个函数发生器能实现 3 输入变量的各种组合函数 。 草鱼 这 3 个函数发生器结合起来 , 鲤鱼 可实现多达 9 变量
18、的逻辑函数 。 草鱼草鱼 CLB 中有许多不同规格的数据选择器(四选一 、 p ork二选一等) , 鲤鱼 通过对 CLB 内部数据选择器的编程 , 鲤鱼 逻辑函数发生器 G、 porkF 和 H 的输出可以连接到 CLB 输出端 X或 Y, 鲤鱼 并用来选择触发器的激励输入信号 、 pork时钟有效边沿 、 pork时钟使能信号以及输出信号 。 草鱼 这些数据选择器的地址控制信号均由编程信息提供 , 鲤鱼 从而实现所需的电路结构 。 草鱼草鱼 CLB 中的逻辑函数发生器 F 和 G 均为查找表结构 , 鲤鱼 其工作原理 类似于 ROM。 草鱼 F和G 的输入等效于 ROM 的地址码 , 鲤鱼
19、 通过查找 ROM 中的地址表可以得到相应的组合逻辑函数输出 。 草鱼 另一方面 , 鲤鱼 逻辑函数发生器 F 和 G 还可以作为器件内高速 RAM 或小的可读写存储器使用 , 鲤鱼 它由信号变换电路控制 。 草鱼草鱼 (2) 草鱼 输入 /输出模块 IOB。 草鱼 IOB 提供了器件引脚和内部逻辑阵列之间的连接 。 草鱼 它主要由输入触发器 、 pork输入缓冲器和输出触发 /锁存器 、 pork输出缓冲器组成 。 草鱼草鱼 每个 IOB 控制一个引脚 , 鲤鱼 它们可被配置为输入 、 pork输出或双向 I/O 功能 。 草鱼 当 IOB控制的 引脚被定义为输入时 , 鲤鱼 通过该引脚的输
20、入信号先送入输入缓冲器 。 草鱼 缓冲器的输出分成两路 : pork一路可以直接送到 MUX, 鲤鱼 另一路经延时几纳秒(或者不延时)送到输入通路 D 触发器 , 鲤鱼 再送到数据选择器 。 草鱼 通过编程给数据选择器不同的控制信息 , 鲤鱼 确定送至 CLB 阵列的 I1 和 I2 是来自输入缓冲器 , 鲤鱼 还是来自触发器 。 草鱼草鱼 4 草鱼 图 2-1 草鱼 CLB 基本结构 草鱼 当 IOB 控制的引脚被定义为输出时 , 鲤鱼 CLB 阵列的输出信号 OUT 也可以有两条传输途径 : pork一条是直接经 MUX 送至输出缓冲器 , 鲤鱼 另一条是先存入输 出通路 D 触发器 ,鲤
21、鱼 再送至输出缓冲器 。 草鱼草鱼 IOB 输出端配有两只 MOS 管 , 鲤鱼 它们的栅极均可编程 , 鲤鱼 使 MOS 管导通或截止 , 鲤鱼 分别经上拉电阻接通 Vcc、 pork地线或者不接通 , 鲤鱼 用以改善输出波形和负载能力 。 草鱼草鱼 (3) 草鱼 可编程互连资源 IR。 草鱼 可编程互连资源 IR 可以将 FPGA 内部的 CLB 和 CLB 之间 、 porkCLB 和 IOB 之间连接起来 , 鲤鱼 构成各种具有复杂功能的系统 。 草鱼 IR 主要由许多金属线段构成 , 鲤鱼 这些金属线段带有可编程开关 , 鲤鱼 通过自动布线实现各种电路的连接 。草鱼草鱼 2.3 草鱼
22、 草 鱼 FPGA 系统设计流程 草鱼 一般说来 , 鲤鱼 一个比较大的完整的项目应该采用层次化的描述方法 : pork分为几个较大的模块 , 鲤鱼 定义好各功能模块之间的接口 , 鲤鱼 然后各个模块再细分去具体实现 , 鲤鱼 这就是 TOP 草鱼 DOWN(自顶向下)的设计方法 。 草鱼 目前这种高层次的设计方法已被广泛采用 。 草鱼 高层次设计只是定义系统的行为特征 , 鲤鱼 可以不涉及实现工艺 , 鲤鱼 因此还可以在厂家综合库的支持下 , 鲤鱼 利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表 , 鲤鱼 使工艺转化变得轻而易举 。 草鱼 CPLD/FPGA 系统设计的工作流程如
23、 图 2-2所示 6。 草鱼 草鱼 5 草鱼 图 2-2 草鱼 CPLD/FPGA 系统设计流程 草鱼 流程说明 : pork草鱼 (1) 草鱼 工程师按照“自顶向下”的设计方法进行系统划分 。 草鱼草鱼 (2) 草鱼 输入 VHDL 代码 , 鲤鱼 这是设计中最为普遍的输入方式 。 草鱼 此外 , 鲤鱼 还可以采用图形输入方式(框图 、 p ork状态图等) , 鲤鱼 这种输入方式具有直观 、 pork容易理解的优点 。 草鱼草鱼 (3) 草鱼 将以上的设计输入编译成标准的 VHDL 文件 。 草鱼草鱼 (4) 草鱼 进行代码级的功能仿真 , 鲤鱼 主要是检验系统功能设计的正确性 。 草鱼
24、这一步 骤适用于大型设计 , 鲤鱼 因为对于大型设计来说 , 鲤鱼 在综合前对源代码仿真 , 鲤鱼 就可以大大减少设计重复的次数和时间 。 草鱼 一般情况下 , 鲤鱼 这一仿真步骤可略去 。 草鱼草鱼 (5) 草鱼 利用综合器对 VHDL 源代码进行综合优化处理 , 鲤鱼 生成门级描述的网络表文件 ,鲤鱼 这是将高层次描述转化为硬件电路的关键步骤 。 草鱼 综合优化是针对 ASIC 芯片供应商的某一产品系列进行的 , 鲤鱼 所以综合的过程要在相应的厂家综合库的支持下才能完成 。 草鱼草鱼 (6) 草鱼 利用产生的网络表文件进行适配前的时序仿真 , 鲤鱼 仿真过程不涉及具体器件的硬件特性 , 鲤
25、鱼 是较为粗略的 。 草鱼 一般的设计 , 鲤鱼 也可略去这一步骤 。 草鱼草鱼 (7) 草鱼 利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作 , 鲤鱼 包括底层器件配置 、 pork逻辑分割 、 pork逻辑优化和布局布线 。 草鱼草鱼 (8) 草鱼 在适配完成后 , 鲤鱼 产生多项设计结果 : pork( a)适配报告 , 鲤鱼 包括芯片内部资源利用情况 , 鲤鱼 设计的布尔方程描述情况等 ; pork( b)适配后的仿真模型 ; pork( c)器件编程文件 。 草鱼 根据适配后的仿真模型 , 鲤鱼 可以进行适配后时序仿真 , 鲤鱼 因为已经得到器件的实际硬件特性(
26、如时延特 性) , 鲤鱼 所以仿真结果能比较精确的预期未来芯片的实际性能 。 草鱼 如果仿真结果达不到设计要求 , 鲤鱼 就修改 VHDL 源代码或选择不同速度和品质的器件 , 鲤鱼 直至满足设计要求 7。 草鱼草鱼 最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA 中 。 草鱼草鱼 6 2.4 草鱼 草鱼 FPGA 开发编程原理 草鱼 硬件设计需要根据各种性能指标 、 pork成本 、 pork开发周期等因素 , 鲤鱼 确定最佳的实现方案 ,鲤鱼 画出系统框图 , 鲤鱼 选择芯片 , 鲤鱼 设计 PCB 并最终形成样机 。 草鱼 草鱼 CPLD/FPGA 软
27、件设计可 分为两大块 : pork编程语言和编程工具 。 草鱼 编程语言主要有 VHDL和 Verilog 两种硬件描述语言 ; pork编程工具主要是两大厂家 Altera 和 Xilinx 的集成综合 EDA 软件(如 MAX+plusII、 p orkQuartusII、 porkFoundation、 porkISE)以及第三方工具(如 FPGA 草鱼 Express、 porkModelsim、 porkSynposys 草鱼 SVS 等) 。 草鱼 具体的设计输入方式有以下几种 8: pork草鱼 (1) 草鱼 HDL 语言方式 。 草鱼 HDL 既可以描述底层设计 , 鲤鱼 也可
28、 以描述顶层的设计 , 鲤鱼 但它不容易做到较高的工作速度和芯片利用率 。 草鱼 用这种方式描述的项目最后所能达到的性能与设计人员的水平 、 pork经验以及综合软件有很大的关系 。 草鱼草鱼 (2) 草鱼 图形方式 。 草鱼 可以分为电路原理图描述 , 鲤鱼 状态机描述和波形描述 3 种形式 。 草鱼有的软件 3 种输入方法都支持 , 鲤鱼 如 Active-HDL。 草鱼 MAX+plusII 草鱼 图形输入方式只支持电路原理图描述和波形描述两种 。 草鱼 电路原理图方式描述比较直观和高效 , 鲤鱼 对综合软件的要求不高 。 草鱼 一般大都使用成熟的 IP 核和中小规模集成电路所搭成的 现
29、成电路 , 鲤鱼 整体放到一片可编程逻辑器件的内部去 , 鲤鱼 所以硬件工作速度和芯片利用率很高 , 鲤鱼 但是但项目很大的时候 , 鲤鱼 该方法就显得有些繁琐 ; pork状态机描述主要用来设计基于状态机思想的时序电路 9。 草鱼 在图形的方式下定义好各个工作状态 , 鲤鱼 然后在各个状态上输入转换条件以及相应的输入输出 , 鲤鱼 最后生成 HDL 语言描述 , 鲤鱼 送去综合软件综合到可编程逻辑器件的内部 。 草鱼 由于状态机到 HDL 语言有一种标准的对应描述方式 , 鲤鱼 所以这种输入方式最后所能达到的工作速度和芯片利用率主要取决于综合软件 ; pork波形描述方式是 基于真值表的一种
30、图形输入方式 , 鲤鱼 直接描述输入与输出的波形关系 。 草鱼 这种输入方式最后所能达到的工作速度和芯片利用率也是主要取决于综合软件 10。 草鱼草鱼 2.5 草鱼 草鱼 DS18B20 的性能特点 草鱼 (1) 草鱼 DS18B20 的性能特点 : pork草鱼 采用单总线专用技术 , 鲤鱼 既可通过串行口线 , 鲤鱼 也可通过其它 I/O 口线与微机接口 ,鲤鱼 无须经过其它变换电路 , 鲤鱼 直接输出被测温度值( 9 位二进制数 , 鲤鱼 含符号位) , 鲤鱼 测温范围为 -55 -+125 , 鲤鱼 测量分辨率为 0.0625 ,内含 64 位经过激光修正的只读存储器 ROM, 鲤鱼
31、适配各种系统 , 鲤鱼 用户可分别设定各路温度的上 、 pork下限 ,鲤鱼 内含寄生电源 11。 草鱼 草鱼 草鱼 (2) 草鱼 DS18B20 内部结构 草鱼草鱼 草鱼 7 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 图 2-3 草鱼 DS18B20 内部结构 草鱼 草鱼 草鱼 草鱼 草鱼 DS18B20 内部结构主要由四部分组成 : pork64 位光刻 ROM,温度传感器 ,掉电后仍能保存的温度报警触发器 TH 和 TL(存储在 EEPROM),高速暂存器 。 草鱼 DS18B20
32、 的管脚排 vcc 草鱼 dq 草鱼 gnd。 草鱼 64 位光刻 ROM 是出厂前被光刻好的 , 鲤鱼 它是该 DS18B20 的序列号 。 草鱼 每一个 DSl820 包括一个唯一的 64 位长的序号 12。 草鱼草鱼 草鱼 草鱼 草鱼 草鱼 开始 8 位是产品类型编码 (DS18B20 编码均为 10H)。 草鱼 接着的 48 位是每个器件唯一的序号最后 8 位是前面 56 位的 CRC(循环冗余校验 )码 。 草鱼 DS18B20 中还有用于存储测得的温度值的两个 8 位存贮器 RAM,编号为 0 号和 1 号 。 草鱼 1号存贮器存放 温度值的符号如果温度为负 , 鲤鱼 则 1 号存
33、贮器 8 位全为 1, 鲤鱼 否则全为 0。 草鱼 0 号存贮器用于存放温度值的补码 , 鲤鱼 LSB(最低位 )的 1 表示 0.5 。 草鱼 将存贮器中的二进制数求补再转换成十进制数并除以 2 就得到被测温度值 草鱼 DS18B20 有两种供电方式即数据总线供电方式和外部供电方式采取数据总线供电方式可以节省一根导线但完成温度测量的时间较长采取外部供电方式则多用一根导线但测量速度较 13。 草鱼 草鱼草鱼 3.设计过程 草鱼 3.1 草鱼 草鱼 总体方案设计 草鱼 3.1.1 草鱼 草鱼 FPGA 控制 DS18B20 草鱼 FPGA 需要完成 DS18B20 的初始化 、 p ork读取
34、DS18B20 的 48 位 ID 号 、 po r k启动 DS18B20温度转换 、 pork读取温度转化结果 。 草鱼 读取 48 位 ID 号和读取温度转换结果过程中 , 鲤鱼 FPGA还要实现 CRC 校验码的计算 , 鲤鱼 保证通信数据的可靠性 14。 草鱼 草鱼 草鱼草鱼 以上操作反复进行 , 鲤鱼 可以用状态机来实现 。 草鱼 状态机的各种状态如下 : pork 草鱼草鱼 RESET1: p ork对 DS18B20 进行第一次复位 , 鲤鱼 然后进入等待 , 鲤鱼 等待 800 s 后 , 鲤鱼 进入下一状态 。 草鱼 草鱼草鱼 CMD33: pork对 DS18B20 发出
35、 0 33 命令 , 鲤鱼 读取 48 位 ID 值 。 草鱼 草鱼草鱼 GET_ID: pork从 DS18B20 中读取 48 位 ID 值 。 草鱼 草鱼草鱼 RESET2: p ork对 DS18B20 进行第二次复位 , 鲤鱼 然后进入 DELAY 状态等待 800 s 后 , 鲤鱼 进入 CMDCC 状态 。 草鱼 草鱼草鱼 CMDCC: pork向 DS18B20 发出忽略 ROM 命令 , 鲤鱼 为进入下一状态作准备 。 草鱼 草鱼草鱼 CMD44: pork向 DS18B20 发出启动温度转换命令 , 鲤鱼 然后进入等待 , 鲤鱼 草鱼 900ms 后进入下一状态 。 草鱼
36、草鱼草鱼 RESET3: pork对 DS18B20 进行第三次复位 。 草鱼 草鱼草鱼 CMDCC2: pork向 DS18B20 发出忽略 ROM 命令 , 鲤鱼 为了进入下一状态作准备 。 草鱼 草鱼草鱼 GET_TEMP: pork从 DS18B20 中读取温度测量数值 。 草鱼 草鱼草鱼 DELAY: pork等待状态 。 草鱼 草鱼草鱼 WRITE_BIT: pork向 DS18B20 中写入数据位状态 。 草鱼 草鱼草鱼 READ_BIT: pork从 DS18B20 中读取数据位状态 。 草鱼 在该状态中每读取 1 位数据 , 鲤鱼 同时完成该数据位的 CRC 校验计算 15。
37、 草鱼 所有数据都读取后 , 鲤鱼 还要读取 8 位 CRC 校验位 。草鱼 这 8 位校验位也经过 CRC 校验计算 , 鲤鱼 如果通信没有错误 , 鲤鱼 总的 CRC 校验结果应该是 0。 草鱼 这时可将通信正确的数据保存到 id 和 temp_data 寄存器中 。 草鱼草鱼 3.2 草鱼 单元电路设计 草鱼 3.2.1 草鱼 DS18B20 温度采集在开发板上的原理图 草鱼 8 草鱼 图 3-1 草鱼 开发板上输出显示的按键原理图 草鱼 草鱼草鱼 草鱼 图 草鱼 3-2 草鱼 开发板上的按键实物图 草鱼 草鱼 图 草鱼 3-3 草鱼 发板上 DS18B20 实物图 草鱼 4. 草鱼装调
38、与测试 草鱼 4.1 草鱼EP2C8Q208 草鱼FPAG 草鱼 开发板 装调 草鱼 草鱼 9 草鱼 图 -1 草鱼 开发板实物图 草鱼 核心系统 : por k草鱼 (1) 草鱼 CycloneII 核心 : por kEP2C8Q208: por k草鱼 (2) 草鱼 SDRAM: pork64Mbit 为满足用户海量存储 : pork(为做 SOPC 或者 NIOS 草鱼 II 系统提供足够的内存 ); por k草鱼 (3) 草鱼 Flash: por k16Mbit 能满足大中小型开发 , 鲤鱼 为用户配置 NIOS 的镜像文件 : por k草鱼 (4) 草鱼 EPCS4 草鱼 配
39、置芯片 : por k草鱼 (5) 草鱼 提供配置模式 : por kJTAG 和 AS。 草鱼 此外配置管脚通过插针引出 : por k草鱼 (6) 草鱼 核心板的有源时钟为 50Mhz): por k草鱼 (7) 草鱼 将所有 IO、 porkAvalon 总线 、 por k配置管脚等都通过 3 排插针引出 , 鲤鱼 可以充分自由发挥 , 鲤鱼 扩展更灵活 : por k(扩展 I/O 完全考虑了电磁兼容的问题 ,满足信号完整性 )草鱼 草鱼 草鱼 草鱼 草鱼 (8) 草鱼 FPGA 供电系统 : por k外接 5V 的直流电 : por k草鱼 4.2 草鱼 草鱼 外围 I/O 资源
40、 草鱼 (1) 草鱼 6 位 LED 发光二极管(做流水等实验) 草鱼 (2) 草鱼 8 位 LED 数码管(做动态或静态数码管显示实验 ,频率计 ; por k秒表 .) 草鱼 (3) 草鱼 一路蜂鸣器(用作发声实验) 草鱼 (4) 草鱼 4 只独立按键(做按键控制实验) 草鱼 (5) 草鱼 I2C 串行 EEPROM 草鱼 24C04(做 IIC 总线实验) 草鱼 (6) 草鱼 VGA 接口(做 VGA 实验) 草鱼 (7) 草鱼 MAX232 草鱼 专用串口通讯电路(做和其他系统的串口通讯实验) 草鱼 (8) 草鱼 1602LCD 字符型液晶接口(做字符显示实验) 草鱼 (9) 草鱼 1
41、2864LCD 图形液晶接口 (做图形 草鱼 汉字 草鱼 等显示实验 )草鱼 (10) 草鱼 双 PS/2 键盘接口(做 PS/2 键盘实验) 草鱼 (11) 草鱼 SD 卡接口 。 草鱼 可以读取 SD 卡的数据 : por k例如图片 。 草鱼 草鱼 (12) 草鱼 DS1302 时钟芯片 , 鲤鱼 草鱼 (13) 草鱼 DS18B20 温度传感器 草鱼 (14) 草鱼 红外线接收头 草鱼 4.3 草鱼 开发板源程序测试 草鱼 library 草鱼 IEEE;por k草鱼 use 草鱼 IEEE.STD_LOGIC_1164.ALL;por k 草鱼 草鱼草鱼 use 草鱼 IEEE.S
42、TD_LOGIC_ARITH.ALL;por k草鱼 10 use 草鱼 IEEE.STD_LOGIC_UNSIGNED.ALL;por k 草鱼 草鱼草鱼 草鱼 entity 草鱼 ds18B20 草鱼 is 草鱼 草鱼草鱼 port(clk 草鱼 : 草鱼 in 草鱼 std_logic;por k 草鱼 草鱼 草鱼 -原程序可能为 50MHz 草鱼草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 dq 草鱼 草鱼 : 草鱼 inout 草鱼 std_logic;por k 草鱼 草 鱼草鱼 - 草鱼 草鱼 草鱼 草鱼 temp_h 草鱼 :
43、草鱼 out 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);por k 草鱼 草鱼草鱼 - 草鱼 草鱼 草鱼 草鱼 temp_l 草鱼 : 草鱼 out 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);por k草鱼 LED 草鱼 : 草鱼 out 草鱼 std_logic;por k 草鱼草鱼 LED2 草鱼 : 草鱼 out 草鱼 std_logic;por k 草鱼草鱼 LED3 草鱼 : 草鱼 out 草鱼 std_logic;por k 草鱼草鱼 rst: 草鱼 in 草鱼 std_logic;por k 草鱼草鱼 - 草鱼草
44、鱼 dataout 草鱼 : 草鱼 out 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);por k 草鱼草鱼 seg 草鱼 : 草鱼 out 草鱼 std_logic_vector(5 草鱼 downto 草鱼 0);por k草鱼 end 草鱼 ds18B20;por k 草鱼 草鱼草鱼 草鱼 architecture 草鱼 Behavioral 草鱼 of 草鱼 ds18B20 草 鱼 is 草鱼 草鱼 TYPE 草鱼 STATE_TYPE 草鱼 is 草鱼(RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,WRITE_HIGH,READ_
45、BIT, 草鱼草鱼 CMD_44,CMD_BE,WAIT800MS,GET_TMP,WAIT4MS);por k 草鱼 草鱼草鱼 signal 草鱼 STATE: 草鱼 STATE_TYPE:=RESET;por k草鱼 草鱼 signal 草鱼 clk_temp 草鱼 : 草鱼 std_logic:=0;por k草鱼 signal 草鱼 clk1m 草鱼 : 草鱼 std_logic;por k 草鱼 -分频后得到的 1M 时钟 草鱼草鱼 草鱼 signal 草鱼 write_temp 草鱼 : 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0):=“0000000
46、0“;por k 草鱼 草鱼草鱼 草鱼 signal 草鱼 TMP 草鱼 : 草鱼 std_logic_vector(11 草鱼 downto 草鱼 0);por k 草鱼 草鱼草鱼 signal 草鱼 tmp_bit 草鱼 : 草鱼 std_logic;por k草鱼 草鱼 signal 草鱼 WRITE_BYTE_CNT 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 8:=0;por k 草鱼 草鱼草鱼 signal 草鱼 WRITE_LOW_CNT 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 2:=0;por k草鱼 si
47、gnal 草鱼 WRITE_HIGH_CNT 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 2:=0;por k 草鱼 草鱼草鱼 signal 草鱼 READ_BIT_CNT 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草 鱼 3:=0;por k草鱼 signal 草鱼 GET_TMP_CNT 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 13:=0;por k 草鱼 草鱼草鱼 草鱼 signal 草鱼 cnt 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 100001
48、:=0;por k草鱼 草鱼 -* 草鱼草鱼 signal 草鱼 cnt2 草鱼 : 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 4000001:=0;por k草鱼 signal 草鱼 seg_temp 草鱼 : 草鱼 std_logic_vector(5 草鱼 downto 草鱼 0);por k 草鱼草鱼 -signal 草鱼 temp_h 草鱼 : 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);por k 草鱼草鱼 -signal 草鱼 temp_l 草鱼 : 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);por k 草鱼 草鱼草鱼 草鱼