可编程逻辑器件课件_第1页
可编程逻辑器件课件_第2页
可编程逻辑器件课件_第3页
可编程逻辑器件课件_第4页
可编程逻辑器件课件_第5页
已阅读5页,还剩287页未读 继续免费阅读

下载本文档

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

文档简介

第七章可编程逻辑器件7.1概述7.2可编程逻辑器件基础PLD逻辑表示法逻辑阵列的PLD表示法应用举例7.3通用阵列逻辑GAL第七章可编程逻辑器件7.1概述7.1概述PLD出现的背景电路集成度不断提高SSIMSILSIVLSI计算机技术的发展使EDA技术得到广泛应用设计方法的发展自下而上自上而下用户需要设计自己需要的专用电路专用集成电路(ASIC-ApplicationSpecificIntegratedCircuits)开发周期长,投入大,风险大可编程器件PLD:开发周期短,投入小,风险小7.1概述PLD出现的背景电路集成度不断提高7.1概述PLD器件的优点集成度高,可以替代多至几千块通用IC芯片极大减小电路的面积,降低功耗,提高可靠性具有完善先进的开发工具提供语言、图形等设计方法,十分灵活通过仿真工具来验证设计的正确性可以反复地擦除、编程,方便设计的修改和升级灵活地定义管脚功能,减轻设计工作量,缩短系统开发时间,保密性好7.1概述PLD器件的优点集成度高,可以替代多至7.1概述PLD的发展趋势向高集成度、高速度方向进一步发展最高集成度已达到400万门向低电压和低功耗方向发展5V3.3V2.5V1.8V更低内嵌多种功能模块RAM,ROM,FIFO,DSP,CPU向数、模混合可编程方向发展7.1概述PLD的发展趋势向高集成度、高速度方向进7.1概述大的PLD生产厂家7.1概述大的PLD生产厂家7.1概述可编程专用集成电路ASIC(ApplicationSpecificIntegratedCircuit)是面向用户特定用途或特定功能的大规模、超大规模集成电路。分类:按功能分为数字的、模拟的、数字和模拟混和三种。按制造方式分为全定制、半定制ASIC、可编程三种。7.1概述可编程专用集成电路ASIC(AppliPLD器件的分类--按集成度可编程逻辑器件(ProgrammableLogicDevice)为通用器件,分为低密度PROM,EPROM,EEPROM,PAL,PLA,GAL只能完成较小规模的逻辑电路高密度,已经有超过400万门的器件EPLD,CPLD,FPGA可用于设计大规模的数字系统集成度高,甚至可以做到SOC(SystemOnaChip)PLD器件的分类--按集成度可编程逻辑器件(ProgrammPLD器件的分类--按结构特点基于与或阵列结构的器件--阵列型PROM,EEPROM,PAL,GAL,CPLDCPLD的代表芯片如:Altera的MAX系列基于门阵列结构的器件--单元型现场可编程逻辑门阵列FPGA:是集成度和结构复杂度最高的可编程ASIC。运算器、乘法器、数字滤波器、二维卷积器等具有复杂算法的逻辑单元和信号处理单元的逻辑设计可选用FPGA实现。PLD器件的分类--按结构特点基于与或阵列结构的器件--阵列按制造技术和编程方式进行分类熔丝或反熔丝编程器件--Actel的FPGA器件体积小,集成度高,速度高,易加密,抗干扰,耐高温只能一次编程,在设计初期阶段不灵活SRAM--大多数公司的FPGA器件可反复编程,实现系统功能的动态重构每次上电需重新下载,实际应用时需外挂EEPROM用于保存程序EEPROM--大多数CPLD器件可反复编程不用每次上电重新下载,但相对速度慢,功耗较大按制造技术和编程方式进行分类熔丝或反熔丝编程器件--Acte可编程ASIC的编程方式可编程ASIC的编程方式有两种:采用专用编程器进行编程在系统编程甩掉了专用编程器,而且也不用将芯片从电路系统取下,只利用计算机和一组下载电缆就可以在系统编程。Lattice和Xilinx等几家大公司现在都有在系统可编程ASIC产品。在系统编程方式方便了用户。

可编程ASIC的编程方式可编程ASIC的编程方式有两种:可编程ASIC的一般开发步骤设计输入(entry)功能模拟(functionsimulation)逻辑分割(partitioning)布局和布线(placeandrouting)时间模拟(timingsimulation)写入下载数据(download)可编程ASIC的一般开发步骤设计输入(entry)ASIC开发步骤流程图ASIC开发步骤流程图TOP—DOWN设计思想自顶向下(TOP—DOWN)设计首先是从系统级开始入手。把系统分成若干基本单元模块,然后再把作为基本单元的这些模块分成下一层的子模块。图7-2top-down设计图TOP—DOWN设计思想自顶向下(TOP—DOWN)设计首先TOP—DOWN设计思想采用TOP—DOWN层次结构化设计方法,设计者可在一个硬件系统的不同层次的模块下进行设计。总体设计师可以在上层模块级别上对其下层模块设计者所做的设计进行行为级模拟验证。在TOP—DOWN的设计过程中,划分每一个层次模块时要对目标模块做优化,在实现模块时要进行模拟仿真。虽然TOP—DOWN的设计过程是理想的,但它的缺点是得到的最小可实现的物理单元不标准,成本可能较高。TOP—DOWN设计思想采用TOP—DOWN层次结构化设计方BOTTOM—UP设计思想BOTTOM—UP层次结构化设计是TOP—DOWN设计的逆过程。它虽然也是从系统级开始的,即从图7-2中设计树的树根开始,但在层次模块划分时,首先考虑的是实现模块的基本物理单元是否存在,划分过程必须是从存在的基本单元出发。BOTTOM—UP设计思想BOTTOM—UP层次结构化设计是BOTTOM—UP设计思想设计树最末枝上的单元要么是已经制造出的单元,要么是已经开发成功的单元,或者是可以买得到的单元。自底向上(BOTTOM—UP)的设计过程采用的全是标准单元,通常比较经济。但完全采用自底向上的设计有时不能完全达到指定的设计目标要求。BOTTOM—UP设计思想设计树最末枝上的单元要么是已经制造BOTTOM—UP设计思想用可编程ASIC实现一个好的电子系统设计通常采用TOP—DOWN和BOTTOM—UP两种方法的结合,充分考虑设计过程中多个指标的平衡。BOTTOM—UP设计思想用可编程ASIC实现一个好的电子系7.2可编程逻辑器件基础⒈PLD的逻辑表示⑴PLD中阵列及其阵列交叉点的逻辑表示⑵PLD中基本逻辑单元的PLD表示⒉逻辑阵列的PLD表示法应用举例7.2可编程逻辑器件基础⒈PLD的逻辑表示⒈PLD的逻辑表示⑴PLD中阵列及其阵列交叉点的逻辑表示①PLD中阵列交叉点的逻辑表示②PLD中与阵列和或阵列的逻辑表示⒈PLD的逻辑表示⑴PLD中阵列及其阵列交叉点的逻辑表示①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。(a)表示实体连结,就是行线和列线在这个交叉点处实在连接,这个交叉点是不可编程点,在交叉点处打上实心点。①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。(b)表示可编程连接。无论×或表示该符号所在行线和列线交叉处是可编程点,具有一个可编程单元。①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。在采用熔丝工艺的PLD器件中,器件出厂后用户编程之前,所有可编程点处的熔丝都处于接通状态,习惯上都用×表示熔丝接通,因此可编程点上处处都打×或。①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。PLD器件被用户编程后,可编程点上的熔丝有的烧断,有的接通。编程后可在编程点上仍打有×,这时的×表示可编程点被编程后熔丝接通。①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。熔丝烧断的可编程点上的×消失,行线和列线不相接,这种情况用图(c)表示。

①PLD中阵列交叉点的逻辑表示PLD逻辑阵列中交叉点的连接方②PLD中与阵列和或阵列的逻辑表示与阵列如图(a)所示。在二极管与门的各支路与输出之间接入熔丝。熔丝保留的各支路的输入为有效输入,输出F是熔丝保留各支路输入的与逻辑函数。图(b)是PLD表示。图(a)和图(b)是熔丝全部保留的与阵列表示情况。F(A,B,C)=0。②PLD中与阵列和或阵列的逻辑表示与阵列如图(a)所示。在二②PLD中与阵列和或阵列的逻辑表示图(c)是烧断3个熔丝的情况,图(d)是图(c)的PLD表示。②PLD中与阵列和或阵列的逻辑表示图(c)是烧断3个熔丝的②PLD中与阵列和或阵列的逻辑表示可编程或阵列,其构成原理与可编程的与阵列相同。②PLD中与阵列和或阵列的逻辑表示可编程或阵列,其构成原理与②PLD中与阵列和或阵列的逻辑表示图(c)是烧断1个熔丝的情况,图(d)是图(c)的PLD表示。②PLD中与阵列和或阵列的逻辑表示图(c)是烧断1个熔丝的⒈PLD的逻辑表示⑵PLD中基本逻辑单元的PLD表示①输入缓冲器和反馈缓冲器②输出极性可编程的异或门③地址选择可编程的数据选择器④可编程数据分配器的逻辑表示⑤激励方式可编程的时序记忆单元的PLD表示⑥PLD中与阵列的缺省表示⑦双向输入/输出和反馈输入的逻辑表示⒈PLD的逻辑表示⑵PLD中基本逻辑单元的PLD表示①输入缓冲器和反馈缓冲器在PLD中有二种特殊的缓冲器,它们是输入缓冲器和反馈缓冲器,这二种缓冲器有相同的电路构成,图7-10给出它们的PLD表示,它们是单输入、双输出的缓冲器单元,一个是高有效输出端,即同极性输出端。另一个是低有效输出端,即反极性输出端。①输入缓冲器和反馈缓冲器在PLD中有二种特殊的缓冲器,它们是①输入缓冲器和反馈缓冲器与曾经学过的输出三态缓冲器不同,注意二者之间的区别。输入缓冲器和反馈缓冲器输出只有0、1两个逻辑状态。而输出三态缓冲器除了有0、1两个逻辑状态外,还有一个称为高阻(Z)的状态。①输入缓冲器和反馈缓冲器与曾经学过的输出三态缓冲器不同,注意②输出极性可编程的异或门在PLD中为了实现输出极性可编程,常采用图(a)所示的异或门结构。当熔丝烧断,异或门输出极性为低有效,即否则异或门输出高有效Q0=P⊕0=P。②输出极性可编程的异或门在PLD中为了实现输出极性可编程,常②输出极性可编程的异或门图(b)是编程后熔丝保留,输出极性编程为高有效。图(c)是编程熔丝烧断,输出极性编程为低有效。②输出极性可编程的异或门图(b)是编程后熔丝保留,输出极性③地址选择可编程的数据选择器地址选择可编程的数据选择器如图7-12所示。地址选择端编程后,若列线与行线相接且接地,其输入为逻辑0。否则,列线与行线断开其输入为逻辑1。二选一数据选择器四选一数据选择器根据编程情况,地址选择端的输入有00,01,10,11四种情况。③地址选择可编程的数据选择器地址选择可编程的数据选择器如图7⑤激励方式可编程的时序记忆单元的PLD表示时序记忆单元有二种,即锁存器和触发器。输出的状态只受输入激励信号控制的时序记忆单元是锁存器。只有在时钟信号控制下才能得到受输入激励信号决定的相应输出状态的时序记忆单元是触发器。二种时序记忆单元的根本区别是输出状态的变化是否取决于时钟信号的控制。⑤激励方式可编程的时序记忆单元的PLD表示时序记忆单元有二种⑤激励方式可编程的时序记忆单元的PLD表示图7-14是激励方式可编程的时序记忆单元的PLD表示。通过编程,使R/L端为0,Q端的输出状态只与激励信号有关并受D决定,图所示电路为D锁存器。通过编程,若使R/L端为1,电路只有在时钟脉冲信号CLK的驱动下,Q端的状态变化受D端的激励信号决定,该电路具有D触发器功能。⑤激励方式可编程的时序记忆单元的PLD表示图7-14是激励方⑥PLD中与阵列的缺省表示在PLD器件与阵列中常看到图7-15中给出的几种表示。输出为Z1的与门4个输入变量全部被编程后输入,4个交叉点均画×。因此,⑥PLD中与阵列的缺省表示在PLD器件与阵列中常看到图7-1⑥PLD中与阵列的缺省表示同理:Z2为Z1的缺省表示。这时的阵列交叉点上均未画×,而在与门符号内却画有×,。⑥PLD中与阵列的缺省表示同理:Z2为Z1的缺省表示。这时的⑥PLD中与阵列的缺省表示输出为Z3的与门输入阵列交叉点上无×,与门符号内也无×,这是浮动状态的逻辑表示。浮动输入状态代表与阵列编程后熔丝全部熔断,4个输入全都不同与门相接,相当与门输入悬空,与门输出为高电平,即输出逻辑“1”⑥PLD中与阵列的缺省表示输出为Z3的与门输入阵列交叉点上无⑦双向输入/输出和反馈输入的逻辑表示双向输入/输出和反馈输入结构是PLD结构的特点之一,乘积项Pn+1为三态输出缓冲器的使能端控制信号。1SmSmFeedback=Sm⑦双向输入/输出和反馈输入的逻辑表示双向输入/输出和反馈输入⑦双向输入/输出和反馈输入的逻辑表示由于各阵列交叉点全打有×,所以n+1号与门输出为逻辑“0”,三态输出缓冲器禁止,其输出为高阻。0高阻×加到与阵列上⑦双向输入/输出和反馈输入的逻辑表示由于各阵列交叉点全打有×⒉逻辑阵列的PLD表示法应用举例二位串行进位加法器的原理框图如图7-18(a)所示。输入输入输入输入输出其阵列表示如图7-18(b)所示。⒉逻辑阵列的PLD表示法应用举例二位串行进位加法器的原理框图⒉逻辑阵列的PLD表示法应用举例×⒉逻辑阵列的PLD表示法应用举例×7.3通用阵列逻辑GAL⒈GAL(GenericArrayLogic)的结构及其工作原理GAL的基本阵列结构GAL的工作模式和逻辑组态GAL16V8的编程⒉VHDL语言介绍⒊GAL应用举例7.3通用阵列逻辑GAL⒈GAL(Generic7.3通用阵列逻辑GAL⒈GAL的结构及其工作原理⑴GAL的基本阵列结构通用型GAL16V8的电路结构GAL16V8的结构控制字GAL16V8的OLMC⑵GAL的工作模式和逻辑组态⑶GAL16V8的编程7.3通用阵列逻辑GAL⒈GAL的结构及其工作原理⑴GAL的基本阵列结构图7-19给出GAL的基本结构框图。⑴GAL的基本阵列结构图7-19给出GAL的基本结构框图。逻辑宏单元输入/输出口输入口时钟信号输入使能控制可编程与阵列固定或阵列2,3,4,5,6,7,8,9是专用输入引脚1,11,12,13,14,17,18,19各引脚可通过编程组态设为输入引脚12,13,14,17,18,19各引脚可通过编程组态设为输出引脚,15,16专用输出引脚逻辑宏单元输入/输出口输入口时钟信使能控制可编程与阵列固定或⑶GAL的开发流程(开发步骤)①建立用户源文件用户源文件就是设计者书写的描述所要实现逻辑电路功能的软件程序的集合。其软件程序必须符合某一可编程逻辑设计语言的语法规范。现在广泛使用的有ABEL-HDL,VHDL,Verilog-VHDL等硬件描述语言。②编译用户源文件要想使建立起来的用户源文件变成要下载的数据文件(JEDEC),必须经过若干步的语言处理程序。如语法检查、逻辑化简、功能模拟、时间模拟等。经过专用软件处理后,证明用户建立的源文件正确无误,最后将其转换成要下载的编程数据文件(JEDEC)。把上述的一系列处理过程称为编译。⑶GAL的开发流程(开发步骤)①建立用户源文件③器件编程在专用的软件系统环境下,启动编程器,使计算机和编程器进行通信。将JEDEC数据文件下载到编程器上。选择目标器件的制造厂家、型号进行器件匹配。将GAL器件插入插座并锁紧。这一步必须注意芯片引脚序号与插座引脚号要对应。否则器件可能被毁坏。下载编程。即将下载到编程器上的JEDEC数据文件写入到GAL芯片中。⑶GAL的开发流程(开发步骤)③器件编程⑶GAL的开发流程(开发步骤)④实际功能验证将芯片从编程器取下,放到实验电路中或实际工作的系统中进行实际功能验证,如果功能正确,说明开发工作结束。如果功能验证不正确,则还要返回到第一步重新修改设计。⑶GAL的开发流程(开发步骤)④实际功能验证⑶GAL的开发流程(开发步骤)VHDL硬件描述语言VHDL硬件描述语言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言,以下简称为VHDL语言。使用VHDL语言可以实现数字电子系统的行为级描述,RTL(寄存器传输级)描述以及结构级描述。目前在国内外应用的硬件描述语言有许多种,其中应用最广泛的有VHDL语言和Verilog-HDL语言。

VHDL硬件描述语言VHDL硬件描述语言的英文全名是VeryVHDL硬件描述语言VHDL程序结构VHDL语言把一个设计单元作为一个设计实体处理,一个设计实体只能唯一地对应一个设定单元。VHDL语言程序可由实体(Entity)说明、结构体(Architecture)、程序包(Package)、库(Library)、配置(Configuration)5个部分组成。其中库、实体说明、结构体是一个VHDL语言程序的基本组成部分。一个实体说明可以对应多个结构体。VHDL硬件描述语言VHDL程序结构库说明

实体说明端口说明

结构体【例】如图所示电路的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexampleISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;c:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDexample;ARCHITECTUREarchOFexampleISBEGINy<=aAND(bORc);ENDarch;库说明实体说明端口说明结构体【例】如图所示电路的VHDL实体说明实体说明的书写格式如下所示:

ENTITY<实体名>IS[GENERIC(类属说明);][PORT(端口说明);][实体语句部分;]END[ENTITY]<实体名>;

其中“<>”中的部分是必选项,“[]”中的部分是可选项。实体说明实体说明的书写格式如下所示:实体说明1.类属说明语句(GENERIC)

类属说明语句必须放在端口说明语句之前,用以设定实体或元件的内部电路结构和规模,其书写格式如下:

GENERIC(常数名:数据类型[:=设定值];┇常数名:数据类型[:=设定值]);例如:GENERIC(m:TIME:=5ns);指定了结构体内m的值为5ns。实体说明1.类属说明语句(GENERIC)实体说明2.端口说明(PORT)

端口对应于电路图中元件符号的外部引脚。端口说明语句是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入输出方向的描述。端口说明语句的一般格式如下:

PORT(端口名,[端口名]:[模式]数据类型名;┇端口名,[端口名]:[模式]数据类型名);实体说明2.端口说明(PORT)实体说明注意:(1)端口名是赋给每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。各端口名在实体中必须是唯一的,不能重复。(2)模式用来说明信号的方向,详细的端口方向说明见下表。需要指出的是,BUFFER是INOUT的子集;做输入时,信号不是由外部驱动,而是从输出反馈得到。

方向定义

含义IN

输入OUT

输出(结构体内不能再使用)INOUT

双向(可以输入,也可以输出)BUFFER

输出(结构体内可再使用,可以由反馈得到),可以读或写,实体说明注意:方向定义含义IN实体说明(3)数据类型名则是端口信号的取值类型,有:BIT:位类型,取值0、1;BIT_VECTOR:位向量类型,是BIT的组合;STD_LOGIC:工业标准的逻辑类型,取值0、1、X、Z等,由 STD_LOGIC_1164程序包定义;INTEGER:整数类型,可用作循环指针或常数,通常不用作I/O信号;BOOLEAN:布尔类型,取值FALSE、TRUESTD_LOGIC_VECTOR:工业标准的逻辑向量类型,是STD_LOGIC的组合;实体说明(3)数据类型名则是端口信号的取值类型,有:练习编写包含以下内容的实体代码 端口D为12位输入总线 端口OE和CLK都是1位输入 端口AD为12位双向总线 端口A为12位输出总线 端口INT是1位输出 端口AS是一位输出同时被用作内部反馈d[11:0]oeclkad[11:0]a[11:0]intas练习编写包含以下内容的实体代码d[11:0]oeclkad[练习LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYmy_designISPORT( d:INstd_logic_vector(11DOWNTO0); oe,clk:INstd_logic; ad:INOUTstd_logic_vector(11DOWNTO0); a:OUTstd_logic_vector(11DOWNTO0); int: OUTstd_logic; as: BUFFERstd_logic);ENDmy_design;d[11:0]oeclkad[11:0]a[11:0]intas练习LIBRARYieee;d[11:0]oeclkad[结构体用来描述实体的内部结构和逻辑功能必须和实体(ENTITY)相联系一个实体(ENTITY)可以有多个结构体结构体内部语句是并发的结构体的书写格式如下:

ARCHITECTURE<结构体名>OF<实体名>IS[定义语句;]BEGIN<并行处理语句;>END<结构体名>;结构体用来描述实体的内部结构和逻辑功能结构体的书写格式如下:结构体结构图结构体定义语句功能描述语句块语句进程语句信号赋值语句子程序调用语句元件例化语句

由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块

定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其它的信号进行赋值。

将设计实体内的处理结果向定义的信号或界面端口进行赋值

用以调用过程或函数,并将获得的结果赋值于信号

对其它的设计实体作元件调用说明,并将此元件的端口与其它的元件、信号或高层次实体的界面端口进行连接。结构体结构图结构体定义语句功能描述语句块语句进程语句信号赋值结构体定义语句位于ARCHITECTURE和BEGIN之间,用于对结构体内部所使用的信号(SIGNAL)、常数(CONSTANT)、数据类型、元件(COMPONENT)和过程(PROCEDURE)等进行定义。

在实际的硬件电路设计中,当电路的规模较大时,全部电路用一个模块来描述很不方便。一般情况下,是将整个电路分成若干相对独立的子模块来进行描述。VHDL语言中常用的三种子结构描述语句:BLOCK语句结构、PROCESS语句结构和SUBPROGRAM语句结构。结构体内的语句是以并行方式工作的。结构体定义语句位于ARCHITECTURE和BEGIN之间1.进程(PROCESS)语句结构进程和进程语句之间是并行关系进程内部是一组连续执行的顺序语句进程语句与构造体中的其余部分进行信息交流是靠信号完成的PROCESS书写格式为:

[进程标号:]PROCESS[敏感信号表][IS][进程语句说明部分;]BEGIN<顺序语句部分;>ENDPROCESS[进程标号];1.进程(PROCESS)语句结构进程和进程语句之间是并行1.进程(PROCESS)语句结构进程标号是进程的命名,是可选项。敏感信号表列出了进程语句敏感的所有信号,任意一个敏感信号改变,进程中由顺序语句定义的行为就会重新执行一遍。进程说明部分对该进程所需的局部数据环境进行定义。BEGIN和ENDPROCESS之间是描述进程行为的顺序执行语句。进程行为的结果可以赋给信号,通过信号可被其他的PROCESS或BLOCK读取或赋值。当执行完进程中最后一个语句后,执行过程将返回到进程的第一个语句,以等待下一次敏感信号变化

一个结构体中可以含有多个PROCESS结构,每个进程可以在任何时刻被激活或者启动。而所有被激活的进程都是并行运行的,所以PROCESS结构本身是并行语句。1.进程(PROCESS)语句结构进程标号是进程的命名,是敏感表举例latchlabel:PROCESS(oe)BEGIN IFoe=‘1’THEN y<=a; ENDIF;ENDPROCESSif_label;仿真结果错误敏感表举例latchlabel:PROCESS(oe)仿真敏感表举例latchlabel:PROCESS(oe,a)BEGIN IFoe=‘1’THEN y<=a; ENDIF;ENDPROCESSif_label;仿真结果正确敏感表举例latchlabel:PROCESS(oe,a)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC; f:OUTSTD_LOGIC);ENDmux;

【例】如图所示电路的VHDL描述。LIBRARYIEEE;【例】如图所示电路的VHDLARCHITECTUREstructureOFmuxISBEGIN

P0:PROCESS(d0,d1,sel)VARIABLEtempl,temp2:STD_LOGIC;BEGIN templ:=d0AND(NOTsel); temp2:=d1ANDsel; temp3:=templORtemp2; f<=temp3; ENDPROCESSP0;ENDstructure;ARCHITECTUREstructureOFmux【例3-7】带敏感信号表的进程语句实例。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffISPORT(d,clk,reset:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff;ARCHITECTUREexampleOFdffISBEGIN PROCESS(clk,reset) BEGIN IFreset=‘0’THEN q<=‘0’; ELSIF(clk’EVENTANDclk=‘1’)THEN q<=d; ENDIF; ENDPROCESS;ENDexample;【例3-7】带敏感信号表的进程语句实例。2.块(BLOCK)语句结构所有能在结构体的说明部分进行说明的对象都可以在BLOCK的说明部分进行说明。BLOCK语句的书写格式如下:

[块标号:]BLOCK[卫式表达式][类属子句[类属接口表;];][端口子句[端口接口表;];][块说明部分;]BEGIN<块语句部分>ENDBLOCK[块标号];2.块(BLOCK)语句结构所有能在结构体的说明部分进行说3.子程序(SUBPROGRAM)语句结构所谓子程序,就是在主程序调用它之后能将处理结果返回到主程序的程序模块,是一个VHDL程序模块,利用顺序语句来定义和完成各种算法;其含义与其他高级语句中的子程序概念相当,可以反复调用。在调用子程序时,要首先对其进行初始化,执行结束再调用则需再次初始化。因此,子程序内部的值是不能保持的。在VHDL中有两种类型的子程序:过程(Procedure)和函数(Function)。3.子程序(SUBPROGRAM)语句结构所谓子程序,就是①函数(Function)

函数语句的书写格式如下:

FUNCTION<函数名>(参数表)RETURN<数据类型>IS[函数说明;]BEGIN<函数语句部分;>RETURN(表达式);END[FUNCTION]<函数名>;函数只能返回一个函数值。①函数(Function)函数语句的书写格式如下:②过程(Procedure)过程语句的书写格式如下:

PROCEDURE<过程名>(参数表)IS[过程说明;]BEGIN[过程语句部分;]END[PROCEDURE]<过程名>;在PROCEDURE结构中,参数可以是IN、OUT、INOUT等多种模式。②过程(Procedure)过程语句的书写格式如下:【例】一个由过程语句实现一定功能的例子。PROCEDUREdecoder(code:INTEGERRANGE0TO3;decoder_out:OUTSTD_LOGIC_VECTOR(3DOWNTO0))ISBEGIN CASEcodeIS WHEN0=>decoder_out<=B“0001”; WHEN1=>decoder_out<=B“0010”; WHEN2=>decoder_out<=B“0100”; WHEN3=>decoder_out<=B“1000”; ENDCASE;ENDdecoder;【例】一个由过程语句实现一定功能的例子。②过程(Procedure)与函数相同的是,过程体中的参数说明部分只是局部的,其中的各种定义只能是用于过程体内部。过程体中的顺序语句部分可以包含任何顺序执行的语句,包括WAIT语句。但需要注意的是,如果一个过程是在进程中调用,且该进程已列出了敏感参量表,则不能在此过程中使用WAIT语句。②过程(Procedure)与函数相同的是,过程体中的参数说4.库(Library)VHDL语言中的库用来存放已编译过的设计单元(包括实体说明、结构体、配置说明、包集合),库中内容可以用作其他VHDL描述的资源。在VHDL语言中,库的说明总是放在设计单元的最前面:LIBRARY库名;4.库(Library)VHDL语言中的库用来存放已编译过4.库(Library)在VHDL语言中库大致有5种:IEEE库、STD库、ASIC向量库、用户定义的库和WORK库。除WORK库外,其他4类库在使用前都要首先进行说明,第一个语句是LIBRARY库名,表明使用什么库。另外还要说明设计者要使用的是库中哪一个包集合以及包集合中的项目名。这样第2个语句的格式为:USE库名.程序包名.项目名;4.库(Library)在VHDL语言中库大致有5种:IE库名程序包名包中定义的内容StdstandardVHDL类型,如BIT,BIT_VECTORieeeStd_logic_1164定义Std_logic,Std_logic_vectorLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ieeeStd_logic_arith定义有符号/无符号数类型,以及基于这些类型上的算术运算和类型转换Std_logic_signed定义了基于Std_logic与Std_logic_vector类型上的有符号数的算术运算Std_logic_unsigned定义了基于Std_logic与Std_logic_vector类型上的无符号数的算术运算Numeric_std定义了一组基于Std_logic_1164中定义的类型的算术运算符,如“+”,“-”,SHL,SHR库名程序包名包中定义的内容StdstandardVHDL类型VHDL常用语句VHDL的描述语句分为并行语句和顺序语句两种。并行语句主要用来描述模块之间的连接关系,顺序语句一般用来实现模型的算法部分。并行语句之间是并行的关系,当某个信号发生变化时,受此信号触发的所有语句同时执行。顺序语句则是严格按照书写的先后次序顺序执行。

VHDL常用语句VHDL的描述语句分为并行语句和顺序语句两种1并行语句在VHDL语言中,并行语句主要包括:并行信号赋值语句;块语句;进程语句;过程调用语句;参数传递语句(也称GENERIC语句);元件例化语句;生成语句;并行断言语句。1并行语句在VHDL语言中,并行语句主要包括:1.并行信号赋值语句在VHDL语言中,并行信号赋值语句可分为以下3个子类型:并发信号赋值语句;条件信号赋值语句;选择信号赋值语句。上面信号赋值语句的共同特点就是语句执行都是并发的。1.并行信号赋值语句在VHDL语言中,并行信号赋值语句可分(1)并发信号赋值语句并发信号赋值语句在进程内部使用时,它作为顺序语句的形式出现,信号赋值语句在结构体的进程之外使用时,它作为并发语句的形式出现。一个并发信号赋值语句是一个等效进程的简略形式。

(1)并发信号赋值语句并发信号赋值语句在进程内部使用时,它作若有两个信号赋值语句:

…q<=a+b;--描述加法器的行为,第i行程序

q<=a*b;--描述乘法器的行为。第i+1行程序

这个赋值语句是并发执行的,加法器和乘法器独立并行工作。第i行和第i+1行程序在仿真时都并发处理,从而真实地模拟了实际硬件模块中加法器、乘法器的工作情况。这就是信号赋值语句的并发性问题。若有两个信号赋值语句:(2)条件信号赋值语句条件信号赋值语句属于并发描述语句的范畴,可以根据不同的条件将不同的表达式的值赋给目标信号。条件信号赋值语句书写的一般格式为:

目标信号<=表达式1WHEN条件1ELSE

表达式2WHEN条件2ELSE

表达式3WHEN条件3ELSE…

表达式n-1WHEN条件n-1ELSE

表达式n;(2)条件信号赋值语句条件信号赋值语句属于并发描述语句的范畴【例】用条件信号赋值语句设计四选一数据选择器。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(d0,dl,d2,d3,a,b:INSTD_LOGIC; q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbehave1OFmux4ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN sel<=b&a;--经过并置操作sel成为二位向量

q<=d0WHENsel=“00”ELSE d1WHENsel=“01”ELSE d2WHENsel=“10”ELSE d3WHENsel=“11”ELSE ‘Z’;ENDbehave1;【例】用条件信号赋值语句设计四选一数据选择器。(3)选择信号赋值语句选择信号赋值语句对选择条件表达式进行测试,当选择条件表达式取值不同时,将使信号表达式不同的值赋给目标信号。选择信号赋值语句的书写格式如下:

WITH选择条件表达式SELECT

目标信号<=信号表达式1WHEN选择条件1

信号表达式2WHEN选择条件2 …

信号表达式nWHEN选择条件n(3)选择信号赋值语句选择信号赋值语句对选择条件表达式进行测【例】用选择信号赋值语句设计四选一数据选择器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(d0,dl,d2,d3,a,b:INSTD_LOGIC; q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbehave2OFmux4ISSIGNALsel:INTEGER;BEGINWITHselSELECT--选择信号赋值语句

q<=d0WHEN0, d1WHEN1, d2WHEN2, d3WHEN3, ‘Z’WHENOTHERS;sel<=0WHENa=‘0’ANDb=‘0’ELSE--条件信号赋值语句

1WHENa=‘1’ANDb=‘0’ELSE 2WHENa=‘0’ANDb=‘1’ELSE 3WHENa=‘1’ANDb=‘1’ELSE4;ENDbehave2;【例】用选择信号赋值语句设计四选一数据选择器。顺序语句顺序语句是相对于并行语句而言的。顺序语句的特点是:每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序相一致的。顺序语句只能出现在进程(Process)、函数(Funcation)和过程(Procedure)中顺序语句包括:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句顺序语句顺序语句是相对于并行语句而言的。顺序语句的特点是:每顺序语句顺序语句主要有:变量赋值语句的书写格式为:目标变量:=表达式;信号赋值语句的书写格式为:目标信号<=表达式; WAIT语句:WAIT--无限等待

WAITON--敏感信号变化

WAITUNTIL--条件满足

WAITFOR--时间到IF语句:IF_THEN语句IF…THEN…ELSE语句CASE语句;LOOP语句;EXIT语句;RETURN语句;NULL语句;REPORT语句;断言语句。顺序语句顺序语句主要有:IF_THEN_ELSE语句只能在进程内使用至少应有一个条件句,条件句必须由布尔表达式构成。根据条件句产生的判断结果TRUE或FALSE,有条件地选择执行其后的顺序语句。IF条件句Then

顺序语句ENDIFIF条件句THEN

顺序语句ELSE

顺序语句ENDIFIF条件句Then

顺序语句

ELSIF条件句Then

顺序语句

ELSE

顺序语句ENDIFIF_THEN_ELSE语句只能在进程内使用IF条件句IF_THEN_ELSE语句mux4_1:PROCESS(a,b,c,d,s) BEGIN IFs=“00”THENx<=a; ELSIFs=“01”THENx<=b; ELSIFs=“10”THENx<=c; ELSEx<=d; ENDIF; ENDPROCESSmux4_1;必须在进程内使用IF_THEN_ELSE语句mux4_1:PROCEVHDL语法基础1标识符和保留字基本标识符主要由字母、数字以及下划线组成,标识符的书写要遵守以下规则:①字符必须以英文字母开头;②标识符的最后一个字符不能是下划线;③在标识符中不允许出现连续2个下划线;④VHDL的保留关键字不能做一般的标识符使用。标识符中不区别大小写,但通常有较好语言素质的设计人员书写VHDL程序时都有自己的大小写体的书写风格。VHDL语法基础1标识符和保留字

下面是几个符合规范的标识符:

Three_State_GateSel_7DROM_2716

下面是几个不符号规范的标识符:

_TEXT_FILE--标识符必须以字母开头,_开头错误

8D10B--标识符必须以字母开头,数字开头错误

TOOL--Bar--不能出现二个连续下划线

SELECT--保留关键字不能做标识符用

Res_Clk_--下划线不能在标识符最后

Date-Input--字母间不是下划线下面是几个符合规范的标识符:2数据对象在VHDL语言中,数据对象有以下4种类型:常数(CONSTANT)、信号(SIGNAL)、变量(VARIABLE)和文件(FILES)。2数据对象在VHDL语言中,数据对象有以下4种类型:常数(C(1)常量(CONSTANT)常量是指那些在设计描述中不发生变化的值。常量是全局变量,在结构体描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明中使用。使用前必须对常量进行说明,常量说明的格式如下:CONSTANT常量名:数据类型:=表达式;(1)常量(CONSTANT)常量是指那些在设计描述中不(1)常量(CONSTANT)例如:

CONSTANTWIDTH:INTEGER:=8;--寄存器的宽度

CONSTANTVCC:REAL:=5.0;--指定供电电源的电压

CONSTANTDBUS:BIT_VECT0R:=“10110011”;--给出总线数据向量(1)常量(CONSTANT)例如:(2)变量(VARIABLE)变量是局部变量,仅用于进程和子程序必须在进程和子程序的说明性区域说明不能表达硬件连线和存储元件变量的书写格式为:

VARIABLE变量名:数据类型[:=表达式];例如:VARIABLEtmp:Bit;

tmp:=‘1’;VARIABLEresult:STD_LOGIC:=‘0’;--变量赋初值

VARIABLEx,y,z:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;(2)变量(VARIABLE)变量是局部变量,仅用于进程和变量赋值整体赋值:

temp:=“10101010”;

temp:=x”AA”;

逐位赋值:

temp(7):=‘1’;多位赋值

temp(7downto4):=“1010”;多位赋值用双引号逐位赋值用单引号赋值标志变量赋值整体赋值:

temp:=“10101010”;

(3)信号(SIGNAL)可代表连线、内连元件、或端口各进程之间的通信可以借助信号来实现。信号在Package、Entity、Architecture中声明信号说明语句格式如下:SIGNAL信号名:数据类型、约束条件[:=初始值];信号赋值语句格式如下:信号名<=表达式;例:SIGNALCount:Bit_Vector(3downto0);

IFRising_Edge(clk)THEN

Count<=Count+1;

ENDIF;(3)信号(SIGNAL)可代表连线、内连元件、或端口信号举例LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimpISPORT(a,b,c,d:INStd_Logic; g:OUTStd_Logic);ENDsimp;ARCHITECTURElogicOFsimpISSIGNALe,f:Std_Logic;BEGINe<=aorb;f<=not(cord);g<=eandf;ENDlogic;abcdgef端口信号在结构体内声明的内部连接信号信号举例LIBRARYieee;abcdgef端口信号在结信号赋值SIGNALtemp:Std_Logic_Vector(7downto0);整体赋值:

temp<=“10101010”;

temp<=x”AA”;

逐位赋值:

temp(7)<=‘1’;多位赋值:temp(7downto4)<=“1010”;多位赋值用双引号逐位赋值用单引号赋值符号信号赋值SIGNALtemp:Std_Logic_Ve信号和变量的作用范围ARCHITECTURE{SIGNAL描述}label1:PROCESS1{VARIABLE描述}label2:PROCESS2{VARIABLE描述}在进程的外面声明作用范围为全局在进程内部说明作用范围为进程内信号和变量的作用范围ARCHITECTURE{SIGNAL信号和变量的区别信号变量赋值符号<=:=功能电路的内部连接内部数据交换作用范围全局,进程和进程之间的通信进程的内部行为延迟一定时间后才赋值立即赋值信号和变量的区别信号变量赋值符号<=:=功能电路的内部连接内3数据类型VHDL语言中的数据类型较为复杂。按照使用目的可分为:用于综合的数据类型和用于仿真的数据类型。用于综合的数据类型有标量型(ScalarType)和复合型(CompositeType)。用于仿真目的数据类型有存取型(AccessType)和文件型。此外,还有用户自定义的数据类型。某一种类型的数据对象不可以用其他类型的数据去赋值;即使类型相同的数据,其位长不同也不可以直接代入赋值。3数据类型VHDL语言中的数据类型较为复杂。按照使用目的可常用数据类型

数据类型

举例integer(整数)+136,+12456,-678real(实数)-2.0,+3.5,-1.0E38BIT(位)‘0’,‘1’一定用单引号BIT_VECTOR(位向量)“10101111”,X“00BB”STD_LOGIC(标准逻辑)‘0’,‘1’,‘L’,‘H’…等9种取值BOOLEAN(布尔量)只有二种取值情况‘0’和‘1’或TRUE和FALSESTD_LOGIC_VECTOR(标准逻辑向量)“01100110”(STD_LOGIC数组)character(字符)String(字符串)A~Z,0~9,a~z,“STRING”物理类型Time_unitns(纳秒)ms(毫秒)

错误等级note,warning,errorNatural自然数

positive正整数

大于0或等于0的整数常用数据类型数据类型举例inte3数据类型(1)整数在VHDL语言中整数的范围是-(231-1)~(231-1),即-2147483647~2147483647。整数可以用一系列二进制数来表示,但不能看做是BIT_VECTOR或STD_LOGIC_VECTOR。(2)实数实数类型也称浮点数类型,规定的浮点数范围是-1.0E+38~+1.0E+38。注意有的数字可用实数表示,也可用整数表示。例如+99.0是实数,+99是整数,两数虽然数值相同,但类型不同。3数据类型(1)整数3数据类型(3)BIT和BIT_VECTORBIT型又称位型,其取值只有‘0’和‘1’。而BIT_VECTOR实际上是BIT的数组。例如“01110111”或X“07FA”是BIT_VECTOR型数据,用来表示一个信号的值或用来表示总线信号的数值。由于BIT_VECTOR仅能表示逻辑“0”和“1”不能表示高阻、随意项、未知常用状态,实际可综合的程序中很少用。在可综合的VHDL语言程序中,实际上都采用STD_LOGIC和STD_LOGIC_VECTOR型数据。3数据类型(3)BIT和BIT_VECTOR3数据类型(4)布尔量布尔量具有两种状态,“真”或者“假”。虽然布尔量也是二值枚举量,但它和BIT型不同,没有数值的含义,也不能进行算术运算,但它能进行关系运算。例如,它可以在IF语句中被测试,测试结果产生一个布尔量TRUE或者FALSE。一个布尔量常用来表示信号的状态或者总线上的情况。如果某个信号或者变量被定义为布尔量,那么在仿真中将自动地对其赋值进行核查。一般这一类型数据的初始值总为FALSE。3数据类型(4)布尔量3数据类型(5)STD_LOGIC和STD_LOGIC_VECTORSTD_LOGIC是VHDL语言中已定义的标准逻辑变量,有9种定义的可取值。例如:TYPESTD_LOGICIS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)其中’U’未初始化;‘X’强迫未知:‘0’强制0;‘1’强制1;‘Z’高阻;‘W’弱未知;‘L’为弱0;‘H’为弱1;‘-’为随意。对逻辑综合而言仅‘0’,‘1’,‘Z’和‘-’有意义。

STD_LOGIC_VECTOR是STD_LOGIC的数组。二者赋值只能是‘0’,‘1’或由二进制数组成的字符串“11001111”,不能赋16进制或8进制数。3数据类型(5)STD_LOGIC和STD_LOGIC_V3数据类型(6)字符和字符串字符在VHDL语言中也认为是一种数据类型,使用时要用单引号。例如‘A’,‘a’,‘B’,‘b’。注意单引号内字母大小写所代表的意义不同,‘1’和‘2’只是个字符量而已,不具有数值含义。

VHDL语言中的字符串都带有双引号,例如“VHDL”,“ABCDE”,这些带有双引号的字符串常用于结构说明或程序提示。3数据类型(6)字符和字符串3数据类型(7)物理型数据表示时间、电流、电压等物理型数据。这一数据类型在仿真时将要用到,逻辑综合不用。物理型数据可视为与物理单位有关的整数。能方便地用来表示、分析校验量纲。3数据类型(7)物理型数据3数据类型

(8)错误等级在VHDL语言中把错误等级也列入常用数据类型。错误等级分为NOTE(注意),WARNING(警告),ERROR(错误),FAILURE(失败)4个等级。错误等级这个特殊数据类型常用在仿真时报告当前的系统工作情况,进而知道所编程序是否存在问题,是否达到预期设计目标要求。

(9)自然数和正整数自然数和正整数是整数的子类。正整数是大于0的整数,不包括0。而自然数是0和0以上的整数。3数据类型(8)错误等级4数据类型的转换在VHDL语言中数据类型的定义是很严格的,对于某一数据类型的变量、信号、常量及文件赋值时,数据类型必须一致。为了正确地进行代入或赋值,数据类型转换常常是非常必要的。为了实行类型转换,VHDL语言的程序包中提供了一些转换函数。

4数据类型的转换在VHDL语言中数据类型的定义是很严格的,表程序包中转换函数及其功能程序包名转换函数名转换函数功能STD_LOGIC_1164TO_STDLOGICVECTOR(A)TO_BITVECTOR(A)TO_STDLOGIC(A)TO_BIT(A)由BIT_VECTOR转换为STD_LOGIC_VECTOR由STD_LOGIC_VECTOR转换为BIT_VECTOR由BIT转换成STD_LOGIC由STD_LOGIC转换成BITSTD_LOGIC_ARITHCONV_STD_LOGIC_VECTOR(A,位长)CONV_INTEGER(A)由INTEGER,UNSDGNED,SIGNED转换成指定位长的STD_LOGIC_VECTOR由UNSIGNED,SIGNED转换成INTEGERSTD_LOGIC_UNSIGNEDCONV_INTEGER(A)由STD_LOGIC_VECTOR转换成INTEGER表程序包中转换函数及其功能程序包名转换函数名转换函数功能类型转换实例:

VARIABLEI:INTEGER;--变量I定义为整型。

VARIABLER:REAL;--变量R定义为实型。

I:=INTEGER(R);--把R转为整型后赋给整型变量I。

R:=REAL(I);--把I转为实型后赋给实型变量R。

SIGNALa:BIT_VECTOR(11DOWNTO0);SIGNALb:STD_LOGIC_VECTOR(11DOWNTO0);a<=x“A8”;--十六进制值可赋予位向量

b<=x“A8”;--语法错,十六进制值不能赋予 STD_LOGIC_VECTOR类型

b<=T0_STDLOGICVECTOR(X“AF7”);--将位向量转换成标准逻辑向量

b<=TO_STDLOGICVECTOR(O“5177”);--将八进制表示位向量转换成标准逻辑向量

b<=TO_STDLOGICVECTOR(B“1010_1111_0111”);--转换为标准逻辑向量类型转换实例:5运算操作符在VHDL语言中共有4类运算操作符,可以分别进行逻辑运算、关系运算、算术运算和并置运算。需要注意的是,被运算操作符所操作的对象是操作数,且操作数的类型应该和操作符所要求的类型一致。另外,要注意运算操作符的优先级。

5运算操作符在VHDL语言中共有4类运算操作符,可以分别进行算术运算符运算符功能运算符功能+加SLL逻辑左移-减SRL逻辑右移*乘SLA算术左移/除SRA算术右移**乘方ROL逻辑循环左移MOD取模ROR逻辑循环右移REM取余ABS取绝对值算术运算符运算符功能运算符功能+加SLL逻辑左移-减SRL逻关系运算符运算符功能=等于/=不等于〈小于〉大于〈=小于等于〉=大于等于关系运算符运算符功能=等于/=不等于〈小于〉大于〈=小于等于逻辑运算符运算符功能AND与OR或NAND与非NOR或非XOR异或XNOR异或非NOT非逻辑运算符运算符功能AND与OR或NAND与非NOR或非XO其他运算符运算符功能+正-负&并置其他运算符运算符功能+正-负&并置运算优先级** ABS NOT* / MOD REM+正 -负+ - &SLL SLA SRL SRA ROL ROR= <= < > >=AND OR NANDNORXORXNOR高低运算优先级** ABS NOT高低并置运算符并置运算符“&”用于位的连接,将多个向量连接成更大的向量。例如:ARCHITECTUREexampleOFshiftrlISBEGINPROCESS(a)BEGINo1<=‘0’&a(7DOWNTO1);--右移一位o2<=o1&a(6DOWNTO0)&‘0’;--左移一位o3<=a&b; --合并a,bENDPROCESS;ENDshiftrl;并置运算符并置运算符“&”用于位的连接,将多个向量连接成更大⒉GAL的应用举例用GAL实现基本逻辑门的设计用GAL实现组合及时序混合的逻辑电路⒉GAL的应用举例用GAL实现基本逻辑门的设计用GAL实现基本逻辑门的设计设计说明及构思图7-30给出了用一片GAL16V8实现基本逻辑门的要求。所要实现的电路是简单的组合逻辑电路,选择GAL16V8的简单模式就可以实现。由图可见全部电路共有12个输入端,6个输出端。用GAL实现基本逻辑门的设计设计说明及构思LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexample1ISPORT(a,b,c,d,e,m,n,p,q,h,i,j:INSTD_LOGIC;u,v,w,x0,y0,z0:OUTSTD_LOGIC);attributeLOC:st

温馨提示

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

评论

0/150

提交评论