基于VHDL的I2C总线控制核设计与实现毕业设计论文.docx
- 文档编号:6590390
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:26
- 大小:196.22KB
基于VHDL的I2C总线控制核设计与实现毕业设计论文.docx
《基于VHDL的I2C总线控制核设计与实现毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于VHDL的I2C总线控制核设计与实现毕业设计论文.docx(26页珍藏版)》请在冰豆网上搜索。
基于VHDL的I2C总线控制核设计与实现毕业设计论文
毕业设计
基于VHDL的I2C总线控制核设计与实现
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
摘要
从状态机的角度,介绍一种I2C控制核的VHDL设计方法。
将其嵌入到FPGA中,用于实现与TMS320C6000系列DSP的接口,并配合DSP的软件完成对视频采集与显示处理系统中数字视频编、解码器工作模式寄存器的配置及其状态查询。
着重介绍I2C控制核的总体设计方案,详细描述其内部命令状态机和时序状态机的工作原理及相应的VHDL代码。
此外,介绍I2C控制核与DSP相互通信中断处理机制的VHDL实现方法。
最后,给出在Xilinx公司的ISE6.1+ModelSimXE5.7c软件平台中进行EDA的综合结果与时序仿真图。
关键词:
I2C总线;状态机;FPGA;VHDL;DSP;控制器核
1引言
21世纪是信息社会,是知识大爆炸的时代。
在今天,社会上大量需求的是全能型的人才,尤其强调综合素质和动手能力的培养,计算机组成原理是一门实践性很强的学科,要求我们在懂得原理的基础上通过亲自动手创新实践,不仅可以加深对课本知识的理解,锻炼我们的动手能力,也为将来分析,设计,开发以及使用计算机打下坚实的基础。
1.1课程设计的目的
在掌握部件单元电路实验的基础上,通过对一个简单计算机的设计,实现五条基本机器指令,以达到对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与调试等过程有更深的了解,加深对理论课程的理解[1]。
1.2关于I2C
I2C总线是双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
由于其使用两线的硬件接口简单,I2C总线的应用越来越广泛。
实现I2C总线通信协议主要有两种方法:
①利用MCU对两根I/O口线进行软件编程,模拟I2C总线的SCL和SDA时序要求;②使用专用I2C总线控制核,但受其主机(host)接口方式和时钟频率的限制,在有些场合应用并不方便。
在我们开发的基于DSP的视频采集与显示处理系统中,为了满足数字视频信号传输带宽及图像处理算法速度的要求,选择了TI公司的32位高速、高性能DSPTMS320C6711(简称C6711)芯片(CPU时钟150MHz,外围存储器接口EMIF时钟100MHz)作为处理核心;外围加上FPGA和数字视频编码器与解码器,实现对标准复合视频信号的采集、处理和视频显示任务。
由于C6711没有可以单独控制的I/O口线,所以不能使用①的方法;由于外围扩展存储器接口(EMIF)工作在100MHz,也不易实现②的方法,从系统小型化,充分利用FPGA的逻辑资源,提高硬件系统集成度的角度出发,选定在FPGA内自行设计I2C控制核的方法,实现DSP的高速异步存储器接口到I2C总线接口的转化[3]。
1.3关于VHDL硬件描述语言
硬件描述语言发展至今已有几十年的历史,并已成功地应用到系统的仿真、验证和设计、综合等方面。
目前常用的硬件描述语言有AHDL、ABEL、VHDL、VerilogHDL等等。
20世纪80年代后期,美国国防部开发的VHDL语言(VHSICHardwareDescriptionLanguageVHSIC是VeryHighSpeedIntegratedCircuits的缩写)是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。
VHDL语言覆盖面广,描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。
其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述。
这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。
运用VHDL语言设计系统一般采用自顶向下分层设计的方法,首先从系统级功能设计开始,对系统高层模块进行行为描述和功能仿真。
系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。
VHDL语言还可以描述与工艺有关的信息,工艺参数可以通过设计文件语言参数来调整,不会因工艺变化与发展而使VHDL设计过时。
因此,VHDL设计的生命周期与其他设计方法相比是最长的[4]。
2I2C总线的介绍
I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。
可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
1.1I2C总线概述
I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控[5]。
I2C总线使用两根信号线来进行数据传输,一根是串行数据线(SDA),另一根是串行时钟线(SCL)。
它允许若干兼容器件(如存储器、A/D和D/A转换器,以及LED、LCD驱动器等)共享总线。
I2C总线上理论上可以允许的最大设备数,是以总线上所有器件的电容总和不超过400pF为限(其中包括连线本身的电容和与它连接端的引出电容),总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。
任何时刻总线只能由一个主器件控制,各从器件在总线空闲时启动数据传送,由I2C总线仲裁来决定哪个主器件控制总线。
I2C总线数据传输的最高速率为400Kbps,标准速率为100Kbps。
SDA与SCL为双向I/O线,都是开漏极端(输出1时,为高阻抗状态)。
因此I2C总线上的所有设备的SDA、SCL引脚都要外接上拉电阻。
1.2I2C总线工作原理
⑴总线的构成及信号类型
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。
这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
I2C总线在传送数据过程中共有三种类型信号,它们分别是:
开始信号、结束信号和应答信号。
⒈开始信号:
SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
⒉结束信号:
SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
⒊应答信号:
接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。
CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,由判断为受控单元出现故障。
目前有很多半导体集成电路上都集成了I2C接口。
带有I2C接口的单片机有:
CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系,MICROCHIP的PIC16C6XX系列。
ARM产品则更多,如SAMSUNG公司的S3C44B0等。
很多外围器件如存储器、监控芯片等也提供I2C接口。
⑵总线基本操作
I2C规程运用主/从双向通讯。
器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。
主器件和从器件都可以工作于接收和发送状态。
总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。
SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。
参见图1。
FCA
FCL
图1串行总线上的数据传送顺序
⑶控制字节
在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作[2]。
如图2所示。
图2控制字节配置
⑷写操作
写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。
关于页面写的地址、应答和数据传送的时序参见图3。
⑸读操作
读操作有三种基本操作:
当前地址读、随机读和顺序读。
图4给出的是顺序读的时序图。
应当注意的是:
最后一个读操作的第9个时钟周期不是“不关心”。
为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。
⑹实例:
X24C04与MCS-51单片机软硬件的实现
X24C04是XICOR公司的CMOS4096位串行EEPROM,内部组织成512×8位。
16字节页面写。
与MCS-51单片机接口如图3所示。
由于SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极开路输出“线或”(wire-Ored)连接。
上拉电阻的选择可参考X24C04的数据手册。
下面是通过I2C接口对X24C04进行单字节写操作的例程[6]。
图3X24C04与51单片机借口
;名称:
BSENT
;描述:
写字节
;功能:
写一个字节
;调用程序:
无
;输入参数:
A
;输出参数:
无
BSEND:
MOVR2,#08H;1字节8位
SENDA:
CLRP3.2;
RLCA;左移一位
MOVP3.3,C;写一位
SETBP3.2
DJNZR2,SENDA;写完8个字节?
CLRP3.2;应答信号
SETBP3.3
SETBP3.2
RET
流程图及源程序如图4所示:
图4单字节操作流程图
1.3I2C总线的协议
⑴总线空闲:
SCL和SDA都保持高电平。
⑵开始信号:
SCL保持高电平的状态下,SDA出现下降沿。
出现开始信号以后,总线被认为"忙"。
⑶停止信号:
SCL保持高电平的状态下,SDA出现上升沿。
停止信号过后,总线被认为"空闲"。
⑷总线忙:
在数据传送开始以后,SCL为高电平的时候,SDA的数据必须保持稳定,只有当SCL为低电平的时候才允许SDA上的数据改变。
(如图1)
I2C总线的传送格式为主从式,对系统中的某一器件来说有四种可能的工作方式:
主发送方式,从发送方式,主接收方式,从接收方式。
⑴主发送从接收
主器件产生开始信号以后,发送的第一个字节为控制字节。
前七位为从器件的地址片选信号。
最低位为数据传送方向位(高电平表示读从器件,低电平代表写从器件),然后发送一个选择从器件片内地址的字节,来决定开始读写数据的起始地址。
接着再发送数据字节,可以是单字节数据,也可以是一组数据,由主器件来决定。
从器件每接收到一个字节以后,都要返回一个应答信号(ASK=0)。
主器件在应答时钟周期高电平期间释放SDA线,转由从器件控制,从器件在这个时钟周期的高电平期间必须拉低SDA线,并使之为稳定的低电平,作为有效的应答信号[7]。
⑵从接收主发送
在开始信号以后,主器件向从器件发送控制字节。
如果从器件接收到主器件发送来的控制字节中的从地址片选信号与该器件相对应,并且方向位为高电平(R/W=1),就表示从器件将要发送数据。
从器件先发送一个应答信号(ASK=0)回应主器件,接着由从器件发送数据到主器件。
如果,在这个过程之前,主器件发给从器件一个片内地址选择信号,那么从器件发送的数据就从该地址开始发送;如果在从器件接收到请求发送的控制信号以前,没有收到这个地址选择信号,从器件就从最后一次发送数据的地址开始发送数据。
发送数据过程中,主器件每接收到一个字节都要返回一个应答信号ACK。
若ACK=0(有效应答信号),那么从器件继续发送;若ACK=1(停止应答信号),停止发送。
主器件可以控制从器件从什么地址开始发送,发送多少字节。
AT24C02与8031的接口及软件模拟。
AT24CXX系列芯片是采用了I2C总线标准的常用的串行EEPROM存储芯片。
我们以AT24C02为例来介绍。
AT24C02具有2568(2K)Bit的存储容量,每个字节可重复擦/写100万次,数据保存期大于100年。
AT24C02工作于从器件方式,页写的时候最多可以写入8字节(当开始写入的从器件片内地址为页首地址时)。
也就是说,AT24C02每页有8字节的容量,每次写入数据是从主器件发送来的片内选择地址开始写入,如果写到页末尾,主器件还在继续发送的话,不会自动转到下一页,而是从该页的头地址开始继续写入,覆盖该页的原有数据,而造成数据丢失。
8031与AT24C02的接口电路原理图。
其中P1.0用作SDA线,P1.1用作SCL线。
A0-A2为从器件地址选择线,总线上共可接8片AT24C02,故一条I2C总线上共可以接16Kbit容量的这种型号的存储器。
每一片的有效地址引脚A2A1A0要按照000~111的顺序与Vcc或Vss相连。
WP为写保护引脚,由于AT24C02不具有写保护功能,所以该引脚接地。
本设计为了方便,只采用一片AT24C02,将A0-A2接地[8]。
⑸软件模拟I2C总线
SCLEQUP1.1;
SDAEQUP1.0;
开始信号:
停止信号:
START:
CLRSCL;STOP:
CLRSCL;
SETBSDA;CLRSDA;
ACALLDELAY;ACALLDELAY;
SETBSCL;SETBSCL;
ACALLDELAY;ACALLDELAY;
CLRSDA;SETBSDA;
ACALLDELAY;ACALLDELAY;
CLRSCL;RET;
RET;
发送一个字节:
接收一个字节:
SEND:
MOVR0,#08H;REV:
MOVR0,#08H;
SEND0:
RLCA;REV0:
SETBSCL;
MOVSDA,C;MOVC,SDA;
SETBSCL;RLCA;
ACALLDEALY;CLRSCL;
CLRSCL;DJNZR7,REV0;
DJNZR0,SEND0;RET;
SETBSDA;
RET;
接收一个应答位:
发送一个应答位:
ACKI:
SETBSCL;ACKO:
SETBSCL;
ACALLDELAY;ACALLDELAY;
MOVC,SDA;MOVSDA,C;
CLRSCL;CLRSCL;
RET;RET;
循环子程序:
DELAY:
NOP;
NOP;
NOP;
RET;
对于AT24C系列芯片来说,其控制字节的格式为:
1010A2A1A0。
前四位是固定的,为1010。
A2A1A0这三位是用来选择对应的从器件,本例中从器件的这三根引脚都接地,选择信号应该为000。
是控制数据传送的方向的,1为读从器件,0为写从器件。
主发送从接收程序
这时的控制字应该为:
10100000(0A0H)。
要写入的从器件的地址为ADDR,写入的数据的字节数为NUM,数据放在以DATA地址开始的主器件存储单元中。
程序如下:
OUT:
ACALLSTART;开始信号
MOVA,#0A0H;定控制字,准备发送
ACALLSEND;发送控制字
ACALLACKI;接收应答
JCEND;从器件不响应,转结束
MOVA,ADDR;设置从器件片内地址
ACALLSEND;发送片内地址
ACALLACKI;
JCEND;
MOVR2,#NUM;设置发送字节数
MOVR1,#DATA;主器件中要发送数据的头地址
MOVA,@R1;
OUT1:
ACALLSEND;发送数据
ACALLACKI;
JCEND;
INCR1;
DJNZR2,OUT1;发送未结束,继续发送
END:
ACALLLSTOP;停止信号
RET;结束程序
从发送主接收程序
此时的控制字为10100001H,在从器件的地址ADDR处开始读出数据,读数据的字节数为NUM,数据放在以DATA地址开始的主器件存储单元中。
用位单元10H来存放应答位。
程序如下:
INOUT:
ACALLSTART;开始信号
MOVA,#0A0H;定控制字,准备发送
ACALLSEND;发送控制字
ACALLACKI;接收应答
JCEND;不响应,转结束
MOVA,ADDR;设置要读取从器件的片内地址
ACALLSEND;
ACALLACKI;
JCEND;
ACALLSTOP;停止信号
ACALLDELAY;延时
IN:
ACALLSTART;开始信号
MOVA,#0A1H;设置控制字,准备接收
ACALLSEND;发送控制字
ACALLACKI;
JCEND;
MOVR2,#NUM;准备接收数据的字节数
MOVR1,#DATA;接收字节存放在主器件中的地址
IN0:
ACALLREV;接收一个字节
MOV@R1,A;把接收到数据存放到存储单元中
CJNZR2,#01,IN2;判断是否为最后一个接收字节
IN1:
SETB10H;置位发送应答标识位,准备发停止应答
SJMPIN3;
IN2:
CLR10H;清除发送应答位标识位,准备发有效应答
IN3:
MOVC,10H;应答标识位,赋给进位位
ACALLACKO;发送应答信号
CLRSCL;拉低时钟线
DJNZR2,IN0;发送未结束,继续转上
END:
ACALLSTOP;停止信号
RET;结束程序
3设计实现
3.1总体思想
SCL和SDA分别为I2C总线的时钟线和数据线。
目前,支持I2C总线通信协议的视频编、解码芯片大多只支持100Kb/s或400Kb/s的传输速度,并且支持两种地址:
①从设备地址(SCLAVEADDRESS,8bit),分为读地址和写地址,高7位用于选中芯片,第0位是读/写控制位(R/W),决定是对该芯片进行读或写操作;②内部寄存器单元地址(SUBADRRESS,8bit),用于决定对内部的哪个寄存器单元进行操作,通常还支持地址单元连续的多字节顺序读写操作。
I2C总线的读、写操作过程如下[9]。
⑴写过程(S:
开始,Sr:
重开始,P:
停止,-S:
从设备,-M:
主设备,W:
写位,R:
读位)
表1写过程列表
SLAVEADDRESS(W)
ACK-S
SUBADDRESS
ACK-S
DATA(NBYTES)
ACK-S
P
⑵读过程
表1读过程列表
S
SLAVEADDRESS(W)
ACK-S
SUBADDRESS
ACK-S
(Sr)
SLAVEADDRESS(R)
ACK-S
DATA(NBYTES)
ACK-M
I2C控制核的设计采用自顶而下的方法,分为三个模块:
I2C_top模块、I2C_cmd模块、I2C_core模块。
总体结构框图如图1所示。
I2C_top模块是顶层管理模块,主要任务是接收DSP发来的控制信号、命令及数据;发送由从设备读出的数据和确认位到DSP;实现I2C控制核与DSP的中断通信机制;提供当前I2C控制核的工作状态;把DSP发出的命令字信号送到I2C_cmd模块。
⑶在设计I2C控制核时,必须注意以下几个方面:
①I2C控制核与主机(Host,即C6711DSP)以及视频编解码器的硬件接口连接关系。
考虑到I2C总线通信协议的时序关系及芯片读/写操作过程,I2C控制核应该包括两个外围接口,如图1所示。
一是与C6711EMIF(ExternalMemoryInterface,扩展存储器接口)的高速异步存储器ASRAM(AsynchronousSRAM)接口,称为主机接口。
它向I2C控制核发出控制命令与数据,钖0位地址总线、32位双向三态数据总线、异步输出使能信号aoe、异步写使能awe、异步读使能are、外部存储器空间选通ce2、外部中断申请eint。
二是与视频编/解码器相连的I2C两线接口SCL、SDA。
I2C控制核称为I2C总线的主设备(master),实现EMIF的ASRAM接口向I2C总线接口的转化;I2C器件(视频编码器、视频解码器)被称为I2CU叫线的从设备(slave)。
图2I2C总线命令状态转移图
②如何通过软件编程,方便地实现对控制核中各种命令的操作。
为此,在控制核内部共设备了6个8位寄存器,用于管理整个控制核的工作。
这些寄存器的名称、标号、位数、地址、操作方式,以及寄存器内部设备的控制位及功能的具体情况如表1所列。
寄存器内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL I2C 总线 控制 设计 实现 毕业设计 论文