VHDL语言程序设计基础_第1页
VHDL语言程序设计基础_第2页
VHDL语言程序设计基础_第3页
VHDL语言程序设计基础_第4页
VHDL语言程序设计基础_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

EDA教学系统总体介绍湖北工业大学实验实训中心电子实习部2011-10-24叶红结构体(ARCHITECTURE)进程或其它并行结构实体(ENTITY)配置(CONFIGURATION)库、程序包设计实体

一、VHDL程序设计基本结构库、程序包

库(LIBRARY)——存放预先设计好的程序包和数据的集合体。

程序包(PACKAGE)——将已定义的数据类型、元件调用说明及子程序收集在一起,供VHDL设计实体共享和调用,若干个包则形成库。常用库有:·IEEE(常用的元件和标准模块存放的库)、

·STD、·WORK、·VITAL。其中必须显示出来的是:IEEE库包括:STD_LOGIC_1164STD_LOGIC_ARITH——是SYNOPSYS公司加入IEEE库程序包,包括:STD_LOGIC_SIGNED(有符号数)

STD_LOGIC_UNSIGNED(无符号数)STD_LOGIC_SMALL_INT(小整型数)VHDL’87版本使用IEEESTD1076-1987语法标准VHDL’93版本使用IEEESTD1076-1993语法标准库中USE语句的两种常用表达格式:USE库名.程序包名.项目名;USE库名.程序包名.ALL;例:LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL描述器件的输入、输出端口数据类型时将要用到的IEEE的标准库中的STD_LOGIC_1164程序包。库应放在设计实体最前面:

用关键词LIBRARY指明库名,

用USE语句指明库中程序包。实体(ENTITY)说明格式: ENTITY实体名IS [类属参数说明]; [端口说明]; END实体名;规则:(1)类属参数说明必须放在端口说明之前,用于指定如矢量位数、延迟时间等参数。例如:GENERIC(m:TIME:=1ns);--说明m是一个值为1ns的时间参数;又有程序语句:tmp1<=d0ANDse1AFTERm;--表示d0ANDse1经1ns延迟后才送到tem1。(2)端口说明:是设计实体与外部接口的描述说明,相当于FPGA器件的引脚说明。其格式为:PORT(端口名,端口名:模式数据类型名; :端口名,端口名:模式数据类型名);

例如:PORT(a,b:INSTD_LOGIC;

s:INSTD_LOGIC;

y:OUTSTD_LOGIC);端口名:常用几个英文字母或着一个英文字母加数字表示。如:CLK、A0、RESTER、D3等。端口模式包括:1)IN; --输入,符号:2)OUT;

--输出,符号:3)INOUT;--双向,符号:4)BUFFER;--具有读功能的输出,符号:DQBUFFER端口数据类型名:由IEEESTDLOGIC1164所约定的、由EDA工具支持和提供的数据类型为标准逻辑(standardlogic)类型。数据类型主要分为:步尔型(boolean)、位型(bit)、位矢量型(bit-vector)、整数型(integer)。结构体(ARCHITECTURE):

基本设计单元的实体:用于指明设计基本单元的行为、元件及内部连接关系,即定义设计单元的功能。

结构体的书写格式:

ARCHITECTURE结构体名OF实体名IS[说明语句];

--

为内部信号、常数、数据类型、函数定义BEGIN[功能描述语句];ENDARCHITECTURE结构体名;例如:“或门”的结构体

ARCHITECTUREor1OFtemp1ISSIGNALy:STD_LOGIC;BEGIN y<=aORb;

ENDARCHITECTUREor1;配置(CONFIGURATION)——把特定的结构体关联(指定给)一个确定的实体。一般在大而复杂的工程设计中才用到配置。“或门”的完整描述:LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALL;ENTITYor1ISPORT(a,b:INSTD_LOGIC;

y:OUTSTD

LOGIC);ENDor1;ARCHITECTUREexample1OFor1ISBEGINy<=aORb;ENDexample1;基本逻辑器件的描述:“半加器”的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;

so,co:OUTSTD_LOGIC);ENDhadder;ARCHITECTUREexample2OFh_adderISBEGIN so<=aXORb; co<=aANDb;ENDexample2;absoco锁存器的描述qDQenadLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlatch1ISPORT(d:INSTD_LOGIC;

ena:INSTD_LOGIC; q:OUTSTD_LOGIC);ENDlatch1;ARCHITECTUREexample4OFlatch1ISSIGNALsig_save:STD_LOGIC:=‘0’;BEGINPROCESS(d,ena) BEGIN IFena='1'THEN

Sig_save<=D; ENDIF; Q<=sig_save; ENDPROCESS;ENDexample4;二、VHDL语言要素

VHDL具有计算机编程语言的一般特性,其语言要素是编程语句的基本单元。准确无误地理解和掌握VHDL语言要素的基本含义和用法,对正确地完成VHDL程序设计十分重要。

1.数字型文字——由数字、小数点和下划线组成(1)整数文字 5,678,156E2,45_234_287(=45234287)(2)实数文字188.993,88_670_551.453_909(3)以数制基数表示的文字 格式:数制#数值#

例如: 10#170# 16#FE# 2#11010001# 8#376#VHDL文字规则(4)物理量文字例如:60s,100m2.字符串文字字符——以单引号括起来的数字、字母和符号(ASCII码)例如:’0’,’1’,’A’,’B’,’a’,’b’字符串——一维的字符数组,用双引号括起来。(1)文字字符串例如:”ABC”,”ABOY.”,”A”(2)数值字符串——矢量格式:数制基数符号“数值字符串”其中: B——二进制基数符号;

O——八进制基数符号;

X——16进制基数符号;例如: B“111011110”;矢量数组,长度为9 O“15”;等效B“001101”,长度为6 X“AD0”;等效B“101011010000”,长度为123.标识符——是用户给常量、变量、信号、端口、子程序或参数定义的名字规则:以字母开头,后跟若干字母、数字或单个下划线构成,但最后不能为下划线。例如:h_adder,mux21,example为合法标识符;2adder,_mux21,ful__adder,adder_为错误的标识符。VHDL’93标准支持扩展标识符,以反斜杠来定界,允许以数字开头,允许使用空格以及两个以上的下划号。例如:\74LS193\,\ABOY.\等为合法的标识符。

4.下标名——数组格式:标识符(表达式)例如:b(3)5.段名——多个下标名的组合格式:标识符(表达式方向表达式)方向:TO——下标序号由低到高

DOWNTO——下标序号由高到低例如:D(7DOWNTO0);表示数据总线D7~D0 D(0TO7);表示数据总线D0~D7

——存放各种类型数据的容器,包括变量、常量和信号1.变量(VARIABLE)

规则:只能在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)中说明和使用的局域量定义格式:VARIABLE变量名:数据类型{:=初始值}

例如:VARIABLEa:INTEGER VARIABLEb:INTEGER:=2;

VHDL数据对象

变量赋值语句: 目标变量名:=表达式例如:VARIABLEx,y:REAL VARIABLEa,b:BIT

VECTOR(0TO7);

x:=100.0;

y:=1.5+x;

a:=“1010101” a(3TO6):=(‘1’,‘1’,‘0’,‘1’);

a(0TO5):=b(2TO7);

2.信号(SIGNAL)规则:信号是在结构体(ARCHITECTURE)、程序包(PACKAGE)和实体中说明的全局量。信号定义格式:SIGNAL信号名:数据类型:=初值; 例如:SIGNALtemp:STD

LOGIC:=‘0’;

SIGNALflaga,flagb:BIT SIGNALdata:STD

LOOGIC

VECTOR(15DOWNTO0);信号赋值语句:目标信号名<=表达式例如:x<=9;

y<=x;

z<=xAFTER5ns;信号与变量的区别:(1)使用场合不同;(变量:进程;信号:结构体)(2)变量用“:=”号赋值,其值被立即使用(无时间延迟);而信号用“<=”赋值,其值可以附加延迟。3.常数(CONSTANT)规则:常数在程序前部定义且一旦被赋值就不能再改变。常数定义格式:CONSTANT常数名:数据类型:=初值;例如:CONSTANTfbus:BIT

VECTOR:=“010111”;CONSTANTVcc:REAL:=5.0;CONSTANTdely:TIME:=25ns;1.标量型(ScalarType)——单元素的最基本数据类型 (1)实数类型 (2)整数类型 (3)枚举类型 (4)时间类型VHDL数据类型2.复合类型(CompositeType)(1)数组型(Array)(2)记录型(Record)3.存取类型(AccessType)——为数据对象提供存取方式4.文件类型(FilesType)——提供多值存取类型

VHDL的预定义数据类型——在IEEE库中的标准程序包(STANDARD)中预先定义的数据类型。

1.布尔(BOOLEAN)数据类型包括逻辑“假”(FALSE)和逻辑“真”(TRUE),定义语句:TYPEBOOLEANIS(FALSE,TRUE);--以枚举类型定义2.位(BIT)数据类型包括‘0’和‘1’,定义语句:TYPEBITIS(‘0’,‘1’)

3.位矢量(BIT

VECTOR)数据类型位矢量是用双引号括起来的数字序列,如“0011”,X“00FD”定义语句:TYPEBIT

VECTORISARRAY(NaturalRange〈〉)OFBIT;--“〈〉”表示数据范围未定界规则:使用位矢量必须注明位宽,例如:SIGNALa:BIT

VECTOR(7DOWNTO0);--定义a为由a(7)~a(0)构成矢量,左为a(7)右为a(0);4.字符(CHARACTER)数据类型字符是用单引号括起来的ASCII码字符,如‘A’‘a’‘0’‘9’定义语句:TYPECHARACTERIS(ASCII码字符表中的全部字符)

5.整数(INTEGER)数据类型整数包括:正整数、负整数和零范围:32位带符号数原码,即-(231-1)~+(231-1)(-2147483647~+2147483647)

6.自然数(NATURAL)和正整数(POSITIVE)数据类型自然数——包括0和正整数正整数——不包括0的正整数7.实数(REAL)数据类型由正、负、小数点和数字组成,如:-1.0,+2.5,-1.0E38范围:-1.0E+38TO+1.0E+388.字符串(STRING)数据类型字符串是用双引号括起来的字符序列,也称字符矢量或字符串数组。例如,“ABOY.”,“10100011”

9.时间(TIME)数据类型时间是物理量数据,由整数数据和单位两部分组成,定义语句:

TYPETIMEISRANGE–2147483647TO2147483647units

fs;--飞秒(10-15S)VHDL中的最小时间单位

ps=1000fs;--皮秒

ns=1000ps;--纳秒

us=1000ns;--微秒

ms=1000us;--毫秒

sec=1000ms;--秒

min=60sec;--分

hr=60min;--时ENDunits;10.错误等级(SeverityLevel)错误等级数据用于表征系统的状态,包括:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)

。在仿真过程中,可输出这4种值来提示被仿真系统当前的工作状态。其定义如下:TYPEseverity_levelIS(note,warning,error,failure);IEEE预定义的标准逻辑位和矢量1.标准逻辑位(STD

LOGIC)数据类型TYPESTD

LOGICIS(‘U’--未初始化的 ‘X’--强未知的 ‘0’--强0 ‘1’--强1 ‘Z’--高阻态 ‘W’--弱未知的 ‘L’--弱0 ‘H’--弱1 ‘-’--忽略);

2.标准逻辑矢量(STD

LOGIC

VECTOR)数据类型TYPESTD

LOGIC

VECTORISARRAY(NaturalRange〈〉)OFSTD

LOGIC;--

〈〉表示范围未定用户自定义数据类型方式定义格式:TYPE数据类型名IS数据类型定义OF基本数据类型或:TYPE数据类型名IS数据类型定义;例如:TYPEstISARRAY(0TO15)OFSTD

LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);1.枚举类型(Enumerated)定义格式:TYPE数据类型名IS数据类型定义;例如:TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);2.整数类型和实数类型定义格式:TYPE数据类型名ISRANGE范围;例如:TYPEnum1ISRANGE0TO100;

3.数组类型数组——是一组具有相同数据类型的元素的组合。定义格式:TYPE数组名ISARRAY(数据范围)OF数据类型;例如:TYPEdata_busISARRAY(7DOWNTO0)OFSTD_LOGIC;--定义数据总线,下标由高到低,即D7位权值最高,D0位权值最低。TYPEdata_busISARRAY(0TO7)OFSTD_LOGIC;--定义数据总线,下标由低到高,即D0位权值最高,D7位权值最低。4.记录类型(Recode)记录——是一组不同数据类型的元素的组合。定义格式:TYPE记录类型名ISRECODE

元素名:元素数据类型; 元素名:元素数据类型; :

ENDRECODE[记录类型名]类型操作符功能操作数数据类型算术操作符+加整数-减整数&并一维数组*乘整数和实数/除整数和实数MOD取模整数REM求余整数SLL逻辑左移BIT或布尔型一维数组SRL逻辑右移BIT或布尔型一维数组VHDL操作符类型操作符功能操作数数据类型算术操作符SLA算术左移BIT或布尔型一维数组SRA算术右移BIT或布尔型一维数组ROL逻辑循环左移BIT或布尔型一维数组ROR逻辑循环右移BIT或布尔型一维数组**乘方整数ABS取绝对值整数类型操作符功能操作数数据类型关系操作符=等于任何数据类型/=不等于任何数据类型<小于枚举与整数及对应的一维数组>大于同上<=小于等于同上>=大于等于同上类型操作符功能操作数数据类型

逻辑操作符

AND与BIT、BOOLEAN、STD

LOGICOR或同上NAND与非同上NOR或非同上XOR异或同上NXOR异或非同上NOT非同上类型操作符功能操作数数据类型符号操作符+正整数-付整数说明:(1)操作符的优先级:()→(NOT,ABS,**)→(REM,MOD,/,*)→(+,-)→(关系运算符)→(逻辑运算符:XOR,NOR,NAND,OR,AND)(2)在逻辑运算表达式中若全部运算符相同,则可以不加括号;若运算符不同则加括号分隔;(3)并“&”操作符完成一维数组的位扩展功能:用于检出时钟边沿、完成定时检查、获得未约束的数据类型的范围等。格式:属性测试项目名‘属性标识符;--S‘属性标识符属性(ATTRIBUTE)描述与定义语句例如:TYPEnumberISINTEGERRANGE9DOWNTO0;

I:=number‘LEFT;--I=9 I:=number‘RIGTH;--I=0 I:=number‘HIGH;--I=9 I:=number‘LOW;--I=0EVENT——表示对当前的一个极小的时间段内发生事件的情况进行检测(如时钟的边沿)。例如:clock‘EVENT --检测以clock为属性测试项目的事件

clock‘EVENTANDclock=‘1’; --检测clock的上升沿

clock‘EVENTANDclock=‘0’; --检测clock的下降沿LAST_EVENT——从信号最近一次的发生至今所经历的时间,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。顺序语句——在进程(PROCESS)或子程序(PROCEDURE)、函数(FUNCTION)中使用,按程序书写的顺序自上而下、一个一个语句地执行;并行语句——出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。VHDL赋值语句1.变量赋值语句格式:目标变量名:=赋值源(表达式);例如:x:=5.0;2.信号赋值语句格式:目标信号名<=赋值源;例如:y<=‘1’;说明:该语句若出现在进程或子程序中则是顺序语句,若出现在结构体中则是并行语句。数组元素赋值例如:SIGNALa,b:STD

LOGIC

VECTOR(1TO4);

a<=“1101”;

a(1TO2)<=“10” a(1TO2)<=b(2TO3);

流程控制语句1.IF语句格式1:IF条件句Then

顺序语句; ENDIF;格式2:IF条件句Then

顺序语句; ELSE

顺序语句; ENDIF;格式3:IF条件句Then

顺序语句; ELSIF条件句Then

顺序语句; … ELSE

顺序语句; ENDIF;【例】用VHDL语言描述下图硬件电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_stmtsISPORT(a,b,c:INBOOLEAN; y:OUTBOOLEAN);ENDcontrol_stmts;cabyARCHITECTUREexample1OFcontrol_stmtsISBEGIN PROCESS(a,b,c) VARIABLEn:BOOLEAN; BEGIN IFaTHENn:=b; ELSE n:=c; ENDIF; y<=n; ENDPROCESS;ENDexample1;

【例】8线-3线优先编码器的设计

(真值表)输入输出a0a1a2a3a4a5a6a7y0y1y2xxxxxxx0

111xxxxxx01

011xxxxx011

101xxxx0111

001xxx01111

110xx011111

010x0111111

10001111111

000LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(a:INSTD_LOGIC_VECTOR(0TO7);y:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREexample2OFcoderISBEGINPROCESS(a)BEGIN IFa(7)='0' THENy<="111"; ELSIF(a(6)='0') THENy<="011"; ELSIF(a(5)='0') THENy<="101"; ELSIF(a(4)='0') THENy<="001"; ELSIF(a(3)='0') THENy<="110"; ELSIF(a(2)='0') THENy<="010"; ELSIF(a(1)='0') THENy<="100"; ELSEy<="000"; ENDIF; ENDPROCESS;ENDexample2;

2.CASE语句格式:CASE表达式IS When选择值=>顺序语句;

When选择值=>顺序语句;

… WhenOTHERS=>顺序语句;

ENDCASE;说明:“=>”不是运算符,相当“THEN”【例】用CASE语句描述4选1数据选择器数据选择器as2zbcds1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(s1,s2:INSTD_LOGIC; a,b,c,d:INSTD_LOGIC; z:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREexample3OFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN s<=s1&s2; PROCESS(s1,s2,a,b,c,d) BEGIN CASEsIS WHEN"00"=>z<=a; WHEN"01"=>z<=b; WHEN"10"=>z<=c; WHEN"11"=>z<=d; WHENOTHERS=>z<='X';ENDCASE; ENDPROCESS;ENDexample3;

3.LOOP语句格式1:[标号:]FOR循环变量IN初值TO终值LOOP

顺序语句; ENDLOOP[标号];【例】8位奇偶校验器的描述8位奇偶校验器a(0)za(1)a(2)a(3)a(4)a(5)a(6)a(7)8位奇偶校验器za(7..0)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0); y:OUTSTD_LOGIC);ENDp_check;ARCHITECTUREexample4OFp_checkISBEGINPROCESS(a)VARIABLEtemp:STD_LOGIC; BEGIN temp:='0'; FORnIN7DOWNTO0LOOP temp:=tempXORa(n); ENDLOOP; y<=temp; ENDPROCESS; ENDexample4; 4.NEXT语句格式:NEXT[标号][WHEN条件];功能:(1)NEXT——无条件结束本次循环(2)NEXT标号——结束本次循环,从“标号”规定的位置继续循环;(3)NEXTWHEN条件——当“条件”满足时结束本次循环,否则继续循环。5.EXIT语句格式:EXIT[标号][WHEN条件];功能:(1)EXIT——无条件跳出循环(2)EXIT标号——跳出循环,从“标号”规定的位置开始循环;(3)EXITWHEN条件——当“条件”满足时跳出循环,否则继续循环。

格式1:WAITON敏感信号表;功能:将运行的程序挂起直至敏感信号表中的任一信号发生变化时结束挂起,重新执行程序。例如:SIGNALs1,s2:STD

LOGIC;

PROCESS … WAITONs1,s2;

ENDPROCESS;WAIT语句

注意:含WAIT语句的进程PROCESS的括弧中后不能加敏感信号,否则是非法的,例如

PROCESS(s1,s2)格式2:WAITUNTIL条件表达式;功能:将运行的程序挂起直至表达式中的敏感信号发生变化,而且满足表达式设置的条件时结束挂起,重新执行程序。例如:WAITUNTILenable=‘1’;格式:ASSERT条件表达式[ REPORT字符串][ SEVERITY错误等级]功能:当条件为“真”时,向下执行另一个语句,为“假”时,则输出“字符串”信息并指出“错误等级”。用途:用于仿真、调试程序时的人机对话。断言(ASSERT)语句例如ASSERT(S=‘1’ANDR=‘1’)REPORT“BothvaluesofSandRareequal‘1’”SEVERITYERROR;错误等级:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)VHDL并行语句并行语句——出现在结构体中,各语句并行(同步)运行,与书写的顺序无关。1.并行语句的种类ARCHITECTURE生成语句条件信号赋值语句元件例化语句并行信号赋值语句块语句进程语句并行过程调用语句信号信号信号信号信号信号ENDARCHITECTURE2.并行语句的使用结构ARCHITECTURE结构体名OF实体名IS说明语句BEGIN

并行语句ENDARCHITECTURE结构体名进程语句属于并行语句,它在VHDL中使用最频繁、最能体现VHDL风格。进程语句格式:[进程标号:]PROCESS[(敏感信号参数表)][IS] [进程说明部分] BEGIN

顺序描述语句

ENDPROCESS[进程标号];进程语句【例】异步清除十进制加法计数器的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcnt10yISPORT(clr:INSTD_LOGIC;

clk:INSTD_LOGIC;

cnt:BUFFERINTEGERRANGE9DOWNTO0);ENDcnt10y;ARCHITECTUREexample9OFcnt10yISBEGINPROCESS(clr,clk) BEGIN IFclr='0'THENcnt<=0; ELSIFclk'EVENTANDclk='1'THEN IF(cnt=9)THEN

cnt<=0; ELSE

cnt<=cnt+1; ENDIF; ENDIF; ENDPROCESS;ENDexample9;功能:将一个大系统程序分解为若干子系统(块)编写,便于程序的编写、调试和查错。格式:块名:BLOCK [说明部分] BEGIN … --以并行语句构成的块体

ENDBLOCK块名块语句

【例】假设CPU芯片由算术逻辑运算单元ALU和寄存器组REG8组成,REG8又由8个REG1、REG2、…子块构成,其程序结构为:LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYCPUISPORT(clk,RESET:INSTD

LOGIC;

ADDERS:OUTSTD

LOGIC_VECTOR(31DOWNTO0);

DATA:INOUTSTD

LOGIC

VECTOR(7DOWNTO0);ENDCPU;ARCHITECTURECPU_ALU_REG8OFCPUISSIGANLibus,dbus:STD_LOGIC_VECTOR(31DOWNTO0);--定义全局量BEGIN ALU:BLOCK SIGNALQbus:STD_LOGIC_VECTOR(31DOWNTO0);--定义局域量

BEGIN --ALU块行为描述语句

ENDALU;REG8:BLOCK

SIGNALZbus:STD_LOGIC_VECTOR(31DOWNTO0);--定义局域量

BEGIN REG1:BLOCK SIGNALZbus1:STD_LOGIC_VECTOR(31DOWNTO0);--定义子局域量

BEGIN --REG1子块行为描述语句

ENDREG1

… ENDREG8ENDCPU_ALU_REG8说明:在结构体中定义的全局量可以在各块结构中使用;块结构中定义局域量只能在本块及所属的子块中使用;子块中定义子局域量只能在子块中使用。1.简单信号赋值语句格式:赋值目标<=表达式;例如:output1<=aANDb;规则:赋值目标必须是信号,而且出现在结构体或块语句中并行信号赋值语句2.条件信号赋值语句格式:赋值目标<=表达式WHEN赋值条件ELSE

表达式WHEN赋值条件ELSE …

表达式;例如:对4选1多路选择器的描述

… z<=aWHENs=”00”ELSE bWHENs=”01”ELSEcWHENs=”10”ELSEd;

…3.选择信号赋值语句格式:WITH选择表达式SELECT赋值目标信号<=表达式WHEN选择值, --以“,”号分隔 表达式WHEN选择值, …

表达式WHEN选择值;

--以“;”号结束例如:WITHselSELECT q<=i0AFTER10nsWHEN0,

i1AFTER10nsWHEN1,

i2AFTER10nsWHEN2,

i3AFTER10nsWHEN3, ‘X’AFTER10nsWHENOTHERS;

子程序和并行过程调用语句VHDL中的子程序(SUBPROGRAM)有两种类型:过程(PROCEDURE)和函数(FUNCTION)。1.过程(PROCEDURE)语句过程调用前需要将过程的实质内容装入程序包(Package)中,过程分为过程首和过程体两部分。过程首是过程的索引,相当于一本书目录,便于快速地检索到相应过程体的内容。过程首的语句格式为:PROCEDURE过程名

(参数表);过程体是放在程序包的包体(PackageBody)中,过程体的格式为:PROCEDURE过程名(参数表)IS [声明部分] BEGIN

顺序语句;ENDPROCEDURE过程名;例如PROCEDUREadder(SIGANLa,b:INSTD_LOGIC_VECTOR; Sum:OUTSTD_LOGIC); --过程首PROCEDUREadder(SIGANLa,b:INSTD_LOGIC_VECTOR; Sum:OUTSTD_LOGIC)IS--过程体

BEGIN …;ENDadder;2.过程调用语句格式:过程名(关联参数表);例如:adder(a1,b1,sum1);规则:(1)若过程在进程(PROCESS)中调用,则是顺序语句;(2)若过程调用出现在结构体(ARCHITECTURE)或块(BLOCK)中,则属于并行语句,相当一个进程,而且每调用一次过程,就相当插入一个元件。3.函数(FUNCTION)语句格式:FUNCTION函数名(参数表)

RETURN数据类型IS [说明部分] BEGIN [顺序处理语句] RETURN[返回变量名];

END[函数名];说明:函数程序通常是放在程序包(PACKAGE)中。【例】求最大值的函数:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpac1IS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR) RETURNSTD_LOGIC_VECTOR; --声明函数首END;PACKAGEBODYbpacIS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--声明函数体

RETURNSTD_LOGIC_VECTORIS BEGIN IF(a>b)THENRETURNa; ELSE

温馨提示

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

评论

0/150

提交评论