i2c串行总线的模拟与仿真.docx
《i2c串行总线的模拟与仿真.docx》由会员分享,可在线阅读,更多相关《i2c串行总线的模拟与仿真.docx(39页珍藏版)》请在冰豆网上搜索。
i2c串行总线的模拟与仿真
本科学生毕业论文
论文题目:
I2C串行总线的模拟与仿真
学院:
电子工程学院
年级:
2008级
专业:
集成电路设计与集成系统
姓名:
刘欣
学号:
20083410
指导教师:
胡靖
2012年5月20日
摘要
本论文主要研究的是I2C串行总线的模拟与仿真。
首先,在论文的开始介绍了数字电子设计的发展过程,表明了数字电子设计在现在的生活中占有十分重要的地位。
其次,介绍了I2C串行总线协议相关概念等内容,为总体的设计理清思路做铺垫,防止由于概念混淆而引起的不必要的麻烦。
然后,介绍了整体设计的一个设计流程,防止在设计时陷入死循环的误区,此流程为设计提供了一个向导作用。
最后,通过Xilinx公司开发的XilinxISE10.1软件进行程序的模拟过程,同时在XilinxISE10.1软件中调用ModelsimSE6.5软件,观察仿真结果图。
通过观察串行数据线(SDA)和串行时钟线(SCL)在仿真软件ModelsimSE6.5中波形图的高低电平变化并读出数据,判断本论文的设计是否满足最初的设计初衷,是否符合设计要求。
关键词
I2C总线;现场可编程门阵列;硬件描述语言;ModelSim
Abstract
InthispaperthestudyofsimulationandemulationoftheI2Cserialbusismainlydiscussed.Firstofall,inthebeginningofthethesisdescribesthedevelopmentofdigitalelectronicdesign,digitalelectronicdesignthatoccupiesaveryimportantpositioninthepresentlife.Secondly,presentstheconceptoftheI2Cserialbus,clarifytheideasfortheoveralldesigntopreventunnecessarytroublecausedasaresultofconceptualconfusion.Then,presentsthedesignprocesstopreventaninfinitelooperrors,thisprocessisdesignedtoprovideawizardrole.Finally,thesimulationprogramdevelopedbyXilinx,Inc.XilinxISE10.1software,callingtheModelsimSE6.5software,andobservethesimulationresultsinFigureXilinxISE10.1software.
Throughtheserialdataline(SDA)andserialclockline(SCL)inthesimulationsoftwareofModelsimSE6.5,thehighandlowchangeofthewaveformandreaddata,determinethedesignofthisthesisismeettheoriginallydesigned,andwhetherthedesignfittherequirements.
Keywords
I2Cbus;FPGA;HDL;ModelSim
前言
Philips公司研究开发的I2C(InterIntegratedCircuits)串行总线是用于芯片之间连接的,以其具有严格的规范、卓越的性能、简单的操作和广泛带I2C接口的外围器件通信,从而应用十分广泛并且十分受到的欢迎。
现场可编程门阵列(FPGA)以其设计的灵活性、速度的快捷性,广泛的应用到数字专用集成电路的设计中。
本论文重点讨论了如何使用Verilog语言或FPGA来实现对I2C串行总线的模拟与仿真,实现串行数据线(SDA)和串行时钟线(SCL)与I2C总线的器件间进行数据传输通信,从而实现读、写等功能。
利用ModelsimSE6.5模拟仿真软件环境下进行模拟仿真,然后利用Xilinx公司开发的XilinxISE10.1开发平台进行分析。
首先,介绍了数字电子设计的发展概况以及设计流程,重点介绍了Verilog或FPGA的设计流程。
其次,对I2C串行总线协议进行解析,重点说明了总线上的数据寻址方式和数据传输时序。
第三,基于Verilog设计了I2C接口电路及基本框架。
第四,分析数据传输的时序,从而验证电路设计的正确性。
最后,利用ModelsimSE6.5进行电路设计的仿真。
第一章数字电子设计概述
早在四十年前,英特尔公司的创始人摩尔预言,集成电路的复杂性会在每18个月翻一番。
直到目前为止,这个定律仍然占据着半导体工业的主导地位。
从八十年代中期开始,数字电子设计专业的三个基本领域将高速的细分下去,出现了第三层子领域、第四层子领域甚至第五层的子领域。
当然,总有不同阶层的数字电子工艺技术和数字电子检测技术在不断的更新中,并与数字电子设计专业的各个子领域相互交叉[1]。
总之,数字电子设计己经成为了具有多学科交叉的庞大学科。
几乎没有人可以同时在数字电子学的任意两个第三层领域里工作,甚至不可能很容易的同时涉足两个第四层领域。
由于本论文的主要工作是利用硬件描述语言对I2C串行总线的进行设计,下面将就这篇论文所涉及的几个方面进行简要的概述。
1.1数字电子设计发展概况
在传统电子电路设计与半导体学科相结合碰撞时就产生了数字电子设计这一个较为的边缘学科。
在集成电路设计刚刚开始流行的时候,实际上只有掩模设计而已,电路的规模非常小而且电路的复杂度也非常低,只要求具有一般的电路知识的设计工程师就已经足够用了。
然而在四十年后的今天,具有电路规模在百万门量级以上的超大规模集成电路(VLSI),以往那种电路的规模非常小而且电路的复杂度也非常低,只要求具有一般的电路知识的设计工程师就已经足够用了的半导体工厂是不可能实现的,专业的电路知识和极高难度的设计已是他们那些小公司望尘莫及的了。
最近一、二年以来,数字电子设计工业仍然在进一步细化分工和调整。
十分典型的例子就是:
计算机测试样片的工作已经从设计公司的一个部门分离出来单独成为一个独立的产业,而布局布线等后端设计环节逐也逐渐的从设计部门向生产部门转移。
在数字电子设计工业的这一次新的细化中有三个重要动向格外引人注目:
首先是,功能块电路有了显而易见的知识产权化、商品化和标准化的趋势。
中小型企业发挥他们自己特有的长处,专门研发一种电路的设计,为其他的大公司提供商业化的服务。
其次是,截止到目前为止,各个晶片加工的公司开始设计和使用自己的综合元件库,这种做法不但会增加本公司的生产成本,同时也会为设计公司带来很多不便。
目前,正有公司正在有计划地为推动元件库标准化、商业化而努力,并且希望能够最先占领商业化元件库的市场。
这是一个能够满足技术、使生产不断细化分工规律的行动,它一定会形成一个趋势,成为一个新兴领域。
最后是,各大公司用于营销为目的EDA工具,纷纷提供了出租EDA使用权的租赁服务,提供服务的成本便宜很多。
各个小公司则推出适用于中、小型规模设计的电脑版EDA设计工具。
这样,不但使EDA工具本身的价格低廉很多,而且电脑版的EDA设计工具及其配套的硬件环境也比大型的EDA设计所需的工作站环境便宜很多。
因此,中国的数字电子设计界的前两个动向为进入国际市场的提供了动机和切入点,然而第三个动向则为我国的中、小型电子企业的升级和发展提供了一个取得廉价设计工具的途径[2]。
1.2硬件描述语言
随着集成电路的设计日益增大的规模,日益增高的复杂程度,门级的描述的管理变得困难,所以不得不采用的描述方法要求更抽象,并且要求可以接受高层次的、自顶向下的设计方法。
逻辑图和布尔代数曾经都是用来描述硬件的方法,但是伴随着系统复杂程度的不断增加,这种描述变得十分复杂,从而变得不易使用了。
在逻辑的抽象层次之上,这种用简练的方式提供精确描述的方法是很难实现的,所以在自顶向下的设计方法中不可以再把它作为通常的描述手段使用,然而为了满足上述要求便逐渐形成了一种新的方法,硬件描述语言HDL(HardwareDescriptionLanguage)因此诞生。
HDL与传统电子电路的原理图在描述电路的原则和方法的方式上具有本质的区别。
HDL只用于对电路的性状进行描述。
正是由于这个原因,HDL的设计文件相比传统电子电路的原理图文件变得精练了很多。
因此,HDL的设计具有十分强大的能力可以用于处理十分复杂的电路。
这就是为什么HDL可以广泛应用于超大规模集成电路设计的原因之一。
HDL设计的“分层结构(Hierarchy)”可以为仿真(Simulation)带来极大的方便,这也是HDL可以被广泛使用的另一个原因,设计部门可以为不同目的的大型电路在任何一个层次上进行功能验证,自上而下的分层仿真大大减少了底层仿真的次数,从而缩短生产周期。
HDL是普通文本的形式,可以在任何文字处理环境中进行编辑操作。
从文件管理的角度看,HDL设计比电路原理图好管理很多。
HDL源程序的注释可以从各个不同的角度帮助设计工程师和文件管理员。
与传统的电路原理图相比,HDL文件包含了更多的显而易见的管理信息。
HDL是建立在功能强大的综合器的基础上的广泛使用。
实际上,HDL就是流程图,是HDL语言的上一个层次,它的概括性强、十分直观易懂,不久的将来必定会在数字电子设计中扮演重要角色[3]。
1.3VerilogHDL的发展与特点
VerilogHDL是在C语言的基础上发展起来的。
它最初是由GDA(GatewayDesignAutomation)公司在1983年为其模拟的产品开发的硬件建模语言。
那时它只是一种专用的语言。
由于他们的模拟器、仿真器等产品的被广泛的使用,VerilogHDL便作为一种使用简单且实用的语言逐渐被众多设计者所接受。
VerilogHDL既简洁又优美,描述电路的语言结构时简单易读。
相比而言,VHDL的描述长度是VerilogHDL的两倍左右。
与VHDL相比,VerilogHDL的最大优点为:
它是一种非常容易掌握的硬件描述语言,如果有C语言的编程经验,便可以在一个较短的时间内学习、掌握并且运用它。
由于HDL语言本身是一个专门面向硬件与系统设计的语言,这样一来初学者便可以在学习的同时获得设计实际电路的经验。
与之相比,VHDL的学习则要困难的多,在较短的时间内真正掌握是很困难,而在似懂非懂的前提下进行实际电路的设计,则会对培养良好的设计风格产生负面的影响[4]。
1.4可编程逻辑器件综述
在超大规模集成电路设计中FPGA验证占有重要的地位,所以很有必要介绍一下可编程逻辑器件的相关知识。
可编程逻辑器件(ProgrammableLogicDevice)也可以称为可编程ASIC,是70年代发展起来的一种新型的逻辑器件,最初主要是用于解决数字系统中各种存储问题的,发展到现在已经成为实现数字系统的一种重要手段。
可编程逻辑器件实现了设计阶段的硬件仿真,使数字电子设计验证了早期集成和软硬件联合验证的可能性。
设计者可以快速地创建一个芯片设计的硬件模型,利用仿真软件将设计映射到可重复编程的器件中。
由此产生了一个与真实芯片的功能一致的虚拟硅片,可以确保正确的时序关系,运行真实的软件。
因此当它面世之后,就一直以较快的速度发展,成为一种可以实现ASIC的重要手段。
1.4.1FPGA简介
现场可编程门阵列(FPGA)是近十年才加入到用户可编程技术行列中的器件。
现场可编程门阵列在器件的选择和内部的互连上提供了更大的自由度。
FPGA的结构类似于掩膜可编程门阵列(MPGA),由逻辑功能块排列成阵列组成,并由可编程的内部连线连接这些逻辑功能块来实现不同的设计。
FPGA是结合了掩膜可编程门阵列和可编程逻辑器件两者特性而演变来的新器件,所以FPGA既具有门阵列的高密度性和通用性,又具有可编程逻辑器件的用户可编程特性。
对于ASIC设计而言,采用FPGA在实现小型化、集成化和高可靠性的同时还减少了风险性,降低了使用成本,缩短了开发周期[5]。
FPGA可以比PLD具有更高的集成度,具有更为复杂的布线结构和逻辑实现。
PLD与FPGA之间的主要差别是是否可以通过修改具有固定内连电路的逻辑来进行编程。
所有FPGA器件是在用户可编程的特性下和它们的快速设计以及诊断能力上类似于可编程逻辑器件。
对于快速周转的样机而言,这些特性使得FPGA成为用户的首选的器件。
而相比CPLD而言,FPGA也是更适合于实现多级的逻辑功能的器件。
1.4.2FPGA设计流程
其实要设计一颗FPGA器件的方法很简单,其设计过程与一般的ASIC设计其实是大同小异的。
各个设计厂家的可编程逻辑器件的设开发流程大致是一样,具体设计步骤如下所示[6]:
1.按照“自顶向下”的设计方法进行系统划分。
2.利用VerilogHDL语言设计生成源代码,这是高层设计中使用的最普遍方法。
此外,也可以采用图形输入的方式。
3.将源代码进行编译,使其成为机器可以识别的表达式。
4.利用综合器对Verilog的源代码进行综合优化处理,生成门级描述的网表文件,这是一个关键步骤,可以将高层次的描述转化为硬件电路。
5.利用适配器将网表文件针对综合时确定的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线等。
6.将适配器产生的器件编程文件通过编程器或者下载线下到目标芯片的FPGA器件中即可。
1.5XilinxISE开发系统简介
Xilinx公司的ISESeries软件是一系列完全集成的、方便易用的EDA开发设计工具,支持所有的XilinxFPGA和CPLD在WindowsNT、Win2000、WinXP以及Linux操作系统上的开发,主要可以分为:
输入工具、综合工具、仿真工具、实现工具和辅助设计工具等五大类。
其使用方法操作简单,仿真时可单步执行,便于仿真调试及电路验证。
而且对于目前比较流行的硬件描述语言VHDL和VerilogHDL等都适用[7]。
1.6本章小结
本章主要介绍了数字电子设计的发展概况的相关内容。
在数字电子设计中主要应用的语言是硬件描述语言VHDL和VerilogHDL语言,本章节中对这两种语言在程序编写上的差异和优点进行了对比性的总结介绍。
最后讲述应用Xilinx公司的ISESeries软件对FPGA器件的设计开发流程的一些综述性问题。
第二章I2C总线的解析
下面本论文将首先对I2C总线协议中的相关数据格式以及时序的内容进行简要的介绍。
2.1I2C总线的概述
I2C总线协议是一个串行总线标准,尽管不具有并行总线对数据的吞吐能力,但由于它具有以下特点,因此也使它有着广泛的应用。
●只需要串行数据线(SDA)和串行时钟线(SCL)两条总线即可;
●每个连接到总线的器件都可以通过唯一的一个地址和一个一直存在的简单的主或从节点关系软件设定地址,主节点可以发送数据或接收数据;
●是真正的多主总线,当两个或者两个以上的主节点同时进行初始化数据传输时,可以通过冲突检测和仲裁防止数据被破坏;
●串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;
●芯片上具有滤波器,这种片上的滤波器可以滤去总线数据线上的毛刺波,保证数据的完整性;
●连接到相同总线上的IC数量只会受到总线的最大电容(400pF)限制,不会受到其他限制。
总线不仅仅只是互连的线,它还包含系统通信的所有格式和过程。
I2C总线结构上的特点保证了其在应用时的简洁性,另外它也具有完备的协议可以避免所有其他的可能性,例如,混乱、数据丢失和妨碍信息等。
2.2I2C协议的基本概念
I2C串行总线[8]是支持任意IC设计开发生产过程的(NMOS、CMOS和双极性)。
串行数据线(SDA)和串行时钟线(SCL)在和连接到总线的器件间进行信息传递。
每个器件都具有一个识别的标志可以作为一个唯一的地址(无论是微控制器、LCD驱动器、存储器还是键盘接口),并且都可以发送数据和接收数据。
很明显LCD驱动器只需要接收数据,而存储器不仅需要接收数据还需要发送数据。
如图2-1所示的就是一个高性能集成电视的实例。
从图2-1我们可以看到,I2C总线的应用是十分方便的。
用通俗一点、简单一点的话讲就是I2C总线的硬件设计工作就是连接SDA和SCL这两条线,依靠I2C总线协议完成软件得工作。
在I2C总线协议中应该理解什么是主节点和从节点,总线上节点的寻址方式的概念[9]等。
图2-1高性能集成电视
2.2.1主节点和从节点
主节点主要是负责初始化总线的数据传输,并且产生可以允许传输的时钟信号。
此时任何被寻址的器件都被认为是从节点。
当有多个主节点在总线上传输数据时,每个主节点都会产生自己的时钟信号。
连接到总线上的所有外围器件、外设接口都是总线上的节点。
2.2.2总线上节点的寻址方式
在任何时刻总线上只允许有一个主控器件(主节点)实现总线的控制操作,对总线上的其他节点进行寻址,可分时实现点对点的数据传送工作。
因此,总线上每个节点都具有一个固定的节点地址。
I2C总线上的主节点的地址由软件给定的,这个地址会存放在I2C总线的地址寄存器中。
I2C总线上所有的外围器件都有规范的器件地址。
器件地址是由7位数字组成,它和1位方向位构成I2C总线器件的寻址字节SLA(Slaveaddress)。
器件地址是器件在出厂时就已给定,是I2C总线外围接口器件固有不变的地址编码。
数据方向位则规定了总线上主节点对从节点的数据传送方向。
2.3I2C协议的时序要求
2.3.1总线上数据传递时序
I2C总线上数据传递时序[10]如图2-2所示,具体步骤如下。
SDA
MSB应答应答
SCL
S1278912~89P
起始总线暂停控制终止
条件条件
图2-2I2C总线的数据传递时序
●首先,是由主节点器件发送一个起始信号。
●然后,主节点器件发送从节点的地址和读写方式,一共有8位。
其中,从节点地址7位,读写方式1位。
●与传输地址保持一致的是从节点器件的应答(即ACK)。
●开始数据传输时,传输数据的数量是不限。
每个八位字节后面紧跟的就是接收数据方的应答位。
例如,主节点器件读取从节点数据、从节点发送数据、主节点应答、主节点器件写数据到从节点、主节点发送数据、从节点应答等。
●结束数据传输时,主节点器件会发送出一个终止信号用来结束整个传输过程,使数据传输终止。
采用I2C总线对传送的字节数是没有限制,只要求每传送一个字节后对方回应一个应答位。
在发送时,首先发送的是数据的最高位(MSB,MostSignificantBit)。
每次传送开始要求有起始信号,结束时要求有停止信号。
在总线传送完一个字节后,可以通过对时钟线(SCL)的控制使其传送暂停。
例如,当某个外围器件接收N个字节数据后需要用一定得时间处理数据,为了能够顺利的继续进行接收以后的字节数据,这时可以在应答信号后使SCL变为低电平控制总线暂停。
如果主节点要求总线暂停也可使时钟线保持低电平控制总线暂停。
2.3.2总线上的时序信号
I2C总线是同步传输的总线,总线信号是完全与时钟保持同步的。
I2C总线上与数据传送有关的信号包括起始信号S、终止信号P、应答信号A以及位传送信号。
将这些信号进行一一介绍如下[11]:
1.起始信号S
起始信号(StartCondition),简称S。
就是在串行时钟线SCL为高电平的时候,串行数据线SDA从高电平向低电平变化的过程从而形成起始信号S,启动I2C总线如图2-3所示。
2.终止信号P
终止信号(StopCondition),简称P。
就是在串行时钟线SCL为高电平的时候,串行数据线SDA从低电平向高电平变化的过程从而形成终止信号P,停止I2C总线如图2-3所示。
SDA
SCL
S1278912~89P
StartADDRESSR/WACKDATAACKSTOP
conditioncondition
图2-3起始信号S和终止信号P
3.应答信号A
如图2-3所示,ACK的第9个时钟脉冲对应的就是应答位,相应串行数据线上低电平时为应答信号A,高电平时为非应答信号。
4.位传送信号
在I2C总线启动后或应答信号后的第1~8个时钟脉冲对应于一个字节的8位数据传送。
脉冲高电平期间,数据串行传送;低电平期间为数据准备,允许总线上数据电平变换。
2.4本章小结
本章主要是针对I2C总线协议的相关概念进行讲解。
首先是对总线进行综述,其次重点描述了数据传递时序和时序信号的相关内容。
通过数据传递时序和时序信号的介绍来理清设计思路,从发出起始信号到接收终止信号,中间包括应答信号和位传输信号的过程就是I2C总线上数据传递时序的过程。
第三章模拟I2C接口程序的基本框架
本章中主要介绍了模拟I2C接口程序的基本框架以及基本框架中包含的各部分内容。
3.1基本框架
模拟I2C接口程序的基本框架[12]3-1所示:
图3-1模拟I2C接口程序的基本框架
3.2各个框架的内容
1.程序接口
主要用于和应用程序连接的接口,将应用程序按照I2C总线协议的方式通过串行数据线SDA传递到外部器件中[13]。
包括下列内容:
●clk_IFPGA的外部时钟信号。
●rst_I同步重起信号。
●arst_I异步重起信号。
●adr_I从节点地址。
●dat_I输入数据。
●dat_o输出数据。
●we_I写有效信号。
●stb_I接口有效信号。
●cyc_I有效总线周期输入。
●ack_o应答信号输出。
●inta_o中断信号输出。
2.时钟设置寄存器
I2C协议提供了3种速度模式:
正常速度模式时为100kbit/s、快速模式时为400kbit/s、高速模式时为3.5Mbit/s。
串行时钟线SCL输出的时钟信号频率和速度模式要求保持高度的一致性。
程序内部使用5倍的串行时钟线SCL信号作为时钟,然而在FPGA外部的时钟则需要经过分频才能得到程序内部使用的时钟。
例如,在采用正常速度为100kbit/s时,FPGA的外部时钟为50MHz,则时钟的设置寄存器需要设置为(50MHz/5*100kHz=99)。
3.时钟产生模块
时钟产生模块产生4倍的串行时钟线SCL频率的时钟信号,它为位传输控制模块中所有同步动作提供了触发信号。
4.命令寄存器
命令寄存器一共有8位,它决定是否在总线上产生各种时序信号、是否读/写数据,各位表示的含义如表3-1所示。
表3-1命令寄存器内容
位
内容描述
7
6
5
4
3
2:
1
0
STA,产生起始信号
STO,产生终止信号
RD,从节点读取数据
WR,往从节点写数据
ACK,应答信号
保留位
lACK,中断应信号
5.状态寄存器
状态寄存器时用来显示当前I2C总线状态的寄存器。
例如,是否接收到从节点的应答信号、是否忙