基于CPLD的逻辑电路_第1页
基于CPLD的逻辑电路_第2页
基于CPLD的逻辑电路_第3页
基于CPLD的逻辑电路_第4页
基于CPLD的逻辑电路_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

基于CPLD的逻辑电路设计方法逻辑电路在电子信息系统中的作用和地位EDA(电子设计自动化)改变了逻辑电路的设计方法基于CPLD的逻辑电路的设计平台和流程VHDL学习1、逻辑电路在电子信息系统中的作用简单的数字信号变换和逻辑控制电路(计数器、编译码、多路选择、有限状态机)嵌入式系统的外围电路(为单片机扩展性能)(地址译码、中断控制、接口电路)利用FPGA内核嵌入式系统,可构成SOC(systemonchip)实现高性能的数字信号处理(FFT、滤波、复杂编码、数据压缩)简单复杂2、EDA改变了逻辑电路的设计方法自动化改变了工业、农业的生产方式,同样也促进了电子设计的方式传统的逻辑电路设计方式基于行为描述的逻辑电路设计方式和描述工具2.2传统的逻辑电路设计方式设计方式1:数字逻辑法(门电路和触发器)逻辑代数卡诺图组合电路时序电路输出方程和驱动方程简化的布尔表达式2.2传统的逻辑电路设计方式结构化设计方式元件连线电路系统原理图传统的逻辑电路设计方法的

优缺点和局限性有完整的理论基础和设计经验(数字逻辑和电路)电路直观、形象,层次分明,易于理解有大量的元件可供应用需要熟知大量的元器件功能和性能难以设计大型电路,不利于交流和共享调试困难,设计风险大,周期长,成本高2.3EDA的设计方法EDA提供了专用的设计平台HDL使原理图形成=>文字形式设计电路,实现了交流和共享在兼容传统设计方法的基础上,HDL提供了新设计方法——“行为描述”,提高了设计效率EDA提供了电路仿真功能,降低了设计风险可编程器件还方便了系统升级和改进EDA(ElectronicDesignAutomation:电子设计自动化)HDL(HardwareDescriptionLanguage:硬件描述语言)3基于CPLD的逻辑电路的设计平台和流程3.1基于CPLD的逻辑电路的设计平台计算机CPLD开发专用软件下载线CPLD芯片目标电路板(PCB)1.将CPLD焊在PCB板上

2.接好编程电缆

3.现场烧写CPLD芯片ALTERA,XILINX,Lattice,计算机+软件下载电缆焊在目标板上CPLD3.2设计平台学习要点安装软件了解和选择CPLD芯片掌握开发流程原理图输入法、VHDL输入法;编译、综合;管脚配置;仿真了解JATG接口和下载方法

3.3、基于CPLD的逻辑电路的设计流程3.4、器件介绍

XC9572XLHighPerformanceCPLDFeatures•5nspin-to-pinlogicdelays•Systemfrequencyupto178MHz•72macrocellswith1,600usablegates•Availableinsmallfootprintpackages-44-pinPLCC(34userI/Opins)-44-pinVQFP(34userI/Opins)-48-pinCSP(38userI/Opins)-64-pinVQFP(52userI/Opins)-100-pinTQFP(72userI/Opins)Optimizedforhigh-performance3.3Vsystems-Lowpoweroperation-5VtolerantI/Opinsaccept5V,3.3V,and2.5Vsignals-3.3Vor2.5VoutputcapabilityIn-systemprogrammable芯片订货:边界扫描端口:VCC:GND:TCK:TDI:TDO:TMS:连接下载线,用于下载I/O:普通输入、输出、双向端口。全局信号:具有更高的速度,也可作为普通的IOI/O/GSRI/O/GTS2I/O/GCK3I用作信号输入:3.3V兼容5VO用作信号输出:3.3VVILLow-levelinputvoltage00.80VVIHHigh-levelinputvoltage2.05.5VVOOutputvoltage0VCCIOV

电源信号主电源:VCCINT3.3V接口电源:VCCIO2.5V/3.3V电源地:GND每个电源信号用0.1uF电容退耦,稳定电路引脚用法电源引脚全部连接:3.3V或5VGND全部连接电源地边界扫描信号:全部引出到插头I/O用到的信号要在UCF文件中配置信号I/O配置的原则:方便连线。

开发软件WebPACKISEXilinx公司的免费PLD开发软件支持XC9500,coolrunner,Spartan/II,部分Virtex/E/II器件4VHDL入门知识要点以语言的形式设计硬件(数字逻辑电路);语言是形式,硬件设计是内容。实体设计(端口说明+结构体)数据对象、数据类型及其运算符号(信号、变量)三种描述方式(数据流+结构化+行为描述)电路描述的手段——并行语句和顺序语句进程语句的概念和运行机理典型电路模块的设计4.1实体设计结构快速入门掌握部分定义输入输出管脚信号定义用到的内部信号和元件描述电路功能的语句主体部分

加法器的例子

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.all;

ENTITYjiafaqiIS

PORT(a:INSTD_LOGIC;--加数

b:INSTD_LOGIC;--被加数

ci:INSTD_LOGIC;--相邻低位来的进位数

s:OUTSTD_LOGIC;--全加器的和

co:OUTSTD_LOGIC);--向相邻高位的进位数

ENDjiafaqi;

ARCHITECTUREoneOFjiafaqiIS

BEGIN

s<=aXORbXORci;

co<=(aANDb)or((aXORb)ANDci);

ENDone;一个RS触发器的例子LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;ENTITYffrs

ISPORT(r,s:INSTD_LOGIC;

q,qn:OUTSTD_LOGIC);ENDffrs;ARCHITECTUREbehOFffrsIS

SIGNALrs:STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(r,s)

BEGINrs<=r&s;

CASErsIS

WHEN"01"=>q<='1';qn<='0';

WHEN"10"=>q<='0';qn<='1';

WHEN"11"=>q<='X';qn<='X';

WHENOTHERS=>null;

ENDCASE;

ENDPROCESS;ENDbeh;4.2数据对象、数据类型及其运算符号2)端口模式

端口模式也称端口方向,用来定义外部引脚上的数据的流动方向和方式,即定义外部引脚是输入还是输出。表3-1端口模式的功能端口模式端口模式说明IN输入模式,仅允许信号经端口从实体外部输入到实体内部。OUT输出模式,仅允许信号从实体内部输出。INOUT输入/输出双向模式,信号即可以进入实体内部,也可以从实体内部输出。该模式的输出缓冲器是三态控制的,输入输出分时使用的。BUFFER缓冲模式,与OUT类似可作为输出使用,但也可把输出的信号作为输入使用。比如计数器和累加器ARCHITECTURErtlofex2is--ai,bi为结构体内的连接信号BEGINai<=a;bi<=b; y<=(aiANDbi); z<=(aiORbi); x<=‘1’ENDrtl;【例3.2.2】结构体说明语句的举例表3-2VHDL中常用的库和包库名程序包名定义内容STDSTANDARD定义BIT、BIT_VECTOR、INTEGER等数据类型TEXTIO对文本文件进行读写操作的过程和函数IEEESTD_LOGIC_1164定义STD_LOGIC、STD_LOGIC_VECTOR数据类型ST_LOGIC_SIGNED定义STD_LOGIC、STD_LOGIC_VECTOR数据类型的有符号的算术运算(如"+"、"-"、"*""<"等)STD_LOGIC_UNSIGNED定义STD_LOGIC、STD_LOGIC_VECTOR数据类型的无符号的算术运算(如"+"、"-"、"*""<"等)STD_LOGIC_ARITH定义了UNSIGNED、SIGNED、SMALL_INT三种数据类型,并定义了上述类型及STD_LOGIC的混合算术运算、比较操作函数、数据类型转换函数。VHDL语言要素 1.常量常量是指在设计实体中不会发生变化的值,一旦定义赋值,程序中不能修改。常量定义的语法格式为:CONSTANT常量名:数据类型:=表达式;例如:CONSTANTwidth:POSITIVE:=8;CONSTANTvcc:REAL:=5.0;CONSTANTdelay:TIME:=10ns;2.信号信号是电子电路内部连接和电路的表述,也是描述电路的最基本方式。信号通常在构造体说明语句、程序包首和实体说明语句中定义,不能在进程的说明语句和子程序(包括函数和过程)的说明语句中定义。

信号定义的语法结构为:SIGNAL信号名:数据类型[约束条件][:=表达式];信号赋值语句的语法结构为:目标信号名<=表达式[AFTER时间表达式]; 理解要点:信号具有明显的物理特性,表现在信号的传导延迟和滤波性质

【例3.3.1】信号定义语句和赋值语句的举例ARCHITECTUREm1OFor_1ISSIGNALc,d:BIT;--信号可以在结构体说明语句中定

--义,而变量不行BEGINPROCESS(a,b,d)--其中a,b为输入端口,端口类型BITBEGIN

…c<=a;--信号赋值部分

d<=bAFTER20ns;--信号延时20ns后再赋值END;3.变量变量常用来表示临时存储的中间数据,以便于实现程序的算法,如门与门间的连线及其连线上的信号值。

变量定义的语法结构为:VARIABLE变量名[,…

,变量名][约束条件]:数据类型[:=表达式];VARIABLEa:INTEGERRANGE0TO15;变量赋值语句的语法结构为:目标变量名:=表达式;个人看法:变量是一种基于数学模型的电路抽象的表述方式,具有明显的抽象特性【例3.3.2】变量定义语句和赋值语句的举例PROCESS()

VARIABLEa:INTEGERRANGE0TO15;

--在PROCESS后定义变量

VARIABLEb,c:INTEGER:=2;--说明部分,BEGIN之前

VARIABLEd:STD_LOGIC;BEGIN

…a:=13;--变量赋值部分

b:=a+1;c:=15;d:=’1’;END;表3-3信号和变量的区别信号变量赋值符号<=:=基本用法用于作为电路中的信号连接,表示硬件连线和存储元件用于作为进程中临时存储的中间数据,行为特性信号赋值有延迟时间,并且在进程结束时才对信号赋值立即赋值,无时间延迟适用范围在整个结构体内的任何地方都适用只能在顺序语句中使用,不能在并行语句中使用对进程影响进程对信号敏感进程对变量不敏感用途用于程序包、实体说明或结构体中。仅用于进程、函数或过程中含有的信息可以容纳当前值,也可以保持历史值。变量只有当前值。数据类型1.VHDL的预定义数据类型表3-4预定义数据类型数据类型含义整数(INTEGER)代表32位的正整数、负整数和零,使用时用RANGE字句限定范围实数(REAL)类似数学中的实数,书写时一定要有小数点位(BIT)用字符‘1’和‘0’来表示位矢(BIT_VECTOR)双引号括起来的一组位数据布尔量(BOOLERN)只有"真"和"假"2个状态,可以进行关系运算字符(CHARACTER)字符通常用单引号括起来,对大小写敏感字符串(STRING)双引号括起来的一串字符时间(TIME)时间类型包括整数和物理量单位两部分自然数、正整数两类数据是整数的子类错误等级(SEVERITYLEVEL)用来表征系统的状态,它共有4种:NOTE、WARNING、ERROR、FAILURE2.其他预定义的标准数据类型标准逻辑位(STD_LOGIC)数据类型;标准逻辑矢量(STD_LOGIC_VECTOR);无符号数据类型(UNSIGNED);有符号数据类型(SIGNED)。

1)标准逻辑位(STD_LOGIC)数据类型TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-'); 'U'--Uninitialized(未初始化的) 'X'--ForcingUnknown(强未知的) '0'--Forcing0(强0) '1'--Forcing1(强1) 'Z'--HighImpedance(高阻态) 'W'--WeakUnknown(弱未知的) 'L'--Weak0(弱0) 'H'--Weak1(弱1)'-'--Don'tcare(可忽略的)2)标准逻辑矢量(STD_LOGIC_VECTOR)标准逻辑矢量STD_LOGIC_VECTOR是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中每个元素的数据类型都是以上定义的标准逻辑位STD_LOGIC。IEEE库程序包STD_LOGIC_1164中STD_LOGIC_VECTOR的定义如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;注意:在程序中使用STD_LOGIC和STD_LOGIC_VECTOR数据类型前,需加入下面的库说明语句和程序包说明语句: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL;3)无有符号数据类型UNSIGNED和SIGNED是用来设计可综合的数学运算程序的重要数据类型,UNSIGNED用于无符号数的运算,SIGNED用于有符号数的运算。在IEEE库程序包STD_LOGIC_ARITH中UNSIGNED的定义如下:TYPEUNSIGNEDISARRAY(NATURALRANGE<>)OFSTD_LOGIC;STD_LOGIC_ARITH中SIGNED的定义如下:TYPESIGNEDISARRAY(NATURALRANGE<>)OFSTD_LOGIC; 在程序中使用UNSIGNED和SIGNED数据类型前,需加入下面的库说明语句和程序包说明语句: LIBRARYIEEE; USEIEEE.STD_LOGIC_ARITH; 3.用户自定义数据类型用户自定义数据类型的语法结构为:TYPE数据类型名IS数据类型定义[OF基本数据类型];1)枚举类型枚举类型定义的语法结构为:TYPE数据类型名IS(元素1,元素2,…);在枚举的数据类型的定义中列举出所有可能的取值,被说明为该枚举类型的变量取值不能超出所定义的范围,TYPEmealIS(breakfast,lunch,dinner);2)数组类型数组类型定义的语法结构为:TYPE数组类型名ISARRAY约束范围OF元素类型;例如:TYPEaISARRAY(7DOWNTO0)OFSTD_LOGIC;

这是一个限定性一维数组,数组类型的名称是a,它有8个元素,数组元素的数据类型是STD_LOGIC,各元素的排序是a(7)、a(6)、…a(0)。4.数据类型的转换有三种常见的方法可以实现数据类型转换:类型标记转换法、函数转换法和常数转换法。1)用类型标记实现类型转换所谓类型标记实现类型转换,就是将欲转换的目的类型直接标出,后面紧跟用括号括起来的源数据。2)用转换函数实现类型转换3)用常数实现类型转换基本运算符1.逻辑运算符2.关系运算符3.算术运算符4.移位运算符5.并置运算符6.符号运算符属性属性是指实体、结构体、类型及信号的一些表现特征。1.值类属性2.信号类属性只有两个信号类属性(EVENT和STABLE)是可以综合的,其中EVENT最常用,主要用于时钟边沿的描述。下降沿可以简写为:clk`EVENTANDclk=`0`。3.数据范围类属性4.4VHDL语言的结构体描述方式

4.4.1行为(BEHAVEIOR)描述方式 类似于高级编程语言,其特点如下: (1)行为描述采用顺序语句,通过语句的组合顺序来表达电路功能,从形式上类似计算机语言; (2)行为描述具有很高的抽象程度,远高于数据流描述和结构描述; (3)行为描述只需描述清楚输入与输出间转换关系,不需要关注设计功能的门级实现; (4)其描述能力十分强大,成为VHDL结构体描述最重要的方式; (5)行为描述主要使用函数、过程、进程语句的形式来表示的。4.4.1行为(BEHAVEIOR)描述方式行为=行动+作为也就是处理事情的步骤或具体过程。行为描述方式也就是通过一系列的步骤或具体工作过程来设计电路。一个用于控制教室灯开关电路的行为.....ARCHITECTUREbehOFdff1ISBEGINsignalcnt:integerrange0to300;PROCESS(a,b,cnt)BEGINIF(a‘EVENTANDa=’1‘)THENIF(b=‘0’)THENcnt<=cnt+1;ELSEcnt<=cnt-1;ENDIF;ENDIF;IFcnt<10THENy<=“0001”;ELSIFcnt<20THENy<=“0011”;ELSIFcnt<30THENy<=“0111”;ELSEy<=“1111”;ENDIF;ENDPROCESS;ENDbeh;前后2个激光器2个传感器ab.....ARCHITECTUREbehOFdff1ISBEGINPROCESS(d,cp,r)BEGINIF(r='0')THENq<='0';ELSIF(cp'EVENTANDcp='1')THENq<=d;ENDIF;ENDPROCESS;ENDbeh;【例3.4.1】利用行为描述方式实现的D触发器 4.4.2数据流描述方式数据流描述方式源于传统的布尔表达式设计思想,通过逻辑或算术等表达式对信号赋值,表示信号在电路(或寄存器)中的传递方向。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYyima24_2ISPORT(a,b:INSTD_LOGIC;y3,y2,y1,y0:OUTSTD_LOGIC);ENDyima24_2;ARCHITECTURErtlOFyima24_2ISBEGINy3<=NOT(aANDb);y2<=NOT(aAND(NOTb));y1<=NOT((NOTa)ANDb);y0<=NOT((NOTa)AND(NOTb));ENDrtl; 4.4.3结构化描述方式利用元件例化语句,实现高层次的模块调用低层次的模块,来构成一个复杂的电路.可以理解为原理图方式4.5VHDL典型语句5.1VHDL顺序语句5.2VHDL并行语句5.3子程序5.4程序包、配置4.5.1VHDL顺序语句顺序语句用于进程或函数或过程中,若干条顺序语句整体地描述一个电路或一种电路的行为模型或一个数学函数。描述的效果与语句的执行顺序有关;在结构上类似于C语言。1赋值语句 (1) 信号代入语句

信号代入语句的语法结构为:信号<=inertial

表达式after时间表达式;信号<=transport表达式after时间表达式;

表达式中可以出现变量,该语句可根据不同情况可生成多种不同性质的电路模块。如门电路,加法器等,也可以和其他语句结合起来生成其它模块,是最基本的语句。信号代入语句解释1:inertial

可省略不写;模拟一个信号经过容性或抗性电路造成的相位延迟特性,具有滤波性质。宽度小于after指定的时间时,脉冲被滤掉。2:transport模拟一个信号经过理想传输线或阻性电路延迟特性,不具有滤波性质。宽度小于after指定的时间时,脉冲也不被滤掉。3:after中时间表达式省略时默认延迟无穷小;4:在同一个进程或过程或函数中,AFTER子句省略时,所有的信号赋值都是在程序的最后一条语句实行完后,一起生效;这一点可理解为有限个无穷小的和还是无穷小。PROCESS(b,c,d)beginc<=b;a<=candd;ENDPROCESS;A,b,c,d分别为1,1,1,1B变为0后;分析进程的执行过程:2次5:延迟子句在综合时被忽略,仅用于仿真;6:赋值号前后的类型应一致;2、变量赋值语句变量赋值语句的语法结构为:变量:=表达式;1:在进程中使用;2:具有立即性(没有延迟特性);3;由于变量具有局部性,值必须通过信号输出到其他模块;例如4-1【例4.1.2】比较N1、N2进程的执行结果N1:Process(c,d)自己理解书中解释Begina<=2;b<=a+c;a<=d+1;e<=a*2;ENDPROCESS;N2:Process(c,d,)Variableav,bv,evinteger:=0;--变量在这里说明Beginav:=2;bv:=av+c;

--变量赋值后,当前值立即被新结果替代av:=d+1;ev:=av*2;a<=av;

b<=bv;e<=ev;EndPROCESS; 3条件控制语句1.IF语句IF语句的语法结构为:IF条件THEN顺序语句;…[ELSIF条件THEN顺序语句;…ELSIF条件THEN顺序语句;…][ELSE顺序语句;…]ENDIF;具有优先级的电路3条件控制语句IF条件THEN顺序语句;…ENDIF;引入寄存器IF条件THEN

顺序语句;ELSE

顺序语句;ENDIF;不引入寄存器IF信号的边沿属性THEN

顺序语句;ENDIF;形成时序逻辑电路IF条件THEN

if语句;ELSE顺序语句;EndIF;嵌套语句【例4.1.3】IF语句举例--门闩锁存器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlatchISPORT(d,c:INBIT;y:OUTBIT);ENDlatch;ARCHITECTUREbehOFlatchISBEGINPROCESS(c,d)BEGINIF(c='1')THENy<=d;ENDIF;ENDPROCESS;ENDbeh;--二选一数据选择器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21ISPORT(a,b,c:INBIT;y:OUTBIT);ENDmux21;ARCHITECTUREbehOFmux21ISBEGINPROCESS(a,b,c)BEGINIF(c='1')THEN

y<=a;else

y<=b;ENDIF;ENDPROCESS;ENDbeh;4.CASE语句语法结构为:CASE表达式ISWHEN选择值=>

顺序语句;

顺序语句;

……WHEN选择值=>

顺序语句;

顺序语句;

……

[WHENOTHERS=>顺序语句;]ENDCASE;选择值不能重复;表达式的所有取值必须全部罗列,否则要用:WHENOTHERS=>顺序语句;没有优先级顺序;适合生成编解码电路,也常用于有限状态机电路描述。【例4.1.6】实现7段显示译码器LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;ENTITYyima2ISPORT(a:INSTD_LOGIC_VECTOR(3DOWNTO0);y:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDyima2;ARCHITECTUREbehOFyima2ISBEGINPROCESS(a)BEGINCASEaisWHEN"0000"=>y<="1111110";

WHEN"0001"=>y<="0110000";WHEN"0010"=>y<="1101101";WHEN"0011"=>y<="1111001";WHEN"0100"=>y<="0110011";WHEN"0101"=>y<="1011011";WHEN"0110"=>y<="1011111";WHEN"0111"=>y<="1110000";WHEN"1000"=>y<="1111111";WHEN"1001"=>y<="1111011";WHENOTHERS=>y<="0000000";ENDCASE;ENDPROCESS;

ENDbeh;5、循环语句1).FOR…LOOP语句FOR…LOOP循环语句主要用于循环次数已知的循环程序设计,可以使其所包含的顺序语句被循环执行FOR…LOOP语句的语法结构为:[循环标号:]FOR循环变量IN循环次数范围LOOP

顺序语句ENDLOOP[循环标号];循环变量在使用前不需声明(1)FOR循环变量IN初值TO终值LOOP 顺序语句;ENDLOOP;(2)FOR循环变量IN初值DOWNTO终值LOOP 顺序语句; ENDLOOP;(3)FOR循环变量INx’RANGELOOP 顺序语句; ENDLOOP;【例4.1.7】用FOR…LOOP语句来实现的数码中‘1’的个数的检测器。理解变量的价值LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYceshi1ISPORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);--输入的数据y:OUTINTEGERRANGE8DOWNTO0);--输出的1个数ENDceshi1;ARCHITECTUREbehOFceshi1ISBEGINPROCESS(data)

VARIABLEcount:INTEGERRANGE8DOWNTO0;--定义一个中间变量BEGINcount:=0;--中间变量赋初值FORiINdata'RANGELOOP--循环变量i在使用前不需声明IFdata(i)=‘1’THENcount:=count+1;

ENDIF;ENDLOOP;y<=count;ENDPROCESS;

ENDbeh;2).WHILE…LOOP语句WHILE…LOOP语句的语法结构为:[循环标号:]WHILE条件LOOP顺序语句;ENDLOOP[循环标号];

例如:WHILEi<10LOOP

--这里利用了i≥10的条件使程序结束循环

sum:=i+sum;--sum初始值为0

i:=i+1;--循环控制变量i的递增是通过算式i:=i+1来实现的

ENDLOOP;WHILE…LOOP语句没有自动递增循环变量的功能,而是在顺序处理语句中增加了一条循环次数计算语句,用于循环语句的控制。Loop无限循环语句,需要其他控制语句exitnext配合LOOP顺序语句;ENDLOOP;EXIT语句忽略后面语句,直接退出循环;NEXT语句忽略后面语句,直接进入下一次循环。

可用于上述三种循环语句中。 6、其他顺序语句1).等待语句语法结构为:WAIT[ON敏感信号表][UNTIL条件表达式][FOR时间表达式];当进程执行到WAIT语句,就被挂起,直到满足此语句设置的结束挂起条件后,将重新开始执行进程或过程中的程序。WAIT[ON敏感信号表][UNTIL条件表达式][FOR时间表达式];其中的条件可以组合,也可以单独出现。ON子句

敏感信号表信号之间用逗号分开。这些信号的值有一个变化,则ON子句条件成立。

如waitona,b,c,d;UNTIL子句一直等待直到条件成立

条件表达式类似于C语言中。如:a=‘1’;(aandb)=c;a’eventanda=‘1’;WAITUNTILa’eventanda=‘1’;FOR子句表示等待有限的一段时间后,继续执行后续的语句,而具体时间由时间表达式给出。时间表达式中要给出时间单位。该子句只用于仿真,不能综合。一般用于在电路仿真中模拟一个信号源。Process()begina<=‘1’;waitfor100ns;a<=‘0’;waitfor100ns*2;endprocess;2).空操作语句语法结构为:NULL;

执行该语句时不进行任何操作,只是使程序去执行下一个语句,以满足特定情况下的语法需要。4.5.2VHDL并行语句 在VHDL程序中,每个并行语句用来表示一个功能模块,各个功能模块组织在一起便组成了一个结构体。结构体中的所有并行语句的执行都是同时行进的,与书写顺序没有关系。并且认为执行速度无穷快。并行语句主要有:进程语句、并行信号赋值语句、块语句、元件例化语句、生成语句和并行过程调用语句。2.进程的概念及执行机制进程是行为描述的主要手段,通过进程语句可以生成电路模块,也可以产生用于电路仿真的激励信号。进程语句本身是一种并行语句,但它要使用一系列顺序语句来描述电路的行为。 进程标号:PROCESS(敏感信号) 进程说明部分 BEGIN 顺序语句1; 顺序语句2;

…………

顺序语句n; ENDPROCESS进程标号; 3再讲进程语句语法结构为:[进程标号:]PROCESS[(敏感信号表)][IS][进程说明部分]BEGIN顺序语句;ENDPROCESS[进程标号];进程语句本身是并行的,它可以生成一个独立的电路模块功能,或仿真产生一个电路的信号。有时候多个进程共同生成一个电路模块。在方法上,它利用顺序语句从电路的行为角度描述电路,而不是从电路结构上描述。要从逻辑合理性和物理上的可实现性去理解进程。ENTITYmul21ISPORT(a,b,c,s1,s2:INBIT;x,y:OUTBIT);ENDmul21;ARCHITECTUREoneOFmul21ISBEGINu1:PROCESS(a,b,s1)--输出为x的二选一数据选择器

BEGIN

IF(s1='0')THENx<=a;

ELSEx<=b;

ENDIF;ENDPROCESSu1;u2:PROCESS(a,c,s2)--输出为y的二选一数据选择器BEGIN

IF(s2='0')THENy<=a;

ELSEy<=c;ENDIF;ENDPROCESSu2;ENDone;【例4.2.1】两个二选一数据选择器该进程用于模拟一个信号源Process()begina<=‘1’;waitfor100ns;a<=‘0’;waitfor100ns*2;endprocess;不可综合成电路的进程,但可从行为上仿真一个信号源,用于对其它电路测试仿真。不合逻辑的描述Process(a,b)begina<=a+b;endprocess;Process(a,b,clk)beginif(clk’eventandclk=‘1’)thena<=a+b;endif;endprocess;不合实际正确的描述方式进程使用要点:1)敏感信号表同WAITon中敏感量表。敏感信号的变化认为是进程启动的条件,敏感信号表可省略;若敏感信号省略时,进程中应插入等待语句,并认为进程中语句是无限循环执行的。进程中所有的被读信号,均应列入到敏感信号表中,否则可能造成综合结果和仿真结果的不一致。当敏感信号被赋值时,则可能再次启动进程被读信号:赋值号右端的信号,各种条件表达式中的信号2)一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。同步电路也可由结构体中的多个进程描述。【例4.2.2】多进程语句实现16进制加法计数器的举例LIBRARYIEEE;--16进制加法计数器USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounter_16ISPORT(clk:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);co:OUTSTD_LOGIC);ENDcounter_16;ARCHITECTUREbehOFcounter_16ISSIGNALqn:STD_LOGIC_VECTOR(3DOWNTO0);--因为q只能输出,所

--以在结构体建立一个新的信号BEGINP1:PROCESS(clk)BEGIN

IF(clk'EVENTANDclk='1')THENIFqn="1111"THENqn<=”0000”;ELSEqn<=qn+1;ENDIF;ENDIF;q<=qn;ENDPROCESSP1;P2:PROCESS(clk)BEGINIF(clk'EVENTANDclk='1')THENIFqn="1111"THENco<='1';ELSEco<='0';ENDIF;ENDIF;ENDPROCESSP2;ENDbeh;3)在同一个进程中,可以多次对同一个信号赋值,但在不同进程中,对同一个信号赋值则产生多驱动源电路。在一般情况中应避免这种情况,但在描述具有高阻输入的分时驱动电路时会用这样的描述方式。决断函数是解决这种问题的常用方法,但也可以采用IFELSIF语句或CASE语句替代。。4)变量也是在进程中常用的数据对象,变量的说明应在所用的进程中说明,所以变量作用范围是局部的。变量的值如果在其他进程中使用时,则需要通过信号输出。4.并行信号赋值语句 1.简单信号赋值语句可认为是进程的简写LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand_gateISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENGand_gate;ARCHITECTURErtlOFand_gateISBEGINP1:PROCESS(a,b)BEGINy<=aANDb;ENDPROCESSP1;ENDrtl;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand_ga

温馨提示

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

最新文档

评论

0/150

提交评论