电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 解决方案 | 技术参数
设计应用
电路图 | 技术资料 | 芯片资料 | 技术论坛
  现在位置: 首页 > 设计应用 > EDA/PLD > 详细信息
EDA/PLD:I2C器件接口IP核的CPLD设计
来源:   时间: 2008-1-31 1:24:06    

  摘要:根据单片机I2C串行扩展的特点,在EDA软件MaxplusII的环境下,利用AHDL语言,建立IP核。此设计利用状态机实现,在给出设计的同时详细说明IP核的建立过程,并下载到芯片通过硬件试验验证。sO100
   
  关键词:可编程逻辑器件I2C串行扩展IP核
   
  由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(IntellectualProperty)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点,详细给出设计过程和结果。
    
1IP核简介
   
  IP核是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等等设计成可修改参数的模块,让其它用户可以直接调用这些模块,以避免重复劳动。随着CPLD/FPGA的规模越来越大,设计越来越复杂,使用IP核是一个发展趋势。许多公司推荐使用现成的或经过测试的宏功能模块、IP核,用来增强已有的HDL的设计方法。当在进行复杂系统设计的时侯,这些宏功能模块、IP核无疑将大大地减少设计风险及缩短开发周期。使用这些宏功能模块、IP核,就会将更多的时间和精力放在改善及提高系统级的产品方面,而不需要重新开发现成的宏功能模块、IP核。我国IP核库的建设已相当迫切,它是集成电路产业发展的一个重要目标。
   
  1I2C传输原理图
   
2I2C串行通信特点简介
   
  Philips公司推出的I2C软、硬件协议十分巧妙,在单主方式的I2C总线系统中,总线上只有一个单片机,其余都是带I2C总线的外围器件。由于总线上只有一个单片机成为主节点,单片系统永远占据了总线,不会出现竞争,主节点不必有自己的节点地址。只要每个外围器件有自己的器件地址,两根I/O口线SCL(时钟线)和SDA(数据线)就可以虚拟I2C总线接口。I2C总线上的数据传送。总线上传送的每一帧数据均为1个字节。启动总线后,要求每传送1个字节后,对方回应一个应答位。在发送时,首先发送最高位。每次传送开始有起始信号,结束时有停止信号。在总线传送完1个字节后,可以通过对时钟线的控制,使传送暂停,这时可在应答信号后使SCL变低电平,控制总线暂停。当主节点要求总线暂停时亦可采用同样的方法。图1是CPLD向外围I2C器件发送01010011和01001001这两个数据的情况。
   
3在MaxplusII环境下I2C串行扩展IP核的建立
   
  MaxplusII是美国Altera公司用于CPLD的EDA软件,内部有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至ROM、RAM等。这些宏单元内具体的参数都可以由用户来自行设定,这就是上面提到的IP核形式。它避免了重复劳动,提高了效率。以下将要设计的是下位机的IP核。
   
  MaxplusII的AHDL(AlteraHardwareDescriptionLanguage)是Altera公司开发的完全集成于MaxplusII中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用AHDL,直接生成IP核。
   
  设计的最终目标是生成如图2所示的Symbol。通过输入数据来达到控制SDA和SCL的目的,将信号按要求的时序传送给I2C器件。
   
  设计思路是利用状态机实现时序。主要包括输入数据锁存、起始、数据传输、停止等状态机。通过状态机,在每一状态下确定下一状态SDA和SCL是高电平或者低电平,通过这种方式实现了I2C所需要的每一种时序。由于使用的是AHDL,这种状态机实现起来非常方便,程序简洁明了。由于篇幅限制,仅介绍数据传输的状态机。状态图如图3所示。
   
  以下程序中,Cmd_reg2为发送允许暂存位;Sh_reg[]为数据锁存,通过左移,最高位数据Sh_reg7为当前将发送数据,存入SDA_tmp。通过图3对照程序,可以看到发送一个利用状态机数据位的详细过程。程序清单如下:
   
  IFCmd_reg2THEN--若”发送允许”,则将Sh_reg7作为当前发送位


  SDA_tmp=Sh_reg7;
   
  ELSE
   
  SDA_tmp=VCC;
   
  ENDIF;
   
  St.clk=SysClk;
   
  St.ena=BaudGen;
    
  CASEStIS--控制传输8位数据的状态机
   
  WHENt0=>
   
  IFCmd_reg2ORCmd_reg3THEN
   
  SDA=SDA_tmp;--开始传送数据
   
  SCL=GND;
   
  St=t1;
   
  ELSE
   
  St=t0;
   
  ENDIF;
   
  WHENt1=>
   
  SCL=VCC;
   
  SDA=SDA_tmp;
   
  St=t1a;
   
  WHENt1a=>
   
  SCL=VCC;
   
  SDA=SDA_tmp;
   
  St=t2;
    
  WHENt2=>
   
  Sh_reg[7..1]=Sh_reg[6..0];--数据左移,取高位
   
  Sh_reg[0]=GND;
   
  Sh_reg[].ena=EXU;
   
  SCL=GND;
    
  SDA=SDA_tmp;
   
  IFBit[]==7THEN--若8位传完,则发应答位;否则继续
   
  St=t3;
   
  ELSE
   
  St=t0;
   
  ENDIF;
   
  WHENt3=>--发应答位
    
  SDA=GND;
   
  St=t4;
   
  WHENt4=>; SDA=GND;
   
  SCL=VCC;
   
  St=t4a;
   
  WHENt4a=>
   
  SDA=GND;
   
  SCL=VCC;
   
  St=t5;
   
  WHENt5=>
   
  SCL=GND;
   
  St=t6;
   
  WHENt6=>
   
  SDA=GND;
   
  FINISHED=VCC;
   
  St=t0;
   
  ENDCASE;
   
  Bit[]=Bit[]+1;――--传输完一位,已传输位数加一
   
  为仿真结果。起始信号给出以后,传输2个8位数据:每个数据后跟一个应答位,在输送完第一个数据要求的情况下,暂停一段时间,再输送第二个数据;2个数据输完以后,主机发出停止输送要求,即给出停止信号。这些信号,在SDA和SCL上完全符合I2C的时序要求。要使总线传输速率达到改进后的规范,即400kb/s,因为根据以上叙述,每发送1位数据需要4个时钟周期,所以所给的时钟为1600kHz。图4中Execute为执行信号,即它为高电平时,输入数据DIN[7..0]有效;EXU为发送使能信号,只有当它为高电平时,方可输送串行数据到外围器件;Start为开始控制信号,用于发生起始信号;STOP用于告知总线数据传输结束,发生停止信号。
  
  仿真结果
   
  仿真以后,通过编程电缆将生成的pof文件用ISP(在系统编程)方式下载到FPGA板EPM7128SLC84-6,I/O口SDA和SCL挂上拉电阻,外接两片I2C器件SAA1064(LED显示I2C串入并出芯片)进行测试,结果CPLD利用该I2C的IP核,工作正常,可以按照要求显示。

相关信息
发表评论
打印本页 关闭本页
带I2C总线接口的LED驱动器SAA1064及其应用
    摘要:SAA1064是Philips公司生产的带总线接口的4位LED驱动器。可用于驱动4位带小数点的七段显示器,并可通过多路开关对两个2位显示器进行切换显示,文中介绍了SAA1064的功能、工作原理及通讯规约,并给出了该芯片与80C552的接口电路和程序框图。 关键词:接口;SAA1064;LED;80C552;动态显示 1.概述   SAA1064是Philips公司生产的4位LED驱动器,为双极型电路,具有接口。该电...
>>详细内容
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com