网站首页 | 经济学论文 | 证券金融 | 管理学 | 会计审计 | 法学论文 | 医药学论文 | 社会学论文 | 教育论文 | 计算机 | 艺术论文 | 哲学论文 | 财务管理 |
写论文网
  • 会计理论论文
  • 管理会计论文
  • 电算会计论文
  • 成本会计论文
  • 管理体制论文
  • 审计论文
  • 会计研究论文
  • CPA行业论文
  • 您的位置:写论文网 > 会计审计 > 审计论文 > 【I2C器件接口IP核的CPLD设计... 正文 2019-12-25 07:26:12

    【I2C器件接口IP核的CPLD设计】 设计一种器件

    相关热词搜索:

    I2C器件接口IP核的CPLD设计

    I2C器件接口IP核的CPLD设计 关键词:可编程逻辑器件 I2C串行扩展 IP核 由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的 IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。

    国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对 I2C的主方式串行扩展通信的特点,详细给出设计过程和结果。

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

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

    当 主节点要求总线暂停时亦可采用同样的方法。图1是CPLD向外围I2C器件发送 01010011 和01001001这两个数据的情况。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器件。

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

    以下程序中,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;
    ELSESt = 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用于告知总线数据传输结 束,发生停止信号。

    图4 仿真结果

    • 范文大全
    • 教案
    • 优秀作文
    • 教师范文
    • 综合阅读
    • 读后感
    • 说说
    【I2C器件接口IP核的CPLD设计】 设计一种器件》由(写论文网)整理提供,版权归原作者、原出处所有。
    Copyright © 2019 写论文网 All Rights Reserved.