资源描述
本科毕业设计(论文)摘 要随着微电子技术的发展,现场可编程逻辑门阵列FPGA(Field Programmable Gate Array)可以实现数字电路系统设计的功能。尤其现场可编程逻辑门阵列FPGA具有集成度高的优点,受到工程界高度的重视。I2C总线以接口简单,成本底,可扩展性好在数字系统中得到了广泛的应用。硬件描述语言是数字系统高层设计的核心,是实现数字系统设计新方法的关键技术之一。本课题正是利用VHDL语言在FPGA上实现I2C总线控制器的功能。首先研究了I2C总线的规范,又简要介绍了Quartus设计环境以及FPGA的设计流程。在此基础上,重点介绍了I2C控制器的总体设计方案,以及在Quartus平台上的时序仿真。关键词Quartus II;I2C总线控制器;现场可编程逻辑门阵列;时序仿真AbstractWith the development of micro electric and EDA(electronic design automation)technology, FPGA(field programmable gates array) can realize the function of digital circuit system design .FPGA have the merit of filed programmability and High integration rate ,therefore is highly recognized for engineering.I2C bus is widely applied in the digital system as simple interface ,expedient use ,low cost and good expansibility .VHDL is considered as a core of digital system design and a key technique of implement digital system.The design realizes the function of I2C bus interface on the FPGA .At first the thesis deeply research I2C bus specification ,then briefly introduce the Quartus II design environment and the design method ,as well as FPGA design flow .In this foundation,I2C bus controller design scheme and the timing simulation under Quartus II is particularly introduced.Key words Quartus II;I2C bus controller ;FPGA ;timing simulation目 录摘 要IAbstractII第1章 绪论51.1 课题背景51.2 I2C总线的产生及发展61.3 FPGA的现状与展望61.4 相关工作6第2章 I2C总线技术的研究82.1 I2C总线的概念82.2 I2C总线的传输92.2.1 数据的有效性92.2.2 I2C总线数据传送的开始和停止条件92.2.3 I2C总线传输过程中的应答信号102.2.4 I2C总线数据传送的重复开始条件112.2.5 I2C总线的传输过程中的字节格式112.2.6 I2C总线的器件子地址112.2.7 I2C总线传输信号的时序122.3 本章小结14第3章 VHDL语言的基础知识153.1 VHDL语言的概述153.2 VHDL语言的特点153.3 VHDL语言的程序结构163.3.1 VHDL程序的库163.3.2 包集合163.3.3 实体说明173.3.4 构造体183.3.5 配置183.4 本章小结18第4章 设计工具和设计方法194.1 设计工具194.2 基于FPGA的数字电路的设计流程204.3 本章小结21第5章 I2C总线的功能设计225.1 I2C总线完成的功能225.2 用VHDL语言实现写操作时的串行转并行235.3 用VHDL语言实现顺序读操作时的并行转串行235.4 I2C总线控制器的顶层设计245.5 本章小结25第6章 I2C总线的硬件时序仿真266.1 器件的选择266.2 硬件仿真276.2.1 用VHDL语言实现写字节周期286.2.1 用VHDL语言实现顺序读字节周期296.2.3 用VHDL语言实现选择性读字节周期296.3 本章小结30结 论31致 谢32参考文献33千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“Abstract”这一行后加一空行- 33 -哈尔滨工业大学(威海)本科毕业设计(论文)第1章 绪论1.1 课题背景近年来,随着社会的发展,电子产品越来越多的进入人们的生活和工作中,成为了我们生活中必不可少的一部分,随着计算机的普及,以及电子设备之间相互沟通的更加频繁,为了更方便的实现器件与器件之间的通信,研发人员从消费者电子、电讯和工业电子中许多看上去不相关的设计中寻找到了他们的相似之处,例如几乎每个系统都包括:(1) 一些智能控制,通常是一个单片的微控制器。(2) 通用电路,例如LCD驱动器、远程I/O口、RAM、EEPROM或者数据转换器。(3) 面向应用的电路,譬如收音机和视频系统的数字调谐和信号处理电路。为了使这些相似之处对系统设计者和器件厂商都得益,而且使硬件效率最大电路最简单,Philips开发了一个简单的双向两线总线,实现有效的IC 之间控制,这个总线就称为I2C总线。现在Philips包括超过150种CMOS和双极性兼容I2C总线的IC,可以执行前面提到的三种类型的功能。所有符合I2C总线的器件组合了一个片上接口,使器件之间直接通过I2C总线通讯,这个设计概念解决了很多在设计数字控制电路时遇到的接口问题。I2C总线具有以下优点:(1) 极低的电流消耗、抗高噪声干扰、电源电压范围宽以及较广的工作温度范围、简单性和有效性(2) I2C总线占用的空间非常小(接口直接在组件之上),减少了电路板的空间和芯片管脚的数量,降低了互联成本(3) 支持主控,其中任何能够进行发送和接收的设备都可以成为总线,一个主控能够控制信号的传输和时钟频率(任何时间点只能有一个主控)1.2 I2C总线的产生及发展I2C总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。1.3 FPGA的现状与展望FPGA是英文FieldProgrammable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。FPGA经过70年的不断发展,由当初的1200门发展成为今天的百万门级。通过不断更新优化产品架构和生产工艺,实现了更高的性能、更短的开发周期、更低的单位成本和功耗。从前的“定论”是:FPGA可编程,灵活性高,一直依赖都是用作建模的平台,而不适合进行量产,但是经过多年的研发,大大缩短了FPGA开发时间,降低了验证成本。高集成度和灵活度从消费电子的发展来看,客户要求产品的更新换代的周期越来越短,并要求不段的继承更多的,层出不穷的,新的技术和应用,而且又要严格控制成本。因此,FPGA在灵活性上就具备了天然的优势,且通过多年的努力,在高性能和低功耗方面也取得了显著地改进,现在的FPGA性能已经能够满足大多数应用的的需要。1.4 相关工作为了设计基于FPGA的I2C总线控制器,包括数据传输时序、传输命令、传输格式。首先要深入研究I2C总线的协议规范,在Quartus平台上,对设计进行分析、综合,功能和时序仿真,最后深入研究FPGA芯片的设计流程,并根据以上结果选择芯片,并配置到FPGA上,验证设计结果。本文的章节安排如下;1 绪论,主要介绍课题研究的背景,I2C总线和FPGA的产生现状和发展2 I2C总线技术的研究,介绍I2C总线的特点以及工作原理3 VHDL语言的基础知识,简单的介绍了VHDL语言的特点和结构4 设计工具与设计方法,介绍了一种新的设计软件Quartus II,以及基于FPGA的数字电路的设计流程5 I2C总线的功能设计6 I2C总线的硬件时序仿真7 结论,对本文进行总结,在设计中遇到的问题以及从此次设计中学到的东西双击上一行的“1”“2”试试,J(本行不会被打印,请自行删除)第2章 I2C总线技术的研究2.1 I2C总线的概念I2C总线是一种比较流行的总线,它的接受和发送在同一条数据线上。I2C由串行数据(SDA)和串行时钟(SCL)两根线构成的。总线上允许连接的设备数主要决定于总线上的电容量,一般设定为400pf以下。SDA和SCL都是双向总线,它们都通过上拉电阻连接到电源上。当总线处于停止(IDLE)状态,两根线都是高电平。对于I2C总线来说,总线上连接的设备,例如LCD驱动器、存储器等都是有一个唯一的地址识别,而且都可以作为一个发送器或接收器。至于是作为发送器还是接收器,主要取决于连接设备的具体功能。例如LCD驱动只是一个接收器,而存储器则既可以接受又可以发送数据。除了发送器和接收器外,设备在执行数据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输,并产生允许传输的时钟信号的设备,这时任何被寻址的期间都被认为是从机。由于I2C总线使用两线的硬件接口简单,I2C总线的应用越来越广泛1。下面,将I2C总线的通用术语进行介绍,如表 2-1所示;I2C总线的典型接法如图 2-1所示。表 2-1 I2C总线的通用术语术语描述发送器发送数据到总线的器件接收器从总线接收数据的期间主机初始化发送、产生时钟信号和终止发送的器件从机被主机寻址的器件多主机同时有多于一个主机尝试控制总线,但不破坏报文仲裁是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程同步两个或多个器件同步时钟信号的过程图 2-1 I2C总线信号连接示意图2.2 I2C总线的传输由于I2C总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)和1(高)的电平不是固定的。在I2C总线每传输一位数据就有一个时钟脉冲相对应,其逻辑“0”或“1”的信号电平取决于该节点的正端电源Vdd的电压。2.2.1 数据的有效性在工作过程中,数据有效要求串行数据(SDA)线上的数据必须要在串行时钟(SCL)的高电平时钟周期期间保持稳定。而只有在串行时钟(SCL)线的时钟信号是低电平的时候串行数据(SDA)上的数据才能发生变化(如图2-2所示)2.2.2 I2C总线数据传送的开始和停止条件在I2C总线数据传送的整个过程中,需要先有开始条件引发,并由停止信号结束,这两个条件在数据线上的表示如图 2-3所示。开始条件:当串行时钟(SCL)线上的时钟信号是高电平的时候串行数据(SDA)上的数据由高电平变为低电平,产生了一个下降沿,表示数据传输开始。停止信号:当串行时钟(SCL)线上的始终信号是高电平的时候串行数据(SDA)上的数据由低电平变为高电平,产生了一个上升沿,表示数据传输停止。开始和停止条件一般由主机产生。总线在开始条件后被认为处于忙的状态。在停止条件的某段时间后,总线被认为再次处于空闲状态。 图 2-2 I2C总线的数据位传输 图 2-3 开始和停止条件2.2.3 I2C总线传输过程中的应答信号数据传输必须带应答。相应的时钟脉冲又主机产生。在应答的时钟脉冲器件,发送机SDA输入端保持高电平,接收机将SDA输出端拉低,使它在这个时钟脉冲的高电平器件保持稳定的低电平。当从机不能应答从机地址时,从机必须使数据线保持高电平,主机产生一个停止条件,终止传输或者产生重复起始条件开始新的传输。如果执行写操作过程中,从机应答了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须终止传输。这个情况用从机在第一个字节后没有产生应答来表示,从机使数据线保持高电平,主机产生一个停止或重复起始条件。如果执行读操作过程中,主机必须在从机传输最后一个字节之后产生一个不应答信号,之后产生停止条件,而从机必须将数据线保持高电平,允许主机产生一个停止或重复起始条件。2.2.4 I2C总线数据传送的重复开始条件主机与从机进行通信时,有时需要切换数据的收发方向。例如,访问某一具有I2C总线接口的存储器时,主机先向存储器输入存储单元的地址信息(发送数据),然后再读取其中的存储内容(接收数据)。在切换数据的传输方向时,可以不必先产生停止条件再开始下次传输,而是直接再一次产生开始条件。I2C总线在已经处于忙的状态下,再一次直接产生起始条件的情况被称为重复起始条件。正常的起始条件和重复起始条件在物理波形上并没有什么不同,区别仅仅是在逻辑方面。在进行多字节数据传输过程中,只要数据的收发方向发生了切换,就要用到重复起始条件。2.2.5 I2C总线的传输过程中的字节格式总线传输时要按照规定的数据格式,发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个应答信号。首先传输的是数据的最高位(MSB)。在开始条件发出之后,SDA输入端发送一个7位的从机地址,然后第8位为数据方向位(读/写位),数据方向表明主机和从机的数据传输方向。“0”表示主机发送数据(写),“1”表示从机发送数据(读)。如果从机要完成一些其他功能后才能接受或者发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接受下一个数据字节并释放时钟SCL后,数据传输继续。数据传输由主机产生停止条件结束。2.2.6 I2C总线的器件子地址带有I2C总线的器件除了有从机地址(Slave Address)外,还可能有子地址。从机地址是指该器件在I2C总线上被主机寻址的地址,而子地址是指该器件内部不同部件或存储单元的编址。某些器件(只占少数)内部结构比较简单,可能没有子地址,只有必须的从机地址,子地址与从机地址一样,子地址实际上也是像普通数据那样进行传输的,传输格式仍然是与数据相统一的,区分传输的到底是地址还是数据要靠收发双方具体的逻辑约定。子地址的长度必须由整数个字节组成,可能是单字节(8位子地址),也可能是双字节(16位子地址),还可能是3字节以上,这要看具体器件的规定。2.2.7 I2C总线传输信号的时序I2C总线数据传送分为读操作和写操作(图 2-4),而读操作还分为按照当前位置进行读操作(图 2-6)以及随即性读操作(图 2-8),时序图如下图 2-4 主机向从机发送了一个字节的时序图 2-5 主机向从机连续发送多个字节的时序图2-5所表示的是一个最简单的写操作的时序,主机向从机传送一个7位的地址数据,然后第8位为读/写位,在这个表示地址的字节传输结束之后,在串行时钟(SCL)的第9个时钟,由从机发送一个应答信号(此时串行数据SDA输入端在SCL为高电平期间内保持高电平,而SDA输入端输出为低电平,表示一个应答信号),接着主机继续向从机传输8位数据,之后再次由从近发送一个应答信号,这个时候如果还需要发送数据字节,可以继续发送(图 2-5),每发送8位数据后都要由从机发送一个应答信号,当数据发送完毕后,在最后一个应答信号之后的那个SCL处于高电平的时钟周期内,将串行数据SDA输入端从低电平拉为高电平,表示数据传输停止。图 2-6 主机向从机接收1个字节数据的时序图 2-7 主机向从机连续接收多个字节数据的时序图 2-6所表示的是一个最简单的按照当前位置进行的读操作,前9个周期的时序与写操作的时序一致,不同的是当从机发送一个应答信号之后,由从机向主机传输8位数据,这个时候如果还需要发送数据字节,可以继续发送(图 2-7),每发送8位数据后都要由主机发送一个应答信号,当数据发送完毕后,在最后一个数据字节传送结束之后的那个SCL处于高电平的时钟周期内SDA的输入端保持高电平,而SDA输入端输出也为高电平,表示一个不应答信号(图中Nack(Not acknowledge)表示),之后的一个时钟周期内产生停止条件,表示数据传输停止。图 2-8 主机向从机随即接收多个字节数据的时序图 2-8所表示的是一个多字节的随机性读操作,选择性读操作允许主器件对寄存器的任意字节进行读操作,主机首先通过发送起始信号、从机地址和它想要读取的字节数据的地址执行一个伪写操作。在从机应答之后,主机重新发送起始信号和从机地址,此时读/写位为“1”进行读操作,从机响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件发送应答信号,这个时候如果还需要发送数据字节,可以继续发送,每发送8位数据后都要由主机发送一个应答信号,当数据发送完毕后,在最后一个数据字节传送结束之后的那个SCL处于高电平的时钟周期内SDA的输入端保持高电平,而SDA输入端输出也为高电平,表示一个不应答信号(图中Nack(Not acknowledge)表示),之后的一个时钟周期内产生停止条件,表示数据传输停止。2.3 本章小结本章主要介绍了I2C的有关知识,从I2C总线的概念开始,介绍了I2C总线的开始和停止条件以及如何传输数据才有效,然后介绍了I2C总线传输过程中应答信号的产生和作用,以及位传输和字节传输需要注意的每个时钟周期代表的意义,最后,介绍了I2C总线工作的各种状态的时序,以便下面用语言对I2C总线进行设计与实现。第3章 VHDL语言的基础知识3.1 VHDL语言的概述VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用于提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。VHDL语言主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。3.2 VHDL语言的特点与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。VHDL最初是作为一种仿真标准格式出现的,因此VHDL既是一种硬件电路描述和设计语言,也是一种标准的网表格式,还是一种仿真语言,其丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能用于查验设计系统的功能可行性,随时可对设计进行仿真模拟。即在远离门级的高层次上进行模拟,使设计者对整个工程设计的结构和功能的可行性做出决策。VHDL语言的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合市场所需求的,大规模系统高效、高速的完成必须由多人甚至多个开发组共同并行工作才能实现的特点。VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有力的支持。VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构2。3.3 VHDL语言的程序结构一个完整的VHDL语言程序通常包括实体、构造体、配置、包集合和库5个部分。3.3.1 VHDL程序的库库是经编译后的数据的集合,它存放包集合定义、实体定义、构造体定义和配置定义。在VHDL语言中,库的说明总是放在设计单元的最前面:LIBRARY 库名;这样,在设计单元内的语句就可以使用库中的数据。由此可见,库的好处就在于使设计者可以共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,但是库和库之间是独立的,不能互相嵌套。3.3.2 包集合包集合是用来罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件语言、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构的一个层次,要使用包集合时可以用USE语句说明。例如:use ieee.std_logic_unsigned.all;该语句表示在VHDL程序中要使用名为std_logic_unsigned的包集合中的所有定义或者说明项。包集合的结构如下所示:PACKAGE 包集合名 IS说明语句END 包集合名; 包集合标题PACKAGE BODY 包集合名 IS说明语句END BODY; 包集合体一个包集合由两大部分组成:包集合标题和包集合体、包集合体可以省略不写。一般包集合标题列出所有项的名称,而包集合体具体给出各项的细节。3.3.3 实体说明任何一个基本设计单元的实体说明都具有如下结构:ENTITY 实体名 IS类属参数说明端口说明END 实体名;其中类属参数说明必须放在端口说明之前,用于指定参数。端口说明是对基本设计实体与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。其一般书写格式如下:PORT(端口名:方向 数据类型名; . 端口名:方向 数据类型名);端口名是定义每个外部引脚的名称。端口方向用来定义外部引脚的信号方向是输入还是输出,分为5种:IN(输入),OUT(输出而且构造体内部不能再使用),INOUT(双向),BUFFER(输出而且构造体内部可以再次使用),LINKAGE(不指定方向,无论出入都可以连接)。数据类型在逻辑电路设计中只用到两种:BIT和BIT_VECTOR。当端口被说明为BIT数据类型时,该端口的信号取值只可能是“0”或者“1”。这里的“0”和“1”是指逻辑值。当端口被说明为BIT_VECTOR数据类型时,该端口的取值可能是一组二进制位的值。3.3.4 构造体构造体定义了设计单元具体的功能。构造体对其基本设计单元的输入输出关系可以用3种方式进行描述,即行为描述、寄存描述和结构描述。由于构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。一个构造体的具体结构描述如下:ARCHITECTURE 构造体名 OF 实体名 IS定义语句BEGIN并行处理语句END 构造体名;构造体名是对本构造体的命名,是该构造体的唯一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。定义语句用来对构造体内部所使用的信号、常数、数据类型和函数进行定义,格式和端口说明的语句一样,但因为它是内部连接的信号,故没有也不需要有方向的说明。并行处理语句具体的描述了构造体的行为3。3.3.5 配置一个实体可以包含多个结构体,配置的作用就是根据需要选择实体的结构体。配置语句描述层与层之间的连接关系以及实体与结构之间的连接关系,设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一实体时,可以利用配置来选择不同的结构体,进行性能对比试验以得到性能最佳的结构体。配置语句的基本书写格式如下:CONFIGURATION 配置名 OF 实体名 IS语句说明END 配置名;经常使用的配置有以下三类:默认配置、元件配置和结构配置4。3.4 本章小结本章主要介绍了VHDL的有关知识,主要介绍了VHDL特点以及如何用VHDL语言编写程序,首先定义库函数,然后引入包集合,定义实体,构造体,注意构造体内可以包括子程序,最后定义配置。第4章 设计工具和设计方法4.1 设计工具本次设计使用的是Altera公司的设计软件Quartus II ,用VHDL语言编程实现的。Quartus II软件是Altera提供的综合性开发软件,可以轻易地满足特定地设计需求。它支持原理图、VHDL、VerilogHDL等多种设计输入形式,内有综合器以及仿真器,可以完成从设计输入到硬件配置的完整设计流程。Quartus II软件允许用户在设计流程的每个阶段使用软件提供的软件图形用户界面、EDA工具界面或命令行方式。其图形用户界面的功能分为:设计输入、综合、布局布线、时序分析、仿真、编程、系统设计、软件开发、基于块的设计、EDA界面、时序收敛、调试、工程更改管理等5。在本次设计中主要用到前面几个功能,下面坐下简单的介绍:设计输入是使用Quartus II软件的模块输入方式、文本输入方式、Core输入方式和EDA设计输入工具等表达用户的电路构思,同时使用分配编辑器(Assignment Editor)设定初始设计约束条件。综合是将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑链接(网表),并根据目标与要求(约束条件优化所生成的逻辑连接,输出edf或vqm等标准格式的网表文件,供布局布线器进行实现。除了可以用QuartusII软件的综合工具外,也可以使用第三方综合工具,生成与QuartusII软件配合使用的edf网表文件或vqm文件。布局布线的输入文件是综合后的网表文件,QuartusII软件中布局布线包含分析布局布线结果、优化布局布线、增量布局布线和通过反标保留分配等6。时序分析是允许用户分析设计中所有逻辑的时序性能,并协助引导布局布线满足设计中的时序分析要求。它观察和报告时序信息,如建立时间、保持时间、时钟至输出延时、最大时钟频率以及设计的其他时序特性,可以使用时序分析生成的信息来分析、调试、和验证设计的时序性能。仿真分为功能仿真和时序仿真。功能仿真主要是验证电路功能是否符合设计要求,它可以在不同的层次进行,它可以对基本单元仿真也可以对几个基本单元构成的单元进行仿真,直至系统级的仿真;时序仿真包含了延时信息,它能较好的反映芯片的设计工作情况。可以使用QuartusII集成的仿真工具仿真,也可以使用第三方工具对设计进行仿真,如Modelsim。编程和配置是在全编译成功后,对Altera器件进行编程或配置,它包括Assemble(生成编程文件)、Programmer(建立包含设计所用器件名称和选项的链式文件)、转换编程文件等。EDA界面中的EDA Netlist Writer是生成时序仿真所需要的包含延迟信息的文件。除了上述工具外,QuartusII软件还提供第三方工具的连接。如综合工具Synplify、Synplifypro、Leonardo,仿真工具Modelsim、Aldec HDL等这些业内公认的专业综合、仿真工具。4.2 基于FPGA的数字电路的设计流程随着FPGA容量,功能及其可靠性的提高,在现代数字通信系统的中使用率越来越高,采用FPGA设计数字电路已经成为数字电路系统领域的主要方式之一7。在信号的处理以及整个系统的控制中,FPGA不但能大大缩减电路的体积,提高电路的稳定性,而且其先进的开发工具使整个系统的设计周期大大缩短8。主要的设计流程图如下9:设计准备:在进行设计之前,必须了解项目设计的需求,首先要根据任务书要确定方案,选择使用说明设备等准备工作。设计输入:将设计的系统或电路以某种形式表现出来,输入到计算机上,包括状态图输入、图形输入和HDL语言输入,常用的是后两种。HDL语言在描述状态机,控制逻辑,总线功能方面比较强;原理图输入比较适合顶层设计、数据通路逻辑;在本文的设计中,使用的VHDL语言输入。功能仿真:功能仿真也称前仿真或行为仿真。它是在没有考虑器件延时和布线延时的理想情况下,对源代码进行逻辑上的功能验证,以便及时地进行修改。设计处理:包括了逻辑分析、综合和优化三个步骤。逻辑分析是对HDL源文件进行分析并纠正语法错误。综合就是给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案,该方案必须同时满足预期的功能和约束条件;优化则是根据用户的设计约束,对速度和面积进行逻辑优化。设计实现利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应的文件,供后续的时序仿真和下载。时序仿真时序仿真是FPGA设计的重要步骤之一,又称后仿真,在做完布局布线后进行,仿真中包含布局布线产生的器件延时,连线延时信息。它与特定的器件有关,主要验证程序在目标器件上的时序关系,是接近器件真实工作情况的仿真,仿真精度比较高。下载验证下载又称配置,是在功能仿真和时序仿真正确的前提下,将综合后形成的文件下载到具体的FPGA芯片中。然后再进行实际器件的物理测试即为电路验证。这是最终验证设计项目在目标系统上的实际工作情况,以排除错误,改正设计。4.3 本章小结本章首先介绍了这次设计需要用到的设计软件Quartus II的特点和功能。然后介绍了居于FPGA的数字电路的设计流程,从开始的准备到数据的输入与功能运行,然后到中间的调试再进行功能运行,最后确认无误了带入时序信号然后进行时序仿真,最后下载具体的FPGA芯片中进行电路验证,调试程序,最后得到正确结果。第5章 I2C总线的功能设计5.1 I2C总线完成的功能I2C总线中,数据信号的传输是由串行数据线SDA和串行时钟线SCL完成的,可发送和接收数据。I2C总线是为了实现主机和从机之间的数据传输,当从主机向从机发送数据时,实现的是I2C总线的写操作功能,主机先发送一个开始条件,之后主机先向SDA线发送从机的7位地址数据以及第8位写位,数据经过SDA线时,开始在与SDA线连接的器件中搜索对应的地址,找到后,从机反馈一个应答信号,这个时候主机开始通过SDA线向从机发送数据,每一个字节8位数据传输结束,从机都要反馈一个应答信号。得到从机的最后一个应答信号后,主机发送一个停止信号。当主机接收从机发送的数据时,实现的是I2C总线的读操作功能,这个时候主机先向SDA线发送从机的7位地址数据以及第8位读位,数据经过SDA线时,开始在与SDA线连接的期间中搜索对应的地址,找到后从机反馈一个应答信号,这个时候从机开始通过SDA线向主机发送数据,每个字节8位数据传输结束,主机要向从机反馈个应答信号(如果从机发送完最后一个字节的时候,主机不用发送应答信号,而发送一个停止信号)。如果主机有选择的接收从机发送的数据,实现的是I2C总线的选择性读操作功能,这个时候主机先向SDA线发送从机的7位地址数据以及第8位写位,数据经过SDA线时,开始在与SDA线连接的器件中搜索对应的地址,找到后,从机反馈一个应答信号,这个时候主机通过SDA线向从机发送字节8位的地址位,从机收到后反馈一个应答信号。之前完成了一次伪写操作。这个时候主机发送一个重新开始信号,重新向SDA发送从机的7位地址数据以及第8位读位,找到相应的从机后,从机反馈一个应答信号,然后从机将该字节位开始的数据通过SDA线向主机发送,每个字节8位数据传输结束,主机要向从机反馈个应答信号(如果从机发送完最后一个字节的时候,主机不用发送应答信号,而发送一个停止信号)。这两线都是由CPU引出,其它受控电路均挂接SDA和SCL线上,只有CPU具有控制权,在其控制下,CPU即可以向数据总线发送信息,又能读取被控器件反馈的响应信息。总线上的受控电路和模块都有唯一的地址,按类型对他们进行分配。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线控制器是微处理器与I2C器件之间的接口,它可以使性能各异、速度不同,功能不一的外设与微处理器之间方便快捷地进行通信。即要接收处理器的控制信号,命令与数据;还要发送I2C器件的数据和状态响应到处理器实现处理器与I2C器件之间的通信机制。鉴于I2C总线的规范,其接口主要完成的功能如下:1写操作(串行转并行)2顺序读操作(并行转串行)3开始/停止/重启/响应各种触发状态4读写控制位和启动位5随机读取总线数据和状态5.2 用VHDL语言实现写操作时的串行转并行写操作时,输入SDA上的串行数据,输出从机上的并行数据,用VHDL语言实现如图 5-1和图 5-2 图5-1 串行转并行模块图 图5-2 串行转并行仿真图5.3 用VHDL语言实现顺序读操作时的并行转串行顺序读操作时,输入从机上的并行数据,输出SDA的串行数据,用VHDL语言实现如图 5-3和图 5-4 图 5-3 并行转串行模块图 图 5-4 并行转串行仿真图5.4 I2C总线控制器的顶层设计I2C总线控制器就是将主机和从机连接起来,它一方面要通过数据总线与主机交换数据,另一方面通过I2C总线与从机交换数据,使他们之间能够进行通讯。根据据总线控制器要完成的功能,需要2条8位数据线,1条8位地址线,1条串行时钟线,1条串行数据线,1条读写控制线,1条启动线,1条清零线,1条应答信号线。其详细的输入输出接口信号及其功能如表 5-1所示,其中kongzhi是芯片的控制信号,只有当它启动之后,其它的地址、复位和命令信号才能启动。表 5-1 I2C总线接口信号表端口名方向描述kongzhi输入启动信号scl输入时钟输入clr输入清零位dizhi输入地址信号输入shuru输入读操作中从机发送的数据duxie输入读写控制信号shuchu输出写操作中主机接收的数据ack输出从机的应答信号sda输入/输出数据输入输出信号它的外围接口设备如图 5-5 图5-6 图5-7所示: 图 5-5 I2C总线顶层设计模块图 图 5-6 I2C总线控制器的外围接口功能框图 图 5-7 I2C总线控制器的端口图5.5 本章小结本章首先介绍了I2C总线的功能,分为三种写操作,顺序读操作和选择性读操作,然后根据这3种操作用VHDL语言做了其中比较核心的串行与并行之间的转换,附有仿真图,最后完成了I2C总线的顶层设计,为完成下章的I2C总线的时序实现做了铺垫。第6章 I2C总线的硬件时序仿真本文在Quartus 7.1环境下对I2C总线控制其时序进行仿真,上一章中已经对部分模块进行了功能仿真。而时序仿真是在FPGA布局布线完成之后进行的仿真,这一级别的仿真可以真实地模拟真实电路的工作情况。为了确认I2C总线控制器是否能够正确运行,我们建立一个模拟的仿真环境,主器件为微控制器,从器件是EEPROM。I2C总线规范规定,每个从器件都拥有一个唯一的7位从器件地址,让主机来进行选择,通常7位中四个较重要的位(MSBthe MostSignificant Bit)为固定的,并依器件本身性质的分类区分,如1010即代表串行EEPROM,而其他三个较不重要的位(LSB),即A2、A1与A0则可以通过硬件电子引脚设定,并取得8个不同的I2C地址组合,因此在同一个I2C总线上可以有8个相同类型的器件10。6.1 器件的选择在Quartus平台上,对FPGA进行仿真之前,要选择一个器件。FPGA器件的选用同其它通用逻辑器件不同,除考虑器件本身的性能外,软件工具也很重要11。如何选用合适的FPGA器件,不只是一件一次性的工作,还涉及到设计软件的选用以及今后进一步工作的开展。首先,用户应该根据自身的技术环境、技术条件、使用习惯等选择一种合适的软件工具,同时要兼顾EDA技术的发展。占据优势的软件供应商同大多数芯片制造商建立了良好的合作伙伴关系,所以,拥有一种设计软件,再进一步选择不同的工具库,或增加部分配置,即可对不同厂家的不同种类的FPGA产品进行设计。其次,用户可根据设计的需要确定选择哪一类FPGA器件。如果用于航天、军事领域,反熔丝技术的一次编程型FPGA是首选;如果要完成多种算术运算,或是要求工作在较高速度下,EPLD/CPLD是较好的选择;而对于功能复杂的时序逻辑电路而言,标准门阵列单元型的FPGA具有集成度高、保持灵活和功耗低的优点。第三,选定某一厂家的产品,生产同类器件的厂家很多,一般依据以下准则进行选择。(1)选择有设计软件支持的厂家的芯片,这样可减少资本投入,降低成本。(2)选择产品设计性能改进有余量的。如果所选择的芯片是某一厂家产品中容量最大,或是速度最高的,那么,一旦设计需要改进,则有可能在该厂家的芯片中再选不出合适的来了。(3)设计应用的延续性和可扩展性。如果所选厂家的产品具有很大的局限性,则有可能仅仅适用于很少一部分设计,从而造成设计软件投入上的浪费。(4)选择性能价格比最优的。尽管象Xilinx、Altera这样的器件生产厂家都在通过降价来作市场宣传,大多数FPGA芯片的价格还是比较高的,所有在满足上述准则的情况下适当考虑价格也是有必要的。参考产品说明书,了解芯片容量、外引脚个数、封装形式、速度级别以及温度范围等等。选择合适芯片的前提是对设计要求的全面分析和了解。设计人员应结合芯片的内部结构适当调整设计以尽可能充分地利用芯片资源12。根据以上原则,在本设计中,选择了Altera公司的cyclone II系列的EP2C35器件,它采用90nm技术,就有较大的容量和速度,具有强大的系统级功能以及重要的改进和新特性,是同类产品中成本最低密度最大的FPGA。6.2 硬件仿真本课题设计的控制器主要是针对8位的微处理,为了更充分地体现它在系统中的应用,在对设计进行仿真的时候,建立一个仿真环境,但是并不将它们具体的模块体现在论文中。微处理器为控制器提供输入信号,控制器的输出信号连接到EEPROM上。在Quartus平台上,根据器件的data sheet,进行管脚分配,然后对项目进行语法分析,编译,EDA工具可以生成一个RTL级的连接图,影射到工艺库,项目会生成一个工艺库影射浏览图,生成的图形见附录,之后进行综合,时序分析。为了验证系统的功能性,在时序仿真之前,首先进行功能级的仿真,各个模块的仿真波形见附录。然后进行布局布线,创建波形图,进行时序仿真,也就是后级仿真,它能够真实地反映系统的工作情况。下面具体分析几个仿真图形6.2.1 用VHDL语言实现写字节周期首先控制端口先发送一个启动信号(本设计中用一个下降沿作为启动信号),系统接到启动信号后,所有的器件开始工作。写操作中,由主机先向SDA串行数据线发送一个开始信号,之后发送一个7位的从机地址以及第8位的写位(“0”),为寻找此次操作的目标器件,因为所有的从机都已经于SDA线相连,然后开始根据这个地址搜索所寻找的从机,这个过程I2C总线将自行完成,找到后,从机会发送一个应答信号,接到应答信号后主机开始向从机发送数据,因为SDA为串行线,而从机位并行输出,这个时候完成的工作就是上一章的做的写操作的时候的串行转并行,每传输完毕一个字节(8位)从机就会发送一个应答信号,当最后一个字节发送完毕后,主机在接受到最后一个应答信号的时候就会发送一个停止信号,标志这次写操作的结束。图 6-1 写字节操作仿真图6.2.1 用VHDL语言实现顺序读字节周期首先控制端口发送一个启动信号,系统接到启动信号后,所有的器件开始工作。顺序读字节操作中,由主机先向SDA串行数据线发送一个开始信号,之后发送一个7位的从机地址以及第8位读位“1”,为寻找此次操作的目标器件,因为所有的从机都已经于SDA线相连,然后开始根据这个地址搜索所寻找的从机,这个过程I2C总线将自行完成,找到后,从机会发送一个应答信号,本次操作要求是接收从机的数据,并没有选择接受哪个子地址的字节的信号,所以,按照顺序操作下面就可以从从器件接收数据了,发送了应答信号后的一个周期,从机开始向SDA线发送数据,因为SDA为串行线,而从机位并行,这个时候完成的工作就是上一章的做的读操作的时候的串行转并行,每传输完毕一个字节(8位)主机就会发送一个应答信号(此次操作反应在SDA线上,最后一个字节除外),当最后一个字节发送完毕后,主机将发送不应答信号而直接发送一个停止信号,标志这次顺序读操作的结束。图 6-2 顺序读操作仿真图6.2.3 用VHDL语言实现选择性读字节周期首先控制端口先发送一个启动信号,系统接到启动信号后,所有的器件开始工作。顺序读操作首先要进行一次伪写操作,前9个时钟周期都是和写操作一样,包括第8位的读写位也输入的是写位“0”,由主机先向SDA串行数据线发送一个开始信号,之后发送一个7位的从机地址以及第8位的写位(“0”),为寻找此次操作的目标器件,因为所有的从机都已经于SDA线相连,然后开始根据这个地址搜索所寻找的从机,这个过程I2C总线将自行完成,找到后,从机会发送一个应答信号,接到应答信号后主机开始向从机发送所选择的那个8位的字节地址,当从机收到这8位字节地址后发送一个应答信号,主机收到这个应答信号后发送一个重复因开始条件,之后主机再次向从机发送7位从机地址和第8位的读位“1”,从机收到后发送一个应答信号,主机收到应答信号后开始向从机发送数据,每传输完毕一个字节(8位)主机就会发送一个应答信号(此次操作反应在SDA线上,最后一个字节除外),当最后一个字节发送完毕后,主机将发送不应答信号而直接发送一个停止信号,标志这次选择性读操作的结束。图 6-3 选择性读操作仿真图6.3 本章小结本章先介绍了如何选择FPGA等器件,以及如何连接I2C总线器件和主从器件,这个多数是参考了资料,大部分操作还是在软件上实现的,在本章介绍了对I2C的3种操作进行了时序仿真,检验了上章最后做的顶层设计。结 论本次设计的题目是基于FPGA的I2C总线的设计与实现,设计中涉及到了I2C的有关知识,VHDL语言的编写,Quartus II软件的使用方法,以及FPGA的有关知识。其中主要任务就是运用VDHL语言编写I2C总线的功能和时序功能。论文中将几个比较重要的模块进行了功能仿真,并且对顶层设计也进行了详细的功能仿真和时序仿真,仿真结果表明,各个模块均基本完成了相应的逻辑功能。本次设计的I2C总线控制器非常适合于内含FPGA的系统中,因为I2C总线需要控制器,使用独立的控制器占用了多余的空间,用FPGA实现对I2C总线器件的控制成为最理想的选择,本设计能够实现FPGA模拟I2C总线来控制其读写操作,由于FPGA的快速发展,其容量可以将各种外围器件的接口集成到FPGA内部,这样可以实现设计的小型化,低功耗,并且降低了设计的复杂度,而且利用了FPGA在线可编程特点,可以增加系统设计的灵活度,提高了设计效率。着眼于VHDL语言的效率和可移植性以及不依赖器件的特性,设计者更能在不同系统中把握和描述系统结构和功能特性,使设计更具灵活性。本设计可以在本系统中使用,也可以移植到其他系统等。在设计期间,通过不断的学习、思考和实践,主要掌握了VHDL语言的基本编写技术,Quartus II的基本使用方法,提高了学习能力和操作能力,以及创新能力。为以后的学习打下了一定的基础,对以后学习别的语言等,积累的一定的经验。致 谢在论文即将完成之际,谨向所有关心我的老师、同学和朋友表示衷心的感谢!本课题是在导师周志权老师和赵占峰老师亲切关怀和悉心指导下完成的,导师以渊博的学识和严谨的治学态度,为学生开拓了研究视野,丰富了专业知识。先生谦逊无私的高尚品质、朴实真诚的做人原则和一丝不苟的敬业精神,对学生将永远的鞭策。在我毕业设计期间,周志权老师和赵占峰老师在学习、生活上都给予了我极大的关怀和鼓励。从论文选题、实验仿真到最后论文的撰写,周志权老师和赵占峰老师都做了悉心的指导,并提出了许多宝贵的建议。藉此完成之际,借此机会谨向尊敬的周志权老师和赵占峰老师致以最衷心的感谢!感谢论文中参考的参考文献的作者;对于提供论文中隐含的上述提及的支持者以及研究思想和设想的支持者表示感谢。特别感谢研究所实验室老师和师兄、师姐为我论文的完成提供了许多帮助。感谢我的同学和朋友的支持和帮助!在求学期间,我的亲属和朋友对我给予了无微不至的关怀,对此,我也表示深深的感谢!不要自己写,要利用word来自动生成。详情请看最后一页参考文献1 姜雪松,王鹰等.VHDL设计实例与仿真.机械工业出版社,2007:164-1662 潘松,王国栋.VHDL实用教程.第二版.电子科技大学出版社,2001:3-43 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社,1997:12-334 刘韬,楼兴华.FPGA数字电子系统设计与开发实例导航.人民邮电出版社,2005:15-175 李洪伟.基于Quartus II的FPGA/CPLD设计,电子工业出版社,2006: 12-206 Altera.Quartus简介.Quartus官方入门手册,2003:11-1537 王毓银.数字电路逻辑设计高等教育出版社,19998 劳有兰,曾文波,吴其琦.基于FPGA的TDMA数字通信系统的设计.广西工学院学报,2004:249 郑俭锋,I2C总线控制器的VHDL设计和实现.电子设计应用,2004: 65-6710 Bruce,J.W,Gray,M.A,Follett,R.F.Personal digital assistant(PDA)based I2C bus analysis.2003:4911 易克初,田斌,李刚强.FPGA设计中关键问题的研究.电子技术应用,2003:68-71.12 李文,于伟.如何选择FPGA器件.电子技术应用,1998:59.
展开阅读全文