




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2章章 VHDL硬件描述语言(一)硬件描述语言(一)一、基本结构一、基本结构二、语言要素二、语言要素三、顺序语句三、顺序语句四、并行语句四、并行语句一、基本结构一、基本结构1、实体、实体2、结构体、结构体基本结构基本结构VHDL设计设计VHDL文件文件库及程序包(库及程序包(Packages)声明在设计或实体中将用到的常数,数据类型,声明在设计或实体中将用到的常数,数据类型,元件及子程序等元件及子程序等实体实体(Entities) 声明到其实体及其设声明到其实体及其设计的接口,即定义本设计的接口,即定义本设计的输入计的输入/出端口出端口结构体结构体(Architectures) 定义了实体
2、的实现。即定义了实体的实现。即电路的具体描述电路的具体描述基本结构基本结构/举例说明举例说明n例例、一个一位二进制全加器设计。、一个一位二进制全加器设计。n半加器半加器n全加器全加器H_ADDERABSOCOABCOSO&H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABCF_ADDERAINBINSUMCYCIN基本结构基本结构/举例说明举例说明/VHDL语言描述语言描述n或门或门LIBRARY IEEE; -库,程序包调用库,程序包调用USE IEEE.STD_LOGIC_1164.ALL;ENTITY MYOR2 IS -实体实体OR2描述
3、描述PORT(A , B : IN STD_LOGIC; C : OUT STD_LOGIC );END MYOR2;ARCHITECTURE ART1 OF MYOR2 ISBEGIN -结构体描述结构体描述C=A OR B;END ART1;ABC基本结构基本结构/举例说明举例说明/VHDL语言描述语言描述n半加器描述半加器描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY H_ADDER IS -实体实体H_ADDER描述描述PORT (A,B : IN STD_LOGIC; CO,SO : OUT STD_LOGIC);END H_ADD
4、ER ;ARCHITECTURE ART2 OF H_ADDER ISBEGIN -结构体结构体描述描述SO=(A OR B) AND (A NAND B);COAIN, B=BIN, CO=D, SO=E);U2: H_ADDER PORT MAP(A=E, B=CIN, CO=F,SO=SUM);U3: OR2 PORT MAP(A=D, B=F, C=CY);END ART3;基本结构基本结构/举例说明举例说明/VHDL语言描述语言描述n元件连接对照元件连接对照U1: H_ADDER PORT MAP(A=AIN, B=BIN, CO=D, SO=E);U2: H_ADDER PORT
5、MAP(A=E, B=CIN, CO=F,SO=SUM);U3: MYOR2 PORT MAP(A=D, B=F, C=CY);H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABC基本结构基本结构/举例说明举例说明/VHDL语言描述语言描述n说明说明u该设计包括三个实体该设计包括三个实体lOR22输入或门;输入或门;lH_ADDER半加器;半加器;lF_ADDER全加器。全加器。l其中:其中:F-ADDER是顶层实体,其它两个实体(子实是顶层实体,其它两个实体(子实体)为顶层实体服务。体)为顶层实体服务。u每个实体含有:库、程序包和结构体。结构体对实体每
6、个实体含有:库、程序包和结构体。结构体对实体功能进行定义。功能进行定义。u实体定义的元件可以通过实体定义的元件可以通过COMPONENTEND COMPONENT元件调用申明,元件调用申明,PORT MAP()元件()元件例化,信号例化,信号SIGNAL的定义以及引脚连线进行元件装配。的定义以及引脚连线进行元件装配。基本结构基本结构/实体实体VHDL设计设计VHDL文件文件程序包(程序包(Packages)声明在设计或实体中将用到的常数,数据类型,声明在设计或实体中将用到的常数,数据类型,元件及子程序等元件及子程序等实体(实体(Entities) 声明到其他实体及其声明到其他实体及其他设计的接
7、口,即定义他设计的接口,即定义本设计的输入本设计的输入/出端口出端口结构体结构体(Architectures) 定义了实体的实现。即定义了实体的实现。即电路的具体描述电路的具体描述基本结构基本结构/实体实体n实体是一个设计实体的表层设计单元,其功能是对这个设实体是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述,它规定了设计单元的输计实体与外部电路进行接口描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。通信界面。nVHDL表达的所有设计均与实体有关,实体是设计中表达的所有设计均与实体
8、有关,实体是设计中最基最基本本的模块。的模块。n实体中定义了该设计所需的输入实体中定义了该设计所需的输入/输出信号,信号的输入输出信号,信号的输入/输出类型被称为输出类型被称为端口模式端口模式,同时,实体中还定义他们的数,同时,实体中还定义他们的数据类型。据类型。n实体说明单元的常用语句结构如下:实体说明单元的常用语句结构如下:ENTITY 实体名实体名 IS【GENERIC(类属表类属表);】【 PORT(端口表端口表);】常用常用END 实体名;实体名;基本结构基本结构/实体实体/类属类属n类属(类属(GENERIC)u类属参数为设计实体和外部环境之间提供静态数据传输类属参数为设计实体和外
9、部环境之间提供静态数据传输通道,实际上就是整个设计中所要使用的一个常数。通道,实际上就是整个设计中所要使用的一个常数。u一般用来规定一般用来规定端口的大小端口的大小、I/O引脚的指派引脚的指派、实体中子元实体中子元件的数目件的数目和实体的和实体的定时特性定时特性。u类属参数说明语句必须放在端口说明语句类属参数说明语句必须放在端口说明语句前面前面。u类似于类似于C语言中的语言中的“define”。u书写格式如下:书写格式如下:GENERIC(常数名:数据类型常数名:数据类型:=设定值设定值; 常数名:数据类型常数名:数据类型:=设定值设定值; 常数名:数据类型常数名:数据类型:=设定值设定值 )
10、;u注意:注意:最后一个类属定义后面,不可加最后一个类属定义后面,不可加“;”。基本结构基本结构/实体实体/端口端口n端口(端口(PORT)u书写格式如下:书写格式如下:PORT(端口名:端口模式端口名:端口模式数据类型数据类型; 端口名:端口模式端口名:端口模式数据类型数据类型 );u端口名端口名是赋给每个外部引脚信号的名称,由设计者自行是赋给每个外部引脚信号的名称,由设计者自行命名,在实体中唯一;命名,在实体中唯一;u端口模式端口模式常用的有常用的有4种:种:lIN:只可输入的引脚;:只可输入的引脚;OUT:只可输出的引脚;:只可输出的引脚;lINOUT:双向引脚;:双向引脚;lBUFFE
11、R:输出引脚,但同时用作内部输入和反馈。:输出引脚,但同时用作内部输入和反馈。u注意:注意:最后一个端口定义后面,不可加最后一个端口定义后面,不可加“;”。基本结构基本结构/实体实体/举例说明举例说明ENTITY MYENT ISGENERIC(WIDTH:INTEGER:=16);PORT(CLK:IN STD_LOGIC; ADBUS:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0);END MYENT;n如果改变了类属如果改变了类属WIDTH的值,结构体中所有相关的定义的值,结构体中所有相关的定义将同时改变,由此将改变整个设计实体的硬件结构。将同时改变,由此将
12、改变整个设计实体的硬件结构。基本结构基本结构/结构体结构体VHDL设计设计VHDL文件文件程序包(程序包(Packages)声明在设计或实体中将用到的常数,数据类型,声明在设计或实体中将用到的常数,数据类型,元件及子程序等元件及子程序等实体(实体(Entities) 声明到其他实体及其声明到其他实体及其他设计的接口,即定义他设计的接口,即定义本设计的输入本设计的输入/出端口出端口结构体结构体(Architectures) 定义了实体的实现。即定义了实体的实现。即电路的具体描述电路的具体描述基本结构基本结构/结构体结构体n结构体是对实体功能的具体描述,因此它一定要跟在实体结构体是对实体功能的具体
13、描述,因此它一定要跟在实体的后面。的后面。n一个完整的、能够被综合实现的一个完整的、能够被综合实现的VHDL设计必须有一个实设计必须有一个实体和对应的结构体。一个实体和其对应结构体可构成一个体和对应的结构体。一个实体和其对应结构体可构成一个完整的完整的VHDL设计。设计。n一个实体可对应一个结构体或多个结构体。一个实体可对应一个结构体或多个结构体。n语句格式如下:语句格式如下:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS【定义语句定义语句】内部信号、常数、数据类型,函数等的定义内部信号、常数、数据类型,函数等的定义GEGIN【并行处理语句并行处理语句】【进程语句进程语句
14、】END 结构体名结构体名;n实体名必须是所在设计实体的名字,自行命名结构体名。实体名必须是所在设计实体的名字,自行命名结构体名。基本结构基本结构/结构体结构体结构体(结构体(Architecture)声明区声明区(Declarations)信号声明;声明用于该结构体的类型,常数,元件,子程序。信号声明;声明用于该结构体的类型,常数,元件,子程序。并发语句并发语句信号赋值信号赋值(Signal Assignments)计算结果,并赋值给信号计算结果,并赋值给信号元件例化元件例化(Component Instantiations)调用另一个实体所描述的电路。调用另一个实体所描述的电路。即元件调用
15、即元件调用过程调用过程调用(Procedure Calls)调用一个预先定义好的一个算调用一个预先定义好的一个算法。法。进程进程(Processes)定义一个新算法实现电路功能定义一个新算法实现电路功能。进程中只有顺序语句,语句。进程中只有顺序语句,语句按放置的顺序执行。按放置的顺序执行。基本结构基本结构/结构体结构体/举例说明举例说明ARCHITECTURE behave OF cntm16 IS BEGINco=1 when (qcnt=“1111” and ci=1) else 0; PROCESS (clk,nreset)-进程(敏感信号表)进程(敏感信号表)BEGINIF(nrese
16、t=0) THEN -顺序语句顺序语句qcnt=0000;ELSIF (clkEVENT AND clk = 1) THENif(ci=1) thenqcnt=qcnt+1;end if;END IF; END PROCESS;END behave;基本结构基本结构/实体与结构体之间的关系实体与结构体之间的关系n整个芯片整个芯片一个完整的一个完整的VHDL设计程序;设计程序;n芯片外部(外壳引脚)芯片外部(外壳引脚)实体实体n引脚引脚端口端口n芯片内部(电路)芯片内部(电路)结构体结构体二、语言要素二、语言要素1、文字规则、文字规则2、数据对象、数据对象3、数据类型、数据类型4、运算符、运算符
17、文字规则文字规则/关键字关键字n关键字关键字VHDL中有许多保留字,它们在程序中有特殊中有许多保留字,它们在程序中有特殊的含义。设计者的含义。设计者不能使用不能使用这些关键字作为自己的标识符。这些关键字作为自己的标识符。ABSDOWNTOLIBRARYPOSTPONEDSRLACCESSSLSELINKAGEPROCEDURESUBTYPEAFTERELSIFLITERALPROCESSTHENALIASENDLOOPPURETOALLENTITYMAPRANGETRANSPORTANDEXITMODRECORDTYPEARCHITECTUREFILENANDREGISTERUNAFFECTE
18、DARRAYFORNEWREJECTUNITSASSERTFUNCTIONNEXTREMUNTILATTRIBUTEGENERATENORREPORTUSEBEGINGENERICNOTRETURNVARIABLEBLOCKGROUPNULLROLWAITBODYGUARDEDOFRORWHENBUFFERIFONSELECTWHILEBUSIMPUREOPENSEVERITYWITHCASEINORSIGNALXNORCOMPONENTINERTIALOTHERSSHAREDXORCONFIGURATIONINOUTOUTSLACONSTANTISPACKAGEALLDISCONNECTLA
19、BELPORTSRA文字规则文字规则/标识符标识符n标识符标识符由大小写英文字母、阿拉伯数字和下划线组成由大小写英文字母、阿拉伯数字和下划线组成n使用时注意以下几点:使用时注意以下几点:uVHDL不区分大小写;不区分大小写;u标识符必须以字母开头;标识符必须以字母开头;u下划线不能放在结尾;下划线不能放在结尾;u下划线不能连用;下划线不能连用;u不能使用关键字;不能使用关键字;u不同的综合系统还定义了各自的子程序,子程序名也不同的综合系统还定义了各自的子程序,子程序名也不能作为标识符。不能作为标识符。u例如:例如:l合法:合法:rs_a_1、show_new_state、COUTl不合法:不合
20、法:2as、_ab1、a_cd、out文字规则文字规则/数字型文字数字型文字n整数文字:都是十进制的数整数文字:都是十进制的数u例如:例如:456,134E2(=13400),8_123_456_789,0u注意注意:“_”为了提高数字的可读性,相当于一个为了提高数字的可读性,相当于一个空的间隔符,没有其它意义,不影响数值。空的间隔符,没有其它意义,不影响数值。n实数文字:十进制数实数文字:十进制数+小数点小数点u例如:例如:23.4,1_234.567,123.45E-2(=1.2345),0.0n以数制基数表示的文字:基数:以数制基数表示的文字:基数:216u进制基数进制基数(十进制数十进
21、制数)数值文字数值文字E指数指数(十进制数,若十进制数,若是是0可省略可省略),例如,例如u10#170#=170100u2#1111_1110#=25420u16#E#E1=16#E0#=224=14161u16#F.01#E+2=16#F01#=3841.00文字规则文字规则/字符串型文字字符串型文字n字符字符用用 引起来的引起来的ASCII字符,可以是数值、符字符,可以是数值、符号和字母。号和字母。n字符串字符串是一维的字符数组,必须放在是一维的字符数组,必须放在“ ”中。中。nVHDL中有两种类型的字符串:中有两种类型的字符串:u文字文字字符串字符串用用“”“”引起来的一串文字。例如引
22、起来的一串文字。例如l“VHDL SYMBOL”、“abcd”u数位数位字符串字符串也称也称位矢量位矢量、位串位串,是被,是被“”“”引起来引起来的数字序列,其前加上数制基数说明符,实际上是预的数字序列,其前加上数制基数说明符,实际上是预定义的数据类型定义的数据类型BIT的一维数组。例如的一维数组。例如l二进制:二进制:B “0110_1110”l八进制:八进制:O “117”l十六进制:十六进制:X “FFE0”文字规则文字规则/下标名及下标段名下标名及下标段名n下标名下标名指示数组型变量或信号的指示数组型变量或信号的某一个某一个元素;元素;u类似于类似于C语言中的语言中的数组元素的表示方法
23、数组元素的表示方法。n下标段名下标段名指示数组型变量或信号的指示数组型变量或信号的某一段某一段元素。元素。n语句格式如下:语句格式如下:n数组型变量或信号名数组型变量或信号名(表达式表达式1【TO/DOWNTO 表达式表达式2】);uTO表示数组下标序列由低到高表示数组下标序列由低到高uDOWNTO表示数组下标序列由高到低表示数组下标序列由高到低u例如:例如:uSIGNAL A,B,C:BIT_VECTOR(0 TO 7);uSIGNAL Y : BIT;uY=B(3); -单个元素赋值单个元素赋值uC(0 TO 3)=A(4 TO 7); -分段赋值分段赋值uC(4 TO 7)Z);u注意:
24、注意:“:=”表示对信号赋初值,可用于仿真,不用表示对信号赋初值,可用于仿真,不用于综合。于综合。n信号使用的两种方法:信号使用的两种方法:u在两个元件之间使用信号传递信息在两个元件之间使用信号传递信息导线;导线;u信号赋值语句。格式为:目标信号名信号赋值语句。格式为:目标信号名=表达式;表达式;n信号可看作是一个数值容器,既可容纳当前值,又可保持信号可看作是一个数值容器,既可容纳当前值,又可保持历史值。信号赋值存在延时。历史值。信号赋值存在延时。数据对象数据对象/变量变量n变量变量VHDL顺序语句中存放中间值的对象。顺序语句中存放中间值的对象。n变量声明语法格式如下:变量声明语法格式如下:u
25、VARIABLE 变量名变量名:数据类型数据类型【:=初始值初始值】;u例如:例如:VARIABLE DET:BIT:=0;n变量赋值格式:目标变量名变量赋值格式:目标变量名:=表达式;表达式;u例如:例如:y:=a+b;n变量只能在进程、函数和过程中使用,属于局部对象。变量只能在进程、函数和过程中使用,属于局部对象。n变量赋值立即有效,不产生延时。变量赋值立即有效,不产生延时。数据对象数据对象/变量变量/信号与变量的区别信号与变量的区别n声明形式不同。信号声明关键字为声明形式不同。信号声明关键字为SIGNAL;而变量为;而变量为VARIABLE。n声明位置不同。信号声明在在子程序、进程外部;
26、而变量声明位置不同。信号声明在在子程序、进程外部;而变量在子程序、进程内部。在子程序、进程内部。n赋值符号不同。信号赋值符为赋值符号不同。信号赋值符为“=”;变量赋值符为;变量赋值符为“:=”。n在进程中,信号赋值在进程结束时起作用,而变量赋值是在进程中,信号赋值在进程结束时起作用,而变量赋值是立即起作用。即在一个进程中多次为一个信号赋值,只有立即起作用。即在一个进程中多次为一个信号赋值,只有最后一个会起作用,而当为变量赋值时,变量的值立即改最后一个会起作用,而当为变量赋值时,变量的值立即改变。变。数据对象数据对象/变量变量/信号与变量的区别信号与变量的区别n例如:例如:ARCHITECTUR
27、E ART OF SIG ISSIGNAL D:STD_LOGIC;BEGINPROCESS(A,B,C)BEGIND=A; X=C AND D;D=B; Y=C AND D;END PROCESS;END ART;ARCHITECTURE ART OF VAR ISBEGINPROCESS(A,B,C)VARIABLE D:STD_LOGIC;BEGIND:=A; X=C AND D;D:=B; Y=C AND D;END PROCESS;END ART;X=C AND B;Y=C AND BX=C AND A;Y=C AND B数据对象数据对象/常量常量n常量常量是一个固定的值,在整个仿真
28、期间其值不能改变,是一个固定的值,在整个仿真期间其值不能改变,一旦赋值就不能再改变。一旦赋值就不能再改变。n常量说明格式如下:常量说明格式如下:nCONSTANT 常量名常量名:类型说明类型说明:=表达式;表达式;n例如:例如:CONSTANT STEP:INTEGER:=2;n常量一般在结构体描述、程序包说明、实体说明、过程说常量一般在结构体描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明中使用。明、函数调用说明和进程说明中使用。n常量声明可以放在设计的任意位置,但作用范围不同。常量声明可以放在设计的任意位置,但作用范围不同。u全局常量:声明放在外部程序包内;全局常量:声明放在外
29、部程序包内;u若限制再某个程序段内,则应该将声明放在相应的结若限制再某个程序段内,则应该将声明放在相应的结构体、块、进程和子程序内。构体、块、进程和子程序内。数据类型数据类型nVHDL具有很强的数据类型,是一种强类型语言。具有很强的数据类型,是一种强类型语言。nVHDL语言的数据类型的定义相当严格,不同类型之间的语言的数据类型的定义相当严格,不同类型之间的数据不能直接代入,即使数据类型相同,位长不同时也不数据不能直接代入,即使数据类型相同,位长不同时也不能直接代入。能直接代入。n在在VHDL标准中描述了四种数据类型:标量类型、复合类标准中描述了四种数据类型:标量类型、复合类型、存取类型、文件类
30、型。型、存取类型、文件类型。n在在VHDL中,除了很多中,除了很多预定义的数据类型预定义的数据类型可直接使用外,可直接使用外,用户还可以用户还可以自定义数据类型自定义数据类型。u预定义的预定义的VHDL数据类型在数据类型在VHDL的标准程序包的标准程序包STANDARD和和STD_LOGIC_1164及其它的标准程序包及其它的标准程序包中作了定义,并可在设计中随时调用;中作了定义,并可在设计中随时调用;u用户自定义的数据类型以及子类型的基本元素一般仍用户自定义的数据类型以及子类型的基本元素一般仍属于属于VHDL的预定义数据类型。的预定义数据类型。u注意:注意:VHDL综合器并不支持所有的预定义
31、和自定义综合器并不支持所有的预定义和自定义数据类型。如:数据类型。如:REAL、TIME、FILE、ACCES等。等。数据类型数据类型/VHDL预定义数据类型预定义数据类型nVHDL预定义数据类型都是在预定义数据类型都是在VHDL标准程序包标准程序包STANDARD种定义的,在使用时已经自动包含进种定义的,在使用时已经自动包含进VHDL的源文件中,所以不必通过的源文件中,所以不必通过USE语句调用。语句调用。n布尔布尔(BOOLEAN)数据类型数据类型枚举类型枚举类型u两种可能取值:两种可能取值:TRUE(真真)和和FALSE(假假)u预定义:预定义:TYPE BOOLEAN IS(FALSE
32、,TRUE);n位位(BIT)数据类型数据类型枚举类型枚举类型u两种可能取值:两种可能取值:1和和0u预定义:预定义:TYPE BIT IS(0,1);n位矢量位矢量(BIT_VECTOR)数据类型数据类型基于基于BIT类型的数组类型的数组u预定义:预定义:TYPE BIT_VECTOR IS ARRAY(NATURAL)OF BIT;u使用位矢量必须注明位宽。使用位矢量必须注明位宽。u例如:例如:SIGNAL ABUS:BIT_VECTOR(7 TO 0);数据类型数据类型/VHDL预定义数据类型预定义数据类型n字符字符(CHARACTER)数据类型数据类型u用用引起来,区分大小写。引起来,
33、区分大小写。n整数整数(INTEGER)类型:正整数、负整数和零。类型:正整数、负整数和零。u32位,最大取值范围:位,最大取值范围:-231231uVHDL仿真器仿真器有符号处理;有符号处理; uVHDL综合器综合器有符号处理。有符号处理。n自然数自然数(NATURAL)和正整数和正整数(POSITIVE)数据类型数据类型uSUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH;uSUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGH;n实数实数(REAL)数据类型数据类型:有正负,有小数点。有正负,有
34、小数点。uTYPE REAL IS RANGE -1.0E+38 TO +1.0e+38;数据类型数据类型/VHDL预定义数据类型预定义数据类型n字符串字符串(STRING)数据类型数据类型n时间时间(TIME)数据类型数据类型物理类型物理类型u物理单位定义格式:物理单位定义格式:TYPE 物理类型名物理类型名 IS 范围;范围;UNITS 基本单位;基本单位;单位;单位;END UNITS;n错误等级类型错误等级类型数据类型数据类型/IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量n在在IEEE库的程序包库的程序包STD_LOGIC_1164中定义了两个非常中定义了两个非常重要的数据类型
35、。重要的数据类型。n标准逻辑位标准逻辑位STD_LOGIC数据类型数据类型常用常用u预定义:预定义:TYPE STD_LOGIC IS(U, X, 0, 1, Z, W, L, H, -);枚举枚举类型类型uU-初始值初始值,X-不定不定,0-0,1-1,Z-高高阻阻,W-弱信号不定弱信号不定,L-弱信号弱信号0,H-弱信号弱信号1,-不可能情况。不可能情况。 u程序包程序包STD_LOGIC_1164中定义了中定义了STD_LOGIC型逻型逻辑运算符辑运算符AND、NAND、OR、NOR和和NOT的重载函的重载函数,以及用于数,以及用于BIT与与STD_LOGIC相互转换的函数。相互转换的函
36、数。n标准逻辑矢量标准逻辑矢量STD_LOGIC_VECTOR数据类型数据类型常用常用u预定义:预定义:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE )OF STD_LOGIC;u同位宽、同数据类型的矢量间才能相互赋值。同位宽、同数据类型的矢量间才能相互赋值。数据类型数据类型/其它预定义标准数据类型其它预定义标准数据类型n在在IEEE库的程序包库的程序包STD_LOGIC_ARITH中定义了另三种中定义了另三种数据类型。数据类型。n无符号无符号(UNSIGNED)型:用于无符号数运算型:用于无符号数运算u预定义:预定义:TYPE UNSIGNED I
37、S ARRAY(NATRUAL RANGE )OF STD_LOGIC;u例如:例如:VARIABLE A:UNSIGNED(0 TO 8);n有符号有符号(SIGNED)型:用于有符号数运算型:用于有符号数运算u预定义:预定义:TYPE SIGNED IS ARRAY(NATRUAL RANGE )OF STD_LOGIC;u例如:例如:VARIABLE A:SIGNED(0 TO 8);A(0)是符号位是符号位n小整型小整型(SMALL_INT)u预定义:预定义:TYPE SMALL_INT IS INTEGER RANGE 0 TO 1;数据类型数据类型/用户自定义数据类型用户自定义数据
38、类型n用户定义的数据类型的一般格式:用户定义的数据类型的一般格式: uTYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义【OF基本数据类基本数据类型型】;uSUBTYPE 子类型名子类型名 IS 基本数据类型基本数据类型 RANGE 约束范约束范围;围;n枚举(枚举(ENUMERATED)类型)类型u格式:格式:TYPE 数据类型名数据类型名 IS(元素,元素,(元素,元素,););u例:例: TYPE week IS(Sun,Mon,Tue,wed,Thu,Fri,Sat);u例:例: TYPE STD_LOGIC IS (U, X,0, 1, Z, W, L, H, -);n整
39、数(整数(INTEGER)类型)类型u格式:格式:TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 约束范围约束范围u例:例:TYPE digit IS INTEGER RANGE 0 TO 9 数据类型数据类型/用户自定义数据类型用户自定义数据类型n实数(实数(REAL)类型)类型u格式:格式:TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 约束范围约束范围u例:例:TYPE current IS REAL RANGE -1E4 TO 1E4 n数组(数组(ARRAY)类型)类型u格式:格式:TYPE 数据类型名数据类型名 ISARRAY 范围范围 OF 原数原
40、数据类型名;据类型名;u例:例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;n 时间(时间(TIME)类型)类型u格式:格式: TYPE数据类型名数据类型名 IS 范围范围UNITS 基本单位基本单位 单位单位; END UNITS; 数据类型数据类型/用户自定义数据类型用户自定义数据类型n记录(记录(RECODE)类型)类型n将不同的数据类型放在一块,就是记录类型数据。将不同的数据类型放在一块,就是记录类型数据。u格式:格式:TYPE 数组类型名数组类型名 IS RECORD元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;
41、END RECORD; 数据类型数据类型/数据类型转换数据类型转换函数函数/程序包程序包说明说明STD_LOGIC_1164包包 TO_STDLOGICVECTOR(A)由由BIT_VECTOR转换成转换成STD_LOGIC_VECTORTO_BITVECTOR(A)由由STD_LOGIC_VECTOR转换成转换成BIT_VECTOR TO_LOGIC(A)由由BIT转换成转换成STD_LOGICTO_BIT(A) 由由STD_LOGIC转换成转换成BIT STD_LOGIC_ARITH包包CONV_STD_LOGIC_VECTOR(A,位长位长) 由由INTEGER,UNSIGNED和和SI
42、GNED转换成转换成STD_LOGIC_VECTOR CONV_INTEGER(A) 由由UNSIGNED和和SIGNED转换成转换成INTEGER STD_LOGIC_UNSIGNED包包 CONV_INTEGER(A)STD_LOGIC_VECTOR转换成转换成INTEGER 运算符运算符优先级优先级类型类型 运算符运算符 说明说明运算符运算符 说明说明低低逻辑逻辑AND与与NOR或非或非OR或或XOR异或异或NAND与非与非XNOR同或同或关系关系=等于等于大于大于=大于等于大于等于加减加减+加法加法-减法减法并置并置&并置并置符号符号+正号正号-负号负号乘法乘法*乘法乘法/除法
43、除法MOD求模求模REM求余求余其它其它*指数指数ABS绝对值绝对值NOT非非SLL逻辑左移逻辑左移SRL逻辑右移逻辑右移SLA算术左移算术左移高高SRA算术右移算术右移ROL循环左移循环左移ROR循环右移循环右移运算符运算符/并置运算符并置运算符n&组合操作数构建一个数组。操作数可以是数值型数组合操作数构建一个数组。操作数可以是数值型数据也可以是一个数组或一个数组元素,常用于字符串和位据也可以是一个数组或一个数组元素,常用于字符串和位串的连接或数组的合并与修改。例如串的连接或数组的合并与修改。例如SIGNAL x1,x2:BIT_VECTOR(7 DOWNTO 0);SIGNAL y
44、1:BIT_VECTOR(3 DOWNTO 0);SIGNAL y2:BIT;SIGNAL z1:BIT_VECTOR(15 DOWNTO 0);SIGNAL z2:BIT_VECTOR(11 DOWNTO 0);SIGNAL z3:BIT_VECTOR(8 DOWNTO 0);z1=x1&x2;z2=x2&y1;z3=x2&y2;运算符运算符/移位运算符移位运算符nSLA算术左移,算术左移, SRA算术右移算术右移u方法:空缺位用方法:空缺位用当前位当前位补充。补充。u例如例如:x=10101110;y1=x SLA 3;y2=x SRA 5;u结果:结果:y1=01
45、110000,y2=11111101。nSLL逻辑左移,逻辑左移, SRL逻辑右移逻辑右移u方法:空缺位用方法:空缺位用0补充。补充。u例如例如:x=10101110;y1=x SLL 3;y2=x SRL 5;u结果:结果:y1=01110000,y2=00000101。nROL循环左移,循环左移,ROR循环右移循环右移u方法:空缺位用方法:空缺位用移出位移出位补充。补充。u例如例如:x=10101110;y1=x ROL 3;y2=x ROR 5;u结果:结果:y1=01110101,y2=01110101。三、顺序语句三、顺序语句1、赋值语句、赋值语句2、分支控制语句、分支控制语句3、循
46、环控制语句、循环控制语句4、同步控制语句、同步控制语句5、其它语句、其它语句顺序语句顺序语句n顺序语句顺序语句只能用在只能用在进程进程和和子程序子程序中,它和其他高级语中,它和其他高级语言一样言一样,其语句是按照语句的出现的顺序加以执行的。其语句是按照语句的出现的顺序加以执行的。u进程进程语句本身是一个并行语句,但在进程内部的所有语句本身是一个并行语句,但在进程内部的所有语句都是顺序语句;语句都是顺序语句;u子程序子程序包括函数和过程,也是由一系列顺序语句构成。包括函数和过程,也是由一系列顺序语句构成。顺序语句顺序语句/赋值语句赋值语句n信号赋值信号赋值u目的信号量目的信号量=信号量表达式;信
47、号量表达式;n变量赋值变量赋值u目的变量目的变量:=表达式;表达式;n注意注意:在进程内,信号和变量具有根本的行为差别。:在进程内,信号和变量具有根本的行为差别。u变量赋值立即生效;变量赋值立即生效;u信号赋值不能立即生效,直到相应的进程被挂起。信号赋值不能立即生效,直到相应的进程被挂起。顺序语句顺序语句/分支控制语句分支控制语句nIF语句语句u简单简单IF语句结构语句结构l格式:格式:IF IF 条件条件 THENTHEN顺序执行语句顺序执行语句 END IFEND IF;l例如:例如:D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTIT
48、Y D ISPORT(CP,D: IN STD_LOGIC; Q: OUT STD_LOGIC);END D;ARCHITECTURE ART OF D ISBEGINPROCESS (CP)BEGINIF CPEVENT AND CP=1 THENQ = D;END IF;END PROCESS;END ART;顺序语句顺序语句/分支控制语句分支控制语句/IF语句语句n双路选择结构双路选择结构u格式:格式:IF IF 条件条件 THENTHEN顺序执行语句顺序执行语句1 1ELSEELSE顺序执行语句顺序执行语句2 2END IFEND IF;u例如:二选一例如:二选一 LIBRARY IE
49、EE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 ISPORT(d0,d1,sel :IN STD_LOGIC; q: OUT STD_LOGIC);END mux21;ARCHITECTURE art OF mux21 ISBEGINPROCESS(d0,d1,sel)BEGINIF sel=1 THEN q=d1; ELSE q=d0;END IF;END PROCESS;END art;顺序语句顺序语句/分支控制语句分支控制语句/IF语句语句n多路选择结构多路选择结构n格式:格式:IF IF 条件条件 THENTHEN顺序执行语句顺序执行语句ELSI
50、FELSIF 条件条件 THENTHEN顺序执行语句顺序执行语句ELSIFELSIF 条件条件 THENTHEN顺序执行语句顺序执行语句ELSEELSE顺序执行语句顺序执行语句END IFEND IF;n例如:四选一例如:四选一 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q: OUT STD_LOGIC);END mux41;ARCHITECTURE ART OF mu
51、x41 ISBEGINPROCESS(DIN,SEL)BEGINIF SEL=“00” THEN Q=DIN(0);ELSIF SEL=“01” THEN Q=DIN(1); ELSIF SEL=“10” THEN Q=DIN(2);ELSE Q1=顺序处理语句顺序处理语句1 1;WHEN WHEN 条件表达式条件表达式n=n=顺序处理语句顺序处理语句n n;WHEN OTHERS=WHEN OTHERS=顺序处理语句顺序处理语句n+1n+1ENDENDCASE; CASE; n其中其中WHEN的条件表达式可以有的条件表达式可以有3种形式种形式:uWHEN 值值=顺序处理语句顺序处理语句uWH
52、EN 值值|值值|值值|值值=顺序处理语句顺序处理语句uWHEN 值值TO 值值=顺序处理语句顺序处理语句n注意:各个条件表达式必须相互排斥。注意:各个条件表达式必须相互排斥。顺序语句顺序语句/分支控制语句分支控制语句/ CASE 语句语句n例如:四选一数据选择器例如:四选一数据选择器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q: OUT STD_LOGIC);END
53、mux41;ARCHITECTURE ART OF mux41 ISBEGINPROCESS(DIN,SEL)BEGINCASE SEL ISWHEN “00”=QQQQ=DIN(3);END PROCESS;END ART;区别:区别:IF语句:条件有先后之分语句:条件有先后之分CASE语句:没有先后之分语句:没有先后之分顺序语句顺序语句/循环控制语句循环控制语句/ LOOP 语句语句nFOR LOOP结构结构固定循环次数固定循环次数【标号标号: :】FOR FOR 循环变量循环变量 IN IN 循环下限循环下限 TO TO 循环上限循环上限LOOPLOOP顺序语句序列顺序语句序列END L
54、OOPEND LOOP【标号标号】;n说明:说明:u循环次数由循环上下限决定;循环次数由循环上下限决定;u循环变量的值从循环下限开始,每循环一次自动指向循环变量的值从循环下限开始,每循环一次自动指向下一个循环变量值;下一个循环变量值;u当循环变量值大于循环上限时循环结束;当循环变量值大于循环上限时循环结束;u对对FOR LOOP结构,默认循环变量位结构,默认循环变量位i,不用声明。,不用声明。顺序语句顺序语句/循环控制语句循环控制语句/ LOOP 语句语句n例:位奇偶校验电路例:位奇偶校验电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CRC
55、8 ISPORT(x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y : OUT STD_LOGIC);END CRC8;ARCHITECTURE ART OF CRC8 ISBEGINPROCESS(x)VARIABLE tmp: STD_LOGIC;BEGINtmp:=0;FOR i IN 0 TO 7 LOOPtmp:=tmp XOR x(i);END LOOP;y=tmp;END PROCESS;END ART; FOR i IN 0 TO 7 LOOP IF x(i)=1 THEN tmp:=NOT tmp; END IF;END LOOP;顺序语句顺序语句
56、/循环控制语句循环控制语句/ LOOP 语句语句nWHILE LOOP结构结构【标号标号: :】WHILE WHILE 条件条件 LOOPLOOP顺序处理语句顺序处理语句 END LOOP END LOOP 【标号标号】; ; n在该语句中在该语句中,如果条件为真如果条件为真,则进行循环,否则结束循环。则进行循环,否则结束循环。n适合于仿真,综合比较困难。适合于仿真,综合比较困难。n例:位奇偶校验电路例:位奇偶校验电路PROCESS(x)VARIABLE tmp: STD_LOGIC;BEGINtmp:=0;i:=0;WHILE i8 LOOPtmp:=tmp XOR x(i);END LOO
57、P;y=tmp;END PROCESS;顺序语句顺序语句/循环控制语句循环控制语句/ LOOP 语句语句n无限循环语句无限循环语句不常用不常用【标号标号: :】LOOPLOOPEXIT WHEN (EXIT WHEN (条件表达式条件表达式) );END LOOP;END LOOP;n当括号中的条件表达式为真时,退出循环。当括号中的条件表达式为真时,退出循环。顺序语句顺序语句/循环控制语句循环控制语句/ EXIT 语句语句nEXIT语句,用于语句,用于LOOP语句中实现提前终止循环。语句中实现提前终止循环。u类似于类似于C语言中的语言中的“break;”。n语法格式有三种:语法格式有三种:EX
58、IT;EXIT;EXIT EXIT 标号;标号;EXIT EXIT 标号标号 WHEN WHEN 条件表达式;条件表达式;n例如:例如:PROCESS(a)VARIABLE int_a :INTEGER;BEGIN int_a:=a FOR i IN 0 TO 31 LOOP IF (int_a=0) THEN EXIT; ELSE int_a:=int_a-1; q(I)=3.1416/REAL(a*i); END IF END LOOP; y=q;END PROCESS;顺序语句顺序语句/循环控制语句循环控制语句/ NEXT 语句语句nNEXT语句用于语句用于LOOP语句中跳出本次循环,直
59、接进入下一循环周期。语句中跳出本次循环,直接进入下一循环周期。类似于类似于C语言中的语言中的“continue;”。nNEXTNEXT【标号标号】【】【WHENWHEN条件表达式条件表达式】;n例如:例如:PROCESS (a,b)CONSTANT max_limit: INTEGER:=255BEGINFOR i IN 0 TO max_limit LOOPIF (done(i)=TRUE) THENNEXT;ELSE done(i):=TRUE;END IF;q(i)=a(i) AND b(i);END LOOP;END PROCESS;顺序语句顺序语句/同步控制语句同步控制语句n进程在仿
60、真运行中总是处于两种状态:执行或挂起。进程进程在仿真运行中总是处于两种状态:执行或挂起。进程状态的变化受到同步控制语句状态的变化受到同步控制语句WAIT语句的制约,当语句的制约,当进程执行到等待语句时,被挂起,并设置好再次执行的条进程执行到等待语句时,被挂起,并设置好再次执行的条件。件。nWAIT语句适合于仿真,不适合于综合。语句适合于仿真,不适合于综合。nWAIT语句根据条件的不同可分为语句根据条件的不同可分为4类:类:uWAIT;无限等待,不常用无限等待,不常用uWAIT ON 信号信号【,信号信号, 】;敏感信号量变化敏感信号量变化uWAIT UNTIL 条件表达式条件表达式;条件满足条件满足uWAIT FOR 时间表达式;时间表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新参与活动安全协议书
- 公司签订的材料合同范本
- 承包木材厂加工合同范本
- 中介地皮买卖合同协议书
- 银行运营合同范本
- 合同签订之前的合作协议
- 无力治疗困难救助协议书
- 2025福建南平建阳区文化讲解员招聘10人笔试备考题库及答案解析
- 二人合伙收购合同范本
- 合伙分散合同协议书模板
- 成人肠内营养支持护理
- 2024秋新北师大版数学七年级上册教学课件 ☆ 问题解决策略:直观分析
- 8. 选择健康的生活方式(导学案)(解析版)
- DB61T 5113-2024 建筑施工全钢附着式升降脚手架安全技术规程
- 小学生育儿心得课件
- 《油井工程课件:钻井技术培训》
- 2024年秋新仁爱科普版七年级上册英语第1~6单元高频率常用常考动词100个
- 《手术室感染与预防》课件
- 第四届全国冶金矿山行业职业技能竞赛(磨矿分级工)理论参考试题库(含答案)
- 皮肤镜课件教学课件
- 2024至2030年中国军工压缩机行业投资前景及策略咨询研究报告
评论
0/150
提交评论