毕业设计(论文)-基于wishbone设备的I2C总线控制器设计.doc_第1页
毕业设计(论文)-基于wishbone设备的I2C总线控制器设计.doc_第2页
毕业设计(论文)-基于wishbone设备的I2C总线控制器设计.doc_第3页
毕业设计(论文)-基于wishbone设备的I2C总线控制器设计.doc_第4页
毕业设计(论文)-基于wishbone设备的I2C总线控制器设计.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

哈尔滨工业大学(威海)本科毕业设计(论文)论文题目摘要 Philips 开发的IC 总线是一个简单的双向串行总线,能实现有效的IC之间控制, 所有符合IC总线的器件组合了一个片上接口,使器件之间直接通过IC 总线通讯。因而解决了很多在设计数字控制电路时遇到的接口问题。Wishbone 总线最先是由Silicon公司提出,它通过在IP核之间建立一个通用接口完成互连,优势是处理器核与外设共享总线。本文介绍了IC总线和wishbone总线协议, 通过设计一个基于片上系统的Wishbone总线的I2C控制器核心与带外设的I2C总线相连接,从而达到总线互联通信的目的。从I2C总线入手,通过Verilog语言对其寄存器堆的读写操作进行编译并编写测试代码,使用ModelSim软件进行仿真验证,对设计的I2C控制器进行波形仿真,验证了各个模块的功能和工作状态,仿真了执行过程和波形输出的情况。关键词:IC总线、Wishbone总线、寄存器、Verilog语言、波形仿真AbstractWith the development of micro electric and EDA(electronic design automation)technology, FPGA(field programmable gates array) can realize the function of digital circuit system design .FPGA have the merit of filed programmability and High integration rate ,therefore is highly recognized for engineering.I2C bus is widely applied in the digital system as simple interface ,expedient use ,low cost and good expansibility .VHDL is considered as a core of digital system design and a key technique of implement digital system.The design realizes the function of I2C bus interface on the FPGA .At first the thesis deeply research I2C bus specification ,then briefly introduce the Quartus II design environment and the design method ,as well as FPGA design flow .In this foundation,I2C bus controller design scheme and the timing simulation under Quartus II is particularly introduced.Key words Quartus II;I2C bus controller ;FPGA ;timing simulation目 录摘 要IAbstractII第1章 绪论51.1 课题背景51.2 I2C总线的产生及发展61.3 FPGA的现状与展望61.4 相关工作6第2章 I2C总线技术的研究82.1 I2C总线的概念82.2 I2C总线的传输92.2.1 数据的有效性92.2.2 I2C总线数据传送的开始和停止条件92.2.3 I2C总线传输过程中的应答信号102.2.4 I2C总线数据传送的重复开始条件112.2.5 I2C总线的传输过程中的字节格式112.2.6 I2C总线的器件子地址112.2.7 I2C总线传输信号的时序122.3 本章小结14第3章 VHDL语言的基础知识153.1 VHDL语言的概述153.2 VHDL语言的特点153.3 VHDL语言的程序结构163.3.1 VHDL程序的库163.3.2 包集合163.3.3 实体说明173.3.4 构造体183.3.5 配置183.4 本章小结18第4章 设计工具和设计方法194.1 设计工具194.2 基于FPGA的数字电路的设计流程204.3 本章小结21第5章 I2C总线的功能设计225.1 I2C总线完成的功能225.2 用VHDL语言实现写操作时的串行转并行235.3 用VHDL语言实现顺序读操作时的并行转串行235.4 I2C总线控制器的顶层设计245.5 本章小结25第6章 I2C总线的硬件时序仿真266.1 器件的选择266.2 硬件仿真276.2.1 用VHDL语言实现写字节周期286.2.1 用VHDL语言实现顺序读字节周期296.2.3 用VHDL语言实现选择性读字节周期296.3 本章小结30结 论31致 谢32参考文献33千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“Abstract”这一行后加一空行- 41 -哈尔滨工业大学(威海)本设计(论文)第1章 绪论1.1 课题背景近年来,随着社会的发展,电子产品越来越多的进入人们的生活和工作中,成为了我们生活中必不可少的一部分,随着计算机的普及,以及电子设备之间相互沟通的更加频繁,为了更方便的实现器件与器件之间的通信,研发人员发现消费者电子电讯和工业电子中,看上去不相关的设计里经常有很多相似的地方。为了使这些相似之处对系统设计者和器件厂商都得益,而且使硬件效率最大、电路最简单,Philips开发了一个简单的双向串行总线,实现有效的IC 之间控制,这个总线就称为Inter IC 或IC 总线。随着超大规模集成电路的迅速发展,半导体工业进入微米时代。随着集成亿万个晶体管的片上系统变得多见,设计复杂性随之不断增加,因而设计要求也越来越高。如何进行总线之间的互联成为了迫切需要解决的问题。开发者们开始使用基于片上系统的IP设计方法进行片上系统总线与其他总线互联。他们研发了很多Wishbone总线的兼容IP核,我们通过设计IC控制器把IC总线和Wishbone总线相联以进行相互通信。另一方面,由于如今集成电路大规模、高密度、高速度的需求,芯片的集成度和设计的复杂度都大大增加,芯片的集成密度已达到一百万个晶体管以上,使电子设计愈来愈复杂。为使如此复杂的芯片变得易于人脑的理解,用一种高级语言来表达其功能性而隐藏具体实现的细节是很必要的, 万门以上的设计需要制定一套新的方法就是采用硬件描述语言。Verilog HDL是一种硬件描述语言,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog语言提供非常简洁、可读性很强的句法,使用Verilog语言已经成功地设计了许多大规模的硬件。 1.2 Wishbone总线的特点及应用Wishbone 总线最先是由Silicon公司提出,现在己被移交给OpenCores组织维护,它通过在IP核之间建立一个通用接口完成互连。可以用于在软核、固核以及硬核之间进行互联。Wishbone规范具有如下特点: 它是一个轻量级的规范,接口简单紧凑,接口需要的互联逻辑非常少;它支持用户定义的标签。完整的普通数据传输总线协议,相对于其他的IP核接口规范来说,Wishbone接口规范具有简单、开放、高效、利于实现等特点而且完全免费,并没有专利保护。基于上述优点,因此采用Wishbone总线进行接口设计。WISHBONE地址和数据位都是32位(如果小于32位也可以进行通信),最多可以连接8个主设备,16个从设备,当多个主设备申请控制时,通过仲裁机制决定什么时候哪个主设备能访问共享总线。 Wishbone总线支持的互联类型1,点对点互联 2,共享总线互联3,十字交叉互联4,基于交换的互联结构Wishbone支持的数据操作1,单次读/写操作;2,块读/写操作;3,读改写(RMW)操作;1.3 I2C总线的发展和基本特征I2C(InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,之后又经过多次的修改,成为近年来在微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。基本特征:l 只要求两条总线线路一条串行数据线(SDA); 一条串行时钟线(SCL).l 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主机发送器或主机接收器.l 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏l 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s ,快速模式下可达400kbit/s ,高速模式下可达3.4Mbit/sl 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整l 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制1.4 相关工作为了设计基于wishbone设备的I2C总线控制器。首先要深入研究I2C总线和wishbone总线的协议规范,分析它们之间的差异。本课题设计了一个主/从模式结构,使I2C Controller IP与Wishbone总线相联,并通过I2C总线输出得到结果。在Modelsim平台上,对设计进行波形仿真,验证设计结果。双击上一行的“1”“2”试试,J(本行不会被打印,请自行删除)第2章 I2C总线技术的详细研究2.1 I2C总线的概念I2C总线是一种比较流行的总线,它的接受和发送在同一条数据线上。I2C由串行数据(SDA)和串行时钟(SCL)两根线构成的。总线上允许连接的设备数主要决定于总线上的电容量,一般设定为400pf以下。IC总线上数据的传输速率在标准模式下可达100kbit/s ,在快速模式下可达400kbit/s ,在高速模式下可达3.4Mbit/s。SDA和SCL都是双向总线,它们都通过上拉电阻连接到电源上。当总线处于停止(IDLE)状态,两根线都是高电平。对于I2C总线来说,总线上连接的设备,例如LCD驱动器、存储器等都是有一个唯一的地址识别,而且都可以作为一个发送器或接收器。至于是作为发送器还是接收器,主要取决于连接设备的具体功能。例如LCD驱动只是一个接收器,而存储器则既可以接受又可以发送数据。除了发送器和接收器外,设备在执行数据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输,并产生允许传输的时钟信号的设备,这时任何被寻址的期间都被认为是从机。由于I2C总线使用两线的硬件接口简单,I2C总线的应用越来越广泛1。下面,将I2C总线的通用术语进行介绍,如表 2-1所示;I2C总线的典型接法如图 2-1所示。表 2-1 I2C总线的通用术语术语描述发送器发送数据到总线的器件接收器从总线接收数据的期间主机初始化发送、产生时钟信号和终止发送的器件从机被主机寻址的器件多主机同时有多于一个主机尝试控制总线,但不破坏报文仲裁是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程同步两个或多个器件同步时钟信号的过程图 2-1 I2C总线信号连接示意图IC总线支持任何IC 生产工艺,两线串行数据线SDA 和串行时钟线SCL都是双向线路,在连接到总线的器件间传递信息。SDA 和SCL 都是通过一个电流源或着上拉电阻连接到正的电源电压,当总线空闲时这两条线路都是高电平,连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。连接到IC总线上的每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。2.2 I2C总线的传输由于I2C总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)和1(高)的电平不是固定的。在I2C总线每传输一位数据就有一个时钟脉冲相对应,其逻辑“0”或“1”的信号电平取决于该节点的正端电源Vdd的电压。2.2.1 数据的有效性在工作过程中,数据有效要求串行数据(SDA)线上的数据必须要在串行时钟(SCL)的高电平时钟周期期间保持稳定。而只有在串行时钟(SCL)线的时钟信号是低电平的时候串行数据(SDA)上的数据才能发生变化(如图3所示)图3 数据有效性时序2.2.2 I2C总线数据传送的起始与停止条件在I2C总线数据传送的整个过程中,需要先有开始条件引发,并由停止信号结束,这两个条件在数据线上的表示如图4所示。起始条件(S):当SCL 线是高电平时,SDA 线从高电平向低电平切换。停止条件(P):当SCL 线是高电平时,SDA 线由低电平向高电平切换。不是在数据有效性中规定在SDA只能在SCL的低电平的时候变化,为何STAR,STOP不一样?首先STAR和STOP不是数据,所以可以不遵守数据有效性中的规定,其它数据都遵守,而STAR和STOP“不遵守”导致STAR和STOP更容易被识别。这样不是不遵守而是更有优势。图4 起始和停止条件起始和停止条件一般由主机产生总线在起始条件后被认为处于忙的状态在停止条件的某段时间后总线被认为再次处于空闲状态。如果产生重复起始(Sr) 条件而不产生停止条件,总线会一直处于忙的状态。此时的起始条件(S)和重复起始(Sr) 条件在功能上是一样的。2.2.4 I2C总线数据传送的重复开始条件主机与从机进行通信时,有时需要切换数据的收发方向。例如,访问某一具有I2C总线接口的存储器时,主机先向存储器输入存储单元的地址信息(发送数据),然后再读取其中的存储内容(接收数据)。在切换数据的传输方向时,可以不必先产生停止条件再开始下次传输,而是直接再一次产生开始条件。I2C总线在已经处于忙的状态下,再一次直接产生起始条件的情况被称为重复起始条件。正常的起始条件和重复起始条件在物理波形上并没有什么不同,区别仅仅是在逻辑方面。在进行多字节数据传输过程中,只要数据的收发方向发生了切换,就要用到重复起始条件。 四、数据传输2.2.5 I2C总线传输过程中的字节格式总线传输时要按照规定的数据格式,发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个应答信号。首先传输的是数据的最高位MSB(见图5)。在开始条件发出之后,SDA输入端发送一个7位的从机地址,然后第8位为数据方向位(读/写位),数据方向表明主机和从机的数据传输方向。“0”表示主机发送数据(写),“1”表示从机发送数据(读)。如果从机要完成一些其他功能后才能接受或者发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接受下一个数据字节并释放时钟SCL后,数据传输继续。数据传输由主机产生停止条件。图5 I2C总线数据传输1.1 响应数据传输必须带响应相关的响应时钟脉冲由主机产生在响应的时钟脉冲期间发送器释放SDA 线(高)。在响应的时钟脉冲期间接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平(见图6) 当然必须考虑建立和保持时间。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平。主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机-接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机-发送器通知数据结束从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。图6 I2C总线响应2.2.3 I2C总线传输过程中的应答信号数据传输必须带应答。相应的时钟脉冲由主机产生。在应答的时钟脉冲器件,发送机SDA输入端保持高电平,接收机将SDA输出端拉低,使它在这个时钟脉冲的高电平器件保持稳定的低电平。当从机不能应答从机地址时,从机必须使数据线保持高电平,主机产生一个停止条件,终止传输或者产生重复起始条件开始新的传输。五、仲裁和时钟发生1.2 同步所有主机在SCL 线上产生它们自己的时钟来传输I2C 总线上的报文。数据只在时钟的高电平周期有效。因此,需要一个确定的时钟进行逐位仲裁。时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说:SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL 线保持这种状态直到到达时钟的高电平(见图7)。但是,如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此,SCL 线被有最长低电平周期的器件保持低电平。此时,低电平周期短的器件会进入高电平的等待状态。图7 仲裁过程中的时钟同步当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别。而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。这样,产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。1.3 仲裁l 主机只能在总线空闲的时侯启动传送。两个或多个主机可能在起始条件的最小持续时间tHD;STA 内产生一个起始条件,结果在总线上产生一个规定的起始条件。l 当SCL 线是高电平时,仲裁在SDA 线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。然后,进一步获得其的判定条件:l 仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假设主机是发送器),或者比较响应位(假设主机是接收器)。l I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。l 在串行传输过程中时,一旦有重复的起始条件或停止条件发送到I2C 总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。 l 此外,如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器件。那么,丢失仲裁的主机必须立即切换到它的从机模式。l I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。图8 显示了两个主机的仲裁过程。当然,可能包含更多的内容(由连接到总线的主机数量决定)。此时,产生DATA1 的主机的内部数据电平与SDA 线的实际电平有一些差别,如果关断数据输出,这就意味着总线连接了一个高输出电平。图8 两个主机的仲裁过程必须特别注意的是:在串行传输时,当重复起始条件或停止条件发送到I2C 总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。也就是说,仲裁在不能在下面情况之间进行:a) 重复起始条件和数据位b) 停止条件和数据位c) 重复起始条件和停止条件从机不被卷入仲裁过程。六、地址格式1.4 1、7位地址格式数据的传输遵循图9 所示的格式。在起始条件(S )后,发送了一个从机地址。这个地址共有7 位,紧接着的第8 位是数据方向位(R/W): 0 表示发送写,1 表示请求数据读。数据传输一般由主机产生的停止位(P) 终止。但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件Sr和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。图9 完整的数据传输可能的数据传输格式有:1.1 主机发送器发送到从机接收器传输的方向不会改变(见图10)图10 主机发送器用7 位地址寻址从机接收器。传输方向不变。1.2 在第一个字节后主机立即读从机(见图11)在第一次响应时,主机发送器变成主机接收器,从机接收器变成从机发送器。第一次响应仍由从机产生。之前发送了一个不响应信号(/A)的主机产生停止条件。图11 在第一个字节后主机立即读从机2.2.7 I2C总线传输信号的时序I2C总线数据传送分为读操作和写操作(图 2-4),而读操作还分为按照当前位置进行读操作(图 2-6)以及随即性读操作(图 2-8),时序图如下图 2-4 主机向从机发送了一个字节的时序图 2-5 主机向从机连续发送多个字节的时序图2-5所表示的是一个最简单的写操作的时序,主机向从机传送一个7位的地址数据,然后第8位为读/写位,在这个表示地址的字节传输结束之后,在串行时钟(SCL)的第9个时钟,由从机发送一个应答信号(此时串行数据SDA输入端在SCL为高电平期间内保持高电平,而SDA输入端输出为低电平,表示一个应答信号),接着主机继续向从机传输8位数据,之后再次由从近发送一个应答信号,这个时候如果还需要发送数据字节,可以继续发送(图 2-5),每发送8位数据后都要由从机发送一个应答信号,当数据发送完毕后,在最后一个应答信号之后的那个SCL处于高电平的时钟周期内,将串行数据SDA输入端从低电平拉为高电平,表示数据传输停止。图 2-6 主机向从机接收1个字节数据的时序图 2-7 主机向从机连续接收多个字节数据的时序图 2-6所表示的是一个最简单的按照当前位置进行的读操作,前9个周期的时序与写操作的时序一致,不同的是当从机发送一个应答信号之后,由从机向主机传输8位数据,这个时候如果还需要发送数据字节,可以继续发送(图 2-7),每发送8位数据后都要由主机发送一个应答信号,当数据发送完毕后,在最后一个数据字节传送结束之后的那个SCL处于高电平的时钟周期内SDA的输入端保持高电平,而SDA输入端输出也为高电平,表示一个不应答信号(图中Nack(Not acknowledge)表示),之后的一个时钟周期内产生停止条件,表示数据传输停止。图 2-8 主机向从机随即接收多个字节数据的时序图 2-8所表示的是一个多字节的随机性读操作,选择性读操作允许主器件对寄存器的任意字节进行读操作,主机首先通过发送起始信号、从机地址和它想要读取的字节数据的地址执行一个伪写操作。在从机应答之后,主机重新发送起始信号和从机地址,此时读/写位为“1”进行读操作,从机响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件发送应答信号,这个时候如果还需要发送数据字节,可以继续发送,每发送8位数据后都要由主机发送一个应答信号,当数据发送完毕后,在最后一个数据字节传送结束之后的那个SCL处于高电平的时钟周期内SDA的输入端保持高电平,而SDA输入端输出也为高电平,表示一个不应答信号(图中Nack(Not acknowledge)表示),之后的一个时钟周期内产生停止条件,表示数据传输停止。2.3 本章小结本章主要介绍了I2C的有关知识,从I2C总线的概念开始,介绍了I2C总线的开始和停止条件以及如何传输数据才有效,然后介绍了I2C总线传输过程中应答信号的产生和作用,以及位传输和字节传输需要注意的每个时钟周期代表的意义,最后,介绍了I2C总线工作的各种状态的时序,以便下面用语言对I2C总线进行设计与实现。第3章 VHDL语言的基础知识3.1 VHDL语言的概述VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用于提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。VHDL语言主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。3.2 VHDL语言的特点与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。VHDL最初是作为一种仿真标准格式出现的,因此VHDL既是一种硬件电路描述和设计语言,也是一种标准的网表格式,还是一种仿真语言,其丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能用于查验设计系统的功能可行性,随时可对设计进行仿真模拟。即在远离门级的高层次上进行模拟,使设计者对整个工程设计的结构和功能的可行性做出决策。VHDL语言的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合市场所需求的,大规模系统高效、高速的完成必须由多人甚至多个开发组共同并行工作才能实现的特点。VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有力的支持。VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构2。3.3 VHDL语言的程序结构一个完整的VHDL语言程序通常包括实体、构造体、配置、包集合和库5个部分。3.3.1 VHDL程序的库库是经编译后的数据的集合,它存放包集合定义、实体定义、构造体定义和配置定义。在VHDL语言中,库的说明总是放在设计单元的最前面:LIBRARY 库名;这样,在设计单元内的语句就可以使用库中的数据。由此可见,库的好处就在于使设计者可以共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,但是库和库之间是独立的,不能互相嵌套。3.3.2 包集合包集合是用来罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件语言、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构的一个层次,要使用包集合时可以用USE语句说明。例如:use ieee.std_logic_unsigned.all;该语句表示在VHDL程序中要使用名为std_logic_unsigned的包集合中的所有定义或者说明项。包集合的结构如下所示:PACKAGE 包集合名 IS说明语句END 包集合名; 包集合标题PACKAGE BODY 包集合名 IS说明语句END BODY; 包集合体一个包集合由两大部分组成:包集合标题和包集合体、包集合体可以省略不写。一般包集合标题列出所有项的名称,而包集合体具体给出各项的细节。3.3.3 实体说明任何一个基本设计单元的实体说明都具有如下结构:ENTITY 实体名 IS类属参数说明端口说明END 实体名;其中类属参数说明必须放在端口说明之前,用于指定参数。端口说明是对基本设计实体与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。其一般书写格式如下:PORT(端口名:方向 数据类型名; . 端口名:方向 数据类型名);端口名是定义每个外部引脚的名称。端口方向用来定义外部引脚的信号方向是输入还是输出,分为5种:IN(输入),OUT(输出而且构造体内部不能再使用),INOUT(双向),BUFFER(输出而且构造体内部可以再次使用),LINKAGE(不指定方向,无论出入都可以连接)。数据类型在逻辑电路设计中只用到两种:BIT和BIT_VECTOR。当端口被说明为BIT数据类型时,该端口的信号取值只可能是“0”或者“1”。这里的“0”和“1”是指逻辑值。当端口被说明为BIT_VECTOR数据类型时,该端口的取值可能是一组二进制位的值。3.3.4 构造体构造体定义了设计单元具体的功能。构造体对其基本设计单元的输入输出关系可以用3种方式进行描述,即行为描述、寄存描述和结构描述。由于构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。一个构造体的具体结构描述如下:ARCHITECTURE 构造体名 OF 实体名 IS定义语句BEGIN并行处理语句END 构造体名;构造体名是对本构造体的命名,是该构造体的唯一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。定义语句用来对构造体内部所使用的信号、常数、数据类型和函数进行定义,格式和端口说明的语句一样,但因为它是内部连接的信号,故没有也不需要有方向的说明。并行处理语句具体的描述了构造体的行为3。3.3.5 配置一个实体可以包含多个结构体,配置的作用就是根据需要选择实体的结构体。配置语句描述层与层之间的连接关系以及实体与结构之间的连接关系,设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一实体时,可以利用配置来选择不同的结构体,进行性能对比试验以得到性能最佳的结构体。配置语句的基本书写格式如下:CONFIGURATION 配置名 OF 实体名 IS语句说明END 配置名;经常使用的配置有以下三类:默认配置、元件配置和结构配置4。3.4 本章小结本章主要介绍了VHDL的有关知识,主要介绍了VHDL特点以及如何用VHDL语言编写程序,首先定义库函数,然后引入包集合,定义实体,构造体,注意构造体内可以包括子程序,最后定义配置。第4章 设计工具和设计方法4.1 设计工具本次设计使用的是Altera公司的设计软件Quartus II ,用VHDL语言编程实现的。Quartus II软件是Altera提供的综合性开发软件,可以轻易地满足特定地设计需求。它支持原理图、VHDL、VerilogHDL等多种设计输入形式,内有综合器以及仿真器,可以完成从设计输入到硬件配置的完整设计流程。Quartus II软件允许用户在设计流程的每个阶段使用软件提供的软件图形用户界面、EDA工具界面或命令行方式。其图形用户界面的功能分为:设计输入、综合、布局布线、时序分析、仿真、编程、系统设计、软件开发、基于块的设计、EDA界面、时序收敛、调试、工程更改管理等5。在本次设计中主要用到前面几个功能,下面坐下简单的介绍:设计输入是使用Quartus II软件的模块输入方式、文本输入方式、Core输入方式和EDA设计输入工具等表达用户的电路构思,同时使用分配编辑器(Assignment Editor)设定初始设计约束条件。综合是将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑链接(网表),并根据目标与要求(约束条件优化所生成的逻辑连接,输出edf或vqm等标准格式的网表文件,供布局布线器进行实现。除了可以用QuartusII软件的综合工具外,也可以使用第三方综合工具,生成与QuartusII软件配合使用的edf网表文件或vqm文件。布局布线的输入文件是综合后的网表文件,QuartusII软件中布局布线包含分析布局布线结果、优化布局布线、增量布局布线和通过反标保留分配等6。时序分析是允许用户分析设计中所有逻辑的时序性能,并协助引导布局布线满足设计中的时序分析要求。它观察和报告时序信息,如建立时间、保持时间、时钟至输出延时、最大时钟频率以及设计的其他时序特性,可以使用时序分析生成的信息来分析、调试、和验证设计的时序性能。仿真分为功能仿真和时序仿真。功能仿真主要是验证电路功能是否符合设计要求,它可以在不同的层次进行,它可以对基本单元仿真也可以对几个基本单元构成的单元进行仿真,直至系统级的仿真;时序仿真包含了延时信息,它能较好的反映芯片的设计工作情况。可以使用QuartusII集成的仿真工具仿真,也可以使用第三方工具对设计进行仿真,如Modelsim。编程和配置是在全编译成功后,对Altera器件进行编程或配置,它包括Assemble(生成编程文件)、Programmer(建立包含设计所用器件名称和选项的链式文件)、转换编程文件等。EDA界面中的EDA Netlist Writer是生成时序仿真所需要的包含延迟信息的文件。除了上述工具外,QuartusII软件还提供第三方工具的连接。如综合工具Synplify、Synplifypro、Leonardo,仿真工具Modelsim、Aldec HDL等这些业内公认的专业综合、仿真工具。4.2 基于FPGA的数字电路的设计流程随着FPGA容量,功能及其可靠性的提高,在现代数字通信系统的中使用率越来越高,采用FPGA设计数字电路已经成为数字电路系统领域的主要方式之一7。在信号的处理以及整个系统的控制中,FPGA不但能大大缩减电路的体积,提高电路的稳定性,而且其先进的开发工具使整个系统的设计周期大大缩短8。主要的设计流程图如下9:设计准备:在进行设计之前,必须了解项目设计的需求,首先要根据任务书要确定方案,选择使用说明设备等准备工作。设计输入:将设计的系统或电路以某种形式表现出来,输入到计算机上,包括状态图输入、图形输入和HDL语言输入,常用的是后两种。HDL语言在描述状态机,控制逻辑,总线功能方面比较强;原理图输入比较适合顶层设计、数据通路逻辑;在本文的设计中,使用的VHDL语言输入。功能仿真:功能仿真也称前仿真或行为仿真。它是在没有考虑器件延时和布线延时的理想情况下,对源代码进行逻辑上的功能验证,以便及时地进行修改。设计处理:包括了逻辑分析、综合和优化三个步骤。逻辑分析是对HDL源文件进行分析并纠正语法错误。综合就是给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案,该方案必须同时满足预期的功能和约束条件;优化则是根据用户的设计约束,对速度和面积进行逻辑优化。设计实现利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应的文件,供后续的时序仿真和下载。时序仿真时序仿真是FPGA设计的重要步骤之一,又称后仿真,在做完布局布线后进行,仿真中包含布局布线产生的器件延时,连线延时信息。它与特定的器件有关,主要验证程序在目标器件上的时序关系,是接近器件真实工作情况的仿真,仿真精度比较高。下载验证下载又称配置,是在功能仿真和时序仿真正确的前提下,将综合后形成的文件下载到具体的FPGA芯片中。然后再进行实际器件的物理测试即为电路验证。这是最终验证设计项目在目标系统上的实际工作情况,以排除错误,改正设计。4.3 本章小结本章首先介绍了这次设计需要用到的设计软件Quartus II的特点和功能。然后介绍了居于FPGA的数字电路的设计流程,从开始的准备到数据的输入与功能运行,然后到中间的调试再进行功能运行,最后确认无误了带入时序信号然后进行时序仿真,最后下载具体的FPGA芯片中进行电路验证,调试程序,最后得到正确结果。第5章 I2C总线的功能设计5.1 I2C总线完成的功能I2C总线中,数据信号的传输是由串行数据线SDA和串行时钟线SCL完成的,可发送和接收数据。I2C总线是为了实现主机和从机之间的数据传输,当从主机向从机发送数据时,实现的是I2C总线的写操作功能,主机先发送一个开始条件,之后主机先向SDA线发送从机的7位地址数据以及第8位写位,数据经过SDA线时,开始在与SDA线连接的器件中搜索对应的地址,找到后,从机反馈一个应答信号,这个时候主机开始通过SDA线向从机发送数据,每一个字节8位数据传输结束,从机都要反馈一个应答信号。得到从机的最后一个应答信号后,主机发送一个停止信号。当主机接收从机发送的数据时,实现的是I2C总线的读操作功能,这个时候主机先向SDA线发送从机的7位地址数据以及第8位读位,数据经过SDA线时,开始在与SDA线连接的期间中搜索对应的地址,找到后从机反馈一个应答信号,这个时候从机开始通过SDA线向主机发送数据,每个字节8位数据传输结束,主机要向从机反馈个应答信号(如果从机发送完最后一个字节的时候,主机不用发送应答信号,而发送一个停止信号)。如果主机有选择的接收从机发送的数据,实现的是I2C总线的选择性读操作功能,这个时候主机先向SDA线发送从机的7位地址数据以及第8位写位,数据经过SDA线时,开始在与SDA线连接的器件中搜索对应的地址,找到后,从机反馈一个应答信号,这个时候主机通过SDA线向从机发送字节8位的地址位,从机收到后反馈一个应答信号。之前完成了一次伪写操作。这个时候主机发送一个重新开始信号,重新向SDA发送从机的7位地址数据以及第8位读位,找到相应的从机后,从机反馈一个应答信号,然后从机将该字节位开始的数据通过SDA线向主机发送,每个字节8位数据传输结束,主机要向从机反馈个应答信号(如果从机发送完最后一个字节的时候,主机不用发送应答信号,而发送一个停止信号)。这两线都是由CPU引出,其它受控电路均挂接SDA和SCL线上,只有CPU具有控制权,在其控制下,CPU即可以向数据总线发送信息,又能读取被控器件反馈的响应信息。总线上的受控电路和模块都有唯一的地址,按类型对他们进行分配。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线控制器是微处理器与I2C器件之间的接口,它可以使性能各异、速度不同,功能不一的外设与微处理器之间方便快捷地进行通信。即要接收处理器的控制信号,命令与数据;还要发送I2C器件的数据和状态响应到处理器实现处理器与I2C器件之间的通信机制。鉴于I2C总线的规范,其接口主要完成的功能如下:1写操作(串行转并行)2顺序读操作(并行转串行)3开始/停止/重启/响应各种触发状态4读写控制位和启动位5随机读取总线数据和状态5.2 用VHDL语言实现写操作时的串行转并行写操作时,输入SDA上的串行数据,输出从机上的并行数据,用VHDL语言实现如图 5-1和图 5-2 图5-1 串行转并行模块图 图5-2 串行转并行仿真图5.3 用VHDL语言实现顺序读操作时的并行转串行顺序读操作时,输入从机上的并行数据,输出SDA的串行数据,用VHDL语言实现如图 5-3和图 5-4 图 5-3 并行转串行模块图 图 5-4 并行转串行仿真图5.4 I2C总线控制器的顶层设计I2C总线控制器就是将主机和从机连接起来,它一方面要通过数据总线与主机交换数据,另一方面通过I2C总线与从机交换数据,使他们之间能够进行通讯。根据据总线控制器要完成的功能,需要2条8位数据线,1条8位地址线,1条串行时钟线,1条串行数据线,1条读写控制线,1条启动线,1条清零线,1条应答信号线。其详细的输入输出接口信号及其功能如表 5-1所示,其中kongzhi是芯片的控制信号,只有当它启动之后,其它的地址、复位和命令信号才能启动。表 5-1 I2C总线接口信号表端口名方向描述kongzhi输入启动信号scl输入时钟输入clr输入清零位dizhi输入地址信号输入shuru输入读操作中从机发送的数据duxie输入读写控制信号shuchu输出写操作中主机接收的数据ack输出从机的应答信号sda输入/输出数据输入输出信号它的外围接口设备如图 5-5 图5-6 图5-7所示: 图 5-5 I2C总线顶层设计模块图 图 5-6 I2C总线控制器的外围接口功能框图 图 5-7 I2C总线控制器的端口图5.5 本章小结本章首先介绍了I2C总线的功能,分为三种写操作,顺序读操作和选择性读操作,然后根据这3种操作用VHDL语言做了其中比较核心的串行与并行之间的转换,附有仿真图,最后完成了I2C总线的顶层设计,为完成下章的I2C总线的时序实现做了铺垫。第6章 I2C总线的硬件时序仿真本文在Quartus 7.1环境下对I2C总线控制其时序进行仿真,上一章中已经对部分模块进行了功能仿真。而时序仿真是在FPGA布局布线完成之后进行的仿真,这一级别的仿真可以真实地模拟真实电路的工作情况。为了确认I2C总线控制器是否能够正确运行,我们建立一个模拟的仿真环境,主器件为微控制器,从器件是EEPROM。I2C总线规范规定,每个从器件都拥有一个唯一的7位从器件地址,让主机来进行选择,通常7位中四个较重要的位(MSBt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论