基于FPGA的I2C串行总线接口电路设计_第1页
基于FPGA的I2C串行总线接口电路设计_第2页
基于FPGA的I2C串行总线接口电路设计_第3页
基于FPGA的I2C串行总线接口电路设计_第4页
基于FPGA的I2C串行总线接口电路设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上本科毕业设计(论文)题目基于FPGA的I2C串行总线接口电路设计学生姓名: 史俊达 专 业:集成电路设计及集成系统指导教师: 黄静 完成日期: 2013/5/30 诚 信 承 诺 书本人承诺:所呈交的论文是本人在导师指导下进行的研究成果。除了文中特别加以标注和致谢的地方外,论文中不包含其他人已发表或撰写过的研究成果。参与同一工作的其他同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 签 名: 日 期: 本论文使用授权说明本人完全了解南通大学有关保留、使用学位论文的规定,即:学校有权保留论文及送交论文复印件,允许论文被查阅和借阅;学校可以公布论文的全部

2、或部分内容。(保密的论文在解密后应遵守此规定)学生签名: 指导教师签名: 日期: 专心-专注-专业摘 要I2C(Inter Integrated Circuits)总线是Philips公司开发的用于芯片之间连接的串行总线。现场可编程门阵列(FPGA)设计灵活、速度快,在数字专用集成电路的设计中得到了广泛的应用。I2C串行总线接口电路设计的主要任务是根据I2C时序协议用Verilog HDL语言对I2C总线接口电路的描述,其目的是通过在FPGA上来实现I2C接口电路来领会复杂数字电路的设计思路和理念。在对I2C总线的研究现状与发展进行了深入的调研的基础上,论文着重阐述了在FPGA上实现随机读/写

3、的I2C接口电路的设计方案。首先,论文简单介绍了硬件描述语言(Verilog HDL)与现场可编程门阵列(FPGA)。其次,论文详细说明了I2C串行总线内部结构和数据传输格式及其时序协议。基于此,论文重点阐述了接口电路的设计方案以及在FPGA开发板上与外围I2C接口器件E2PROM实现数据传输的仿真与测试。经过多次实验验证,I2C总线接口电路已通过行为级仿真和综合及布局布线后门级时序仿真,满足系统要求。最后,论文对所得的研究成果进行了总结。关键词: Verilog_HDL;FPGA;I2C串行总线;随机读/写;E2PROMABSTRACTI2C (Inter Integrated Circui

4、ts) Bus is developed by Philips for the connection between the chip serial bus. In the digital ASIC design, Field-programmable gate array (FPGA) design has been widely used because of its flexibility and high speed. The main task of I2C serial bus interface circuit design is based on the I2C timing

5、agreement with Verilog HDL language description of the I2C bus interface circuit, which aims to achieve I2C interface circuit up to comprehend complex digital circuit design ideas and concepts through the FPGA.Based on the in-depth research of the I2C bus status and development, the design scheme of

6、 the random read/write I2C interface circuit on FPGA was underlined in the paper. First,hardware description language (Verilog HDL) and field-programmable gate array (FPGA) were introduced slightly in the paper. Second, the internal structure and data transmission format of I2C serial bus and its ti

7、ming protocol were illustrated in the paper in detail. Based on this, the interface circuit design in FPGA development board was emphasized in the paper.As well as, the simulation and test of data transmission with peripheral devices E2PROM with I2C interface were stressed. After several experiments

8、, I2C bus interface circuit has passed the behavioral level simulation and synthesis and layout-level timing simulation backdoor to meet system requirements. Finally, the research results were summarized.Keywords: Verilog_HDL; FPGA; I2Cserial bus ; Random read /write; E2PROM目 录第一章 绪 论1.1本课题研究的意义随着电子

9、科技的迅速发展,需要相互通信及与外界通信的IC电路变得越来越复杂。为了简化电路设计,Philips公司开发了一种双向二线的串行I2C总线(Intel Integrated Circuit Bus)。该总线具有通讯效率高、传输线少等特点。因为其简单的接口、控制简便,使用I2C总线的电子电路设计工程师日益增多。I2C总线只提供两根线进行通信,所有具有I2C接口的器件都可以挂在这两根线上直接通信。目前,IC制造商提供的I2C总线应用芯片的功能越来越强大。I2C总线由主器件控制,增加额外的I2C控制器需要额外的印制板面积,增加了成本。因此,在一些特殊应用条件下,使用一种利用应用广泛的现场可编程门阵列(

10、FPGA)实现与I2C总线器件无缝连接的方法,将是更为经济的解决方案。根据I2C总线的通讯协议,在Altera 公司的EP2C35F672C6型号的FPGA上实现与具有I2C接口的外围芯片进行通信,具有易调试、灵活配置、高速传输等优点,这样大大地缩减了电路系统的开发时间。1.2研究领域现状单片机应用系统正向小型化、高可靠性、低功耗等方向发展。在一些功能较多的电路系统中,经常需扩展多个外围接口器件。如果采用传统的并行传输方式,传输时间是缩短了,但也增加了系统资源的消耗和系统的复杂度,关键是功耗的增大和成本的增加。现在,许多公司采用了Philips公司开发的I2C总线,使单片机系统电路结构的复杂度

11、大大减小,并且增加了硬件的灵活性,缩短了产品开发周期,降低了成本。自从I2C总线成为国际通用的总线标准后,I2C总线因为具有扩展方便、协议完善、支持芯片多和连线少等优点,已经被很多集成电路厂商集成到微控制器集成电路中。I2C总线的应用涉及通信、控制、家电、消费电子等众多领域,在很多器件上都配备有I2C 总线接口,而且功能日益强大。1.3发展趋势I2C总线以其结构简单、通信功能可制定、高抗干扰性、传输速度快等特点获得了广泛的应用。I2C总线控制器是MPU与I2C器件之间的桥梁,它负责接收处理器的数据、地址以及控制信号,而且反馈I2C器件的状态和数据给处理器,实现处理器与I2C器件之间的通信。Ph

12、ilips公司除了生产具有I2C总线接口的单片机外,还推出了许多具备I2C总线的外部接口芯片,如AT24CXX系列的EEPROM、128字节的SRAM芯片PCF8571、日历时钟芯片PCF8563、4位LED驱动芯片SAA1064、160段LCD驱动芯片PCF8576等多种类多系列接口芯片。随着可编程器件的飞速发展,用FPGA器件实现I2C总线控制器接口的设计可以带来很多方面的便利。1.4 所做的主要工作由于现场可编程逻辑门阵列(FPGA)作为专用集成电路()领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有门电路数有限的缺点,深受硬件电路设计人员的喜爱,大大缩减了电路开发时

13、间5。本论文要求在FPGA上实现I2C串行总线接口电路,要求实现基本的随机读写功能和显示、编写电路测试模块。全文共分为五章,各章节的主要内容安排如下:第一章为绪论,简要介绍了I2C串行总线接口电路的研究背景、意义和目前国内外研究现状。第二章对硬件描述语言Verilog HDL和现场可编程逻辑门阵列FPGA的综述,其中包括硬件描述语言Verilog HDL及FPGA的起源、发展、应用等;Verilog HDL语言与FPGA的开发板的结合在现在的半定制电路中应用很广泛,这样可以省去不少开发全定制的时间和成本等。第三章对I2C串行总线接口电路进行了介绍,了解I2C串行总线的概念和其工作时序协议,其中

14、包括I2C串行总线接口的内部结构。第四章阐述了I2C随机读/写串行接口电路设计,首先说明了I2C随机读/写串行接口电路的设计框图,同时对这个电路进行分模块设计。遵循自顶向下(Top_Down)设计理念,将复杂的时序电路分解成几个简单的小模块,使设计流程清晰化,这样也便于测试。第五章为I2C随机读/写串行接口电路的仿真和测试,分别用软件对电路进行功能、时序仿真和在FPGA开发板上测试。最后,把测试结果与实际值进行比较,进一步地确认电路的正确性。第二章 Verilog HDL和FPGA的综述2.1 硬件描述语-Verilog HDL2.1.1 Verilog HDL简介Verilog HDL是一种

15、描述硬件的语言,可以用文本编程的形式来描述硬件的内部结构和行为。它可以表示逻辑电路图、,还可以表示数字逻辑系统所完成的逻辑功能。Verilog HDL由Gateway Design Automation公司开发的。现在,Verilog HDL和VHDL一样也是世界上最流行的两种硬件描述语言之一,已经成为为IEEE标准。2.1.2 Verilog HDL的发展Verilog HDL语言原来是由Gateway Design Automation公司于1983年为其模拟器产品开发的硬件建模语言,它还只是一种专用语言2。随着他们的模拟、仿真器产品被电子业界广泛使用,Verilog HDL作为一种便于使

16、用而且实用的语言开始被越来越多的电路设计者所接受2。Verilog HDL语言在一次增加语言普及性的活动中被推向公众领域。1992年,Open Verilog International决定推广Verilog OVI标准成为IEEE标准,这一推广最终获得了成功。于1995年,Verilog 语言成为IEEE标准,称为IEEE Std 136419952。2.1.3 Verilog HDL用途Verilog HDL是目前应用最为广泛的硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模14。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间14。数字系统能够

17、按层次描述,并可在相同描述中显式地进行时序建模14。Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等14。2.2 现场可编程门阵列-FPGA现场可编程门阵列(Field Programmable Gate Array:FPGA),它是在PAL、GAL、等的基础上进一步发展的产物。它是作为专用集成电路()领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有门电路数有限的缺点5。2.2.1 FPGA的概要目前以硬件描述语言(Verilog或VHDL)描述的逻辑电路,可以利用逻辑综合和布线工具软件,快速地烧录至FPGA上进行测试

18、,这一过程是现代 集成电路设计验证的技术主流5。这些可编程逻辑元件可以被用来实现一些基本的逻辑门数字电路(比如与门、或门、异或门、非门)或者更复杂一些的组合逻辑功能,比如译码器等19。大多数的FPGA里面包含记忆元件,例如触发器(Flipflop)或者其他更加完整的记忆块,从而构成时序逻辑电路19。电路系统设计人员可以根据需要,通过编程下载的方式,把FPGA内部的逻辑块连接起来,这样就完成了在FPGA芯片里构建你所要的电路。FPGA内部的逻辑块和连接可以随着设计者的需要而改变,所以FPGA能够成为数字电路设计人员在半定制电路中的第一选择。一般来说,FPGA比专用集成电路(ASIC)的速度要慢一

19、点,无法完成更复杂的设计,并且能耗也大。但是,FPGA具有可以快速成品,而且其内部逻辑可以被设计者反复修改的优点。此外,用FPGA调试的成本较低。2.2.2 FPGA的基本组成l 静态随机存取存储器(SRAM):基于静态内存Static memory技术,系统内可编程化和再程序化(Re-programmable),须要外部启动元件(External boot devices)CMOS。l Antifuse:可烧录一次。通常为CMOS。l PROM(一次性可编程EPROM):可编程化只读存储器技术,可烧录一次。使用塑料封装,无窗,不能清除内容。l EPROM:可清除可编程化只读存储器技术,有窗,

20、经紫外线照射可清除内容。l EEPROM:可电气清除可编程化只读存储器技术,可用电气信号清除内容。l 闪存:一种特殊的EEPROM。l 熔丝:可烧录一次。通常为双极性的。2.2.3 FPGA的基本特点· 采用FPGA设计ASIC电路,用户无需投片生产,就能得到组合的芯片。· 做半定制电路的样品。· 内部有大量的触发器和I/O引脚。· 电路设计周期短、开发成本低、风险小。· 采用高速、功耗低的CHMOS工艺,兼容CMOS、TTL电平。· 能提高系统集成度和可靠性。FPGA内部RAM中的程序控制其工作过程。工作时,只需对片内的RAM进行编

21、程,就可以实现不同的功能。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,完成配置后,FPGA进入工作状态3。掉电后,FPGA恢复成空白片,内部逻辑关系消失3。因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可3。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能3。因此,FPGA的使用非常灵活。第三章 I2C串行总线简介3.1 I2C串行总线的概述I2C(Inter Integrated Circuit)总线是由公司开发的两线式串行总线,用于连接及其外围设备,

22、是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线8。I2C总线也是微电子通信控制领域广泛采用的一种总线标准。它不同于普通的同步通信,具有输出线少,容易控制,传输速率快,抗干扰强等优点。I2C总线定义了两根线:串行数据线SDA和串行时钟线SCL。如图3.1是I2C总线系统的示意图。图中的单片机、SRAM或E2PROM、A/D或D/A转换器以及其他I2C外围设备都有它们各自的地址。在数据传输过程中,通信双方分别称为I2C主控(I2C_Master)和I2C从设(I2C_Slave),都可以作数据发送端和接收端。图3.1 带有微控制器的I2C总线配置迄今为止,飞利浦已开发出15

23、0余种,包括CMOS和双极型I2C总线兼容IC,所有符合标准的I2C总线接口的设备,通过简单的双向两线总线,以实现有效的控制和IC之间的通信。3.2 I2C总线特征I2C总线是通过双向串行时钟线SCL和双向串行数据线SDA在器件之间传递信息的。SDA、SCL的输出级必须是开漏或者开集电极输出,并在两根线上分别通过上拉电阻接到正电源,以实现“线与”功能。如图3.2.当总线处于空闲状态,SDA、SCL均保持为高电平。挂在总线上每个器件都有自己对应的唯一地址,用来发送数据或接收数据。当主器件掌控总线时,为实现数据的传输,主器件需要产生传输所需的时钟;被寻址的器件只能作为从器件。在标准模式下,I2C总

24、线上数据的传输速率可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s7。总线电容(400pF)及地址的寻址范围决定连接到总线的器件数量。 图3.2 I2C标准模式器件和快速模式器件连接到I2C总线在复杂的系统中,可能有多台主机同时启动总线,进行传输数据。通过总线仲裁,就可以很好地控制哪一台主机来控制总线。3.3 I2C总线的数据位传输3.3.1 有效数据位的规定I2C总线进行数据传输时,串行时钟为高电平期间,数据线上的数据必须保持稳定,只有在串行时钟为低电平期间,才允许数据线上的数据进行变化(即:高电平变低电平状态或者低电平变高电平状态),如图3.3

25、。图3.3 I2C总线的数据位传输3.3.2 起始和终止信号串行时钟SCL为高电平期间,串行数据SDA出现下降沿,则表示本次传输的起始信号;SCL线为高电平期间,SDA线出现上升沿,则表示本次传输的终止信号,如图3.4。 主机负责向从设发送启动和停止信号,产生启动信号后,SDA总线被占用;产生停止信号后,总线就释放总线。(即:处于空闲状态)。图3.4 启动和停止信号3.4 I2C总线上的数据传输3.4.1 数据字节格式发送至SDA线上的每个字节必须为8位,每次传输的字节数不受限制,每个字节后必须跟一位响应。被发送的数据第一位就是最高有效的数据位(MSB)。如图3.5。如果接收器在传输途中去做其

26、他事(比如:做一些中断程序),接收器将把SCL拉低,直到处理好它的事情后才释放SCL,继续接收数据,在SCL被拉低的期间,主器件处于等待状态。图3.5 数据字节格式3.4.2 应答确认每次发送的8位数据必须跟一位应答,此应答对应的时钟周期还是由主器件来产生。在这个时钟周期里,主器件要释放SDA,由从器件控制,主器件在这个期间需要检测从器件有没有发送应答信号。从器件必须在这个时钟周期的低电平期间拉低SDA,这样主器件才能在时钟高电平期间检测到应答信号。当然,SDA的建立时间和保持时间也要考虑在内。产生起始位后,总线就处于忙碌状态,产生停止位后,总线就进入空闲状态。在读数据时,主机接收到最后一个字

27、节就不产生响应位(SDA=1),以此告知从设不要再发送数据,等待结束信号。如果不是最后一个数据字节,则主机发出的响应位为0(SDA=0)。当从设响应了主机,在传输了一段时间后不能接收更多的数据字节,此时从机可以通过产生非响应来告知主机终止当前传输,于是主机产生一个停止信号终止本次传输,或者产生重复起始信号开始新的传输13。3.4.3 I2C总线的工作模式(1)主器件发送从器件接收(写操作)主器件发送开始信号之后,紧接着发送的第一个字节是控制字节。高七位为从器件的地址片选信号。最低位为数据传输方向标示位 (1表示读从器件,0代表写从器件),如下图3.6。应答后再发送从器件的片内地址。应答后,接着

28、发送的是数据字节,数据可以是单个字节,也可以是多个字节,取决于主器件。图3.6 第一个字节格式从器件每收到一个字节之后,在第九个SCL周期要反馈一个应答信号(SDA=0)。在应答周期,主器件释放SDA线,从器件把SDA拉成低电平,作为对主器件的应答。(2)从器件发送主器件接收(读操作)发送开始信号之后,主器件发送写控制字节给从器件。如果从器件检测到这个控制字节中的从器件地址与自身地址相一致,并且方向位为1(R/W=1),则表示此次操作是读操作,由从器件反馈主器件一个应答。然后,从器件把数据发送给主器件。若主器件在之前给从器件发过片内地址,则从器件就从这个地址开始发送数据;若从器件没有收到片内地

29、址,则从器件就从当前地址开始向主器件发送数据。从器件在发送一个字节数据后,若收到主器件的应答信号则继续发送下一个字节数据;若没收到主器件的应答信号,从器件将停止发送数据,等待主器件的停止信号。从器件的发送地址和字节数都由主器件决定。3.5 I2C总线的工作流程3.5.1 I2C总线的写操作写操作的步骤:1. 向从器件发启动信号2. 向从器件发I2C器件特征码、页地址(3bit)和读写控制位(R/W=0)3. 从器件发应答信号(低)4. 向从器件发8位片内地址5. 从器件发应答信号(低)6. 向从器件发8位数据7. 从器件发应答信号(低)8. 若主器件仍需发送数据,就继续发,直到从器件没有应答信

30、号(高)9. 向从器件发停止信号3.5.2 I2C总线的读操作读操作的步骤(读随机地址单元):1. 向从器件发启动信号2. 向从器件发I2C器件特征码、页地址(3bit)和读写控制位(R/W=0)3. 从器件发应答信号(低)4. 向从器件发8位地址5. 从器件发应答信号(低)6. 向从器件发启动信号7. 向从器件发I2C器件特征码、页地址(3bit)和读写控制位(R/W=1)8. 从器件发应答信号(低)9. 从器件发数据(8位)10. 若主器件读单字节数据,则不给从器件应答(SDA=1)。若主器件需读多字节数据,则给从器件发应答(SDA=0),直到读最后一个字节数据,才向从器件发应答(SDA=

31、1)。11. 向从器件发停止信号3.6 仲裁和时钟同步3.6.1 时钟同步在I2C总线上,所有的主器件产生他们自己的传输时钟来传输数据。数据只在串行时钟的高电平器件有效。要得到一个确定的串行时钟就需要一位一位进行仲裁7。时钟的同步就是利用I2C总线的线与功能。当有多个主机同时在SCL线上产生自己的时钟信号时,这些时钟信号通过线与的方式来同步。如图3.7,主器件l产生的串行时钟CLK1先变低,同步后的SCL线随之被拉低,主器件2内部的计数器被SCL的下降沿复位,同时输出端导通,两个主器件都对SCL的低电平开始计时。主器件1首先计数完成并关闭输出端,而主器件2没有完成计,输出端仍是导通,此时SCL

32、仍为低电平,这时主器件1进入高电平等待状态,直到主器件2完成计数并释放SCL线,SCL变为高电平7。当SCL变高时,两个主器件同时把计数器清0,然后开始对SCL线高电平计时,在图3.7中,主器件l首先完成SCL线高电平计数并拉低SCL线,检测到SCL线下降沿后,两个主器件的计数器同时清0,准备开始低电平的计时13。综上所述,同步后SCL线低电平时间取决于时钟低电平时间最长的主机,高电平时间取决于时钟高电平时间最短的主机7。图3.7 时钟同步图3.6.2 数据仲裁主机只会在I2C总线空闲时产生起始位,但是在起始位的保持时间tHD:STA内可能有多个主机产生起始位,最终,总线上的起始位由它们之间的

33、线与运算决定,仲裁只是对SDA线上传输的数据进行仲裁。SCL为高时,在SDA线上发送低电平的主器件将会赢得仲裁,发送高电平的主器件将会仲裁失败,并对SDA置高阻。如图3.8,两个主器件产生起始位后就开始对传输的数据进行仲裁,第一个数据位,SCL为高时,两个主器件都输出高电平,继续仲裁,第二个数据位,两个主器件都输出低电平,继续仲裁,到第三个数据位时,主器件l的SDA输出高电平,而主器件2的SDA线输出低电平,于是,主器件2赢得仲裁,主器件l呈现高阻状态7。仲裁可以持续几个数据位,若两个主器件传输的数据都是一样的,那么仲裁也会持续到结束信号。在实际通信中,第一个进行仲裁往往是控制字字节部分(即:

34、器件地址和传输方向标示位),如果一个从器件被多个主器件寻找,那么比较数据位进行仲裁,直到传输结束。赢得总线仲裁的主器件决定I2C总线上的地址和数据,因此传输的数据信息不会丢失7。图3.8 数据仲裁图第四章 I2C串行总线接口电路设计4.1 I2C串行总线接口电路的性能指标本文设计要求实现一个严格遵循I2C协议的接口电路,传输速率最高为1MHz,向下兼容低速的I2C接口的设备,输入的数据是8位的,输入地址是15位的(高7位是器件地址,低8位是器件内地址),另外器件地址为7位,可以对128个有I2C接口的器件进行寻址,能与I2C接口的E2PROM进行数据传输,并支持对从设进行随机读、写。4.2 I

35、2C串行总线接口电路的设计平台Altera公司的Quartus 软件是电路设计所用到的平台。Altera公司的Quartus II集成PLD/FPGA开发软件,支持原理图,VHDL,Verilog HDL的AHDL(Altera Hardware Description Language)和其他设计输入表单,以及嵌入式自身合成模拟器的硬件配置,可以完成从设计输入完整的PLD设计过程。除了使用Tcl脚本完成设计流程外,Quartus II还提供了一个完善的图形用户界面设计,具有编译速度快,界面功能多样,容易上手等优点。Altera的Quartus II支持的IP内核,包括LPM/宏功能块库,使用

36、户能够充分利用成熟的模块,简化了设计的复杂性,加快了设计速度。第三方EDA工具的良好支持也使得用户在设计过程中的各个阶段可以使用熟悉的第三方EDA工具。其可编程逻辑设计环境,由于其强大的设计能力和直观的界面,越来越多的数字系统设计人员的欢迎8。4.3 I2C串行总线接口电路的设计方案MPUI2C串行接口I2C设备1I2C设备2VCCVCC4.3.1 I2C串行总线接口电路的框图设计RDRSTCLKDATA7:0ADDR14:0WRACKDATA7:0图4.1 I2C接口电路的框图设计在电路设计中,电路的整体外部框图的设计对整个电路设计起到了决定性作用。拥有一个完整的、清晰的电路外廓对之后电路的

37、各个部分的设计就有了清晰的把握。本次I2C接口电路需要一边要与MPU进行通信,另一边要与带有I2C接口的设备进行数据传输,这样就构成了一个简单的电路系统。电路框图设计如图4.1。4.3.2 I2C串行总线接口电路的内部模块设计I2C串行接口电路的外部框图只是给出一个电路系统的轮廓图,接口电路的内部结构如何还要根据内部框图的设计。内部框图的设计将会决定接口电路的具体实现。I2C串行接口电路的程序设计是遵循了“自顶向下”的设计理念。利用层次化,结构化的设计方法,使电路设计变得层次清晰,结构简单。这个电路设计被分为7个子模块,分别是:I2C接口顶层模块、输入时钟分频模块、串行时钟产生模块、输入数据寄

38、存器模块、地址寄存器模块、控制寄存器模块和时序主状态控制模块。其中时序主状态控制模块是接口电路中核心部分,它控制着电路有序的运作。每个模块实现各自的功能,把每个模块按照逻辑相连就组成了一个电路整体。I2C串行接口内部模块设计如图4.2。I2C接口顶层模块接口顶层模块SCL产生模块时序主状态机控制输入地址锁存控制锁存器输入数据锁存分频器ACKDATAOUT7:0CLK_50RSTWRRDDATA7:0WR/RDADDR14:0ACKCLKSDACLK_50RSTCLK_2MSCLSCL_ENDATA7:0ADDR14:0DATA7:0ADDR14:0WR_FLAGRD_FLAGDATAOUT7:

39、0图4.2 I2C接口电路的内部模块设计4.3.3 I2C串行总线接口电路各模块的程序设计方法I2C串行接口电路的程序设计利用层次化,模块化的设计方法,使电路设计变得层次清晰,结构简单。这个电路设计被分为7个子模块,下面详细说一下各模块的设计方法。I2C接口顶层模块主要是用来对下一层子模块的实例调用,要求子模块每个功能都能正确地实现,并且子模块之间的输入/输出也要满足时序要求。它是整个设计流程中最高层次的一个模块。输入数据锁存器、地址锁存器、控制锁存器模块都属于输入锁存模块。它们的作用就是用来协调设备与CPU之间的通信。由于CPU工作速度快,数据信号、地址信号、控制信号只能保持一段时间有效。接

40、口电路的输入锁存器就能很好地解决这个问题,当控制信号出现时,其就把数据信号和地址信号锁入相应的锁存器。这块程序是采用组合逻辑来编写的。输入时钟分频模块用来协调接口输入的时钟与I2C总线传输时序之间的不匹配的,加个分频就能很好地解决这个问题。输入时钟为50MHz,经过分频后输出的时钟频率是2MHz。这块程序是采用时序计数来分频的。图4.3 状态转移图串行时钟产生模块就是使I2C总线的串行数据线SDA在串行时钟线SCL的配合下把数据按照传输协议一位一位地传出去7。这块程序也是采用时序来分频的,在CLK的下降沿SCL翻转,前提是要在SCL时钟产生信号有效。时序主状态控制模块是时序电路,也是整个电路的

41、核心电路。它直接控制着并行数据的装载、状态位标志和时序发送/接收的控制。整个电路在它的控制下有条不紊地进行数据通信。这块程序采用同步有限状态机(FSM)的设计方法。程序实际上就是一个主控状态机,在主状态不同的状态下都控制着不同的任务和控制信号,在不同的输入信号与当前状态的情况下构成复杂的有限状态机1。这个有限状态机的驱动时钟是频率为2MHz的CLK。由于读写操作的状态中有几个状态是一致的,用到了嵌套状态机。状态转移如下图4.3。为了避免代码重复,程序由一个发送的大任务和接收的大任务组成,状态编码采用独热码。4.4 I2C串行总线接口电路程序的综合I2C串行总线接口电路程序的综合是采用Quart

42、us自带的综合器进行综合的。各个模块的程序均已通过了综合器的综合,也给出了整个电路程序的综合报告及综合出来的原理图。综合报告如图4.4。综合生成的原理图如图4.5图4.4 电路的综合报告图4.5 综合生成的原理图第五章 I2C串行接口电路仿真与FPGA开发板测试5.1 电路仿真测试平台5.1.1电路仿真工具公司的ModelSim SE 10.1a是本次I2C串行接口电路的仿真软件。ModelSim是业界最优秀的HDL语言,它能提供友好的仿真环境,是业界唯一的支持VHDL和Verilog混合仿真的6。它采用直接优化的、Tcl/Tk技术、和单一内核仿真技术,编译的代码与软件平台没有关系,编译和仿真

43、速度快,便于保护IP核6。和个性化的图形界面加快了用户的调错进程,ModelSim是FPGA/的首选6。主要特点:1. 本地编译结构,RTL和门级优化,编译和仿真速度快,能够跨版本甚至跨平台仿真6;2. 单内核支持Verilog和VHDL的混合仿真;3. 直接支持System C,可以任意混合HDL;4. 支持System Verilog的设计功能;5. 全面支持系统级描述语言:SystemVerilog、SystemC、PSL;6. 可以单独或同时进行行为(Behavioral)、RTL级、和门级(Gate-level)的代码6。5.1.2电路开发板测试仪器电路开发板测试的仪器是Altera

44、公司的DE2教学开发板。DE2开发板是以672 针引脚的包装的Cyclone II EP2C35F672C6为核心。板上所有重要的部件都与板上的芯片相连,使用户能够控制板上各种的操作。DE2板包括了很多开关(兼有拨动开关和按键),发光二极管和七段数码管3。在更多进一步的实验中还用到了SRAM,SDRAM,Flash以及16×2的字符液晶。需要进行处理器和I/O接口试验时,可以简单的用Altera NiosII处理器和象RS-232和PS/2标准接口。进行涉及音频和视频的实验时,也有标准MIC、line-in、line-out接口(24位音频解编码器),Video-in(TV Deco

45、der)和VGA(10-bit DAC),这些特点都能够被用来制作CD质量的音频应用程序和专业的视频图象3。为了能够设计更强大的项目,DE2 还提供了USB2.0 接口(包括主、从USB),10/100M自适应以太网,红外(IRDA)接口,以及SD卡接口3。最后,可以通过两排扩展I/O口与其它用户自定义的板子相连。如图5.1.图5.1 Altera DE2教学开发板5.1.3 外部测试芯片外部测试芯片使用的是Ateml公司的AT24C04芯片。AT24C04是Atmel公司生产的4Kbit(512Bytes)E2PROM芯片,该芯片采用I2C总线设计,主要性能指标为:l 容量为4Kbit(51

46、2Bytes),分为两部分存储空间,每部分256bytes。l 有2个器件地址选择脚,最多能够挂接4个AT24C04器件。l 32页,每页16字节,每次可连续写入16字节数据。l WP引脚为高电平时,AT24C04的0255地址空间的数据被写保护。l 需要9位的地址进行数据寻址。l 最高支持1MBps,还向下兼容100KBps和400KBps两种传输速率。l 器件地址高4位固定为“1010”,低3位为A2,A1,P0。A0为空引脚,A1,A2口为器件地址设定口,通过A1,A2口来设定AT24C04的器件地址WP口接低电平时,可以对整个AT24C04器件的512个字节进行读写操作。当WP口接高电

47、平后,器件前256个地址的数据被保护,只能读,不可写入,后256个字节数据可进行读写操作。AT24C04的数据空间由P0位决定,当P0为“0”时,将对AT24C04的0255空间的数据进行操作;当P0为“1”时,将对AT24C04的256511空间的数据进行操作。AT24C04的引脚定义,如图5.2及表5.1。引脚定义引脚定义说明1. A0空引脚。2. A1,A2器件地址设定引脚。3. GND电源地。4. SDA数据口。5. SCL同步时钟口。6. WP写保护口。7. VCC电源。 表5.1 AT24C02引脚定义图5.2 AT24C04的引脚图 (1)写操作:AT24C04的写操作有字节写和

48、页写两种模式,可以一次写入一个字节或是一页(16个字节)。两种操作模式的时序如图5.3、5.4所示。在字节写中,Master向AT24C04写数据,AT24C04响应Master的寻址后,Master发送片内字节地址,AT24C04响应后,Master发送数据;若AT24C04接收数据,则会反馈响应,Master检测到后产生停止位,结束写操作。此时,AT24C04开始擦写内部数据,不再响应外部信号。在页写中,AT24C04可一次写入16个字节:页写也是先发送从器件地址,然后送片内字节地址;发送了一字节数据后检测到从器件的响应,主器件继续发送15个字节数据。AT24C04每收到8位数据后给主器件

49、一位应答,片内地址自动加一,不然主器件将会停止传输。如果主器件发了超过16个字节的数据,地址计数器将会指向当前页的开头继续加,覆盖先前写入的数据。发送完16字节数据后,主器件产生停止位,AT24C04接收到停止位后,不再响应外部信号,启动内部擦写操作,如图5.4所示。图5.3 字节写时序图图5.4 页写时序图此时,主器件可以通过发送特定的AT24C04器件地址查询AT24C04内部擦写是否结束,如果有应答,则说明AT24C04内部擦写已经结束,主器件可以进行下一步操作,否则应继续等待。(2)读操作:AT24C04的读模式分为CurrentAddress Read(当前地址读)、RandomRe

50、ad(随机读)和Sequential Read(顺序读)三种,时序如图5.5所示。读操作的初始化方式和写操作一样,也是先发送Slave地址,不同之处在于R/W位等于l。在顺序读中,读地址是上次的读写操作地址加1。AT24C04输出一个字节的数据后,主器件不应答,AT24C04结束发送,主器件产生停止位。随机读操作是主器件可以随意读取AT24C04任意地址的内容。主器件发送起始位后、继续发从器件地址(R/W=0),AT24C04应答,再发从器件片内地址,AT24C04应答后,主器件重新发送起始位和从器件地址(R/W=1),AT24C04应答,然后输出一个字节数据,主器件收到后不应答,产生停止信号

51、结束传输,如图5.6所示。图5.5 当前地址读时序图图5.6 随机读时序图顺序读可以由当前地址读或随机地址读操作启动,主器件收到一个字节后,要应答从器件,AT24C04收到响应后将继续发送下一个地址的数据,直到主器件不应答,并产生停止位结束传输。读完最高地址的字节数据后,AT24C04内部的地址计数器翻转,下一次读本页的开头地址中的内容,如图5.7所示。图5.7 顺序读时序图5.2 外围电路的构建5.2.1 E2PROM电路构建AT24C04型号E2PROM的SCL、SDA是漏极开路的,需要外接上拉电阻到VCC。本次需要用到两片E2PROM,它们的器件地址不一样。如图5.8、5.9所示,E2P

52、ROM 1的A2,A1,A0均接地,WP接地,没写保护;E2PROM 2的A2接VCC,A1,A0均接地,WP接地,没写保护。图中SCLK,SDA接到所设计的接口芯片的SCL和SDA输出端。图5.8 E2PROM 1外围电路A2A1A0SCLKWPSDAVCCGNDVCC_5VVCC_5VSCLKSDAA2A1A0SCLKWPSDAVCCGNDVCC_5VVCC_5VSCLK SDA图5.9 E2PROM 2外围电路5.2.2 完整的测试电路经过上面的外围电路的搭建,这节可以完成整个测试电路的构建。Altera公司的DE2作为I2C总线的主控器件,Atmel公司的AT24C04作为从器件,两个

53、AT24C04 E2PROM相级联,双方通过DE2的IO扩展口相连。如下图5.10。图5.10 完整的测试电路5.3 I2C串行接口电路仿真结果5.3.1 I2C串行接口电路写数据的功能仿真在Quartus里直接调用Modelsim进行功能仿真,模拟实际I2C电路向E2PROM的00H、01H地址里写入12H、34H数据。仿真图如图5.11:图5.11(a) 写数据的功能仿真图图5.11(b) 写数据的功能仿真图5.3.2 I2C串行接口电路读数据功能仿真在Quartus里直接调用Modelsim进行功能仿真,模拟实际I2C电路向E2PROM的00H、01H地址里分别读出写入的数据。仿真图如图

54、5.12: 图5.12(a) 读数据功能仿真图图5.12(b) 读数据功能仿真图5.3.3 I2C串行接口电路写数据时序仿真在Quartus里直接调用Modelsim进行时序仿真,模拟实际I2C电路向E2PROM的00H、01H地址里分别写入12H、34H数据。仿真图如图5.13。图5.13(a) 写数据时序仿真波形图图5.13(b) 写数据时序仿真波形图5.3.4 I2C串行接口电路读数据时序仿真在Quartus里直接调用Modelsim进行时序仿真,模拟实际I2C电路向E2PROM的00H、01H地址里读出写入的数据,仿真图如图5.14。图5.14(a) 读数据时序仿真图图5.14(b)

55、读数据时序仿真图5.3.5 E2PROM行为模块的反馈信息图图5.15 Modelsim 反馈信息图图5.15的反馈信息可以看出I2C串行接口电路已经向E2PROM的00H地址写入了数据12H,向01H地址写入数据34H。这些反馈信息可以说明I2C串行接口电路已经通过了功能时序仿真。理论上,这个电路已经符合了本课题的设计要求,但是,还要在实物板上验证才能最终确定电路正确。FPGA开发板的验证将在下一节里提到。5.4 I2C串行接口电路FPGA测试结果DE2做为I2C主控器对器件地址为的E2PROM 1和地址为的E2PROM 2芯片进行随机读写操作。向E2PROM写入的数据是预先预存在ROM里的,数据类型是16进制的。地址是通过DE2上的拨码开关输入15位地址的。操作按钮介绍:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论