2006-硬件课程设计_第1页
2006-硬件课程设计_第2页
2006-硬件课程设计_第3页
2006-硬件课程设计_第4页
2006-硬件课程设计_第5页
已阅读5页,还剩152页未读 继续免费阅读

下载本文档

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

文档简介

2006-硬件课程设计第一页,共157页。设计要求:1。熟悉VHDL编程语言方法,掌握VHDL语言的基本结构和语句,能编写规范的系统描述;基本掌握逻辑综合的方法;编写具有一定要求的逻辑电路源程序,并进行调试。2。熟悉在系统逻辑设计软件环境下,完成源程序转换,下载和在可编程器件上进行调试。学会使用ispDesignExpert软件工具进行系统设计。3。完成设计说明文件第二页,共157页。考核方式:(1)上课,上机。(2)验机,通过测试,实现要求功能。(3)硬件课程设计报告包括:VHDL语言源程序、设计说明、逻辑图、真值表。第三页,共157页。

参考文献:1。 李辉编著,ISP系统设计技术入门与应用,电子工业出版社,2002

2。乔长阁等,VHDL简明教程, 清华大学出版社,1997

3。北京理工大学ASIC研究所,VHDL语言100例详解, 清华大学出版社,1999相关网址连接

VHDL在线参考第四页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第五页,共157页。第1章

在系统可编程集成电路基础第六页,共157页。1。1 概述主要术语与概念1 专用集成电路ASICsApplication-SpecificIntegratedCircuits2 非专用集成电路有PLDProgrammableLogicDeviceEPLDErasableProgrammableLogicDevice第七页,共157页。一个门阵等效门就是一个两输入端与非门的低密度的PLD(<1000个)有:1 PALProgrammableArrayLogic2 GALGenericArrayLogic第八页,共157页。高密度的PLD(>1000个)有:1 CPLDComplexProgrammableLogicDevice2 FPGAFieldProgrammableGateArray两者都具有更多的I/O,Productterm(乘积项)和Macrocell(宏单元)通过内部可编程连线PI(ProgrammableInterconnect)将内部逻辑单元(LogicCell)连接起来,以构成芯片。第九页,共157页。FPGA(FieldProgrammableGateArray)的基本结构由以下几个部分组成1 可编程逻辑块CLB(ConfigurableLogicBlocks), 按矩阵排列2 芯片四周的多个IOB(Input/OutputBlocks)3 由可编程内部连线PI(ProgrammableInterconnect); 将行与列的CLB以及IOB之间实现互连。由这3个主要部分就构成了可编程逻辑单元阵列LCA(LogicCellArray)第十页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第十一页,共157页。1。2在系统可编程逻辑器件的结构一。ISP含义ISP 在系统可编程(In-SystemProgrammable)ispLSI 在系统可编程大规模集成电路(In-SystemProgrammableLargeScaleIntegration)ISP指用户为修改或重构数字逻辑系统,在已设计和制作的系统中,通过器件的编程控制信号线直接在线编程、修改、调试、验证。使已经定型的产品性能可以不断地改进。第十二页,共157页。二。Isp系列在系统可编程逻辑芯片特点:1。通用性:可以实现几乎所有逻辑电路功能。如:编码器、译码器、寄存器、计数器、串并转换、波特率发生器、网络器件;用于:数据采集、图像处理、多媒体。第十三页,共157页。2。可在系统编程,灵活性强3。高集成度:ispLSI1000系列:等效PLD门密度2000-8000ispLSI2000系列:等效PLD门密度1000-8000ispLSI3000系列:等效PLD门密度7000-20000ispLSI5000系列:等效PLD门密度12000-24000ispLSI8000系列:等效PLD门密度25000-450004。低功耗:供电电压:5V、3.3V、2.5V、1.8V第十四页,共157页。三。在系统可编程逻辑芯片型号含义:见P6图1-1第十五页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第十六页,共157页。1。2。1 ispLSI1016的结构ispLSI1016采用了电可擦除(ElectricalErasable)CMOS(E2CMOS)技术,由2000个PLD门组成,用PLCC塑料引线芯片载体封装(PlasticLeadChipCarrierPackage)一。外部特性引脚图:图1—2,引脚44个5V供电,内部有:96个逻辑寄存器。2000个PLD门3个时钟输入端: Y0-11,Y1-35,Y2-334个指定数据输入脚: IN3-IN0(2,36,24,14脚)第十七页,共157页。1 32个I/O2 3个专用输入(DedicatedInput)IN0,IN1,IN23 5个编程用引脚:(1)编程允许 ISPEN-13,(2)串行数据输入和指定输入 SDI/IN0 -14,(3)方式控制和输入 MODE/IN2-36,(4)串行数据和指定输出 SDO/IN1 -24,(5)串行时钟 SCLK/Y2 -33.第十八页,共157页。这5个编程用引脚是计算机与ispLSI之间通信的接口信号。计算机将已经设计好的逻辑方程或电路原理图文件,按照一定的协议编译通过后,转换为JEDEC(Join-ElectronicDeviceEngineeringCouncil电子器件工程联合协会)(熔丝图文件)标准文件。通过这5个编程引脚把扩展名为.JED(熔丝图文件)的文件下载到(DownLoad)ispLSI器件中。第十九页,共157页。4 指定时钟输入引脚 Y05 时钟输入和复位输入引脚 Y1/RESET第二十页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第二十一页,共157页。1。2。1。1 芯片结构ispLSI1016逻辑器件从结构上看:是由以下5个大部分组成:16个通用逻辑块 GLB(GenericLogicBlock),输出布线区 ORP(OutputRoutingPool),全局布线区 GRP(GlobalRoutingPool),输入\输出单元 (I\OCell)时钟分配网络 CDN(ClockDistributionNetwork)ispLSI1016逻辑器件共有两个组合模块(Megablock)。每个组合模块由5个部分组成:8个GLB (GenericLogicBlock),1个ORP (OutputRoutingPool),16个输入\输出单元 (I\OCell)2个专用输入 (DedicatedInput)1个公共乘积项输出使能第二十二页,共157页。1。通用逻辑块GLB(GenericLogicBlock)每个GLB含有18个输入信号,4个输出信号GLB主要由4个部分组成:1)与阵列2)乘积共享阵列PTSA(ProductTermSharingArray)3)输出逻辑宏单元(OutputLogicMacroCell)4)逻辑控制单元第二十三页,共157页。1)与阵列(20个与项) 16个输入 来源于全局布线区GRP(Global RoutingPool),即可以来自 于外引脚也可以来自于反馈信号。 2个输入 来源于专用的输入(DedicatedInput)引脚。2)或阵列(乘积共享区)4个或门,有4种连接模式:

(1)标准模式: 图1—5,或门起作用,可灵活连接到输出。

(2)直通模式: GLB乘积项的直通模式 图1—7,将乘积项的输出直接连接到GLB,速度快。 (3)异或逻辑模式: 图1—8,利用异或门和D触发器可以构成T,JK触发器;组成计数器,累加器,比较器等。 (4)混合模式:(2)和(3)两种模式的组合: 图1—9,时钟分配网络控制可来自:CLK0,CLK1,CLK2,或GLB中的任意一个乘积项。第二十四页,共157页。3)输出逻辑宏单元OLMC (OutputLogicMacroCell)可使或门的输出经过各种连线模式,最终通过多路选择器送到输出端。4)逻辑控制单元。通用逻辑块GLB中的触发时钟由CDN提供;通用逻辑块GLB中的触发复位信号RESET来源于RESET脚和一个乘积项产生。第二十五页,共157页。2。输出布线区(ORP)见图1—10功能:用于输出控制。任何一个GLB的输出端都能够通过输出布线区(ORP)与I/O相连,将各GLB的输出灵活的连接到输出管脚上。即可实现不改变芯片引脚的外部连线,通过修改输出布线区的布线逻辑,使该引脚的输出信号符合设计要求。注意:连接有限制;如A0的Q0只能接I/O0,4,8,12。(即寄存器内的位置顺序不变)第二十六页,共157页。3。全局布线区(GRP)见图1—11功能:将GLB的输出或I/O管脚的输入信号灵活的连接到GLB的各输入端。第二十七页,共157页。4。输入输出单元(I/OCELL)结构:见图1—12将I/OPin定义为输出时:I/O单元的输入信号来源于ORP;将I/OPin定义为输入时:I/O单元将引脚输入信号送到GRP。几种输入输出结构:见图1—13第二十八页,共157页。5。时钟分配网络:见图1—14功能:接受3个时钟输入Y2,Y1,Y0产生5个时钟输出CLK0,1,2,IOCLK0,1第二十九页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第三十页,共157页。1。2。1。2功耗与延迟时间1。功耗:与工作速度与使用的乘积项有关。见图1—162。延迟时间与传输路径及负载有关。见图1—18第三十一页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第三十二页,共157页。1。2。2ispLSI1016编程接口和编程1。编程接口编程下载:指源程序经编译形成的熔丝图文件.JEDEC。PC机通过25芯并行通信电缆和编程器接口电路相连,传送到ispLSI芯片中的E2CMOS,以便保存信息。编程缓冲接口电路见图1—19第三十三页,共157页。主机一侧:25针并行接口,使用其中8根连线经扁平电缆接编程接口电路ispLSI芯片一侧接6个管脚多个芯片可共用一个接口,形成串行连接。见图1—20第三十四页,共157页。ISP菊花链下载软件ISP菊花链是基于Windows环境的可编程工具,在一个链路上可编程达100个ISP器件。软件包括混合的5V、3.3V的ISP和ispJATG编程能力。使用者可以对芯片进行单路或多路编程,对链上所有器件编程的时间仅为其中最长的器件的编程时间。内部的ispATE编程工具是完全集成化的且允许用ATE设备快速编程。第三十五页,共157页。编程控制信号有:(1)ispEN 在系统可编程容许(2)SCLK(SerialClock),作为内部移位寄存器的时钟(3)SDI(SerialDataInput)(4)SDO(SerialDataOutput)(5)Mode 方式控制信号第三十六页,共157页。第1章在系统可编程集成电路基础

1。1概述

1。2在系统可编程逻辑器件的结构

1。2。1ispLSI1016的结构

1。2。1。1 芯片结构

1。2。1。2功耗与延迟时间

1。2。2ispLSI1016编程接口和编程

1。编程接口

2。编程下载操作第三十七页,共157页。2。编程下载操作ispLSI芯片有两种工作状态:ISPEN=1:非编辑状态(NormalState

)使ispLSI芯片处于非编辑状态,其它4个编程信号可作为输入信号使用。ISPEN=0:编辑状态(EditState)编程操作受到片内的状态机(StateMachine)控制,该状态机有3个状态:空闲状态,移位状态,执行状态。根据控制信号Mode和SDI的状态,状态机决定:是停留在现状态;还是转移到下一个状态。第三十八页,共157页。编程状态下共3种状态:见图1—211。空闲状态(IdleState):MODE=1SDI=0:识别可编程芯片的型号,将可编程芯片的识别码装入移位寄存器。MODE=0在时钟信号的作用下,从SDO送出识别码数据。MODE=1SDI=1:转到命令移位状态。第三十九页,共157页。2。移位状态(ShiftState):串行接受指令MODE=0,且在串行时钟信号的配合下将操作命令送到状态机;操作命令送到状态机后;①当MODE=1SDI=1:转到命令执行状态。②MODE=1SDI=0:状态机转到空闲状态。3。执行状态(ExecuteState):MODE=0,且在串行时钟信号的配合下状态机开始执行在移位状态装入的操作命令。MODE=1SDI=1:转到移位状态,接受新的命令。MODE=1SDI=0:状态机转到空闲状态。第四十页,共157页。4 操作命令编程命令由5位二进制组成,可表示17种不同的操作:全擦除,部分擦除,移位,校验,编程,编程加密,写入等第四十一页,共157页。第四节ISP开发软件SYNARIO的使用一。新建项目:P23–2二。选择器件:P23–3三。建立源文件:P23–4四。编辑修改源文件:双击或打开第四十二页,共157页。五。编译源文件:P25—7六。连接,验证,生成JED文件:P25—8七。下载JED文件到芯片中:P25—9八。调试:连接输入信号:实验台开关。连接输出信号:实验台喇叭,LED灯。第四十三页,共157页。第2章硬件描述语言VHDL基础2。1概述2.2VHDL语言的语法规则 2.2.1标识符 2.2.2数据对象 2.2.3数据类型 2.2.4VHDL运算符第四十四页,共157页。2。1概述传统数字电路设计方法不适合设计大规模的系统。工程师不容易理解原理图设计的功能。众多软件公司开发研制了具有自己特色的电路硬件描述语言HDL(HardwareDescriptionLanguage),存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。第四十五页,共157页。美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL。这种语言的成就有两个方面:描述复杂的数字电路系统;成为国际的硬件描述语言标准。第四十六页,共157页。主要术语与概念VHDL是VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage的缩写。VHDL语言可描述一个数字电路的输入、输出以及相互间的行为与功能,而其硬件关联性的语法与形式虽类似于一般程序语言,但是涵盖许多与硬件关联的语法构造,它特有的层次性设计语法结构适合大型设计项目的团队合作,是目前最通用的硬件描述语言。第四十七页,共157页。硬件描述语言(HDL):即可以描述硬件电路的功能、信号连接关系及定时关系的一种语言。目前,VHDL和Verilog已先后成为IEEE标准硬件描述语言。硬件描述语言(HDL)的特点:可以借鉴高级编程语言的功能特性对硬件电路的行为和结构进行高度抽象化和规范化的描述;同时,还可以对硬件电路的设计进行不同层次、不同领域的模拟验证和综合优化等处理,从而使硬件电路的设计达到高度自动化。第四十八页,共157页。VHDL的优点1.用于设计复杂的、多层次的设计,支持设计库和设计的重复使用;2.与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节;3.有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本;4.VHDL有良好的可读性,容易理解。第四十九页,共157页。VHDL的应用VHDL是由美国国防部(DOD)制定,以作为各合同商之间提交复杂电路设计文档的一种标准方案.现在VHDL被广泛用于:电路设计的文档记录设计描述的逻辑综合电路仿真1995年我国技术监督局制定的《CAD通用技术规范》推荐VHDL作为我国电子设计自动化硬件描述语言的国家标准。至此,VHDL在我国迅速普及,现在已成为从事硬件电路设计开发人员所必须掌握

的一门技术。第五十页,共157页。学习VHDL的几点重要提示1.了解VHDL的可综合性问题:VHDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。 但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现)。

不可综合的VHDL语句在软件综合时将被忽略或者报错。 应当牢记:“所有的VHDL描述都可以用于仿真,但不是所有的VHDL描述都能用硬件实现。”第五十一页,共157页。2.用硬件电路设计思想来编写VHDL:学好VHDL的关键是充分理解VHDL语句和硬件电路的关系。编写VHDL,就是在描述一个电路,我们写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言。

要做到这一点,需要多实践,多思考,多总结。第五十二页,共157页。3.语法掌握贵在精,不在多。30%的基本VHDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用的多。第五十三页,共157页。VHDL与原理图输入法的关系

VHDL和传统的原理图输入方法的关系就好比是高级语言和汇编语言的关系。VHDL的可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好,效率高,比较直观,但设计大规模CPLD/FPGA时显得很烦琐,移植性差。在真正的PLD/FPGA设计中,建议采用原理图和VHDL结合的方法来设计,适合用原理图的地方就用原理图,适合用VHDL的地方就用VHDL,并没有强制的规定。在最短的时间内,用自己最熟悉的工具设计出高效,稳定,符合设计要求的电路才是最终目的。第五十四页,共157页。VHDL开发流程用VHDL语言开发PLD/FPGA的完整流程为:1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的VHDL编辑环境。通常VHDL文件保存为.vhd文件。2.功能仿真:将文件调入VHDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)第五十五页,共157页。3.逻辑综合: 将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。4.布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。5.时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫后仿真)第五十六页,共157页。6.编程下载:确认仿真无误后,将文件下载到芯片中通常以上过程都可以在PLD/FPGA厂家提供的开发工具(如MAXPLUSII,Foundation,ISP)中完成,但许多集成的PLD开发软件只支持VHDL的子集,可能造成少数语法不能编译,如果采用专用VHDL工具分开执行,效果会更好,否则这么多出售专用VHDL开发工具的公司就没有存在的理由了。第五十七页,共157页。VHDL与计算机语言的区别1. 运行的基础不同: 计算机语言是在CPU+RAM构建的平台上运行; VHDL设计的结果是由具体的逻辑、触发器组成的数字电路。2. 执行方式不同: 计算机语言基本上以串行的方式执行;

VHDL在总体上是以并行方式工作;3. 验证方式不同 计算机语言主要关注于变量值的变化; VHDL要实现严格的时序逻辑关系;第五十八页,共157页。数字系统自动设计流程图概念设计系统设计和描述系统划分子系统功能描述综合逻辑描述版图综合版图描述芯片制造测试封装功能验证系统验证功能验证功能验证设计者第五十九页,共157页。2.2VHDL语言的语法规则

2.2.1标识符2.2.2数据对象2.2.3数据类型2.2.4VHDL运算符第六十页,共157页。标识符规则:标识符规则是在书写VHDL程序时的一般文字规则。基本标识符由字母、数字以及下划线字符组成,且具有以下特征要求:●第一个字符必须是字母;●最后一个字符不能是下划线;●不允许连续两个下划线;●在标识符中大、小写字母是等效的。●VHDL中的注释文字一律为2个连续的连接线“--”,可以出现在任一语句后面,也可以出现在独立行;●VHDL的保留字(关键字)不能用于标识符;2.2.1标识符(Identifiers)第六十一页,共157页。如下标识符是非法的:_tx_clk8B10Blarge#numberlink__barselectrx_clk_例如:如下标识符是合法的: tx_clk Three_state_Enable sel7D HIT_1124--标识符必须起始于字母--只能是字母、数字、下划线--不能有连续两个下划线--关键字(保留字)不能用于标识符--最后字符不能是下划线第六十二页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

1常量(CONSTANT)

2

信号(SIGNAL)3

变量(VARIABLE)2.2.3数据类型2.2.4VHDL运算符第六十三页,共157页。2.2.2数据对象(DataObjects)在VHDL中,数据对象是可以赋予一个值的客体。常用的数据对象为常量、变量和信号,在使用前必须给予说明。1

常量(CONSTANT)常量是指在设计描述中不会变化的值。在VHDL描述中,一般用常量名代替数值,便于修改程序。在综合后,连接到电源和地。可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定。常量说明语句的一般格式为:CONSTANT常量名{,常量名}:数据类型:=取值;例如:CONSTANTwidth:integer:=8;常量所赋值和定义的数据类型应一致。常量一旦赋值就不能再改变。第六十四页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

1常量(CONSTANT)2信号(SIGNAL)3

变量(VARIABLE)2.2.3数据类型2.2.4VHDL运算符第六十五页,共157页。2

信号(SIGNAL)信号是电子电路内部硬件实体相互连接的抽象表示。信号能够代表连线,也可是内连元件;信号没有方向性,也可当作输入。端口(Port)也是信号。可给它赋值, 用:=表示直接赋值 用<=表示信号赋值信号说明语句的格式为:

SIGNAL信号名{,信号名}:数据类型[:=初始值];信号包括I/O引脚信号以及IC内部缓冲信号,有硬件电路与之对应,故信号之间的传递有实际的附加延时。信号通常在Entity中和Architecture中定义;信号不能在进程中说明(但可以在进程中使用)。第六十六页,共157页。硬件中的信号总是同时工作的,即信号同时在各个模块中流动,这就是硬件电路的并发性

。VHDL体现了实际电路中信号“同时”流动的这种基本特性。信号赋值语句格式为:目标信号名<=表达式;赋值语句中的表达式必须与目标信号具有相同的数据类型。第六十七页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

1常量(CONSTANT)

2

信号(SIGNAL)

3变量(VARIABLE)2.2.3数据类型2.2.4VHDL运算符第六十八页,共157页。3

变量(VARIABLE)变量是暂存数据的量。变量说明语句的格式是:

VARIABLE变量名{,变量名}:数据类型[:=初始值];例如:VARIABLEcount:INTEGERRANGE0TO99:=0变量是一个局部量,它只用于进程和子程序。变量必须在进程或子程序(Process和Function中定义)的说明区域中加以说明,只能在并只在其内部有效。变量赋值是直接的、非预设的,它在某一时刻仅包含一个值。变量的赋值立即生效,不存在延时行为。临时数据,没有物理意义;要使其全局有效,先转换为Signal。赋值语句中的表达式必须与目标变量具有相同的数据类型。变量赋值语句格式为:目标变量名:=表达式;第六十九页,共157页。信号和变量的主要区别:1.变量是一个局部量,只能用于进程或子程序中;

信号是一个全局量,它可以用来进行进程之间的通信。2.变量赋值立即生效,不存在延时行为;

信号赋值具有非立即性,信号之间的传递具有延时性。4.信号赋值可以出现在进程中,也可以直接出现在结构体中,但它们的运行含义不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动;后者属并行信号赋值,其赋值操作是各自独立并行发生的。3.变量用作进程中暂存数据的单元;

信号用作电路中的信号连线。第七十页,共157页。5.在进程中变量和信号的赋值形式与操作过程不同:在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值即为上一句新赋的值。在信号的赋值语句中,该语句即使被执行,其值不会使信号立即发生代入,在下一条语句执行时,仍使用原来的信号值。直到进程结束之后,所有信号赋值的实际代入才顺序进行处理。因此,实际代入过程和赋值语句的执行是分开进行的。如例1所示。第七十一页,共157页。例1信号和变量值代入的区别举例

PROCESS(a,b,c,d)

BEGIN d<=a; x<=b+d; d<=c; y<=b+d;

ENDPROCESS;结果: x<=b+c; y<=b+c;

PROCESS(a,b,c)

VARIABLEd:std_logic_vector(3downto0);

BEGIN d:=a; x<=b+d; d:=c; y<=b+d;

ENDPROCESS;结果: x<=b+a; y<=b+c;当进程运行时,信号赋值将自上而下顺序执行,但第一项赋值操作并不会发生,这是因为信号赋值是在进程结束时才起作用。因为在进程结束更新时,d的最后一个赋值为c,因此执行结果为该式。第七十二页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型2.2.4VHDL运算符第七十三页,共157页。2.2.3数据类型VHDL是一种类型型很强的语言。不同类型之间的转换必须用类型转换函数.对象的数据类型定义了该对象可以具有的值和对该对象可以进行运算的限制。在VHDL中,这种限制是被强制执行的。VHDL提供了多种标准的数据类型。在VHDL描述中,每个信号、常量、变量都要指定它的数据类型,以确定它能保持那一类数据。VHDL对数据类型的定义相当严格,在进行赋值或数据类型变换过程中都要进行类型检查。VHDL不允许不同类型的数值相互赋值或使用类型不允许的运算符进行运算。这种特性可以帮助设计者在设计前期发现错误。定义数据类型IEEE预定义的标准逻辑数据类型用户自定义的数据类型数据类型的转换5.属性(Attributes)第七十四页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型

1.定义数据类型

2IEEE预定义的标准逻辑数据类型

3.用户自定义的数据类型

4。数据类型的转换

5属性(Attributes)2.2.4VHDL运算符第七十五页,共157页。1.定义数据类型VHDL提供的10种标准数据类型。(2)Real(实数)。取值范围为-1.0E+38~+1.0E+38。和整数一样,实数能被约束。由于实数运算需要大量的资源,因此综合工具常常并不支持实数类型。(3)Bit(位)。

只有两种取值,即0和1,可用于描述信号的取值。(4)Bit_Vector(位矢量)。是用双引号括起来的一组数据,每位只有两种取值:0和1。在其前可加数制标记,如X(16进制)、B(2进制、默认)、O(8进制)等。位矢量常用于表示总线的状态。(1)Integer(整数)。

取值范围为-(231-1)~(231-1)。一个整数类型和要被综合进逻辑的信号或变量在其范围上应有约束。例如:

variablea:integerrange–255to255;整数可通过语句内带符号矢量来表达给综合工具。第七十六页,共157页。(5)Boolean(布尔量)。又称逻辑量。有“真”、“假”两种状态分别用TRUE和FALSE标记。用于关系运算和逻辑运算(6)Character(字符)。是用单引号括起来的一个字母、数字、空格或一些特殊字符(如$、@、%等)。字符区分大、小写字母。(7)String(字符串)。是用双引号括起来的一个字符序列。字符串区分大、小写字母。常用于程序的提示和结果说明等。(8)Time(时间)。时间取值范围从-(231-1)~(231-1)。时间由整数值、一个以上空格以及时间单位组成。常用的时间单位有:fs、ns、μs、ms、s、min、hr等。时间常用于指定时间延时和标记仿真时刻。第七十七页,共157页。上述10种数据类型是VHDL中标准的数据类型,在编程时可以直接引用。如果用户需使用其它的数据类型,则必须进行自定义。(9)Natural(自然数)和Positive(正整数)。是整数类型的子类型。自然数取值范围为0~(231-1);正整数是大于0的整数。(10)SeverityLevel(错误等级)。错误等级分为:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)四级,用于提示系统的错误等级。第七十八页,共157页。数据类型含义整数整数32位,取值范围:-(231-1)~(231-1)实数浮点数,取值范围:-1.0e+38~1.0e+38位逻辑’0’或’1’位矢量位矢量,用双引号括起来的一组数据布尔量逻辑“真”或“假”,用TRUE和FALSE标记字符ASCII字符字符串字符矢量时间时间单位fs,ps,ns,μs,ms,sec,min,hr自然数、正整数整数的子集:自然数取值范围为0~(231-1);正整数是大于0的整数错误等级Note,warning,error,failure标准数据类型第七十九页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型 1.定义数据类型 2IEEE预定义的标准逻辑数据类型

3.用户自定义的数据类型

4。数据类型的转换

5属性(Attributes)2.2.4VHDL运算符第八十页,共157页。2IEEE预定义的标准逻辑数据类型IEEE库STD_LOGIC_1164程序包中定义的STD_LOGIC类型和STD_LOGIC_VECTOR类型。STD_LOGIC类型的数据可以具有九种取值,其含义如下:

’U’:初始值

’X’:不定态

’0’:强制0

’1’:强制1 ’Z’:高阻态

’W’:弱信号不定态

’L’:弱信号0

’H’:弱信号1

’_’:不可能情况(可忽略值)

其中,“X”方便了系统仿真,“Z”方便了双向总线的描述。该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bit.第八十一页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型 1.定义数据类型

2IEEE预定义的标准逻辑数据类型 3.用户自定义的数据类型

4。数据类型的转换

5属性(Attributes)2.2.4VHDL运算符第八十二页,共157页。3.用户自定义的数据类型VHDL允许用户自己定义数据类型。常用的用户自定义数据类型主要有:

(1)枚举(Enumerated)(Enumeration)类型。

通过列举某类变量所有可能的取值来加以定义。对这些取值,一般使用自然语言中有相应含义的单词或字符序列来代表,以便于阅读和理解。自定义数据类型说明语句的一般格式是:

TYPE数据类型名{,数据类型名}IS[数据类型定义];枚举类型定义的格式为:TYPE数据类型名IS(元素1,元素2,…);该数据类型括号中的值自左向右按升序排列,中间用逗号分隔。在VHDL中,对其中每一个元素都赋予一个位置编号,最左边的元素开始记为“0”,向右依次递增“1”。这为“属性”提供了一个访问位置编号的机制。第八十三页,共157页。例如,在程序包STD_LOGIC_1164中对STD_LOGIC的定义为TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','_');

(2)数组(ARRAY)类型。

又称为向量,是多个相同类型的数据集合。它可以是二维和多维的。一般用于定义数据总线、地址总线等。数组类型定义的格式为:

TYPE数据类型名ISARRAY(范围)OF元素类型名;范围一项规定数组下标的类型和范围。默认的下标类型是整型,但也可以使用其它数据类型,这就需要在范围中标明下标的类型。例如:TYPEcount1ISARRAY(STD_LOGIC'_'DOWNTO'U')OFINTEGER;多维数组需要用两个以上的范围来描述,而且多维数组不能生成逻辑电路,因此只能用于生成仿真图形及硬件的抽象模型。第八十四页,共157页。(3)纪录(RECORD)类型。

是多个不同类型的数据集合。具有模型抽象能力,用于描述一个功能模块。纪录类型定义的格式为:

TYPE数据类型名ISRECORD 元素名:数据类型名; 元素名:数据类型名;……

ENDRECORD;纪录适用于描述总线、仿真等。对于记录类型的对象进行单元素赋值时,可在记录类型对象名后加点“.”,然后再加赋值元素的元素名。第八十五页,共157页。(4)时间(TIME)类型(物理类型)。表示时间的数据类型,在仿真时是必不可少的。时间类型定义的一般格式为:

TYPE数据类型名IS范围;

UNITS基本单位; 单位;

ENDUNITS;第八十六页,共157页。例如:TYPEtimeIS

range–1e18TO1e18;

UNITSfs; ps=1000fs; ns=1000ps; μs=1000ns; ms=1000μs; set=1000ms; min=60set; hr=60min;

ENDUNITS;

这里的基本单位是“fs”。时间是物理类型的数据,当然对容量、阻抗值也可以做定义。第八十七页,共157页。(5)子类型(SYBTYPE)。子类型是一个具有限制条件的类型,通常用来定义具有一定限制条件的基本类型的数据对象。子类型定义的一般格式为: SYBTYPE子类型名IS数据类型名[约束范围];例如:如下Byte被定义作为一个子类型,而后数据对象被定义为从属于该子类型。

SYBTYPEByteISBit_Vector(7downto0);

SIGNALByte1,Byte2:Byte;

SIGNALData1,Data2:Byte;

SIGNALAddr1,Addr2:Byte;第八十八页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型 1.定义数据类型

2IEEE预定义的标准逻辑数据类型

3.用户自定义的数据类型

4。数据类型的转换 5属性(Attributes)2.2.4VHDL运算符第八十九页,共157页。4。数据类型的转换在VHDL程序中,不同类型的对象不能代入,因此要进行类型转换。类型转换的方法有:(1)类型标记法。用类型名称来实现关系密切的标量类型之间的转换。例如: VARIABLEx:INTEGER; VARIABLEy:REAL;

使用类型标记(即类型名)实现类型转换时,可采用赋值语句: x:=INTEGER(y);y:=REAL(x)。第九十页,共157页。(2)类型函数法。

VHDL程序包中提供了多种转换函数,使得某些类型的数据之间可以相互转换,以实现正确的赋值操作。常用的类型转换函数有:★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换BIT_VECTOR类型。★TO_STD_LOGIC():将BIT类型转换成STD_LOGIC类型。★TO_STD_LOGIC_VECTOR():

将BIT_VECTOR类型转换成STD_LOGIC_VECTOR类型。注意:引用时必须首先打开库和相应的程序包。该函数由STD_LOGIC_UNSIGNED程序包定义该函数由STD_LOGIC_ARITH程序包定义以下函数由STD_LOGIC_1164程序包定义第九十一页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象

2.2.3数据类型 1.定义数据类型

2IEEE预定义的标准逻辑数据类型

3.用户自定义的数据类型

4。数据类型的转换

5属性(Attributes)2.2.4VHDL运算符第九十二页,共157页。5属性(Attributes)VHDL没有一般程序设计语言中那些运算类标准函数,取而代之的是多种能反映和影响硬件行为的属性。VHDL的属性可分为数值类、函数类、信号类、类型类和范围类等属性。提供Entity、Architecture、Type和Signals的信息。有许多预定义的值、信号和范围的属性属性的一般格式为:

Object′Attributes为获取硬件设计中的一些有关信息(各类项目特性)而定义的内部函数某一项目的属性或特征通常可以用一个值或一个表达式来表示;它可以通过VHDL的属性描述语句加以访问。第九十三页,共157页。1.数值类属性

数值类属性用于返回数组、块、或一般数据的有关值,如边界、数组长度等。●

对一般数据属性,返回函数的边界值。其格式为

Object′LEFT; Object′RIGHT; Object′HIGH; Object′LOW;●

对于数组的数值属性,返回数组的长度值。其格式为 Object′LENGTH;●

对于块结构体的数值属性,返回块的信息。其格式为 Object′BEHAVIOR; Object′STRUCTURE;第九十四页,共157页。例如:TYPEnumISARRAYRANGE7DOWNTO0;

VARIABLEi1,i2,i3,i4,M:INTEGER;BEGIN i1:=num′LEFT; --i1取得num的左边界值7 i2:=num′RIGHT;--i2取得num的右边界值0 i3:=num′HIGH; --i3取得num的上限值7 i4:=num′LOW; --i4取得num的下限值0M:=num′LENGTH;第九十五页,共157页。2.函数类属性函数类属性是以函数形式为设计人员提供数据类型、数组、信号的相关信息的。●

数据类型的属性函数。利用数组属性可以获得数组的区间,该属性的格式为Object′SUCC(X); --获取X的下一个值Object′PRED(X); --获取X的前一个值Object′LEFTOF(X); --获取X的左边值Object′RIGHTOF(X);--获取X的右边值其中,“Object”为数据类型名,X为其中的一个元素。例如:TYPEtimeIS(year,month,day,hour,min,sec);则time′SUCC(hour);--获取元素hour的下一个值mintime′LEFTOF(day);--获取元素day的左边值month第九十六页,共157页。●

数组的属性函数。其格式为Object′LEFT(n);--获取索引号为n的区间左端边界值Object′RIGHT(n);--获取索引号为n的区间右端边界值Object′HIGH(n);--获取索引号为n的区间高端边界值Object′LOW(n);--获取索引号为n的区间低端边界值其中,“Object”为数组名;n为多维数组中所定义的多维区间的序号。默认值n=1,表示对一维空间进行操作。第九十七页,共157页。●信号的属性函数。利用信号属性可得到信号的行为和功能信息,其格式为Object′EVENT;--反映信号的值是否变化,是,则返回为“真”Object′ACTIVE;--反映信号是否活跃,是,则返回为“真”Object′LAST_EVENT;--反映从最近一次事件到现在经过 的时间,返回一个时间值Object′LAST_VALUE;--反映信号变化前的取值,并将 该历史值返回Object′LAST_ACTIVE;--反映从最近一次活跃到现在经过 的时间,返回一个时间值需要注意的是:信号的事件(Event)和活跃(Active)是两个不同的概念,必须严格区分。信号的活跃定义为信号值的任何变化。信号值由1变为0是一个活跃,而从1变为1也是一个活跃,唯一的准则是发生了事情,这种情况被称为一个事项处理(Transaction)。然而,信号的事件则要求信号值发生变化。信号值从1变为0是一个事件,但从1变为1虽是一个活跃却不是一个事件。所有的事件都是活跃,但并非所有的活跃都是事件。第九十八页,共157页。例如:利用函数信号属性检查信号的建立时间。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff1IS

PORT(d,clk:INSTD_LOGIC; q:OUTSTD_LOGIC);ENDdff1;ARCHITECTUREsetup_time_checkOFdff1ISBEGIN

PROCESS(clk)

BEGIN

IF(clk='1′)AND(clk′EVENT)THEN q<=d;

ASSERT(d′LAST_EVENT>5ns)--条件为真,向下执行REPORT“SETUPVIOLATION”--条件为假,报告错误信息: 建立时间不符合要求

SEVERITYERROR;--出错等级:ERROR

ENDIF;ENDPROCESS;ENDsetup_time_check;第九十九页,共157页。3.信号类属性信号类属性的作用对象是信号,其返回值也是一个信号。共有四种信号类属性,分别是:●DELAYED(time),即延时。该属性使受它作用的信号延时time所规定的值。如:a′DELAYED(5ns)即信号a延时5ns。●STABLE(time)。用于监测信号在规定时间内的稳定性。若受它作用的信号在time所规定的时间内没有发生事件,则该属性的结果为“TRUE”。●QUIET(time)。用于监测信号在规定时间内的是否“安静”。若受它作用的信号在time所规定的时间内没有发生事情或事件(Active或Event

),则该属性的结果为“TRUE”。●TRANSACTION。用于检测信号的Active或Event

。当Active或Event

发生时,该属性的值也将发生改变。第一百页,共157页。4.类型类属性该属性可获得数据类型中的一个值。格式为:

Object′BASE其中,Object为数据类型名。例如:TYPEtimeIS(sec,min,hour,day,month,year);……a:=time′BASE′RIGHT;--a=yeara:=time′BASE′LEFT;--a=sec……第一百零一页,共157页。5.范围类属性该属性的返回值是一个数据区间。其这两个属性功能相同,但得到的区间范围是颠倒的。范围类属性的格式为:

Object′RANGE(n);Object′REVERSE

RANGE(n);第一百零二页,共157页。2.2VHDL语言的语法规则

2.2.1标识符

2.2.2数据对象2.2.3数据类型

2.2.4VHDL运算符第一百零三页,共157页。2.2.4VHDL运算符VHDL为构造计算数值的表达式提供了许多预定义算符。预定义算符共有四类运算符:(1)算术运算符:包括一元算术运算符和二元算术运算符。一元算术运算符包括:+(正号)、—(负号)、ABS(求绝对值)二元算术运算符包括:+、—、*、/、MOD(求模)、REM(求余)、**(指数运算)(2)关系运算符:它包括:=、/=、<、<=、>、>=(3)逻辑运算符:包括一元逻辑运算符和二元逻辑运算符。一元逻辑运算符包括:NOT

二元逻辑运算符包括:AND、OR、NAND、NOR、XOR(4)并置运算符:&(连接),用于将多个位连接成为位矢量。例如:DBUS<=D0&D1&D2&D3,即DBUS<=(D0,D1,D2,D3)。第一百零四页,共157页。上述四种运算符的优先级顺序为:NOT、ABS、**;REM、MOD、/、*;—(负)、+(正);&、—(减)、+(加);>=、<=、>、<、/=、=;XOR、NOR、NAND、OR、AND。需要注意的是:在编写VHDL程序时,必须保证操作数的数据类型与运算符所要求的数据类型一致。VHDL中的操作符:●“<=”赋值符:用于将数据传给信号。●“:=”赋值符:用于将数据传给变量。该赋值符也用于为信号、变量、常量等指定初值。●“=>”符号:在WHEN语句中出现,其含义是“THEN(则)”。第一百零五页,共157页。2。2。2数据对象信号(Signal) 用于声明内部信号,而非外部信号。其在元件之间起互联作用,可以赋值给外部信号。例如:ARCHITECTUREbehaviorofexampleis SIGNALcount: std_logic_vector(3downto0); SIGNALflag: integer; SIGNALmtag: integerrange0to15; SIGNALstag: integerrange100downto0;BEGIN-- mtagisa4-bitarray;MSBismtag(0);LSBismtag(3)-- stagisa7-bitarray;MSBisstag(6);LSBisstag(0)-- 总是在结构体(ARCHITECTURE)中声明 信号也可在状态机中表示状态变量,如:ARCHITECTUREbehaviorofexampleis TYPEstatesis(state0,state1,state2,state3);BEGIN SIGNALmemread: states;--每个状态(state0,state1,etc)代表一个独有的状态。第一百零六页,共157页。常量(Constant) 常量在设计描述中保持某一规定类型的特定值不变,例如:ARCHITECTUREbehaviorofexampleis CONSTANTwidth:integer:=8;BEGIN--搘idth”是整数类型的常数,其值为“8”第一百零七页,共157页。变量(Variable) 变量只在给定的进程中用于声明局部值,例如:PROCESS(s) VARIABLEresult:integer:=12;BEGIN--搑esult”是初始值为“12”的变量. --搑esult”值可以在进程中被修改.第一百零八页,共157页。数据对象应用实例ARCHITECTUREdata_objOFexampleIS

CONSTANTxdata:integer:=2;

SIGNALy:integerrange0to15; --y是4-bit数组 --y(0)是最高位(MSB,而y(3)是最低位(LSB)BEGIN PROCESS(s)

VARIABLEtmp:integer:=0; --tmp在进程中被初始化为0 BEGIN IFs='0'THENtmp:=3; ELSEtmp:=7;--立即赋值 ENDIF; y<=tmp+xdata;--将更新的tmp值与xdata相加 ENDPROCESS; ENDdata_obj;第一百零九页,共157页。端口类型(TYPE)包括以下几种:integer 可用作循环的指针或常数,

通常不用于I/O信号 例如: SIGNALcount :integerrange0to255 count<=count+1boolean 可取值慣RUE’(真)或慒ALSE’(假)第一百一十页,共157页。std_logic 工业标准的逻辑类型,取值‘0’,‘1’,慩’,

和慫’--由IEEEstd1164标准定义std_logic_vector std_logic的组合,工业标准的逻辑类型VHDL是与类型高度相关的语言.不允许将一种信号类型赋予另一种信号类型第一百一十一页,共157页。--eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbegin

equal<=‘1’whena=belse‘0’;Enddataflow;VHDL大小写不敏感eqcomp4.vhd包实体构造体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟构造体名库第一百一十二页,共157页。实体(Entity)描述此设计功能输入输出端口(Port)在层次化设计时,Port为模块之间的接口在芯片级,则代表具体芯片的管脚A[3..0]B[3..0]equalEntity

eqcomp4

isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);end

eqcomp4;第一百一十三页,共157页。实体--端口的模式输入(Input)输出(Output)双向(Inout):可代替所有其他模

温馨提示

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

评论

0/150

提交评论