科技信息
计算机与网络
I2C总线从器件接口的FPGA实现
广东海洋大学信息学院 王 峰 邓 锐
[摘 要]很多设计中都是为FPGA设置一个基于I2C总线的主控制器接口,而将FPGA作为I2C总线上的从器件则
很少,但事实上,低速主控单片机和受控高速FPGA从处理器组成的系统应用场景很广。因此本文分析了I2C总线的
操作过程,得到了状态机,在此基础上用VHDL语言实现了遵从I2C总线协议的从器件接口。实践表明,所设计的从器件接口工作良好,具有一定的实用价值。[关键词]I2C FPGA 接口 从器件 状态机
0引言
I2C总线是一种双线串行总线,它具有连线少、结构简单
然后,从机依照读/写指示位向主机发送或从主机接收数据。每一字节传输完后,若是读操作,则主机向从机发送一个回应,若是写操作,则由从机向主机发送回应。
最后,传送完毕,主机以一个停止信号,即在SCL为高电平的时候,SDA线由低电平变为高电平结束整个传输过程。
2FPGA的I2C从器件接口的设计需求
的优点,已经成为一种事实上的国际标准,现在很多公司生产的专用芯片、单片机等都集成了I2C总线接口。FPGA(Field
ProgrammableGateArray,即现场可编程门阵列)是作为专用集
成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路灵活性的不足,又拥有很快处理速度,可用于高速数字信号处理领域。本文在FPGA芯片上设计一个I2C从器件的接口(内含若干字节的数据存储器当作控制寄存器),可以将FPGA作为一个普通的专用信号处理器挂载在I2C总线上,主控制器(低速单片机)通过I2C总线向FPGA内部的I2C存储器写数据来进行相应的控制。
1I2C总线的概念及工作过程
I2C总线只有两条带上拉电阻的连线:串行数据SDA和串
S依据实际需要,基于FPGA的I2C从器件接口应有若干字节的I2C数据存储器(此处设有32字节)作为控制寄存器,其每一位的控制作用由使用者根据需要自行定义。本文设计的
I2C从器件接口的数据传输过程如下图所示:
SlaveAddressR/W
Ack
SubAddressAck
Data
A/A
P
图2
从上可以看到,其过程与上文7位地址格式很相似。区别在于主机发送从机地址和读写位并收到其响应后,马上发送一个要操作的数据存储器地址(SubAddress对于大小为32字节存储器来说,前5位有效)。本文设计的I2C从器件接口将能满足100Kbit/s和400kbit/s的要求。
3FPGA的I2C从器件接口的实现
行时钟SCL线,连接到总线上的器件通过它们传递信息,每个器件都通过一个唯一的地址进行识别。器件在执行数据传输时可以被看作是主机或从机,主机是初始化总线的数据传输并且产生允许传输的时钟信号的器件,此时任何被寻址的器件都被认为是从机。I2C总线允许多主多从的结构,数据传输速率在标准模式下可以达到100kbit/s,在快速模式下可达400kbit/
s,在高速模式下高达3.4Mbit/s。
I2C总线上数据传输有多种格式,一种常用格式(7位寻
从器件I2C接口主要包括如下几个部分(见图3):开始/结束判断进程,主状态机,接收/发送进程,数据存储器。
址)的传输过程见图1。
图3
图1
首先,主机发送一个开始信号,即在SCL为高电平的时候,
SDA线变为低电平,总线上所有从机检测到此开始信号后开始
FPGA不停的侦听SDA和SCL线,一旦检测到开始信号,
就马上在主状态机的控制下进行从器件地址的接收与判断、数据存储器地址的接收、发送和接收数据等一系列操作。
基于VHDL语言描述的I2C接口为:
entityI2cSlaveisport(
RESET_IN:instd_logic;
接收第一个字节,第一个字节包括七位从机地址和一位读/写指示位。
接着,如果某一从机检测出收到的7位从机地址与自己相符则向主机发送一个回应(将SDA信号线拉低)。
—208—
科技信息
I2C_SDA:inoutstd_logic;I2C_SCK:instd_logic;CLK_4M:instd_logic);endI2cSlave;
计算机与网络
其中CLK_4M是取样时钟,用于取样检测SDA,SCL线的跳变,可由外部时钟分频得到,其频率一般大于传输速率的10倍即可保证准确取样。
开始与结束信号检测进程可以用如下方法实现:通过比较前后两个取样时刻的SDA状态,检测出SDA的上升或下降,然后结合SCL的状态,即可检测开始或结束信号。
接收与发送进程实现如下:先检测SCL的上升沿,若是接收,则将SDA的状态取样保持;若是发送,则依照0或1将SDA线拉低或置高。以上过程重复8次,得到一个字节。
主状态机的设计如图4,它包括5个状态:Idle、Heak、Sub2Addr、Receive、Send。
从FPGA读数据),则进入Send状态来发送数据。
最后检测到结束信号,返回Idle状态。
注意,除Idle状态外,每个状态在操作完8位数据后,都要相应的做出(接收数据时)或者检测(发送数据时)响应Ack。
4主控端软件的编写及测试
对于各种单片机而言,I2C总线上的读写函数,如写一个字节voidSendByte(uchardata),读一个字节ucharReadByte()很容易编写。在此,只需依据图2所示数据格式对这两个函数进行适当的包装即可得到对FPGA的I2C从器件接口进程操作的函数。
比如定义FPGA的I2C地址为0xXX#defineFPGA_Slave_addr0xXX
则单片机向FPGA中地址为Sub_addr的存储器写数据的函数为:
voidI2C_Write_FPGA(ucharSub_addr,uchardaa)
{
SendByte(FPGA_Slave_addr&0xFE);SendByte(Sub_addr);SendByte(data);}
图4状态机复位后处于Idle(空闲状态);
当检测到开始信号后,进入Head状态,接收第一个字节(包括7位从地址和读写位);
如果寻址的从器件地址与本I2C接口所定义的地址相符则进入SubAddr状态,开始接收要操作的数据寄存器起始地址,对于本文而言,只取收到地址的前5位;
接着若读写位为0(表示主控制器要向FPGA写数据),则进入Receive状态来接收数据,若读写位为1(表示主控制器要
以上设计先经ModeSim7.0行为仿真,然后编译并下载到Xilinx公司的Spartan-3XC3S1500芯片上,经与S51单片机相连测试,结果正常。5结束语本文在FPGA上设计了一个基于I2C总线协议的从器件接口,可以把它作为一个模块直接集成在设计中,使FPGA具有通过I2C接口进行通信的能力,具有一定的应用价值。参考文献
[1]THEI2C-BUSSPECIFICATION[EB/OL].http://www.semiconductors.philips.com/i2c
[2]刘韬,楼兴华.FPGA数字电子系统设计与开发实例导航[M].北京:人民邮电出版社,2005.6
[3]刘明业.集成电路/计算机硬件描述语言VHDL高等教程[M].北京:清华大学出版社,2003.3
(上接207页)类型被修改也能够还原,同时,它还支持网络功
能,从而使得维护工作量大大减少,维护一个实验室就跟维护一台计算机一样轻松。
下面以“网络还原精灵”为例,在计算机实验室管理和维护中,最怕学生在上机时运行Format、Fdisk等命令,会造成数据的丢失,导致系统崩溃从而给实验室管理带来很大的苦恼,时下流行的“网络还原精灵”软件很好的解决了这个问题,它通过网络上的主控端来控制保护和管理被控端(客户端)的硬盘。网络还原精灵的主控端还具有还原、开机关机、资料转存移除、网络对拷和文件传输等重要功能。在实际应用过程中往往需要安装一些新的软件,这时我们就可以用文件传输来进行安装,并利用转存功能来进行更新。
有些软件也能较好的起到与硬盘保护卡类似的作用,如超级兔子、一键还原精灵等。
四、结束语
在计算机实验室管理的过程中,管理人员都会充分认识到
搞好实验室管理不仅是纯粹的技术问题,还取决于管理人员的责任心和自身素质的不断提高,就比如我们学院我们信息工程系,学院领导和系领导对实验室的管理给予了极大的重视,提供了有利的条件,从而让计算机实验室发挥了最大的效用,保障了我系教学工作的正常开展。
综上所述,计算机实验室管理是一门复杂的科学,作为高等院校的实验室,应该用现代化科学管理的思想为指导,结合自身特点,从实际出发,加强高校实验室管理,促进高校的发展。
参考文献
[1]李艳华.计算机实验室的管理与维护.中国教育技术装备,2005.04
[2]邹修明.高校计算机实验室安全管理探讨.现代电子技术,2002.08
—209—