您的位置 首页 发布

根据FPGA的I2C SLAVE形式总线的设计方案

由于在嵌入式系统开发中越来越多的应用到FPGA,而一些嵌入式CPU,比如STM32为了降低成本,减小封装尺寸,没有外接专门的CPU读写总线,而只提供了一些如SPI和I2C的接口。而且在应用中经常有数据

由于在嵌入式体系开发中越来越多的运用到FPGA,而一些嵌入式CPU,比方STM32 为了降低成本,减小封装尺度,没有外接专门的CPU 读写总线,而只提供了一些如SPI 和I2C 的接口。并且在运用中经常有数据要装备到FPGA 中,如FPGA 中的运用装备寄存器,和装备表项等,都需求CPU 装备。这些数据的数据量不大,速度也不要求很高,很合适用I2C 总线来装备。

I2C 总线是Philips 公司规划的一种操控和装备内部IC 双向两线的串行总线。首要特色是接口信号线较少,可是其数据的传送速率不是很高,其高速形式下为3.4Mb/s.运用于装备FPGA 比较合适。在一般的运用中嵌入式CPU 作为MASTER 形式的主器材,FPGA 作为SLAVE 形式的从器材。经过运用I2C 总线,减少了CPU 和FPGA 的连线,并且嵌入式CPU 一般有内含I2C总线操控器,使得CPU 和FPGA 间的通讯硬件电路简化。

1 I2C SLAVE 形式全体结构的剖析规划

I2C 总线要求两条信号线,一条串行数据线 SDA,一条串行时钟线 SCL.经过串行方法传送数据。它是一个多主器材的总线,假如两个或更多主器材一起传输数据,能够抵触检测和裁定。为简化规划和满意运用要求,该规划完结一个规范I2C总线的子集。完结1 字节的单次读写和接连读写功用。所以这就要求运用中的I2C 总线上只能有一个主器材,而FPGA 逻辑则只能当成从器材。I2C 总线的两条信号线都是开漏的,有必要外接上拉电阻,以确保总线空闲时,总线都处于高电平。I2C的读写时序图如图1.

从图1 中能够看出,总线的开端条件为在SCL 为高电平时,SDA 拉低发生一个下降沿。而总线的中止条件为在SCL 为高电平时,SDA 开释由上拉电阻发生一个上升沿。在快速形式下,SCL 时钟频率最大值为400KHz,SCL 时钟的低电平周期最小为1.3μs,SCL 时钟的高电平周期最小为0.6μs.在输入端,输入滤波器有必要按捺的毛刺脉宽最大值为50ns.由于SCL是由主器材CPU 的内置I2C 模块发生的,所以SCL 的时序必定符合要求。而FPGA 要采样SCL 和SDA 信号,那么FPGA 的采样时钟频率至少要为SCL 频率的2 倍以上。再加上按捺的毛刺脉宽最大值为50ns.当FPGA 的体系时钟为100MHz 时,端口以100MHz 的频率采样信号,远远大于快速形式下SCl 的400KHz,按捺的毛刺也将在5 个时钟周期内处理。并且FPGA内部逻辑一般都作业在100MHz 以上,所以I2C 模块的体系时钟能够直接运用FPGA 的体系时钟,能够省去时钟转化模块,简化处理。当I2C 总线读FPGA 时,总线主器材在发送完榜首个字节,FPGA 回复ACK 后,紧接着就要FPGA 输出相应的数据,所以在FPGA 逻辑宣布ACK 的一起就要开端,FPGA 的内部寻址和读取相应的数据,在SCL 时钟频率最大值为400KHz 时,FPGA 的体系时钟为100MHz,那么FPGA 的内部逻辑有约250个时钟周期的寻址时刻,这个时刻是彻底够用的。I2C SLAVEmode 全体结构图如图2.

接口信号的阐明如表1.

2 I2C SLAVE 形式操控器的规划与完结

2.1 I2C SLAVE 操控器的接口完结

I2C SLAVE 操控器的接口部分首要包含,信号异步时钟域的转化。输入滤波器,用来按捺毛刺。及SDA 线的双向转化。由于SDA 的PIN 是双向的,所以一定要分配在FPGA 的IO BLOCK块中,只要IO BLOCK 中有双向的硬件结构。由于SDA 和SCL信号的相位相对于FPGA 逻辑的体系时钟的相位联系是不确定的。所以一定要进行异步时钟域的转化,以避免输入的寄存器呈现亚稳态,它会使逻辑处在某个不确定的状况。此外FPGA的体系时钟频率比较高,对输入的毛刺比较灵敏,故输入端要参加滤波器。接口部分的框图如图3.

异步时钟域的转化,选用两级寄存器的结构。输入滤波器选用5 级寄存器的结构。当采样到接连5 个高电平时,输出才为高电平,否则为低电平。接口部分的寄存器全都用FPGA 的体系时钟驱动。

2.2 I2C SLAVE 操控逻辑的完结

I2C SLAVE 操控逻辑状况机是整个模块的中心,一切I2C 总线相应的操控都由其完结。状况机有四个状况:IDLE,START,SAMPLE 和STOP 组成。Verilog 的界说如下:

`define IDLE 2’b00

`define START 2’b01

`define STOP 2’b10

`define SAMPLE 2’b11

下面介绍各个状况的功用。当I2C 总线无任何操作时操控器在IDLE 状况下,并坚持。当接口逻辑判别到START 条件时,操控器跳转到START 状况下,并做好承受榜首个字节的预备,包含初始化bit计数器。接着开端承受榜首个字节包含7bit的地址和1bit 的读写状况位。当收集完榜首个字节后,操控器跳到SAMPLE 状况下,开端执行数据字节的承受或发送。是承受或发送的状况由前一字节的最终1bit 的读写状况位决议。

当读写状况位为高时,表明I2C 总线的读操作,FPGA 逻辑发送数据。读写状况位为低时,表明I2C 总线的写读操作,FPGA逻辑承受数据。接着FPGA 逻辑宣布一个ACK 信号后,表明能够进行读写操作。那么就进入到SAMPLE 状况下,正常读或写一个字节(也能够接连的读写多个字节,对此没有约束)。在完结8bit 数据读写后,I2C 的主器材会宣布一个STOP 条件操作。fpga 逻辑收到后,就跳转到STOP 状况,并在几个时钟周期后,主动跳转到IDLE 状况下。然后完结一个完好的I2C 总线的读或写操作。

当然也包含一些反常处理,以避免状况机处在一个不确定的状况下。在SAMPLE 状况下假如遇到意外的START 条件时,即前次的总线操作没有完结就开端了下次的操作,则操控状况时机跳转到START 状况下,而开端承受这次新的总线操作,而前次的操作为无效。由如在SAMPLE 状况下,可是又收到一个START 条件。还有如在STOP 状况收到一个START 条件,处理也和上面相同。下图4 介绍了I2C SLAVE 操控逻辑状况机的状况跳转图。

如上图所示,在 SAMPLE 状况下,能够接连的读写数据,而地址是在读写完一个字节后由FPGA 逻辑主动加1 的。这样做使得I2C 总线的一次操作就能够接连对多个字节读或写。进步的总线的运用功率。

以下是在modelsim6.0 下进行的行为级仿真的时序图。

由自行编制的I2C 总线主器材BFM 驱动进行测验。图5 I2CSLAVE 操控器写时序图。图6 I2C SLAVE 操控器读时序图。

3 定论

本方案经过介绍SLAVE 形式的特色,给出规划的原理框图和modelsim 下的行为仿真时序图。在Altera 的Cyclone II 系列顶用Quartus II 12.0生成的模块时钟频率可到达180MHz,占用的资源Totalcombinational functions 为83 个,Total registers 为41 个。而在实践运用中达100MHz 左右。证明了本方案操作简洁,作用不错。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/241219.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部