0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C串行扩展通信的特点及实现IP核的设计

牵手一起梦 来源:单片机与嵌入式系统应用 作者:李明峰,李沁遥 2020-04-07 09:54 次阅读

由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点,详细给出设计过程和结果。

1、IP核简介

IP核是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器SDRAM控制器、PCI接口等等设计成可修改参数的模块,让其它用户可以直接调用这些模块,以避免重复劳动。随着CPLD/FPGA的规模越来越大,设计越来越复杂,使用IP核是一个发展趋势。许多公司推荐使用现成的或经过测试的宏功能模块、IP核,用来增强已有的HDL的设计方法。当在进行复杂系统设计的时侯,这些宏功能模块、IP核无疑将大大地减少设计风险及缩短开发周期。使用这些宏功能模块、IP核,就会将更多的时间和精力放在改善及提高系统级的产品方面,而不需要重新开发现成的宏功能模块、IP核。我国IP核库的建设已相当迫切,它是集成电路产业发展的一个重要目标。

2、I2C串行通信特点简介

Philips公司推出的I2C软、硬件协议十分巧妙,在单主方式的I2C总线系统中,总线上只有一个单片机,其余都是带I2C总线的外围器件。由于总线上只有一个单片机成为主节点,单片系统永远占据了总线,不会出现竞争,主节点不必有自己的节点地址。只要每个外围器件有自己的器件地址,两根I/O口线SCL(时钟线)和SDA(数据线)就可以虚拟I2C总线接口。I2C总线上的数据传送如图 1所示。总线上传送的每一帧数据均为1个字节。启动总线后,要求每传送1个字节后,对方回应一个应答位。在发送时,首先发送最高位。每次传送开始有起始信号,结束时有停止信号。在总线传送完1个字节后,可以通过对时钟线的控制,使传送暂停,这时可在应答信号后使SCL变低电平,控制总线暂停。 当主节点要求总线暂停时亦可采用同样的方法。图1是CPLD向外围I2C器件发送01010011 和01001001这两个数据的情况。

I2C串行扩展通信的特点及实现IP核的设计

3、 在MaxplusII环境下I2C串行扩展IP核的建立

MaxplusII是美国Altera公司用于CPLD的EDA软件,内部有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至ROM、RAM等。这些宏单元内具体的参数都可以由用户来自行设定,这就是上面提到的IP核形式。它避免了重复劳动,提高了效率。以下将要设计的是下位机的IP核。

MaxplusII的AHDL(Altera Hard ware Description Language)是Altera公司开发的完全集成于MaxplusII中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用AHDL,直接生成IP核。

设计的最终目标是生成如图 2所示的Symbol。通过输入数据来达到控制SDA和SCL的目的,将信号按要求的时序传送给I2C器件。

I2C串行扩展通信的特点及实现IP核的设计

设计思路是利用状态机实现时序。主要包括输入数据锁存、起始、数据传输、停止等状态机。通过状态机,在每一状态下确定下一状态SDA和SCL是高电平或者低电平,通过这种方式实现了I2C所需要的每一种时序。由于使用的是AHDL,这种状态机实现起来非常方便,程序简洁明了。由于篇幅限制,仅介绍数据传输的状态机。状态图如图3所示。

I2C串行扩展通信的特点及实现IP核的设计

以下程序中,Cmd_reg2为发送允许暂存位;Sh_reg[]为数据锁存,通过左移,最高位数据Sh_reg7为当前将发送数据,存入SDA_tmp 。通过图 3对照程序,可以看到发送一个利用状态机数据位的详细过程。程序清单如下:

IF Cmd_reg2 THEN --若“发送允许”,则将Sh_reg7作为当前发送位 SDA_tmp = Sh_reg7; ELSE SDA_tmp = VCC; END IF; St.clk = SysClk; St.ena = BaudGen; CASE St IS --控制传输8位数据的状态机 WHEN t0 =》 IF Cmd_reg2 OR Cmd_reg3 THEN SDA = SDA_tmp; --开始传送数据 SCL = GND; St = t1; ELSE St = t0; END IF; WHEN t1 =》 SCL = VCC; SDA = SDA_tmp; St = t1a; WHEN t1a =》 SCL = VCC; SDA = SDA_tmp; St = t2; WHEN t2 =》 Sh_reg[7..1] = Sh_reg[6..0]; --数据左移,取高位 Sh_reg[0] = GND; Sh_reg[].ena = EXU; SCL = GND; SDA = SDA_tmp; IF Bit[] == 7 THEN --若8位传完,则发应答位;否则继续 St = t3; ELSE St = t0; END IF; WHEN t3 =》 --发应答位 SDA =GND; St = t4; WHEN t4 =》 SDA = GND; SCL = VCC; St = t4a; WHEN t4a =》 SDA = GND; SCL = VCC; St = t5; WHEN t5 =》 SCL = GND; St = t6; WHEN t6 =》 SDA = GND; FINISHED = VCC; St = t0; END CASE; Bit[] = Bit[] + 1; ――--传输完一位,已传输位数加一

图 4为仿真结果。起始信号给出以后,传输2个8位数据:每个数据后跟一个应答位,在输送完第一个数据要求的情况下,暂停一段时间,再输送第二个数据;2个数据输完以后,主机发出停止输送要求,即给出停止信号。这些信号,在SDA和SCL上完全符合I2C的时序要求。要使总线传输速率达到改进后的规范,即400 kb/s,因为根据以上叙述,每发送1位数据需要4个时钟周期,所以所给的时钟为1600 kHz。图4中Execute为执行信号,即它为高电平时,输入数据DIN[7..0]有效;EXU为发送使能信号,只有当它为高电平时,方可输送串行数据到外围器件;Start为开始控制信号,用于发生起始信号;STOP用于告知总线数据传输结束,发生停止信号。

I2C串行扩展通信的特点及实现IP核的设计

仿真以后,通过编程电缆将生成的pof文件用ISP(在系统编程)方式下载到FPGA板EPM7128SLC84-6,I/O口SDA和SCL挂上拉电阻,外接两片I2C器件SAA1064(LED显示I2C串入并出芯片)进行测试,结果CPLD利用该I2C的IP核,工作正常,可以按照要求显示。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpld
    +关注

    关注

    32

    文章

    1247

    浏览量

    169201
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1481

    浏览量

    123278
  • IP核
    +关注

    关注

    4

    文章

    326

    浏览量

    49428
收藏 人收藏

    评论

    相关推荐

    I2C串行通信特点简介

    I2C串行通信特点简介Philips公司推出的I2C软、硬件协议十分巧妙,在单主方式的I2C总线
    发表于 07-15 14:48

    针对I2C的主方式串行扩展通信的接口IP设计

    ,我国也迫切需要发展自己的IP。本文针对I2C的主方式串行扩展通信
    发表于 04-12 07:00

    视频解码技术中I2C总线控制实现

    本文介绍了I2C总线的通讯特点,简要说明了I2C总线的协议规范和特点,并针对Philip公司视频解码系列芯片SAA7111A/SAA7121,从模块控制的角度说明了用FPGA
    发表于 05-27 11:55 17次下载

    PCA9698 I2C扩展芯片

    PCA9698 是一款40 位I2C 输入/输出扩展器,能够实现I2C/SMBus 应用中40 位GPIO 的扩展
    发表于 11-10 14:24 88次下载

    I2C器件接口IP的CPLD设计

    I2C器件接口IP的CPLD设计 根据单片机I2C串行扩展
    发表于 03-28 16:21 1155次阅读
    <b class='flag-5'>I2C</b>器件接口<b class='flag-5'>IP</b><b class='flag-5'>核</b>的CPLD设计

    I2C器件接口IP的CPLD设计

    摘 要: 根据单片机I2C串行扩展特点,在EDA软件MaxplusII的环境下,利用AHDL语言,建立IP
    发表于 06-20 13:36 915次阅读
    <b class='flag-5'>I2C</b>器件接口<b class='flag-5'>IP</b><b class='flag-5'>核</b>的CPLD设计

    基于CPLD的I2C总线接口设计

    在电路设计中,I2C总线是比较常用的两线式串行通信方式,大多数的CPU都擅长于并口操作,不具备直接操作I2C总线接口的能力。为了使不具备I2C
    发表于 02-12 16:11 95次下载
    基于CPLD的<b class='flag-5'>I2C</b>总线接口设计

    I2C串行总线的组成及工作原理的详细资料说明

    常用的串行扩展总线有:I2C总线,SPI总线,单总线,Microwire/PLUS。 I2C串行总线概述
    发表于 07-31 17:35 6次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>串行</b>总线的组成及工作原理的详细资料说明

    Core I2C的原理及采用FPGA技术实现I2C IP的设计

    I2C(Inter Integrated Circuit)双向二线制串行总线,是由飞利浦公司制定的。I2C总线是一个多主机的总线,使用串行数据线(SDA)和
    发表于 07-20 18:08 2754次阅读
    Core <b class='flag-5'>I2C</b>的原理及采用FPGA技术<b class='flag-5'>实现</b><b class='flag-5'>I2C</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的设计

    i2c通信的详细讲解

    I2C属于串行通信,所有的数据以位为单位在SDA上串行传输
    发表于 11-24 14:09 1.9w次阅读
    <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的详细讲解

    I2C通信的详细讲解

    I2C属于串行通信,所有的数据以位为单位在SDA线上串行传输。
    的头像 发表于 06-25 17:19 13.6w次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>的详细讲解

    MCU实现I2C通信

    调试过程吧。  需要做的工作小结如下:1、MCU的I2C采用IO口模拟实现2、MCU作为I2C主设备与定时芯片RX-8025SA建立通信
    发表于 11-01 16:24 5次下载
    MCU<b class='flag-5'>实现</b><b class='flag-5'>I2C</b><b class='flag-5'>通信</b>

    I2C串行总线协议是什么?I2C总线有哪些优点?

    1982年发明并推广,用于连接智能传感器和存储器器件,以及控制和监控外设。该协议是一种主从式通信协议,允许多个从设备连接到同一总线上,并在总线上进行数据交换。I2C总线是一种低速度、低功耗的串行总线,通过
    的头像 发表于 09-12 11:18 1559次阅读

    什么是串口转I2C?有什么特点

    什么是串口转I2C?有什么特点?  串口转I2C是一种设备,用于将串行通信接口(通常称为串口)转换为I2
    的头像 发表于 09-14 17:52 1258次阅读

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发的一种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C协议因其高效
    的头像 发表于 07-25 18:06 1299次阅读