基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc

上传人:来看看 文档编号:3921446 上传时间:2019-10-10 格式:DOC 页数:24 大小:278.52KB
返回 下载 相关 举报
基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc_第1页
第1页 / 共24页
基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc_第2页
第2页 / 共24页
基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc_第3页
第3页 / 共24页
基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc_第4页
第4页 / 共24页
基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc》由会员分享,可在线阅读,更多相关《基于VHDL的I2C总线控制核设计与实现 毕业设计(论文).doc(24页珍藏版)》请在三一文库上搜索。

1、基于VHDL的I2C总线控制核设计与实现 摘 要从状态机的角度,介绍一种I2C控制核的VHDL设计方法。将其嵌入到FPGA中,用于实现与TMS320C6000系列DSP的接口,并配合DSP的软件完成对视频采集与显示处理系统中数字视频编、解码器工作模式寄存器的配置及其状态查询。着重介绍I2C控制核的总体设计方案,详细描述其内部命令状态机和时序状态机的工作原理及相应的VHDL代码。此外,介绍I2C控制核与DSP相互通信中断处理机制的VHDL实现方法。最后,给出在Xilinx公司的ISE6.1+ModelSimXE5.7c软件平台中进行EDA的综合结果与时序仿真图。关键词:I2C总线;状态机;FPG

2、A ;VHDL ;DSP ;控制器核1 引 言21世纪是信息社会,是知识大爆炸的时代。在今天,社会上大量需求的是全能型的人才,尤其强调综合素质和动手能力的培养,计算机组成原理是一门实践性很强的学科,要求我们在懂得原理的基础上通过亲自动手创新实践,不仅可以加深对课本知识的理解,锻炼我们的动手能力,也为将来分析,设计,开发以及使用计算机打下坚实的基础。1.1 课程设计的目的在掌握部件单元电路实验的基础上,通过对一个简单计算机的设计,实现五条基本机器指令,以达到对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与调试等过程有更深的了解,加深对理论课程的理解1。1.

3、2 关于I2CI2C总线是双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。由于其使用两线的硬件接口简单,I2C总线的应用越来越广泛。实现I2C总线通信协议主要有两种方法:利用MCU对两根I/O口线进行软件编程,模拟I2C总线的SCL和SDA时序要求;使用专用I2C总线控制核,但受其主机(host)接口方式和时钟频率的限制,在有些场合应用并不方便。在我们开发的基于DSP的视频采集与显示处理系统中,为了满足数字视频信号传输带宽及图像处理算法速度的要求,选择了TI公司的32位高速、高性能DSP TMS320C6711(

4、简称C6711)芯片(CPU时钟150MHz,外围存储器接口EMIF时钟100MHz)作为处理核心;外围加上FPGA和数字视频编码器与解码器,实现对标准复合视频信号的采集、处理和视频显示任务。由于C6711没有可以单独控制的I/O口线,所以不能使用的方法;由于外围扩展存储器接口(EMIF)工作在100MHz,也不易实现的方法,从系统小型化,充分利用FPGA的逻辑资源,提高硬件系统集成度的角度出发,选定在FPGA内自行设计I2C控制核的方法,实现DSP的高速异步存储器接口到I2C总线接口的转化3。1.3 关于VHDL 硬件描述语言硬件描述语言发展至今已有几十年的历史,并已成功地应用到系统的仿真、

5、验证和设计、综合等方面。目前常用的硬件描述语言有AHDL、ABEL、VHDL、Verilog HDL等等。20世纪80年代后期,美国国防部开发的VHDL语言(VHSIC Hardware Description LanguageVHSIC是 Very High Speed Integrated Circuits的缩写)是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。VHDL语言覆盖面广,描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述。这些描述可以

6、从最抽象的系统级直到最精确的逻辑级,甚至门级。运用VHDL语言设计系统一般采用自顶向下分层设计的方法,首先从系统级功能设计开始,对系统高层模块进行行为描述和功能仿真。系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。VHDL语言还可以描述与工艺有关的信息,工艺参数可以通过设计文件语言参数来调整,不会因工艺变化与发展而使VHDL设计过时。因此,VHDL设计的生命周期与其他设计方法相比是最长的4。2 I2C总线的介绍I2C(InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备

7、。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。1.1 I2C总线概述I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering)

8、, 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控5。I2C总线使用两根信号线来进行数据传输,一根是串行数据线(SDA),另一根是串行时钟线(SCL)。它允许若干兼容器件(如存储器、A/D和D/A转换器,以及LED、LCD驱动器等)共享总线。I2C总线上理论上可以允许的最大设备数,是以总线上所有器件的电容总和不超过400pF为限(其中包括连线本身的电容和与它连接端的引出电容),总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。任何时刻总线只能由一个主器件控制,各从器件在总线空闲时启动数据传送,由I2C总线仲裁

9、来决定哪个主器件控制总线。 I2C总线数据传输的最高速率为400Kbps,标准速率为100Kbps。SDA与SCL为双向I/O线,都是开漏极端(输出1时,为高阻抗状态)。因此I2C总线上的所有设备的SDA、SCL引脚都要外接上拉电阻。1.2 I2C总线工作原理 总线的构成及信号类型 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既

10、是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。 I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的

11、低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系,MICROCHIP的PIC16C6XX系列。ARM产品则更多,如SAMSUNG公司的S3C44B0等。很多外围器件如存储器、监控芯片等也提供I2C接口。 总线基本操作 I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定

12、义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。参见图1。 FCAFCL开始条件地址来应答数据可改变停止条件图1 串行总线上的数据传送顺序 控制字节在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作2。如图2所示。 1C1

13、A2A1A00FVWDEVICE TYPEIDENTIFIER DEVICE ADDRESS图2 控制字节配置 写操作 写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序参见图3。 读操作 读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。 实例:X24C04与MCS-51单片机软硬件的实现 X24C04是XICOR公司的CMOS

14、 4096位串行EEPROM,内部组织成5128位。16字节页面写。与MCS-51单片机接口如图3所示。由于SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极 开路输出“线或”(wire-Ored)连接。上拉电阻的选择可参考X24C04的数据手册。下面是通过I2C接口对X24C04进行单字节写操作的例程6。 1 2 3 4VccR1R2 8 7 6 5VssA1A2A0VccRCSCLSDAP3.2P3.3X24C04图3 X24C04与51单片机借口;名称:BSENT ;描述:写字节 ;功能:写一个字节 ;调用程序:无 ;输入参数:A ;输出参数:无 BSEND: MOV R2,#08

15、H ;1字节8位 SENDA: CLR P3.2 ; RLC A ;左移一位 MOV P3.3,C ;写一位 SETB P3.2 DJNZ R2,SENDA ;写完8个字节? CLR P3.2 ;应答信号 SETB P3.3 SETB P3.2 RET 流程图及源程序如图4所示:开 始 时 钟 信 号 最 底 累 加 器 左 移 一 位 将此位运到数据线上 时 钟 信 号 置 高 一 个 应 答 信 号 的 周 期 结 束 8 位 完 否 ?N图4 单字节操作流程图1.3 I2C总线的协议 总线空闲:SCL和SDA都保持高电平。 开始信号:SCL保持高电平的状态下,SDA出现下降沿。出现开始信

16、号以后,总线被认为忙。 停止信号:SCL保持高电平的状态下,SDA出现上升沿。停止信号过后,总线被认为空闲。 总线忙: 在数据传送开始以后,SCL为高电平的时候,SDA的数据必须保持稳定,只有当SCL为低电平的时候才允许SDA上的数据改变。(如图1)I2C总线的传送格式为主从式,对系统中的某一器件来说有四种可能的工作方式:主发送方式,从发送方式,主接收方式,从接收方式。 主发送从接收主器件产生开始信号以后,发送的第一个字节为控制字节。前七位为从器件的地址片选信号。最低位为数据传送方向位 (高电平表示读从器件,低电平代表写从器件),然后发送一个选择从器件片内地址的字节,来决定开始读写数据的起始地

17、址。接着再发送数据字节,可以是单字节数据,也可以是一组数据,由主器件来决定。从器件每接收到一个字节以后,都要返回一个应答信号(ASK=0)。主器件在应答时钟周期高电平期间释放SDA线,转由从器件控制,从器件在这个时钟周期的高电平期间必须拉低SDA线,并使之为稳定的低电平,作为有效的应答信号7。 从接收主发送在开始信号以后,主器件向从器件发送控制字节。如果从器件接收到主器件发送来的控制字节中的从地址片选信号与该器件相对应,并且方向位为高电平(R/W=1),就表示从器件将要发送数据。从器件先发送一个应答信号(ASK=0)回应主器件,接着由从器件发送数据到主器件。如果,在这个过程之前,主器件发给从器

18、件一个片内地址选择信号,那么从器件发送的数据就从该地址开始发送;如果在从器件接收到请求发送的控制信号以前,没有收到这个地址选择信号,从器件就从最后一次发送数据的地址开始发送数据。发送数据过程中,主器件每接收到一个字节都要返回一个应答信号ACK。若ACK=0(有效应答信号),那么从器件继续发送;若ACK=1(停止应答信号),停止发送。主器件可以控制从器件从什么地址开始发送,发送多少字节。AT24C02与8031的接口及软件模拟。AT24CXX系列芯片是采用了I2C总线标准的常用的串行EEPROM存储芯片。我们以AT24C02为例来介绍。AT24C02具有256 8(2K)Bit的存储容量,每个字

19、节可重复擦/写100万次,数据保存期大于100年。AT24C02工作于从器件方式,页写的时候最多可以写入8字节(当开始写入的从器件片内地址为页首地址时)。也就是说,AT24C02每页有8字节的容量,每次写入数据是从主器件发送来的片内选择地址开始写入,如果写到页末尾,主器件还在继续发送的话,不会自动转到下一页,而是从该页的头地址开始继续写入,覆盖该页的原有数据,而造成数据丢失。8031与AT24C02的接口电路原理图。其中P1.0用作SDA线,P1.1用作SCL线。A0-A2为从器件地址选择线,总线上共可接8片AT24C02,故一条I2C总线上共可以接16Kbit容量的这种型号的存储器。每一片的

20、有效地址引脚A2A1A0要按照000111的顺序与Vcc或Vss相连。WP为写保护引脚,由于AT24C02不具有写保护功能,所以该引脚接地。本设计为了方便,只采用一片AT24C02,将A0-A2接地8。 软件模拟I2C总线SCL EQU P1.1 ;SDA EQU P1.0 ;开始信号: 停止信号:START: CLR SCL ; STOP:CLR SCL ;SETB SDA ; CLR SDA ;ACALL DELAY ; ACALL DELAY ;SETB SCL ; SETB SCL ;ACALL DELAY ; ACALL DELAY ;CLR SDA ; SETB SDA ;ACAL

21、L DELAY ; ACALL DELAY ;CLR SCL ; RET ;RET ;发送一个字节: 接收一个字节:SEND: MOV R0,#08H ; REV: MOV R0,#08H ;SEND0: RLC A ; REV0: SETB SCL ;MOV SDA,C ; MOV C,SDA ;SETB SCL ; RLC A ;ACALL DEALY ; CLR SCL ;CLR SCL ; DJNZ R7,REV0 ;DJNZ R0,SEND0; RET ;SETB SDA ;RET ;接收一个应答位: 发送一个应答位:ACKI:SETB SCL ; ACKO:SETB SCL ;AC

22、ALL DELAY ; ACALL DELAY ;MOV C,SDA ; MOV SDA,C ;CLR SCL ; CLR SCL ;RET ; RET ;循环子程序:DELAY: NOP;NOP;NOP;RET; 对于AT24C系列芯片来说,其控制字节的格式为:1010A2A1A0 。前四位是固定的,为1010。A2A1A0这三位是用来选择对应的从器件,本例中从器件的这三根引脚都接地,选择信号应该为000。是控制数据传送的方向的,1为读从器件,0为写从器件。主发送从接收程序 这时的控制字应该为:10100000(0A0H)。要写入的从器件的地址为ADDR,写入的数据的字节数为NUM,数据放在

23、以DATA地址开始的主器件存储单元中。程序如下:OUT: ACALL START ;开始信号MOV A,#0A0H ;定控制字,准备发送ACALL SEND ;发送控制字ACALL ACKI ;接收应答JC END ;从器件不响应,转结束MOV A,ADDR ;设置从器件片内地址ACALL SEND ;发送片内地址ACALL ACKI;JC END;MOV R2,#NUM ;设置发送字节数MOV R1,#DATA ;主器件中要发送数据的头地址MOV A,R1;OUT1: ACALL SEND ;发送数据ACALL ACKI;JC END;INC R1;DJNZ R2,OUT1 ;发送未结束,继

24、续发送END: ACALLL STOP ;停止信号RET ;结束程序 从发送主接收程序 此时的控制字为10100001H,在从器件的地址ADDR处开始读出数据,读数据的字节数为NUM,数据放在以DATA地址开始的主器件存储单元中。用位单元10H来存放应答位。程序如下:INOUT: ACALL START ;开始信号MOV A,#0A0H ;定控制字,准备发送ACALL SEND ;发送控制字ACALL ACKI ;接收应答JC END ;不响应,转结束MOV A,ADDR ;设置要读取从器件的片内地址ACALL SEND;ACALL ACKI;JC END;ACALL STOP ;停止信号AC

25、ALL DELAY ;延时IN : ACALL START ;开始信号MOV A,#0A1H ;设置控制字,准备接收ACALL SEND ;发送控制字ACALL ACKI;JC END ;MOV R2,#NUM ;准备接收数据的字节数MOV R1,#DATA ;接收字节存放在主器件中的地址IN0: ACALL REV ;接收一个字节MOV R1,A ;把接收到数据存放到存储单元中CJNZ R2,#01,IN2 ;判断是否为最后一个接收字节IN1: SETB 10H ;置位发送应答标识位,准备发停 止应答SJMP IN3;IN2 :CLR 10H ;清除发送应答位标识位,准备发 有效应答IN3

26、:MOV C,10H ;应答标识位,赋给进位位ACALL ACKO ;发送应答信号CLR SCL ;拉低时钟线DJNZ R2,IN0 ;发送未结束,继续转上END:ACALL STOP ;停止信号RET ;结束程序 3设计实现3.1 总体思想SCL和SDA分别为I2C总线的时钟线和数据线。目前,支持I2C总线通信协议的视频编、解码芯片大多只支持100Kb/s或400Kb/s的传输速度,并且支持两种地址:从设备地址(SCLAVE ADDRESS,8bit),分为读地址和写地址,高7位用于选中芯片, 第0位是读/写控制位(R/W),决定是对该芯片进行读或写操作;内部寄存器单元地址(SUBADRRE

27、SS,8bit),用于决定对内部的哪个寄存器单元进行操作,通常还支持地址单元连续的多字节顺序读写操作。I2C总线的读、写操作过程如下9。 写过程(S:开始,Sr:重开始,P:停止,-S:从设备,-M:主设备,W:写位,R:读位)表1 写过程列表SLAVE ADDRESS(W)ACK-SSUBADDRESSACK-SDATA(N BYTES)ACK-SP 读过程表1 读过程列表SSLAVE ADDRESS(W)ACK-SSUBADDRESSACK-S(Sr)SLAVE ADDRESS(R)ACK-SDATA(N BYTES)ACK-MI2C控制核的设计采用自顶而下的方法,分为三个模块:I2C_t

28、op模块、I2C_cmd模块、I2C_core模块。总体结构框图如图1所示。I2C_top模块是顶层管理模块,主要任务是接收DSP发来的控制信号、命令及数据;发送由从设备读出的数据和确认位到DSP;实现I2C控制核与DSP的中断通信机制;提供当前I2C控制核的工作状态;把DSP发出的命令字信号送到I2C_cmd模块。 在设计I2C控制核时,必须注意以下几个方面:I2C控制核与主机(Host,即C6711 DSP)以及视频编解码器的硬件接口连接关系。考虑到I2C总线通信协议的时序关系及芯片读/写操作过程,I2C控制核应该包括两个外围接口,如图1所示。一是与C6711 EMIF(External

29、Memory Interface,扩展存储器接口)的高速异步存储器ASRAM(Asynchronous SRAM)接口,称为主机接口。它向I2C控制核发出控制命令与数据,钖0位地址总线、32位双向三态数据总线、异步输出使能信号aoe、异步写使能awe、异步读使能are、外部存储器空间选通ce2、外部中断申请eint。二是与视频编/解码器相连的I2C两线接口SCL、SDA。I2C控制核称为I2C总线的主设备(master),实现EMIF的ASRAM接口向I2C总线接口的转化;I2C器件(视频编码器、视频解码器)被称为I2CU叫线的从设备(slave)。图2 I2C总线命令状态转移图如何通过软件编

30、程,方便地实现对控制核中各种命令的操作。为此,在控制核内部共设备了6个8位寄存器,用于管理整个控制核的工作。这些寄存器的名称、标号、位数、地址、操作方式,以及寄存器内部设备的控制位及功能的具体情况如表1所列。寄存器内部设置的控制位及功能的具体情况如表1所列。寄存器的寻址使用EMIF接口地址总线的低三位eadd42和由高位地址译码得到的I2C控制核使能信号nce。当DSP发出的读、写命令完成后,I2C_top会向DSP发中断请求eint,让DSP发出下一个命令到CR,从RXR中读数,或进发送新数据到TXR10。表3 I2Ctop模块内部寄存器寄存器位 数地 址操 作控制位及功能控制寄存器CTR8

31、000只写I2C控制核使能位(core-en),(中断使能位ien)命令寄存器CR8001只写启动(start-r)、读(rd-r)、写(wr-r)、停止(stop-r)、主设备确认(ack-r)、中断响应位(i-ack-r)状态寄存器SR8010只读从设备确认位(rx-ack)、I2C-core模块忙位(Core-busy)发送寄存器TXR8011只写寄存器发送到从设备的数据接收寄存器RXR8100只读寄存由从设备读取的数据时钟尺度寄存器PRES8101读写寄存器时钟尺度因子,对时钟信号(eclk)实现指定倍数分频,得到SCL和SDA的五个子状态相互转移的同步时钟使能信号(eclk-en)时

32、钟尺度寄存器(PRES)用于产生两个时钟频率信号:pres(7 downto 5),用于产生I2C控制核的工作频率fcore;pres(5 downto 0),用于产生I2C总线的时钟SCL频率fi2c。其计算公式如下:其中:pres1=1+pres(7 downto 5)pres2=1+pres(4 dwonto 0)由于eclk=100MHz,以pres(7 downto 5)=“100”=4,pres(4 downto 0)=10000=16,则fcore=100/2(1+4)=10MHzfi2c=10/6(1+16)=0.098MHz=98kHz100kHz可以看出,这样设备时钟尺度寄

33、存器容易实现100MHz100kHz的转变。需要设置与DSP的相互通信的机制。由于C6711的CPU运行速度为150MHz,而I2C的速度仅为100Kb/s,为了不影响DSP程序的高速运行,采用中断机制。当DSP发出读、写命令后,继续执行自己的程序,而由I2C控制核完成命令后,I2C_top模块负责向DSP发中断请示eint。DSP在中断服务程序中读取SR,从RXR中读数,并发出新命令到CR,发送新数据到TXR。图3 I2C总线时序状态转移关系图3.2 状态机描述设计的核心工作是对I2C总线命令及时序的状态划分。在控制核内共设置了两个状态机,分别称为命令状态机和时序状态机。其中,命令状态机用于

34、管理I2C总线上的命令状态,如表1所列,并实现I2C总线具体的读、写操作的命令状态转移过程;时序状态机用于实现I2C总线上启动、停止、读、写、确认等命令的具体时序关系。这样就把控制核从逻辑上分为两个状态机,共同完成最终的总线命令与时序。命令状态机命令状态机是I2C_cmd模块的核心部分。该模块的主要功能有两个:一是把I2C_top模块发送的start、write、read、stop四个命令信号转化命令码,发送I2C_core模块;二是实现DSP发出和从slave接收到数据的串并转换。从I2C总线的通信协议中可以看出I2C总线上的信号可以分为空闲(IDLE)、启动(START)、读(READ)、

35、写(WRITE)、确认(ACK)和停止(STOP)六种工作状态。在IDLE时,SCL和SDA都为高电平,从设备不断检测Start命令的出现。I2C控制核(即I2C总线的主设备)在接收到DSP发送来的Start命令后,主设备进入START状态,并根据Read和Write命令,可以进入READ或WRITE状态。由于主机的读、写操作都是以字节进行的,对应8个周期的I2C总线读/写操作,故设置一个8字拍的计数器,使得READ或WRITE状态能维持8个SCL周期。在完成字节读或写操作之后,都将进入ACK状态。进入ACK,标志一个DSP的读/写命令已经完成,因此发送中断申请给DSP。在中断服务程序中,DS

36、P查询状态寄存器后,再发出下一个命令。这时I2C控制核,或者是转移到IDLE,或者是转移到STOP4。时序状态机I2C_core模块负责与视频编码器、解码器的I2C接口,最终实现I2C总线信号SCL和SDA的启动、停止、读、写、确认等具体操作的时序关系。其功能的实现主要由时序状态来完成。根据I2C总线通信协议中SCL和SDA之间的时序关系,总线上包含两种命令(Start/Restart,Stop)和两种操作(Write,Read),时序关系如图4所示。Start命令:在SCL为高电平时,SDA上出现一个下降沿。Stop命令:在SCL为高电平时,SDA上出现一个上升沿。Write操作:SDA只能

37、在SCL为低电平时变化,在SCL为高电平时应保持不变。Read操作:只能在SCL为高电平时,对SDA进行采样。为了叙述上的方便,每个命令状态在时序上划分为5个子状态(A,B,C、D、IDLE)。I2C总线时序状态转移关系如图3所示,状态划分如图4所示。在实际中为了更精确地控制时序,对命令时序进行了更细的划分。START和STOP分为7位子状态(af,idle),WRITE和READ分为6个子状态(ae,idle)。这个“6”也就是为什么在公式(2)中分母上有一个“6”。SCL在Start命令的A状态时,保持原有电平不变,而在B状态时变为高电平,这样就可以实现Restart命令。系统时钟信号ec

38、lk由时钟尺度因子分频,得到状态转移的同步时钟使能信号(eclk_en)。在eclk和eclk_en的控制下进行状态移转,最后都转移到空闲状态(IDLE),并保持最后一个状态时的信号电平。图4中标注了每个命令的关键时刻。3.3 中断信号的处理机制I2C控制核作为I2C总线的主设备,是在DSP的控制下工作的。它采用中断机制与DSP通道。当一个读写命令完成后,主设备会向DSP发出一个中断申请信号eint(上升沿有效)。在DSP的中断服务程序中,置位命令寄存器的中断响应确认位(i_ack_r=1),使主设备清除其发出的中断申请信号(eint=0),而i_ack_r信号将在置位命令结束后的下一个时钟上

39、升沿自动清除。这样,可以允许主设备发出下一个中断申请。 process(nReset,eclk)beginif(nReset=0)thenint=0;i_ack_r=0;elsif(eclkvent and eclk=1)thenif(nce=0andnAwe=0)thenif(core_en=1and eadd=001)then-写入命令寄存器i_ack_r=cr(7);-写入1end if;elsei_ack_r=0; -自动清除end if;int=cmd_done_ack and ien;end if;Eint=int and(not i_ack_r_;end process;命令码3

40、.4 EDA综合结果与结论使用Xilinx ISE6.1对I2C核的VHDL描述进行综合(synthesize)和实现(implement),目标器件采用Xilinx公司的高密度系统级FPGA-Virtex系列芯片v50cs144-6。设计的总体等效门数为1844门,系统时钟的最大频率为120.758MHz。图5为使用ModelsimXE5.6a对在目标器件上布局布线后的VHDL模块进行仿真(Simulate Post-Place & Route VHDL Module)的结果。其中,edat信号上“10010000”中的“1”依次是启动和写命令;“01100001”中的“1”依次是停止、读、

41、中断清除命令。从图中可以看出,实现了从TMS320C6000 EMIF接口到I2C总线接口的转换功能,并实现发中断申请(eint=1)和清除中断申请的功能,完成了I2C总线通信协议的启动、写、确认,读、确认、停止操作的时序5。4结束语在I2C总线的应用中应注意的事项总结为以下几点 : 1) 严格按照时序图的要求进行操作。2) 若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。 3) 程序中为配合相应的传输速率,在对口线操作的指令后可用NOP指令加一定的延时。 4) 为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),或者在EEPROM内部没有用的空间写入标

42、志字,每次上电时或复位时做一次检测,判断EEPROM是否被意外改写。本设计在邓老师的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计和调试,无不凝聚着邓老师的心血和汗水,学习期间,也始终感受着导师的精心指导和无私的关怀,我受益匪浅。在此向邓老师表示深深的感谢和崇高的敬意。 不积跬步何以至千里,本设计能够顺利的完成,也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的课程设计论文顺利完成。参考文献1 卢毅,赖杰. VHDL与数字电路设计M.北京:科学出版社,20012 潘松VHDL实用教程M.成都:电子科技大学出

43、版社,20003 林敏,方颖立 VHDL数字系统设计与高层次综合M. 北京:电子工业出版社,20024 刘明业. 集成电路/计算机硬件描述语言VHDL高等教程M.北京:清华大学出版社,2003年3月5 陈书开,王毅. 计算机组成与系统结构M.武汉:武汉大学出版社,2004年4月6 黄钦胜. 计算机组成原理M .北京电子工业出版社, 20037 王爱英主编.计算机组成与结构M .北京清华大学出版社, 19908 白中英.计算机组成原理(第二版)M .北京科学出版社, 20009 艾莉等.VHDL在EDA中的应用OL .未知互联网, 200410 杜象元,黄春雷.计算机组成原理M .南京南京大学出版社, 199424

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1