I2C串行总线五篇

2024-08-31

I2C串行总线 篇1

基于以上情况, 该文提出了一种基于单片机为核心挂接两个带有I2C接口的温度传感器组建温度采集系统, 并通过液晶显示器显示出来。

系统设计分为硬件电路设计和软件及仿真设计两大部分。

1系统硬件电路设计

硬件电路的设计包括了温度传感器的选型、单片机的选型、液晶显示器的选型及其部件之间的电连接。

温度传感器选用DS1621温度传感器, DS1621是由DALLAS公司生产的一种功能非常强的数字式温度传感器。通过读取内部的计数值和用于温度补偿的每摄氏度计数值, 利用公式计算还可提高温度值的精度。DS1621无需外围元件即可测量温度, 将结果以9位数字量 (两字节传输) 输出, 测温范围为-55 ℃~+155 ℃, 精度为0.5 ℃, 转换时间为1 s, 数据的写入和读出通过一个2线I2C串行接口完成。

I2C总线 (Inter Integrated Circuit BUS, 内部集成电路总线) 是由PHILIPS公司开发的一种两线式串行总线, 用于连接微控制器及其外围设备。I2C总线由数据线SDA与时钟SCL构成串行总线, 可用于发送与接收数据。数据可以在CPU与被控IC芯片之间、IC芯片与IC芯片之间进行双向传送, 最高传送速率可100 kb/s。

该设计选择M C S - 5 1系列的一款通用M C U芯片 — STC89C52, 其本身并没有I2C接口电路, 但可以通过软件来模拟I2C接口。采用2片DS1621采集温度, 将第一片地址连接成000 (A2A1A0均接低电平) , 将第二片地址连接成001 (A2A1接低电平, A0接高电平) 。STC89C52芯片的并行引脚P2.6和P2.7连接到温度传感器DS1621的SDL和SCL总线。

液晶显示器选用了LCD1602, 温度采集的结果通过LCD1602切换轮流显示出来, LCD1602的数据线连接至MCU的P3口。

该系统总体结构如图1所示, 以单片机STC89C52为核心, 由电源电路、时钟电路、复位电路、温度传感器 (2个) 和LCD1602液晶显示构成。

2软件设计及仿真

熟悉LCD1602的命令集及编程思路后, 在keil软件上进行软件设计, 软件分为多个文件, 包含LCD1602和DS1621芯片的驱动程序和主程序。将程序按其逻辑划分为多个模块, 这样可以使软件结构看起来更清晰, 且容易维护。

主程序设计如下所示。

unsigned char s[10], i, a[2];//数组s存放显示的字符串, a存放DS1621的地址

a[1]=‘’;//用于显示

Lcd1602_Initialize () ;

Lcd1602_Write (1, 0, "th temp (c) :") ;

for (i=0;i<2;++i) //初始化2个DS1621

{

Ds1621_Set Device Address (i) ;

Ds1621_Write Config (0x03) ;

Ds1621_Set Temperature Limit (40, 35) ;

}

同时在Proteus软件绘制系统硬件电路图, 并与Keil软件实现联调, 仿真结果如图2和图3所示, 图2为第一片温度传感器的温度实时值, 图3为第二片温度传感器的温度实时值。

3结语

该设计实现了两点温度的测量系统, 传感器DS1621集成度高, 直接输出数字信号, 通过I2C总线实现信号传输, DS1621的选用简化了电路设计、方便了程序设计。以STC89C52单片机为系统核心, 使系统结构简单、且易于实现。系统带有的液晶显示器LCD1602使人机交互更加友好。 该系统可应用于诸多温度采集的场合使用。

摘要:温度是工农业生产中一个普遍而又重要的参数。因此, 对于温度这个参数的测量与控制就显得尤为重要。该文设计了基于I2C串行总线的两点温度测量系统, 阐述了I2C总线的特点及基本原理, 选用了STC89C52单片机为系统的核心, 并设计了单片机的时钟电路、复位电路和电源电路, 选用了DS1621温度传感器采集环境温度, 选用了液晶显示器LCD1602显示采集到的温度值, 并进行了单片机端口的选择和各器件之间的连接, 进行了LCD1602和DS1621芯片的驱动程序和主程序的编写, 并进行了仿真。

关键词:STC89C52,I2C,DS1621,液晶显示器

参考文献

[1]彭芬.单片机C语言技术应用技术[M].西安:西安电子科技大学出版社, 2012.

[2]梁森.自动检测与转换技术[M].北京:机械工业出版社, 2012.

[3]乌云高娃.C语言程序设计[M].北京:高等教育出版社, 2012.

I2C串行总线 篇2

随着社会的进步和工业技术的发展, 许多产品对温度范围的要求越加严格, 尤其在工业发展方面, 如冶金、钢铁、石化、水泥、玻璃等行业, 温度是一个系统经常需要测量、控制和保持的量。而目前市场上普遍存在的温度检测仪器大都是单点测量, 不能适应当今社会生产高效率的要求, 同时还存在温度信息精度不够的缺点。在这样的形式下, 开发一种能够同时测量多点温度, 并且温度测量精度高, 能够综合处理多点温度信息的测量系统就显得很有必要。此外, 温度也是植物生长的重要环境条件。为此, 设计一个能多路采集、显示的温度采集系统, 对于超出作物适宜生长范围的温度发出警报。

1 整体系统设计

1.1 设计要求

采用基于I2C总线的设计, 工作模式为单主机多从机, 以实现对多点温度的采集、读取与显示。主机由主控制器、数码管显示模块、电源模块、报警模块、键盘模块等组成, 将完成以下功能:

(1) 主机通过按键确定进入温度测量状态以及即将读取温度的节点;

(2) 主机从总线上读取节点温度值并显示;

(3) 空闲时, 由按键确定进入时间显示状态。时钟使用单片机内部的实时时钟RTC、外部6 MHz晶振, CPU掉电运行, 每0.5 s唤醒一次。

从机由数字温度传感器等组成, 将完成以下功能:

(4) 采集节点实时温度值;

(5) 响应主机的请求, 发送温度数据。

1.2 总体设计方案

本设计要完成一个基于I2C总线的多点温度采集系统, 则选择具有硬件I2C总线功能的P89LPC922[1]单片机作为主控制器, 并采用具有I2C功能器件的数字温度传感器LM75A[2]和数码管显示驱动及键盘扫描管理芯片ZLG7290。使用LM75A采集节点实时温度值, 并通过I2C总线发送温度数据。使用ZLG7290驱动LED数码管显示温度值和时间[3]。系统硬件框图见图1。

2 电路设计

2.1 控制器模块

主控制器采用P89LPC922单片机。该单片机是一款单片封装的微控制器, 适合于许多要求高集成度、低成本的场合, 可以满足多方面的性能要求。内部集成了键盘中断、串行接口 (UART/I2C) 、看门狗定时器, 采用先进的2-clock技术, 指令执行速度是传统80C51的6倍。支持空闲、掉电、时钟预分频等多种节电模式, 另外, 其4中断优先级结构, 为多个中断源的处理提供了极大的灵活性。

2.1.1 由P89LPC922控制的键盘模块

根据主控器P89LPC922单片机的键盘中断特性[4], 键盘模块可直接由三个I/O口控制实现三个按键, 原理图见图2。

2.1.2 由P89LPC922控制的指示灯和报警电路

本设计采用蜂鸣器实现报警过程, 使用I/O口的开漏方式对蜂鸣器进行控制。指示灯电路是由两个LED组成, 使用I/O口的推挽输出方式驱动LED。原理图见图3。

2.2 温度采集模块设计

LM75A是一个使用了内置带隙温度传感器和Σ-△模数转换技术的温度-数字转换器。本设计使用两片LM75A采集两点的温度值, 其原理图见图4。

2.3 显示模块设计

ZLG7290B是数码管显示驱动及键盘扫描管理芯片。能够直接驱动8位共阴式数码管 (或64只独立的LED) 。在本设计中只使用ZLG7290B的数码管显示驱动功能, 而没有用其键盘功能, 电路部分则大为简化, 原理图如图5所示。

2.4 电源模块设计

本设计采用SPX1117设计电源模块来提供3.3V电压, 原理图见图6。

3 系统测试

3.1 硬件测试

利用万用表对焊接好的电路板进行测试。各线路连接正常, 没有出现短路和断路的现象。其次, 上电后, 电源灯亮, 证明电源连接正常, 测量电源电压输入为5 V, 输出为3.3 V, 电源电路工作正常。其余模块通过软件测试。

3.2 软件测试

通过ZLG7290测试程序验证I2C总线的传输情况, 并利用逻辑分析仪来观察其时序图见图7。

从图7可以看出, 该时序部分完成的是使第一位数码管显示“0”的过程, 从启动总线到结束总线的一个完整过程。该过程总共发送了四个字节数据, 在总线启动后发送的是ZLG7290的从机地址, 后跟一位读写位0, 表命令缓冲区的首地址, 每发送完一个字节后都会收到一个应答位0, 表示接收到数据。后面两个字节是复合指令, 在这里是按位下载数据且译码指令, 即使第一位数码管显示0。发送完指令后紧接着是结束总线条件, 表示一次发送过程结束。

通过LM75A测试程序示向从机发送数据, 收到应答位0后, 紧接着发送从机子地址, 在这里是ZLG7290命令缓冲区的首地址, 每发送完一个字节后都会收到一个应答位0, 表示接收到数据。后面两个字节是复合指令, 在这里是按位下载数据且译码指令, 即使第一位数码管显示0。发送完指令后紧接着是结束总线条件, 表示一次发送过程结束。验证I2C总线的接收数据的过程, 并利用逻辑分析仪来观察其时序图见图8。

从图8可以看出, 该时序部分完成的是读取温度值的过程, 也是一个I2C总线带重复起始条件的接受数据的过程。该过程分两部分, 第一部分是发送过程, 第二部分才是接收过程。发送部分包括发送从机地址和从机子地址, 即LM75A的地址90H和LM75A温度寄存器首地址00H。然后重新启动总线准备接收数据, 该部分主机先发送从机地址, 并跟读写位1, 表示主机将接收该从机发来的数据, 紧接着主机接收两个字节的数据, 主机发送应答位后, 再发送停止条件结束总线, 表示主机接收完一次数据。

3.3 系统综合测试

将程序烧进P89LPC922, 上电后, 数码管显示“0000”, 通过按键2和按键3来设置时钟初值, 按键2控制当前修改的时间值的位置, 当按键2按下后, 可修改位向右移动一位并使该位变为闪烁状态, 这时按键3可控制该位的值增1变化。当时间初值设置好后, 按下按键1确定初值并启动时钟。再次按下按键1时, 数码管显示为“0000”, 同时两个指示灯均亮。这时, 可通过按键2和按键3来分别读取1点和2点温度值。当按键2按下后, 数码管显示1点该时刻的温度, 同时指示灯1亮;当按键3按下后, 数码管显示2点该时刻的温度, 同时指示灯2亮。读完温度后, 再次按下按键1, 则数码管恢复时间显示并继续计时。如果这时发现时间不准确, 还可以通过按键2和按键3来进行校时校分, 校准完成后无需再按确认键, 系统自动开始计时。

当读取的温度值超过设定的温度值范围, 蜂鸣器会发出报警提示音。这时可通过按下按键1取消声音, 同时切换为时钟显示。

以上是系统操作的全过程, 完全符合设计要求。

4 结论

本系统为综合处理多点温度信息的测量系统。本设计系统结构简单, 操作方便, 测量精度高, 速度快, 能实现报警。由于采用了I2C总线的结构, 整个系统占用主控制器I/O口较少, 其余I/O口可留作系统扩展之用。由于时间和精力有限, 很多地方还有待于优化和完善。

摘要:采用基于I2C总线的设计, 工作模式为单主机多从机, 以实现对多点温度的采集、读取与显示。主机由P89LPC922单片机、数码管显示模块、电源模块、报警模块、键盘模块等组成, 通过按键确定进入温度测量状态, 从总线上读取节点温度值并显示, 时钟使用单片机内部的实时时钟RTC、外部6MHz晶振, CPU掉电运行, 每0.5 s唤醒一次。从机由LM75A数字温度传感器等组成, 采集节点实时温度值, 响应主机的请求发送温度数据。系统结构简单, 操作方便, 测量精度高, 速度快, 并具有报警功能, 是一个综合处理多点温度信息的测量系统。

关键词:P89LPC922,LM75A,ZLG729,温度采集

参考文献

[1] PHILIPS semiconductors.P89LPC922 User Manual, 2007-9

[2] PHILIPS semiconductors.LM75ADigital temperature sensor and ther-mal Watchdog data sheet, 2001-7

[3] I2C总线概要 (产品应用手册) .广州周立功单片机发展有限公司, 2006, 11

I2C总线控制器的设计 篇3

关键词:I2C总线;Verilog HDL;验证

中图分类号:TP3文献标识码:A文章编号:1007-3973(2010)10-056-01

1、I2C总线控制器的设计

1.1I2C总线的特点

I2C双向串行总线将主机或者从机的并行数据转换为串行数据,并通过SDA线传输。SCL则是串行时钟线,I2C总线通过SDA和SCL两条串行总线实现设备器件间的通信。与其它串行总线相比,I2C总线具有一下几方面的特点:

(1)只有两条总线线路:一条串行数据线(sDA):一条串行时钟线(SCL)。

(2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机、从机关系软件设定的地址。

(3)串行的8位双向数据传输位速率在标准模式下可以达到100kbit/s,快速模式下可以达到400kbit/s,高速模式下可以达到3.4Mbit/s。

(4)I2C总线并且通过SDA、SCL两条串行线与连接到总线上的器件间传递信息。每个器件都有一个唯一的是地址识别,而且都可以作为一个接收器或者发送器。

(5)在I2C总线中,唯一出现的是被定义为起始(s)和停止(P)条件,一般由主机产生。在SCL线为高电平期间,SDA线由高电平向低电平切换则表示起始条件,若由低电平到高电平切换则表示停止条件。总线在起始条件后被认为处于忙的状态。在停止条件的某段时间后,总线被认为再次处于空闲状态。

(6)发送SDA线上的每个字节必须为8位。每次传输的字节数量不受限制。每个字节后面必须跟一个响应位。从器件要完成一些其他的功能后,才能接受或者发送下一个完整的数据字节,此时可以使時钟线SCL保持低电平迫使主器件进入等待状态。当从器件准备好接受下一个数据字节并释放时钟线SCL后,数据传输继续。

1.2I2C总线控制器的设计方法

I2C总线控制器连接架构:首先从CPU发出指令来,通过对I2C控制器的操作来进行对EEPROM的读写操作并完成数据的串并转换。

(1)根据I2C总线控制器的功能的不同和端口设置来定义所需的寄存器。

(2)我们根据I2C总线控制器的特点和要求,规划出来相应的设计模块,包括寄存器配置模块,中断产生模块,时钟发生模块和状态机模块。其中状态机的状态包括空闲、开始、写地址、地址响应、读或写数据、数据响应和停止状态。由状态机作为设计的核心来控制数据的读、写和命令的发送接收等。

(3)在划分出各个模块的功能后,利用Verilog HDL语言将各个模块功能描述出来,并在顶层文件中合并各个模块。

2、I2C总线控制器的验证

2.1验证的目的

验证和仿真可以让我们的设计尽可能的减少错误,完善我们的设计。对于一个设计的测试应当站在与设计不同的角度去思考。作为一名设计者,应当考虑的方面是如何将设计做到简单的同时,成本尽量降到最低,将所有的功能都完善并且尽量避免出现错误,将错误率降到最低。与设计不同的是,测试者应当去思考一些比较特殊的情况,去对一些不容易被思考到的点或者容易被设计者忽略的地方进行测试,尽可能的找出所有的错误。

2.2测试方法

测试设计需要使用一定的方法。首先建立起一个测试环境,在这个测试环境中输入一些我们需要的激励。这个激励当然应当是越全面越好,其中一些边界的点和一些不容易被想到的点应当着重测试。

我们可以利用task、function等语句,分类对设计进行测试,基本测试点包括;复位操作,读写操作,读写交替操作,读写多个数据的操作等。最终设立读写随机次数和随机数据的重复操作。在测试时,需要使用到一个EEPROM的行为模块来与本设计进行通信。

3、结语

(1)在整个工作之中,完成了对I2C总线控制器设计规则的学习,模块化划分整理、代码的仿真,最终,完成所要求的I2C总线控制器设计。此设计支持Register总线,FIFO深度为8宽度为8,可以使用软件进行复位,支持FIFO状态查询,中断使能,中断有效电平配置,传输速度模式选择等功能。整个设计中大体分为寄存器配置、状态机、中断发生模块和时钟发生模块等四部分组成,各个模块在上面都有详细描述。

(2)本次设计存在着一些不足的地方:为了简化设计,因此只支持标准模式和快速模式,并没有支持高速模式(3.4Mbit/s)。如果需要达到高速模式(Hsmode),还需根据标准模式和快速模式对设计进行相当大的改动;简化了起始条件,并没有考虑重复起始条件的发生,只涉及了起始条件和停止条件的发生;只采用了一个FIFO用于存储数据,因此有一定的局限性;设计没有太多地考虑面积,速度和功耗等问题。

参考文献:

[1]夏字闻,Vefilog数字系统设计[M],第二版,北京:北京航空航天大学出版社,2008

[2]筒弘伦,精通VerilogHDL:Ic设计核心技术实例详解[M],北京:电子工业出版社。2005

I2C串行总线 篇4

摘要:在介绍I2C总线协议的基础上,讨论了基于CPLD的系统中I2C总线的设计技术,并结合工程实例设计了I2C总线IP核,给出了部分源代码和仿真结果。

关键词:I2C总线 IP核 CPLD

I2C总线是PHILIPS公司推出的新一代串行总线,其应用日渐广泛?1~2?。目前许多单片机都带有I2C总线接口,能方便地实现I2C总线设计;对没有I2C总线的微控制器(MCU),可以采用两条I/O口线进行模拟。在以单片机为MCU的系统中很容易实现I2C总线的模拟扩展,有现成的通用软件包可以使用?2~3?。

对有些基于CPLD的系统,要与带有I2C总线接口的外围器件连接,实现起来相对复杂一些。为实现系统中的I2C总线接口,可以另外引入单片机,也可以采用PCF8584或者PCA9564器件(PHILIPS公司推出的专用I2C总线扩展器)进行扩展,但这样会增加系统成本,使系统冗余复杂。像ALTERA、XILINX等一些大公司有专用的基于CPLD器件的I2C总线IP核,但这些IP核的通用性不强,需要的外围控制信号较多,占用系统很大的资源,因此直接采用这种IP核不可取。

鉴于此,依照I2C总线协议的时序要求,在基于CPLD的系统中开发了自己的I2C总线IP核。对于一些带有I2C总线接口的外围器件较少、对I2C总线功能要求较简单的CPLD系统,自主开发IP核显得既经济又方便。

(本网网收集整理)

1 I2C总线的协议

I2C总线仅仅依靠两根连线就实现了完善的全双工同步数据传送:一根为串行数据线(SDA),一根为串行时钟线(SCL)。该总线协议有严格的时序要求。总线工作时,由时钟控制线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线传送的每帧数据均为一个字节(8 bit),但启动I2C总线后,传送的字节个数没有限制,只要求每传送一个字节后,对方回应一个应答位(Acknowledge Bit)。发送数据时首先发送数据的最高位(MSB)。

I2C总线协议规定,启动总线后第一个字节的高7位是从器件的寻址地址,第8位为方向位(“0”表示主器件对从器件的写操作;“1”表示主器件对从器件的读操作),其余的字节为操作的数据。总线每次传送开始时有起始信号,结束时有停止信号。在总线传送完一个或几个字节后,可以使SCL线的电平变低,从而使传送暂停。

图1列出了I2C总线上典型信号的时序,图2表示I2C总线上一次完整的数据传送过程。

依据I2C总线的传输协议,总线工作时的具体时序如下:

起始信号(S):在时钟SCL为高电平期间,数据线SDA出现由高电平向低电平的变化,用于启动I2C总线,准备开始传送数据;

停止信号(P):在时钟SCL为高电平期间,数据线SDA出现由低电平向高电平的变化,用于停止I2C总线上的数据传送;

应答信号(A):I2C总线的第9个脉冲对应应答位,若SDA线上显示低电平则为总线“应答”(A),若SDA线上显示高电平则为“非应答”(/A);

数据位传送:I2C总线起始信号或应答信号之后的第1~8个时钟脉冲对应一个字节的8位数据传送。在脉冲高电平期间,数据串行传送;在脉冲低电平期间,数据准备,允许总线上数据电平变化。

2 应用实例

2.1 实例模型介绍

现举某应用实例,要求对显示器的视频信号进行采集、处理和再显示,整个系统采用CPLD器件进行控制。信号采集采用A/D公司的专用视频采集芯片AD9883,该芯片在使用前需要依据实际的功能指标进行初始化。初始化过程依靠AD9883的SDA和SCL两引脚进行。在系统中用CPLD器件,ALTERA公司的EPM3256A,实现初始化:按照I2C总线协议向AD9883的19个内部寄存器(01H~13H)写入19组固定的`8位数据;第14H寄存器为只读型同步检测寄存器,仅用于检测几个关键的数据设置。

可见该I2C总线模型如下:单主操作,只实现简单的写和读操作(亦可只有写操作,只是硬件调试的时候会麻烦些),写地址连续,没有竞争和仲裁,是很简单的I2C总线系统。由此设计了如图3所示的IP核。其中,RESET为复位信号,CLK为系统时钟。

为了软件仿真方便,把双向数据线SDA用分离的两条线模拟:SDA为数据输出,SDAACK为SDA的应答信号。软件仿真成功后,只要把SDA设置为双向,稍微修改一下程序就可以向CPLD器件下载,进行实际应用。

对AD

9883内部地址连续的寄存器进行初始化,I2C总线上传输的时序信号依次为:开始信号(S);从器件地址和写操作位(SLAW);内部寄存器基地址(Base Address);写入基地址的数据(Data0);写入下一地址(Base Address+1)的数据(Data1);写入地址(Base Address+2)的数据(Data2);……;写入地址(Base Address+18)的数据(Data18);停止信号(P)。

针对AD9883,如果电路中的A0引脚?55#?接电源,则SLAW=“10011001”;Base Address=“00000001”,Data0~Data18是依据实际需要写入的初始化数据。

2.2 IP核程序的编写

整个程序用VHDL语言编制,SCL输出时钟的设计是基于CLK输入时钟的64分频的。程序由三个状态组成:开始(START)、转换(SHIFT)和应答(ACK)。状态定义如下:

type states is ?start?shift?ack??

signal my_states ?states?

下面给出部分进程的源代码以供参考。

2.2.1开始信号的产生

PROCESS?clk?

if clk’event and clk=‘1’ then

TWCR<=DATAIN?

SCL<=‘1’?

else

TWCR<=?others=>‘0’??

end if?

if TWCR=“10000000” then ――比较寄存器TWCR的开始

值设置(由用户决定)

STRB<=‘1’?

end if?

if STRB=‘1’ then ――开始条件

INT<=INT+“000001”? ――INT为时钟脉冲计数

if INT<=“011000” then ――产生SDA的下降沿

SDA<=‘1’?

else

SDA<=‘0’?

end if?

if INT>=“011110” then ――STRB归0,保证只产生

一次开始信号

STRB <=‘0’?

INT<=“000000”?

end if?

end if?

等所有的初始化数据传输完毕后即产生停止信号,过程与上面相类似,在此省略。

2.2.2 数据转换过程

数据转换过程采用移位传输,传输8位之后即进入应答状态。

when shift=>

if cnt=“010000” then ――cnt为clk脉冲计数,由

实际的时钟频率决定cnt的值

COUNT<=COUNT+“0001”? ――COUNT为数据移位个

数计数?MSR为移位寄存器

MSR<=MSR?6 downto 0?&txtag?

txtag<=‘0’?

if COUNT=“1000” then

my_states<=ack?

TACK<=‘1’? ――TACK为应答标志位

else

SDA<=MSR?7??

my_states<=shift?

TACK<=‘0’?

end if?

end if?

图4 数据传输仿真波形 图5 SDA非应答时的仿真波形

2.2.3 数据输入

一般情况下,I2C总线传输的数据要由外部ROM或其它专门的数据存储区来存储,但在数据相对固定且数据量不是很大的情况下,可以将初始化的数据写在程序中,这样可减少频繁的数据交换,简化操作。AD9883的初始化数据就属于这种情况,可以通过检测应答信号来改变输入的值。程序如下:

PROCESS?clk? ――数据输入

if clk’event and clk=‘1’ then

CASE ackint IS ――ackint为应答计数,每应答

一次,输入改变一次

when “00000”=> DATAIN<=“10000000”?

when “00001”=> DATAIN<=“01010010”?

when “00010”=> DATAIN<=“11010000”?

……

when “10010”=> DATAIN<=“00000000”?

when “10011”=> DATAIN<=“00000000”?

when others=> DATAIN<=“ZZZZZZZZ”?

END CASE?

end if?

2.3 仿真结果

把自主开发的IP核置于MAX+PLUS II 10.0开发环境下,选用EPM3128ATC100-10器件,经过编译、调试与仿真,证明该程序符合设计要求。图4是模拟产生开始信号并传输两组二进制数据“10011001”和“10101010”(十进制表示为153和170)的仿真波形。图5是传输数据“10011001”后没有应答时的仿真结果,此时总线处于暂停状态。

I2C串行总线 篇5

1 模拟验证技术和RVM方法学

1.1 什么是验证

验证就是测试设计是否存在功能、时限、可测试性和功耗等方面是否达到系统规范说明的要求。

1.2 模拟验证技术

模拟验证是传统的验证方法,而且目前仍然是主流的验证方法。模拟验证是将激励信号施加于设计,进行计算并观察输出结果,并判断该结果是否与预期一致。模拟验证中,验证师本人分析设计的特征,找出边角功能,然后分析能够激活特征和边角功能的内部状态与外部输入的组合,开发测试实例。并继续模拟,在设计的边界如输出察看是否检测了该特征。如果没有,就回去重新开发测试实例,接着模拟检查,如此反复。主要的模拟验证技术有:

1.2.1 直接测试向量生成(Directed TestVector Generation)

直接测试向量生成需要产生大量的测试向量才能覆盖尽可能多的各种传输组合。这不但要耗费大量的时间和精力,而且很难达到满意的覆盖率。

1.2.2 约束随即测试(Constrained RandomTest)

直接测试向量往往需要手工加入,这样难免会遗漏一些考虑不到的情况,因此有学者提出了随机测试的方法。这种方法让测试向量随机生成,因此在足够长的时间内可以产生大量的随机向量,这样可以比较容易地覆盖到一些考虑不到的情况。但随着验证技术的发展,验证工程师发现这种完全随机的验证方法一般需要比较长的时间才有可能达到令人满意的覆盖率,所以又提出了约束随机测试这种新的验证方法,这种方法可以有效的缩短验证时间,在短时间内达到令人满意的覆盖率。

1.2.3 驱动率覆盖验证

覆盖主要指的是代码覆盖(Code Coverage)和功能覆盖(Functional Coverage)。代码覆盖可以在仿真时由仿真器直接给出,主要用来检查RTL代码哪些没有被执行到。使用代码覆盖可以有效地找出冗余代码,但是并不能很方便地找出功能上的缺陷。使用功能覆盖则可以帮助我们找出功能上的缺陷。一般说来,对一个设计覆盖点的定义和条件约束是在验证计划中提前定义好的,然后在验证环境中具体编程实现,把功能验证应用在约束随机环境中可以有效检查是否所有需要出现的情况都已经遍历。

1.2.4 基于断言的验证方法(Assertion-based Verification)

在验证过程中,一般很难找出跨多个时钟周期、顺序相关的一系列操作的时序和功能是否有不符合规范的地方,为此研究出基于断言的验证方法来推动验证技术发展。使用断言可以很方便的对一个给定输入的设计的期望行为进行精确的描述,从而可以很方便的描述输入/输出行为、总线协议以及设计中的一些复杂的关系。通过检查这些表达式是否发生,可以很简单地进行功能覆盖的检查,并且这种覆盖率分析是针对跨多个时序周期的一个事件序列或者整个传输的。

1.3 RVM方法学

RVM验证方法学是基于分层结构的,将验证平台的搭建抽象到更高层次,使得验证平台支持随机测试、输出结果自动检测、断言验证等技术,大大提高了验证的效率。RVM结合了面向对象(OOP)的编程方法,大大提高了代码的可重用性,而且提供了覆盖率分析方法,提出以覆盖率为驱动的验证流程,加快了验证周期的收敛。

2 IIC总线控制器的验证

2.1 IIC总线

IIC是Philips公司开发的简单双向两线总线,通过两线——串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息。下面是I2C总线的一些特征:

2.1.1只要求两条总线线路:一条串行数据线(SDA);一条串行时钟线(SCL)。

2.1.2数据传输的起始和停止条件一般由主机产生。当SCL线是高电平时,SDA线从高电平向低电平切换表示起始条件(S);当SCL是高电平时,SDA线由低电平向高电平切换表示停止条件(P)。总线在起始条件后被认为处于忙的状态;在停止条件的某段时间后,总线被认为再次处于空闲状态。

2.1.3 SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。

2.1.4 发送到SDA线上的每个数据的长度必须为8位。每次传输可以发送的字节数量不受限制。每个字节后面必须跟一个响应位。首先传输的是数据的最高位(MSB)。数据传输格式如图1所示。

3 IIC控制器的仿真测试

在实际仿真测试中,采用了Synopsys公司的VCS仿真工具。在验证过程中采用了含错误指示的自核对式测试技术,在生成的.log文件中根据是否有错误报警来判断模块设计或验证代码是否存在缺陷,免去了直接从仿真波形上查找错误的繁琐性。但在测试中,通过仿真波形来检验验证的过程及结果也是非常必要的,特别是涉及到时序方面的验证时,仿真波形更显示出其在验证过程中的作用;从波形上可以直接获取信号的信息,对验证代码进行修改完善,查找出设计中更多的bug。根据I2C DUV主控制器方面主要有三种工作方式:写操作,复合读和顺序读。限于篇幅只给出给出这写操作的仿真波形,如图2所示:

4 结论

以上利用RVM方法学搭建IIC控制器模块的验证平台,并利用VCS对其进行波形仿真,验证模块的正确性,实现了硬件模块的验证,防止了硬件设计中的错误,保证了产品的上市时间。

参考文献

[1]郭兵,沈艳.SoC技术原理与应用[M].北京:清华大学出版社,2006.

上一篇:行业专业英语下一篇:农田水利工程规划设计