原创 视频解码技术中I2C总线控制核的实现

2007-11-26 12:34 2964 7 3 分类: MCU/ 嵌入式

摘   要:本文介绍了I2C总线的通讯特点,简要说明了I2C总线的协议规范和特点,并针对Philip公司视频解码系列芯片SAA7111A/SAA7121,从模块控制的角度说明了用FPGA实现I2C总线控制核的思路和主要设计流程。使用Cyclone系列的EP1C6Q240C8,对I2C模块进行分析综合与仿真,并在实际应用中得到满意的结果。
关 键 词:I2C总线    视频解码    FPGA    VHD



0. 引言


I2C总线是双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。由于其使用两线的硬件接口简单,I2C总线的应用越来越广泛,基于单片机的I2C总线控制技术已十分成熟。[3]


而随着EDA技术的发展将控制电路集成到FPGA(可编程逻辑器件)内部,既可以实现设计的小型化、低功耗,又可以充分利用FPGA现场可编程特性灵活调整对芯片的控制,从而降低了产品开发成本,提高了设计的灵活性。[2]在进行FPGA设计时,经常需要和外围提供的I2C接口芯片通信,因此在FPGA中模拟I2C接口已成为FPGA开发必要的步骤。


Philips公司生产的SAA7111A/SAA7121芯片是一种增强型的视频输入处理器,在视频解码的工程设计中广泛应用,它采用I2C总线接口标准对该芯片进行控制。本文用VHDL语言从模块控制的角度在FPGA中实现I2C总线控制核,应用于前端视频信号处理部分,并在实际工程应用中检验了其可行性和有效性。


1. SAA7111A/SAA7121芯片简介


SAA7111A/SAA7121是Philip公司视频解码系列芯片的一种,是一个高集成度的芯片,它内部包含两路模拟处理通道,可以选择视频源并可抗混叠滤波,同时还可以进行模数变换、自动嵌位、自动增益控制、时钟产生、多制式解码等,另外还可对亮度、对比度和饱和度进行控制。在很多视频产品,如电视卡、MPEG-2、MPEG-4中都有应用。SAA7111A的主要作用是把输入的模拟视频信号解码成标准的“VPO”数字信号,相当于一种“A/D”器件。而SAA7121则相反,主要作用是把输入的视频图像数字信号编码成标准的模拟视频信号,相当于一种“D/A”器件。


SAA7111A/SAA7121通过I2C总线接受外部控制器的完全控制。如图1所示为SAA7121芯片的内部模块图。


点击看大图


图1  为SAA7121芯片的内部模块图


SAA7111A/SAA7121几乎兼容全球各种视频标准,在我国应用时必须根据我国的视频标准来配置内部的寄存器,即初始化,否则SAA7111A/SAA7121就不能按要求输出,可以说对SAA7111A/SAA7121进行研发的主要工作就是如何初始化。对SAA7111A/SAA7121初始化需要通过I2C总线进行[6]


2. I2C总线规范


I2C总线是由Philips公司开发的用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送数据,并根据地址识别每个器件。I2C总线能用于替代标准的并行总线,能连接各种集成电路和功能模块。支持I2C的设备有微控制器、ADC、DAC、储存器、LCD控制器、LED驱动器等。I2C总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。[1]


SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。在I2C总线中唯一出现的是被定义为起始S和停止P条件的情况。在SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。当SCL是高电平时,SDA线由低电平向高电平切换表示停止条件[1]


7位的地址格式数据的传输遵循图2所示的格式[4]。在起始条件(S)后,发送了一个从机地址。这个地址共有7位,紧接着的第8位是数据方向位(R/ŵ)—‘0’表示发送(写),‘1’表示请求数据(读)。数据传输一般由主机产生的停止位(P)终止。但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr)和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。


点击看大图


图2  完整的数据传输


3I2C模块的设计


3.1 I2C模块的总体结构


    用FPGA实现I2C模块的总体结构如图3所示。大致可分为3部分:I2C控制核,命令状态控制器,移位寄存器。图中所示的clk为时钟信号,SCL和SDA为I2C总线的两根信号控制线。



20070531095710230.gif


图3  I2C模块的总体结构


    时钟信号和命令信号输入到I2C控制核,变换为I2C总线的信号控制线SCL和SDA。同时,时钟信号和数据被输入到命令状态控制器和移位寄存器,数据经过处理后被输出。在这个数据传输过程中,总线信号控制线的产生和数据的处理过程是同时进行的。值得注意的是:1.每个命令后都有一个应答位,前一个命令没有被应答时,不能产生下一个命令。2.数据输出允许有一个周期的延时。


3.2 各模块的功能和实现方法


3.2.1 I2C控制核


I2C控制核把简单的命令转换为I2C总线的SCL/SDA信号线的启动、停止、读、写、确认等具体操作的时序关系。如图4所示:



20070531095731732.gif


图4 I2C控制核的结构图


把每个命令状态分为5个子状态:


点击看大图


图5 I2C总线的SCL/SDA信号时序


再经过时序控制器的处理,根据这些子状态来确定SCL/SDA的信号。


3.2.2 命令状态控制器


命令状态控制器中分为空闲(IDLE)、启动(START)、读(READ)、写(WRITE)、确认(ACK)和停止(STOP)六种工作状态。根据起始停止条件,在IDLE时,SCL和SDA都为高电平,从设备不断检测START命令的出现。I2C控制核在接收到START命令后,主设备进入START状态,并根据READ和WRITE命令,可以进入READ或WRITE状态。由于主机的读、写操作都是以字节进行的,对应8个周期的I2C总线读/写操作,故设置一个8节拍计数器dcnt : unsigned(2 downto 0),使得READ或WRITE状态能维持8个SCL周期。在完成字节读或写操作之后,都将进入ACK状态。进入ACK,标志一个读/写命令已经完成,因此发送中断申请。这时I2C控制核,或者是转移到IDLE,或者是转移到STOP。各命令状态相互间的转换关系如图6所示:



20070531095838340.gif


图6 命令状态控制器


4. EDA综合与应用


使用Cyclone系列的EP1C6Q240C8,对I2C模块进行分析与综合(Analysis and Synthesis),共86个逻辑单元,36个引脚。图7为仿真波形图。


点击看大图




图7  仿真波形图



 


如图7所示,该I2C控制模块能过很好的实现I2C总线的开始,停止,读,写,响应等功能,仿真结果正确,完全符合I2C总线标准。用于Philip公司视频解码系列芯片SAA7111A/SAA7121中,I2C总线接口模块可完成SAA7111A/SAA7121的初始化工作,使之开始正常的工作。


5. 结束语


    本文从模块控制的角度在FPGA上实现了I2C总线控制模块,根据VHDL语言的可移植性和不依赖器件的特性,可以使该控制模块重复使用于各种系统中,避免了重复开发,加快了产品开发速度。


参考文献:


[1] I2C总线规范,广州周立功单片机发展有限公司,http://www.zlgmcu.com


[2] 潘松,黄继业,EDA技术实用教程,科学出版社,2002


[3] 谭勋琼,I2C 总线技术及与51 系列单片机接口编程,湖南水利水电,2001年第6期


[4] 吴小平,李莉,微计算机信息,2000年第16卷第2期,第11页


[5] Philips. The I2C-Bus Specification. VERSION 2.1, 2000-01


[6] SAA7111A 9-bit video input processor. Philips Semiconductors.1999, Jul 01.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条