I2C总线在FPGA上的实现 论文.docx

上传人:b****7 文档编号:23439767 上传时间:2023-05-17 格式:DOCX 页数:37 大小:914.26KB
下载 相关 举报
I2C总线在FPGA上的实现 论文.docx_第1页
第1页 / 共37页
I2C总线在FPGA上的实现 论文.docx_第2页
第2页 / 共37页
I2C总线在FPGA上的实现 论文.docx_第3页
第3页 / 共37页
I2C总线在FPGA上的实现 论文.docx_第4页
第4页 / 共37页
I2C总线在FPGA上的实现 论文.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

I2C总线在FPGA上的实现 论文.docx

《I2C总线在FPGA上的实现 论文.docx》由会员分享,可在线阅读,更多相关《I2C总线在FPGA上的实现 论文.docx(37页珍藏版)》请在冰豆网上搜索。

I2C总线在FPGA上的实现 论文.docx

I2C总线在FPGA上的实现论文

 

闽江学院

本科毕业论文(设计)

题目I2C总线在FPGA上的实现

学生姓名

学号

系别

年级

专业电子信息工程

指导教师

职称副教授

完成日期2011年5月10日

闽江学院毕业论文(设计)诚信声明书

本人郑重声明:

兹提交的毕业论文(设计)《I2C总线在FPGA上的实现》,是本人在指导老师刘天键的指导下独立研究、撰写的成果;论文(设计)未剽窃、抄袭他人的学术观点、思想和成果,未篡改研究数据,论文(设计)中所引用的文字、研究成果均已在论文(设计)中以明确的方式标明;在毕业论文(设计)工作过程中,本人恪守学术规范,遵守学校有关规定,依法享有和承担由此论文(设计)产生的权利和责任。

 

声明人(签名):

年月日

 

摘要

伴随着FPGA技术的发展,片上系统在基于FPGA上的实现已经可能。

但由于在不同的条件下,编译系统所提供的ipcore已经无法满足用户的需要。

进而,在一个嵌入式系统中,添加用户自己设计的ip显得至关重要。

I2C总线是一种简单、双向、二线制、同步串行总线,用于解决各个串行设备间的通信,目前系统芯片控制外围设备的非常实用的一种总线。

本论文主要介绍了如何在基于xilinxfpga上嵌入式系统的用户ip的开发来实现I2C总线功能。

本文介绍了i2c总线协议,plb总线、ipif的特点。

同时本文还介绍了在基于xilinxfpga系统硬件平台的搭建,以及用户ip核的创建与使用。

关键词:

FPGA;ipcore;嵌入式系统;i2c;xilinx

Abstract

WiththedevelopingofFPGAtechnology,thechipsystemwhichbasedonFPGAhasachieved.Forthereasonofthedifferentconditions,theIPcoreswhichareprovidedinthesystemaren’tabletomeettheneedsofusers.ThenitiscriticaltoadduseroftheirowndesignIPinanembeddedsystems.I2Cbusisasimple,bidirectionalandtwo-wiresystem,synchronousserialbustosolvethequestionofcommunicationsin.allserialdevice.Itisaverypracticalbusforthechipsystemcontrollperipherals.

ThispapermainlyintroducehowtorealizeI2CbusfunctiononembeddedsystemswhichbasedonfpgaofxilinxforthedevelopmentoftheuserIP.Thispaperintroducesthei2cbusagreement,PLBbusandipif’scharacteristics.Simultaneously,thisarticlealsointroducehowtobuildasystem’shardwareplatformwhichbasedonfpgaofxilinx,andhowtocreatuserIPcoreanduseit

Keywords:

FPGA;IPcore;embeddedsystems;i2c;xilinx

 

目录

第一章绪论6

1.1FPGA技术的发展6

1.2IIC总线的应用6

1.3研究的内容7

第二章I2C总线的介绍及控制核设计8

2.1I2C总线的概述及其特征8

2.2I2C总线的工作原理8

2.3I2C总线的传输方式11

2.4I2C控制核设计12

第三章PLB-IPIF的概述18

3.1PLB总线概述18

3.2IP接口概述18

3.3PLB-IPIF模块的总体特征20

3.4IPIC模块的介绍21

第四章创建用户ip功能的实现23

4.1创建硬件系统23

4.2创建用户ip26

4.3用户ip添加到系统中及其验证34

第五章结束语36

参考文献37

致谢38

 

第一章绪论

1.1FPGA技术的发展

随着科学技术的快速发展,我们已经进入了数字化和信息化的时代。

各种数字产品的广泛使用,其产品的性能和复杂度不断提高,更新周期逐渐缩小。

系统朝着高速度、低功耗、低电压和网络化、小型化的方向发展。

电路设计的要求也越来越高,传统单一功能的集成电路很难满足发展的需求。

可编程逻辑器件可以方便的通过对逻辑结构的修改和配置,以完成对系统和设备的升级。

半导体技术的不断发展,使基于FPGA的片上可编程系统技术也有了快速的发展。

FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上更进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的。

FPGA既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点[1]。

FPGA器件不仅仅是逻辑门、布线资源和I/O可编程,在FPGA中还添加了许多的硬核,如时钟管理和存储器等,直至增加了嵌入式处理器硬核和软核等,在一些关键领域发展可编程技术。

FPGA实现了在单片器件上同时提供可编程逻辑、高性能处理器的系统级芯片。

FPGA解决了电子系统小型化、低功耗、高性能等问题,其开发的周期也比较短、投入少,其芯片的价格也在不断下降。

在嵌入式系统设计领域,以FPGA为核心的可编程逻辑器件已经占据着越来越显要的地位。

FPGA技术结合了微电子技术、电路技术、EDA技术[2]。

基于FPGA系统设计,能够使最终系统趋于小型化,降低系统功耗和成本,提高系统可靠性。

正因如此,FPGA被广泛应用于计算机、无线通信、多媒体处理、消费电子和汽车工业、国防和航天工业等领域。

1.2IIC总线的应用

IIC总线是由荷兰PHILIPS公司于80年代研发的一种串行总线,它具有简单、双向、二进制以及同步的特点。

IIC总线有两条信号线,分别为数据线SDA和时钟线SCL,并且皆是双向传输的。

IIC总线是一种多向控制的总线,即支持多个芯片同时连接到同一总线结构中,并且每个芯片都可以作为数据传输的控制方。

通过这种方式可以大大简化了信号传输总线。

IIC总线支持任何一种IC制造工艺,PHILIPS以及其他厂商也提供了各种各样的IIC兼容芯片。

IIC总线被先后用于音频、视频集成电路以及中央控制中心。

IIC总线广泛应适用于消费电子、通讯电子以及工业电子等领域的低速器件。

目前,IIC总线已经被广泛使用,能够很好的实现系统芯片与外围设备之间进行信息的交互。

IIC总线在FPGA上的实现,基于系统的小型化以及提高硬件系统集成化的目的,充分利用了FPGA的逻辑资源。

1.3研究的内容

本文的研究内容如下:

(1)研究了FPGA技术的发展以及在系统设计中的独特优势,FPGA解决了电子系统小型化、低功耗、高性能以及缩短研发周期等问题,所以充分利用FPGA资源,从而不断改进系统的性能。

(2)分析了I2C总线的特征及其工作原理,研究在FPGA上通过使用vhdl语言进行I2C控制核的设计。

(3)介绍了如何在基于XILINXFPGA上创建嵌入式系统硬件平台,以及通过使用IPIF模块进行定制用户IP,将所设计的I2C控制核添加到系统中,进而实现其功能。

 

 

第二章I2C总线的介绍及控制核设计

2.1I2C总线的概述及其特征

I2C总线是一种由PHILIPS公司推出的简单的双向两线串行总线,用作于微控制器及其外围设备的连接。

I2C总线具有自动寻址、高低速设备同步和仲裁等功能,其使用的信号线在各类总线中最少。

I2C总线只要求两根信号线即可进行数据传输,一根是串行数据线(SDA),另一根是串行时钟线(SCL)。

I2C总线允许若干兼容器件(如存储器、A/D和D/A转换器,以及LCD驱动控制器等)共同使用总线。

连接到相同总线上的设备数量只受到总线最大电容(400PF)的限制。

任何连接到总线的器件皆可以通过唯一的地址和简单主\从关系进行软件设定地址。

挂载到总线上的器件都是通过SDA发送的地址信号进行寻址,进而不需要片选线的连接,减少了总线的数量。

主机在发送完启动信号后,并立即发送寻址字节来寻址被控器件以及规定了数据的传输方向。

当主机发送寻址字节时,总线上所有的连接的器件都将此寻址字节的高7位地址与自己的地址相比较,两者相同,那么该器件被主机寻址,并根据读\写位来确定是接收器还是发送器。

I2C总线是一个多主机总线,具有多重主控能力,允许两个或者更多能够控制总线的器件与总线相连。

任何时刻总线只允许一个主器件有效,当两个或更多主机同时初始化数据传输时,可以通过冲突检测和仲裁功能来决定哪个主器件来控制总线,以保证数据不被破坏。

各从器件在总线空闲时启动数据传输。

主机也可以作为主机发送器或主机接收器。

然而,在大多数情况下,系统中只含有一个主器件,而总线上的其他器件作为从设备而存在。

此时的I2C总线工作在主从工作模式下。

I2C总线上串行的8位双向数据传输位速率标准下可达到100kbit/s,快速模式下可达到400kbit/s,在高速模式下可以达到3.4Mbit/s。

片上的滤波器可以滤去总线数据线上的毛刺波,以保证数据的完整性。

SDA和SCL都是双向I/O线,且I2C总线上的所有设备的SDA、SCL引脚都要外接上拉电阻。

2.2I2C总线的工作原理

⑴总线的构成及信号定义

I2C总线是由数据线SDA和时钟线SCL构成的两线性串行总线,可以发送和接收数据。

各种的外围器件都是并接在这条总线上,并且每一个外围器件都有其唯一的地址。

在传送数据过程中I2C总线共有3种类型信号,即起始信号、停止信号和应答信号。

①起始信号(start):

当SCL为高电平(SCL=1)时,SDA由高电平向低电平跳变,即开始传送数据,且出现开始信号以后,总线被认为"忙"。

在数据传送开始以后,SCL为高电平的时候,SDA的数据必须保持稳定,只有当SCL为低电平的时候才允许SDA上的数据改变。

②停止信号(stop):

当SCL为高电平(SCL=1)时,SDA由低电平向高电平跳变,结束数据传输。

停止信号过后,总线被认为"空闲"。

当总线处于空闲状态时,SCL和SDA都保持高电平。

③应答信号(ack):

接收数据的器件在接收完一个数据字节后,向主器件发出特定的低电平脉冲,表示已经接收到数据,主机可进行下一字节的发送。

如果从设备由于一些原因无法继续进行数据的接收,则可向SDA线上输出一个非应答信号,使SDA保持高电平,主器件即可发送一个停止信号结束SDA线上的数据传输。

⑵I2C总线信号时序

I2C总线是主机、从机双向进行通信的。

其总线由主控制器控制,并产生串行时钟信号,控制总线的传输方向,被传信息的起始和终止信号都是由主控制器发送的。

只有当SCL线上为高电平(SCL=1)时,SDA线上的数据信号才会有效,而SCL为低电平(SCL=0)时,SDA线上的数据信号无效。

因此SDA线上的数据状态的改变仅在SCL为低电平时有效。

当SCL为高电平的期间,SDA线出现下降沿为启动信号、上升沿为停止信号。

启动和停止信号都由主机产生。

如图2-1所示。

 

图2-1I2C总线信号时序

⑶I2C总线的数据传送

I2C总线上每传输一位数据都有一个时钟脉冲与之相对应。

值得注意的是,这个时钟脉冲不像一般的时钟具有周期性,其时间间隔可以不同。

I2C总线上传输数据和地址字节都是8位的,并其高位在前,低位在后。

总线以起始信号为启动信号,然后传输的是地址和数据字节。

其中数据字节是没有限制的,每个字节后都必须有一个应答位,全部数据传输完后,以停止信号结尾。

其数据传送时序如图2-2所示。

图2-2I2C总线数据传送时序

当接收器在接收完一个数据或地址字节后,由于某些原因无法立即接收下一个字节时,接收器便可向SCL线输出低电平使SCL=0,进而SDA线进入等待状态,直到接收器准备好再次接收数据时,释放SCL,从而SDA线上数据继续传输。

接收方接收完数据后返回一个应答信号之前,主控发送器必须预先释放对SDA线的控制,使其保持高电平。

应答信号为低电平。

若接收器无法继续接收数据时,可SDA线输出一个非应答信号(高电平),进而SDA线保持高电平,主控器便可发送一个停止信号来终止SDA线上的数据传输。

⑷寻址字节

主机产生起始条件后,第一个发送的字节为寻址字节。

该字节的高7位为从机地址,最低位为读写位,决定传输方向。

其中最低位为0即表示主机写信息到从机,1表示主机读从机中的信息。

当发送一个地址后,该系统中的所有器件都将头7位与它自己地址进行比较,若相同,则器件会应答主机寻址,而R/W位决定着器件是从机接收器还是从机发送器。

寻址字节的高四位为器件类型识别符(不同的芯片类型有不同的定义),接着三位为片选,最后一位为读写位。

由于三位片选,在同一个总线上可以连接8个相同器件[3]。

如图2-3所示。

图2-3寻址字节配置

(5)写过程

主器件产生起始信号后,发送一个寻址字节,当收到应答信号后,进行数据传输,且主机产生停止信号后,数据传输停止。

整个写过程为主机发送,从机接收。

数据的高位先发,再发低位,且应答信号由从器件发送。

其过程如下表2-1所示。

Start

Slaveaddress(W)

Ack

Data

Ack

Stop

表2-1写过程

(6)读过程

主机从从机中读出数据,在传输过程中,寻址地址由主机发送,从机接收。

而其余的字节皆由从机发送主机接收。

主机接收完数据后,应发送非应答位,进而向从机表明读操作完成。

其过程如下表2-2所示。

Start

Slaveaddress(R)

Ack

Data

非Ack

Stop

表2-2读过程

2.3I2C总线的传输方式

当I2C总线开始数据传送时,启动数据发送以及产生时钟信号的器件为主器件,而被寻址的器件则称为从器件。

向总线上发送数据的器件即为发送器,而从总线上接收数据的器件即为接收器。

在信息传输的过程中,各器件可以是主器件(或从器件),也可以是发送器(或接收器),具体根据它们所要实现的功能而决定。

I2C总线的传送方式为主、从式,所以并接在系统中的器件来说可能的工作方式有以下四种:

主发送方式,从发送方式,主接收方式,从接收方式。

以下介绍主发送从接收以及从发送主接收方式。

(1)主发送从接收:

主器件在发出开始信号以后,接着发送一个寻址字节,在得到从器件的应答信号后,主器件接着发送一个选择从器件片内地址字节,同样在收到从器件的应答信号后开始发送数据。

其中,寻址字节的前七位为从器件地址,数据的传输方向也由其最低位决定(高位表示读从器件,低位表示写从器件)。

信息传输中,主器件发送的从器件片内地址字节,表示从该地址开始读写数据。

发送的数据可以是单字节,也可以是一组数据,由主器件来决定。

在应答时钟周期高电平时,主机释放SDA线,开始由从器件控制。

而从器件在此时需拉低SDA线,使其保持为稳定的低电平,这样并生成了有效地应答信号。

(2)从发送主接收:

在产生开始信号以后,同样主器件向从器件发送寻址字节。

总线上的从器件将自己的地址与该寻址字节的相比较,若地址相同,并且方向位为高电平(R/W=1),则说明主器件从该器件读取数据。

该从器件并先发送一个应答信号(Ack=0)返回主器件,接着从器件开始向主器件发送数据。

从器件在发送数据前接收到主器件发送的一个片内地址选择信号,则表示主器件从这个地址开始读取数据,若没收到片内地址信号,则从器件从上次发送数据的地址开始发送数据。

在发送数据时,主器件在每接收到一个字节数据后都要返回一个应答信号(ACK)当主器件返回的应答信号ACK=1时,停止发送数据,而ACK=0时,表示从机继续发送。

从器件开始发送地址以及字节数皆由主器件控制。

2.4I2C控制核设计

(1)视频编/解码芯片的配置

TVP5150PBS以及SAA7121H芯片的配置均是通过标准的I2C总线完成的。

它们均只能做从设备,不能做主设备。

设计通过建立一个基于FPGA的嵌入式系统来对以上两块芯片进行配置。

它们支持100Kb/s或400Kb/s的传输速度,而且支持两种地址:

从设备地址(Slaveaddress,8bit),分为读地址和写地址,高7位为芯片地址,用于选中芯片,最低位为读/写控制位(R/W),决定是进行读操作或写操作;内部寄存器单元地址(subaddress,8bit),用于指定对芯片内部寄存器单元进行操作。

①TVP5150PBS配置的写

Fpga产生一个起始条件;fpga发出一个TVP5150的地址,并注明写操作,等待TVP5150的响应;接收到TVP5150的应答后,FPGA发出要配置寄存器地址,等待TVP5150应答;接收到TVP5150的应答后,发送要配置的数据,等待TVP5150响应;接到响应后,发送停止位,结束一次配置[4]。

具体如下表2-3所示。

Start

Slaveaddress

ACK

Subaddress

Ack

Data

Ack

Stop

表2-3TVP5150PBS配置的写过程

②SAA7121H的配置

SAA7121H支持寄存器的地址自动加一的功能。

除了可读的状态寄存器外,其他寄存器只写,其读写数据格式如下图所示

 

表2-4SAA7121H的配置数据格式

(2)设计总体概括

在基于XILINXFPGA的嵌入式系统中进行功能的实现,而控制核的接口与PLB-IPIF的接口通过相关协议而连接,进而将IIC控制核添加到系统中,实现其功能。

I2C总线控制器的主要作用是提供微控制器和I2C总线间的接口,为两者之间的通信提供物理层协议转换。

I2C控制核的设计使用自顶而下的方法,分为三个模块:

I2C_top模块、I2C_cmd模块、I2C_core模块。

设计总框图如图2-4所示。

图2-4设计总体框图

I2C_top模块是顶层管理模块,主要任务是接收FPGA发来的数据、命令以及控制信号,并且负责传输由从设备传输到主器件的数据,并且提供当前I2C控制核的工作状态,实现I2C控制核与FPGA的中断通信机制,以及将FPGA发出的命令字信号送到下一模块中。

I2C_top模块也就是起到与处理器信息交互,并且将处理器的一些命令传送到下一模块。

I2C_cmd模块将实现字节命令控制,以及数据进行移位实现串并转换,而I2C_core实现位命令控制以时钟信号的产生。

I2C控制核包含两个外围接口,一个是与在FPGA中建立嵌入式系统的PLB总线接口,进行与处理器间数据的交换,二是与视频编/解码芯片的I2C两线接口SCL,SDA。

I2C控制核为总线的主设备,而视频编/解码芯片为总线的从设备。

(3)顶层模块内部寄存器设定

为了使FPGA中处理器对I2C核的软件方式的控制,在I2c_top模块设定了以寄存器。

FPGA通过配置这些寄存器来达成对I2C控制核的控制。

控制寄存器ctr,读写,实现对控制核使能位控制以及中断位使能。

当核使能位被设置时,控制核才响应新的命令,当系统中没有进行传输,也就是在收到停止命令或者命令寄存器中停止位被设定时,清除核使能位。

当一次传输结束时,IIC总线将被挂起。

时钟预分频寄存器prer,读写,实现对输入时钟的分频,得到总线时序状态转移的时钟使能信号。

只有核使能位被清除时,才允许改变预分频寄存器的值。

发送寄存器txr,只写,存储发送给从设备的数据。

接收寄存器rxr,只读,寄存由从设备中读取的数据;

命令寄存器cr,只写,主要是对启动、停止、读、写、确认等命令的控制以及主设备确认和中断响应位控制;

状态寄存器sr,只读,从设备确认位以及I2C_core是否工作在忙等状态。

(4)总线命令及时序划分

I2C控制核的设计关键在于掌握总线命令以及时序状态的划分,再此设计中使用了两个状态机,来明确总线命令以及时序状态,即命令状态机和时序状态机[5]。

命令状态机管理总线的命令状态,负责I2C总线上具体的读、写操作的命令状态的转移,将命令转换为序列码,传送到下一模块中,而时序状态机主要是为了实现I2C总线在开始、停止、读/写、确认等命令的具体的时序。

通过使用命令、时序状态机来共同实现总线的命令与时序。

命令状态机模块主要将顶层模块发送来的start、write、read、stop四个命令信号转化序列码,然后再发送到I2C_core模块。

I2C_cmd模块主要由字节命令控制器和数据移位寄存器,同时要求实现从FPGA发出的数据和从从设备接收到数据进行串并转换[6]。

I2C总线上的信号可以划分为空闲(Idle)、启动(Start)、读(Read)、写(Write)、确认(Ack)和停止(Stop)六种工作状态。

FPGA需要执行何种命令通过配置命令寄存器来实现。

在空闲(Idle)时,SCL和SDA保持高电平,此时从设备则不断检测Start命令的出现。

I2C控制核(即I2C总线的主设备)在接收到FPGA发送来的启动命令后,主设备并进入Start状态。

主设备进入开始状态后,根据FPGA所要实现读或写命令,可以进入读或写状态。

总线处于Idle时,当命令寄存器读、写、开始命令位皆为1,则转入Start状态,仅读/写位为1,则转入Read/Write状态,否则保持IDLE状态。

总线读、写以字节为单位,内部设定一个计数器。

当总线处于读/写状态时,计数器记到8时,跳转到ACK状态,否则继续原操作。

进入ACK,也就是说明此时FPGA的一个读/写命令已经完成,进而发送中断申请到FPGA。

在中断服务程序中,FPGA首先查询状态寄存器后,接着发出下一个命令。

此时控制核将进入Idle状态,或者是Stop状态。

具体状态转换如图2-5所示。

图2-5I2C总线命令状态转移图

I2C_core模块主要负责与视频编码器、解码器的I2C接口。

其实现I2C总线信号SCL和SDA的启动、停止、读、写、确认等具体操作的时序关系,通过时序状态机来实现其功能。

即通过一个比特命令控制器来实现状态转换,同时模块还添加一个时钟发生器,来生成总线时序子状态转移的时钟使能信号。

I2C通讯中,总线上包含两种命令(Start/Restart,Stop)和两种操作(Write,Read)。

Start命令:

在SCL为高电平时,SDA由高电平向低电平跳变,即产生开始条件。

Stop命令:

在SCL为高电平时,SDA由低电平向高电平跳变,产生停止条件。

Write操作:

SDA上数据的变化,只能在SCL为低电平时,在SCL为高电平时应保持不变。

Read操作:

只能在SCL为高电平时,对SDA进行数据采集。

读操作和写操作时,数据在高电平时才有效。

每个命令状态在时序上可以划分为5个子状态(a,b,c、d、Idle)。

SCL时钟线在Start命令的a状态时,保持原有电平不变,而在b状态时跳变为高电平,这样即可以实现Restart命令。

在时钟生成器模块,系统时

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1