基于CPLD/FPGA平台I2C总线IP核的设计

点赞:31233 浏览:144539 近期更新时间:2024-02-04 作者:网友分享原创网站原创

摘 要:本文通过对一个I2C总线IP核的设计,介绍了用VHDL语言设计和实现该IP核的过程.首先简要介绍了I2C总线协议的标准及应用,分析了影响8位MPU的传输速率低的因素,然后提出了基于CPLD/FPGA平台设计“虚拟器件”I2C总线IP核的设想.其次给出系统自顶向下的设计方案.接着对系统的功能进行了详细的总体规划与层次设计,讲解了系统体系结构和系统各个功能模块的电路设计.最后进行了调试,并给出在MAX+Plus II 10.0环境下的仿真波形.

关 键 词 :I2C总线 VHDL IP核 CPLD/FPGA

一、系统设计的背景与意义

在现代通讯类产品、仪器仪表、工业测控系统中,逐渐形成了以一个或多个微处理器组成的智能系统,并且对电路之间主要是实现控制功能,因而I2C总线对应用系统的开发带来很多好处:一方面,二线制的I2C串行总线使得各电路单元之间只需最简单的连接,而且可实现电路系统的模块化、标准化设计;另一方面,标准的I2C总线模块的组合方式大大地缩短了新产品的开发周期,并且I2C总线系统构成具有最大的灵活性和极好的可维护性.

目前,在绝大多数单片机应用系统中仍保持着单主结构(其中包括一些双主系统中,主节点之间不能进行直接通信的情况).在单主系统中,I2C总线只存在着主方式,I2C总线的数据传输状态比较简单,主要是实现单片机(或MCU)对I2C总线简单的读/写操作.因此,利用VHDL硬件语言实现I2C总线接口功能,并通过下载到CPLD/FPGA实现与其他节点的数据传输,使这些器件不受系统单片机必须带有I2C总线接口的限制.这也大大地扩展了I2C总线器件的适用范围,使I2C总线在应用系统设计中有着更为广泛的应用.

二、系统设计方案

目前,许多IC器件广泛采用I2C接口来读/写数据,但是多数的8位微处理器都没有专用的I2C接口,因此一般只有通过GPIO口利用软件编程来实现I2C总线的数据传送.这将大量占用CPU的工作时间,如果利用 CPLD/FPGA来实现I2C总线的控制,则可以使CPU对I2C器件的访问成为简单的读/写操作,其系统框图如图1所示.基于可编程逻辑器件平台上IP核的设计,如图2所示.

图1 系统框图

图2 I2C总线的IP核

CPLD/FPGA的设计流程.基于MAX+PLUS II软件环境的开发,其开发流程是设计输入、综合、适配、时序仿真和功能仿真、编程下载、硬件测试,其中设计输入包括HDL文本输入和原理图输入,并且通过HDL综合器获得门级电路甚至更底层的电路描述网表文件,将网表文件针对具体的目标器件进行逻辑映射操作,适配产生的仿真文件进行时序仿真,在编程下载前对结果进行模拟测试.

三、系统器件的结构设计

该系统主要由输入寄存器、输出寄存器、计数器、控制器、SCL产生器及其他总线组成,如图3所示.

图3 I2C核接口结构

1.count_reg:IP核的工作寄存器

当DR等于0时,微处理器可以将控制字节写入其中,控制字节最高位为读/写,低7位为发送或接受数据的字节数,每完成一个字节的操作后减1,当其为0时,停止工作.

Input_reg:IP核的输入寄存器,将并行输入的字节串行输出.当DR等于0时,即微处理器向器件进行写操作,将要传送的一个字节放入Input_reg,此时控制器发送系统忙信号BUSY等于1,使微处理器处于等待状态;控制信号en_inreg等于1产生后,将并行数据逐位移到SDA上,并配合SCL时序传给I2C器件;当传送完一个字节后,由控制器产生一个

使能信号en等于1给字节计数器,并在系统时钟下做减1操作,再将BUSY等于0,以接受主控器的下一个字节;当第一个字节放入Input_reg后,控制器启动I2C总线,最后一个字节从Input_reg中输出后,控制器将关闭I2C总线.

2.Output_reg:IP核的输出寄存器

微处理器可以在Output_reg中读取数据.首先,将控制字节写入count_reg中,当DR等于1时,可以知道微处理器要进行读数据操作,则启动I2C总线的读操作.控制器首先要使系统忙信号BUSY等于1,然后启动I2C总线,将I2C器件传来的数据,输入output_reg,当使能控制信号en_outreg等于1,在output_reg中,配合系统时钟逐位输出,实现串行信号到并行信号的转换;当一个字节完全输入到output_reg后,将BUSY等于0,使微处理器将数据读出,并使字节计数器减1.

3.Control_reg:IP核的控制器

Control_reg:IP核的控制器,严格控制整个系统的读/写操作过程.其中还包括SCL产生器.它的状态时序如图4所示.

图4 控制器状态流程图

4.数据的通信格式

在主控器对从器件进行读/写操作时,必须遵从严格的数据传输格式.一般地,在主控器发出读或写操作时,启动I2C总线首先传送的是主器件需要访问的从器件的设备地址以及读/写控制信号,信号通过串并转换后首先送最高位,并配合时钟信号逐位输出,当主器件接受到从器件发出响应信号(ACK)后,接着传输下一个字节,直到字节计数器发出停止信号后,关闭I2C总线;该设计从IP核的复用性和一般性考虑,实现如图5所示的传输格式的I2C总线的读/写操作.其中第一个字节DATE1中最低位是读/写控制信号.

图5 数据传输格式

5.I2C核的VHDL实现和仿真


硬件描述语言VHDL(Very-high Speed IC Hard-ware Description Language)是一种用于电路设计的高层次描述语言,具有行为级、寄存器传输级和门级等多层次描述,并具有简单、易读、易修改和与工艺无关等优点.该设计采用MAX+plus Ⅱ 10.0 作为综合工具,生成如图2所示的I2C总线的IP核,对设计的VHDL程序进行调试和波形仿真.其中各个管角的意义如下:

DATE_BUS[7等0] 8位数据总线;

DR 读/写信号;

SYSCLK 系统时钟信号;

RESET 复位信号;

SCL 串行时钟线;

SDA 串行数据线;

BUSY 系统忙信号.

在仿真中,选择EPF10K10LC84-3 作为下载芯片来实现模拟仿真.当向器件发送一个数据时,串行时钟线和数据线得到图6所示的仿真波形.

四、结论

该设计采用VHDL的自顶向下的层次结构设计方法,对系统按照其功能进行设计和分析说明, 并将IP核分为4个模块:字节计数模块、控制模块、数据转换模块以及综合模块.

数据转换器是实现串并转换,用装载写入或读出的数据,在控制模块的控制下,把写入的数据移位到SDA线上,或把从SDA读出的串行数据变为并行数据,并配合SCL时钟信号输出或输入.字节计数模块主要实现对移位的数据字节进行计数的功能.控制模块是基于以上三个模块实现数据的单向传输,即将双向的数据线分成两根单向的数据线来传输数据.综合模块主要是实现将2根单向的数据线,通过控制模块的一个选择信号使它综合成一根双向的数据线SDA,实现了接口的串并转换功能.

基于CPLD/FPGA平台I2C总线IP核的设计参考属性评定
有关论文范文主题研究: 关于结构设计的论文范本 大学生适用: 专科毕业论文、硕士学位论文
相关参考文献下载数量: 64 写作解决问题: 怎么撰写
毕业论文开题报告: 论文模板、论文题目 职称论文适用: 期刊发表、职称评初级
所属大学生专业类别: 怎么撰写 论文题目推荐度: 经典题目