版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 VHDL语言基础本章目录VHDL概述VHDL程序的基本结构VHDL程序的主要构件VHDL数据类型及运算符VHDL数据对象VHDL基本语句测试基准VHDL程序的其他组件VHDL程序常见语法问题讨论VHDL 概述VHDL概述什么是VHDLVHDLVery-High-Speed Integrated circuit Hardware Description LanguageVHDL的起源及发展80年代初,由美国国防部在实施超高速集成电路(VHSIC)项目时开发的1987年,IEEE协会批准为IEEE工业标准,称为IEEE1076-19871993年,被更新为93标准,IEEE1076.931
2、996年,IEEE1076.3称为综合标准VHDL概述VHDL的用途主要用于描述字系统的结构、行为、功能和接口使用VHDL的目的把电子电路的设计意义以文字或文件的方式保存起来,以便其它人能轻易地了解电路的设计意义VHDL与verilog HDL的比较相同点: 都是最主要的硬件描述语言 都能以文本形式抽象表示电路的行为和结构 都可以从系统行为级,寄存器传输级和门级描 进行电路描述不同点 语法差异,verilog是类C语言,简单易用, 而VHDL语句较为晦涩,使用难度大 VHDL侧重于系统描述,更适合系统级设计 Verilog 侧重于电路级描述,更适合电路设 计VHDL特点系统硬件描述能力强与器件
3、无关,与工艺无关IEEE工业标准方法灵活,技术齐全可读性好VHDL具有硬件特征,而且是并行执行方式。VHDL概述举例:二路选择器描述的变化二路选择器模块:sel=0时,q=d0;sel=1时,q=d1传统的描述方式:用与门、非门、或门等具体底层器件来组成,使用图形输入法。缺点:硬件电路设计复杂,需要先写出逻辑表达式或真值表,并进行化简。VHDL概述举例:二路选择器描述的变化VHDL描述方式:使用文本输入的方法。设计电路优点:可读性好,设计简单,具体电路由软件优化。LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY MUX2 IS PORT (d0,d
4、1:IN std_logic; sel:IN std_logic; q:OUT std_logic);END ENTITY;ARCHITECTURE behav OF MUX2 ISBEGIN PROCESS (d0,d1,sel) BEGIN IF sel=0 THEN q=d0; ELSIF sel=1 THEN q=d1; ELSE q=Z; END IF; END PROCESS;END behav;VHDL程序的基本结构VHDL程序的基本结构一个完整的VHDL程序包括库的调用,程序包的调用,实体说明和结构体4个部分。库的调用程序包的调用实体描述结构体描述用于说明设计系统的外部接口信息
5、,具有唯一性相当于操作系统中的目录描述实体的行为、功能或电路结构类似于高级语言的include语句VHDL的基本结构Example库的调用程序包的调用实体描述结构体描述VHDL的基本结构LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY MUX2 IS PORT (d0,d1:IN std_logic; sel:IN std_logic; q:OUT std_logic);END ENTITY;ARCHITECTURE behav OF MUX2 ISBEGIN PROCESS (d0,d1,sel) BEGIN IF sel=0 THEN q=d0
6、; ELSIF sel=1 THEN q=d1; ELSE q=Z; END IF; END PROCESS;END behav;二路选择器的VHDLVHDL的主要构件VHDL程序的主要构件VHDL程序的基本构件包括库、包,配置,实体,结构体、块、子程序(函数和过程)必需构件实体、结构体、库、程序包是一个完整的VHDL程序所必需的构件VHDL的主要构件1.库库(Library)是编译后数据的集合,是存放预先完成的程序包和数据集合体的仓库。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;Exampl
7、e:常用的库:STD库(默认库) IEEE库,WORK库(默认库),面向ASIC的库,用户自定义库使用格式:LIBRARY 库名VHDL的主要构件:库STD库(默认库)库中的程序包为:standardSTD库符合VHDL语言标准,是默认库,在应用中不必像IEEE库那样显式使用STD库内定义了最基本的数据类型:Bit、bit_wector、 Boolean、Integer、Real、Time并支持这些数据类型的所有运算符函数IEEE库IEEE库是VHDL设计中最常见的库,由于该库中的程序包并非符合VHDL语言标准,因此在使用时必须显示表达IEEE库内定义了四个常用的程序包:std_logic_1
8、164(std_logic types & related functionsStd_logic_arith(arithmetic functions)Std_logic_signed(signed arithmetic functions)Std_logic_unsigned(unsigned arithmetic functions)VHDL的主要构件:库LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;Example:IEEE库四个常用的程序包:std_logic_1164包含了一些标准逻辑电
9、平所需数据类型和函数的定义。 常用的两个数据类型:STD_LOGIC和STD_LOGIC_VECTORStd_logic_arith扩展了三个数据类型UNSIGNED,SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数Std_logic_signed和Std_logic_unsigned重载了可用于INTEGER型和STD_LOGIC及STD_LOGIC_VECTOR型混合运算的运算符,并定义了 不同数据类型间的转换函数VHDL的主要构件:库WORK库(默认库)WORK是用户现行设计的工作库,用于存放用户设计和定义的一些设计单元和程序包。该库满足VHDL语言标准,在实际调
10、用中不需要显示调用VHDL的主要构件:库包集合包集合说明就像C语言中的include语句一样,用来单纯地罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等VHDL的主要构件:包Example:USE IEEE.STD_LOGIC_1164.ALL该语句表示在程序中要使用名为STD_LOGIC_1164的包集合中的所有定义或说明项VHDL的主要构件:包在VHDL中,同样的语句,使用不同的库或不同的包,所生成的电路,可能会逻辑相同,电路不同LIBRARY STD;USE STD.STD_LOGIC.ALL;USE STD.STD_ttl.ALL;ENTITY
11、nand2 IS . . .END nand2;LIBRARY STD;USE STD.STD_LOGIC.ALL;USE STD.STD_ttloc.ALL;ENTITY nand2 IS . . .END nand2;生成一般的与非门生成集电极开路的与非门VHDL的主要构件:实体实体(ENTITY)包括实体名,类属参数说明,端口说明三部分,由保留字“ENTITY”引导ENTITY 实体名 IS类属参数说明;端口说明;ENDENTITY 实体名;使用格式:注意:实体名不能以数字开头,不能与保留字相同实体名应尽可能表达功能上含义实体结束以“END ENTITY”或“END 实体名”结束VHDL
12、的主要构件:实体ENTITY 实体名 IS类属参数说明;端口说明;ENDENTITY 实体名;类属参数说明常用于说明静态信息,如器件延迟由保留字GENERIC引导。格式如下:GENERIC(常数名:数据类型:=设定值); 例如:GENERIC(m:time:=1ns);端口说明端口说明是一个设计实体界面的描述,提供外部接口信息。由保留字PORT引导格式如下:PORT(端口名:端口方向 数据类型) 例如:PORT (d0:IN std_logic;);VHDL的主要构件:实体Example:写出如下器件的实体描述ENTITY my_design ISPORT(d:IN std_logic_vec
13、tor(15 DOWNTO 0); clk,reset,oe:IN std_logic; q:OUT std_logic_vector(15 DOWNTO 0); ad:INOUT std_logic_vector(15 DOWNTO 0); int:BUFFER std_logic; as:OUT std_logic);END my_design;VHDL的主要构件:结构体注意:结构体名应有明确的意义定义语句只对本结构体有效结构体里面的语句是并行的结构体(ARCHITECTURE)是设计实体的具体描述,指明设计实体的具体行为、所用元件及连接关系。由定义说明和具体功能描述两部分组成。使用格式:
14、ARCHITECTURE 结构体名 OF 实体号名 IS定义语句 信号(signal); 常数(constant); 数据类型(type); 函数(function); 元件(component)等;BEGIN 并行处理语句;END 结构体名;VHDL的主要构件:结构体Example:半加器半加器电路是指对两个输入数据位进行加法,输出一个结果和进位。VHDL的主要构件:结构体Example:半加器半加器电路是指对两个输入数据位进行加法,输出一个结果和进位。Library IEEE;Use ieee.std_logic_1164.all;Entity half_adder is port (X,
15、Y: in bit; sum, carry: out bit);end half_adder;Architecture dataflow of half_adder isbegin -并行处理语句 sum = X xor Y after 10ns; carry =X and Y after 10ns;End dataflow;实现程序VHDL的主要构件:结构体Example:半加器半加器电路是指对两个输入数据位进行加法,输出一个结果和进位。注意:仿真结果某一时刻的输出并非我们期待中的结果,这是因为我们使用的是时序仿真,考虑了器件的延时,后面的章节将会介绍功能仿真和时序仿真仿真结果VHDL的主要
16、构件:结构体行为描述:描述输入与输出之间的转换行为,不包含内部的电路元件、电路的结构信息,一般将结构体命名为“behav”数据流描述既表示行为,又隐含着结构;体现数据的流动路径和方向,一般将结构体命名为“dataflow”结构描述法描述电路元件与它们之间的连接关系,一般将结构体命名为“stru数据类型结构体的描述方法VHDL的主要构件:结构体结构体的描述方法全加器的行为描述architecture behav of FA isbegin process ( x, y, ci) variable n: integer; constant sum_vector : std_logic_vector
17、 (0 to 3):=“0101”; constant carry_vector : std_logic_vector(0 to 3):=“0011”; begin n:=0; if x= 1 then n:=n+1; end if; if y= 1 then n:=n+1; end if; if ci= 1 then n:=n+1; end if; s = sum_vector (n); co = carry_vector (n); end process; end behav;library ieee;use ieee.std_logic_1164.all;entity FA is por
18、t (x, y, ci : in std_logic; s, co : out std_logic);end FA;VHDL的主要构件:结构体结构体的描述方法全加器的RTL方式library ieee;use ieee.std_logic_1164.all;entity FA is port (x, y, ci : in std_logic; s, co : out std_logic);end FA;architecture dataflow of FA isbegin s = x XOR y XOR ci; co A, Y=B, sum=temp_sum, carry=temp_carry
19、1); U1 : half_adder Port map (X=temp_sum, Y=carry_in, sum=AB, carry=temp_carry2);U2 : or_gate Port map (in1=temp_carry1, in2=temp_carry2, out1=carry_out);End structure;Library IEEE;Use std_logic_1164.all;Entity full_adder is Port ( A,B, carry_in : in bit; AB, carry_out : out bit);End full_adder;VHDL
20、数据类型及运算符VHDL数据类型及运算符VHDL中定义的10种标准数据类型数据类型含义整数整数占4B,范围为-2,147,483,6472,147,483,647实数浮点数,范围位-1.0E+381.0E+38自然数,正整数整数的子集(自然数:大于等于0的整数,正整数:大于0的整数)位逻辑“0”或“1”位串多个位串在一起(也称位矢量)字符ASCII码字符字符串字符数组(也称字符矢量)布尔量逻辑“真”或逻辑“假”时间时间单位,如fs、ps、ns、s、ms、sec、min、hr等错误等级NOTE,WARNING,ERROR,FAILUREVHDL数据类型及运算符VHDL中定义的10种标准数据类型数
21、据类型用途整数不能按位操作,不能进行逻辑运算常用于表示系统总线宽度实数用于表现电源供电电压 或算法研究自然数,正整数一般在定义时需要区间约束位表示一个信号的值,用单引号括起来位串可以看作位的数组,用双引号括起来字符与语句不区分大小写不同,字符区分大小写字符串常用于程序仿真的提示或结果的说明等场合布尔量常用于信号的状态,总显得控制权仲裁情况时间用于定义信号延时等,一般用于仿真错误等级在仿真中,提示程序的状态VHDL数据类型及运算符VHDL中定义的10种标准数据类型约束区间说明: INTEGER RANGE 100 DOWNTO 1 BIT_VECTOR (3 DOWNTO 0) REAL RAN
22、GE 2.0 TO 30.0注意:字符要区分大小写,比如高阻状态是Z,而不是z。VHDL数据类型及运算符用户自定义数据类型:根据电路设计需求,用户自定义合适的数据类型使用格式TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型或 TYPE 数据类型名 IS 数据类型定义常用的用户自定义类型:枚举类型、子类型、整数类型和实数类型、数据类型和记录类型VHDL数据类型及运算符(1)枚举类型:把类型中的各个元素都罗列出来,如在状态机中的状态一般就采用枚举类型定义Example:TYPE week IS (sum, mon, tue, wed, thu, tri, sat);(3)整数类型和实数
23、类型:由于范围太大,综合器无法综合,所以给它们定义一个范围Example:SUBTYPE natural IS integer range 0 to integerhigh(2)子类型SUBTYPE:由TYPE所定义的原数据类型的子集Example:TYPE percent IS INTEGER RANGE -100 TO 100 VHDL数据类型及运算符(4)数组类型:将相同数据类型的数据集合在一起形成一个新的数据类型。(5)记录类型:将不同数据类型的数据和数据名组合在一起而形成新客体Example:TYPE 数组名 IS ARRAY(数组范围) OF 数组类型; TYPE 记录类型名 IS
24、 RECORD元素名:元素数据类型;元素名:元素数据类型;END RECORD;ExampleVHDL数据类型及运算符数据类型转换:VHDL中的数据类型可以通过IEEE库中的类型转换函数进行强制性转换。程序包函数名功能STD_LOGIC_1164TO_STDLOGICVECTOR(A)由BIT_VECTOR转换为STD_LOGIC_VECTORTO_BITVECTOR(A)由STD_LOGIC_VECTOR转换为BIT_VECTORTO_STDLOGIC(A)由STD_LOGIC转换STD_LOGICTO_BIT(A)由STD_LOGIC转换BITSTD_LOGIC_ARITHCONV_STD
25、_LOGIC_VECTOR(A,n) (n为位长)由INTEGER,UNSIGNED,SIGNED转换STD_LOGIC_VECTORCONV_INTEGER(A)由UNSIGNED,SIGNED转换为INTEGERSTD_LOGIC_UNSIGNEDCONV_INTEGER(A)由STD_LOGIC_VECTOR转换为INTEGERVHDL数据类型及运算符VHDL中的运算符主要分为算术运算符、逻辑运算符、关系运算符和其他运算符等四类。运算符:与其他计算机高级语言一样要注意各运算符的优先级VHDL数据类型及运算符运算符:VHDL中的运算符主要分为算术运算符、逻辑运算符、关系运算符和其他运算符等
26、四类。与其他计算机高级语言一样要注意各运算符的优先级VHDL的数据对象VHDL的数据对象数据对象:在VHDL语言中,可以赋值的客体称为对象。包括常量、变量和信号。数据对象常量:定义在设计中不变化的值变量:定义在进程或子程序中的变化量信号:对应硬件内部实实在在的连线VHDL的数据对象常量:指定义在设计描述中不变化的值,是一个全局量。使用格式用途:在实体、结构体、程序包、函数、过程、进程中保持静态数据,以改善程序的可读性,使修改程序变得更容易。ExampleCONSTANT VCC:real:=5.0 -指定电源电压CONSTANT delay:time:=10ns -某信号的延迟CONSTANT
27、 fbus:bit_vector:=“0101” -总线上的数据向量CONSTANT 常数名:数据类型:=表达式VHDL的数据对象变量:变量是定义进程或子程序(包括函数和过程)中的变化量。VARIABLE 变量名:数据类型:=初始值使用格式用途:用于计算或暂存中间数据,是一个局部量VARIABLE time::integer RANGE 0 TO 6 -进程中代表次数的变量Example注意:变量的赋值是立即生效的。VHDL的数据对象信号:信号对应着硬件内部实实在在的连线使用格式用途:在元件间起着互联作用,或作为一种数据容器,以保留历史值和当前值SIGNAL 信号名:数据类型:=表达式“:=”
28、表示对信号的赋初值,一般不产生延时。“=”表示信号的代入赋值,有延时。注意:VHDL的数据对象使用变量和信号的比较信号是实体间动态交换数据的手段,用信号对象把实体连接在一起形成模块;实体说明,结构体说明都能说明信号。 变量用于进程语句和子程序中中间的数据存储。信号赋值有延迟;而变量赋值没有延迟。 信号除当前值外有许多信息(历史信息,波形值);而变量只有当前值。进程对信号敏感,对变量不敏感。信号可以是多个进程的全局信号;而变量只在定义它的进程中可见。信号是硬件中连线的抽象描述,功能是保存变化的数据值和连接子元件,信号在原件的端口连接元件;变量在硬件中没有对应关系,而是用于硬件特性的高层次建模所需
29、要的计算中。在描述中,信号的赋值不会立即生效,而是要等待一个delta延迟后才会变化,否则该信号的值在delta延迟之前仍是原来的值。VHDL的数据对象使用变量和信号的比较六分频器library ieee;use ieee.std_logic_1164.all;entity frequencies isport(clk:in std_logic;q:out std_logic);end frequencies;architecture behav of frequencies isbegin process (clk) variable time:integer range 0 to 6;be
30、gin if rising_edge(clk) then time:=time+1; if time=6 thenq=1;time:=0; elseq=0; end if; end if;end process;end behav;此例为6分频器,其中time为变量。由于变量赋值是马上生效的,因此从例子中可以看出time置零是在time为6时发生的。VHDL的数据对象使用变量和信号的比较六分频器此例也为6分频器。其中time为信号。由于信号赋值是具有一定的延时性,因此从例子中比较time和5的大小时,语句time=time+1还未生效,time的值是上次进程结束时的结果。library iee
31、e;use ieee.std_logic_1164.all;entity frequencies isport(clk:in std_logic;q:out std_logic);end frequencies;architecture behav of frequencies is signal time:integer range 0 to 5;begin process (clk)begin if rising_edge(clk) then time=time+1; if time=5 thenq=1;time=0; elseq=0; end if; end if;end process
32、;end behav;VHDL的数据对象使用变量和信号的比较六分频器的仿真time 为变量:time为信号可以看出两种方法是等价的。VHDL的数据对象小结变量常定义在进程与子程序中,用于保存运算的中间临时数 据,或作为循环语句中的循环变量,其赋值立即发生。(:=)常量用于保存静态的数据(:=)。信号有明显的连线或容器的对应关系,具有输出波形,对其 赋值需要延迟时间(=), 在进程间或子程序间具有信息传递功 能。注意对象定义的所在位置及适用区域的对应关系VHDL基本语句VHDL基本语句VHDL语言与高级程序语言最大的不同就是VHDL语言是并发执行的,但是VHDL的基本语句包括顺序语句和并行语句。
33、顺序语句不能直接用在结构体中,需要用process进行“封装”VHDL中,不区分大小写,使用“-”表示注释VHDL基本语句-并行语句并行语句:并行执行,其执行方式与书写顺序无关并行语句常包括以下七种:赋值语句、条件赋值语句、选择信号赋值语句、进程语句、元件例化语句、生成语句、子程序调用语句串行执行结果:a=2,b=3并行执行结果:a=2,b=2a=b+1;b=a+1;假设信号原始值为a=1;b=1;对于以下两种书写格式,执行结果如下:b=a+1;a=b+1;串行执行结果:a=3,b=2并行执行结果:a=2,b=2VHDL基本语句-并行语句赋值语句:将一个值或一个表达式的运算结果传递给某一数据对
34、象使用格式:赋值目标 赋值符号 赋值源Example: q=“0010000”;注意:信号赋值符号为“=”;变量和常量的赋值符号为“:=”VHDL基本语句-并行语句条件赋值语句:根据执行条件,将一个值或表达式的的运算结果赋给赋值目标使用格式:注意:每一个子句结尾没有任何标点,只有最后一句有分号赋值目标= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式;Example: z=a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;VHDL基本语句-并行语句选择信号赋值语句:根据选择值的匹配,将一个值或表达式的的运算结果赋给赋值目标使用格式:注意
35、:选择信号赋值语句的每一个子句结尾是逗号,最后一句是分号。WITH 选择表达式 SELECT赋值目标= 表达式 WHEN 选择值, 表达式 WHEN 选择值;Example: WITH instruction SELECT data=data1 AND data2 WHEN “000”, data1 OR data2 WHEN “001”, Z WHEN OTHERS ; VHDL基本语句-并行语句进程语句:本身是一个并行语句,内部是由顺序语句组成使用格式:注意:进程启动有两种方式:敏感列表和wait语句标号PROCESS 内部变量的说明;BEGIN 顺序语句;END PROCESS;VHDL
36、基本语句-并行语句进程语句Example:D触发器:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY D_FF IS PORT (reset,clk,d:IN std_logic; q:OUT std_logic);END D_FF;ARCHITECTURE behav OF sample ISBEGIN PROCESS(reset,clk,d) BEGIN IF reset=1 THEN q=0; ELSIF clkevent and clk=1 THEN q=d; END IF; END PROCESS;END behav;在此例中,PROCE
37、SS由敏感参数表中的reset、clk或d启动。当敏感信号发生变化时,进程执行VHDL基本语句-并行语句进程语句中用wait语句启动在此例中,PROCESS由wait on语句启动,当等待到in1,in2信号发生变化时,进程再次执行。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY sample IS PORT (in1,in2:IN std_logic; output:OUT std_logic);END sample;ARCHITECTURE behav OF sample ISBEGIN PROCESS BEGIN output)连接端口名,
38、);VHDL基本语句-并行语句元件例化语句Example:4输入与门LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY and4 IS PORT (ina,inb,inc,ind:IN bit; q:OUT bit);END and4;ARCHITECTURE stru OF and4 ISCOMPONENT and2 IS -定义已经设计好的元件PORT(a,b:IN bit; c:OUT bit);END COMPONENT;SIGNAL U0_C,U1_C:bit;BEGINU0:and2 PORT MAP(ina,inb,U0_C);U1:a
39、nd2 PORT MAP(inc,ind,U1_C);U2:and2 PORT MAP(U0_C,U1_C,q)END stru;VHDL基本语句-并行语句生成语句:根据某些条件,复制一组完全相同的并行元件或设计单元电路结构使用格式:标号:FOR 循环变量 IN 取值范围 GENEATE 说明部分; BEGIN 并行语句; END GENERATE标号;标号:IF 条件 GENERATE 说明部分;BEGIN 并行语句;END GENERATE标号;VHDL基本语句-并行语句子程序调用语句:调用其它程序,在执行完程序后返回需要的数据使用格式:注意:子程序的调用语句包括了过程调用语句和函数调用语
40、句格式:过程名(形参名=实参表达式,);Example:ARCHITECTURE behav OF example IS PROCEDURE adder (SIGNAL a,b:IN std_logic;SIGNAL sum:OUT std_logic); END PROCEDURE;BEGIN adder(a1,b1,sum1); END behav;VHDL基本语句-顺序语句顺序语句:顺序语句是指执行(指仿真执行)顺序和书写顺序一致的语句。顺序语句只能出现在进程和子程序中。注意:顺序仅仅指语句执行的顺序性,并不意味着顺序语句对应的硬件逻辑行为也具有相同的顺序性。VHDL基本语句-顺序语句I
41、F语句:IF语句是一种流程控制语句,判断条件有先后次序 ,而且允许条件涵盖不完整IF 条件 THEN 顺序语句 ;END IF;IF 条件 THEN 顺序语句;ELSE 顺序语句; END IF;IF 条件 THEN 顺序语句; ELSIF 条件 THEN 顺序语句; ELSE 顺序语句; END IF;使用格式VHDL基本语句-顺序语句IF语句Example:注意:IF语句与并行语句中的whenelse条件赋值语句具有类似功能,可互换IF en=1 THEN C=B; END IF;IF sel=1 THEN C=A; ELSE C=B; END IF; IF reset=0 THEN q=
42、0; ELSIF clkevent AND clk=1 THEN q=d; END IF;IF sel=1 THEN C=A;ELSE C=B;END IF;C 处理语句;END CASE;注意:CASE语句的选择值必须在表达式的取值范围内CASE语句的所有选择条件具有相同的优先权,不能有相同选择值的条件句出现。未能完全覆盖表达式的取值,则最末的选择值必须用“OTHERS”不想执行任何操作,可用保留字“NULL”描述VHDL基本语句-顺序语句CASE语句Example:注意:CASE语句与并行语句中的WHENSELECT语句具有类似的功能,可互换。CASE sel IS WHEN 0= y y
43、=d1; WHEN OTHERS=NULL;END CASE;WITH sel SELECTy=d0 WHEN 0, d1 WHEN 1, UNAFFECTED WHEN OTHERS,END CASE;VHDL基本语句-顺序语句LOOP语句:重复执行语句若干次或指导满足退出循环的条件为止使用格式标号:LOOP 顺序处理语句;END LOOP标号;标号:FOR 循环标量 IN 离散范围 LOOP 顺序处理语句;END LOOP标号;标号:WHILE 条件 LOOP 顺序处理语句;END LOOP标号;注意:与高级程序语言不同,里面的循环变量是不用定义说明的。VHDL基本语句-顺序语句EXIT语
44、句和NEXT语句:EXIT语句和NEXT语句都是LOOP语句的内部循环控制语句执行EXIT后,跳到循环体结束处,立即退出循环执行NEXT语句后,跳到循环体开始处,有条件或无条件终止当前循环迭代并开始下一循环VHDL基本语句-顺序语句其它顺序语句:等待语句WAIT:返回语句RETURN返回语句只能用于子程序。执行后无条件结束子程序的执行。空操作语句NULL常用于CASE语句中,利用NULL来排除一些不用的条件。WAIT;WAIT ON 信号表;WAIT UNTIL 条件表达式;WAIT FOR 时间表达式;VHDL基本语句-属性描述语句VHDL中具有属性的项目包括:类型、子类型、过程、函数、信号
45、、变量、常量、实体、结构体、配置、程序包、元件和语句标号等,属性就是这些项目的特性。常用综合器支持的属性有:LEFT、RIGHT、HIGH、LOW、RANGE、REVERSE_RANGE、LENGTH、EVENT、STABLE。预定义描述语句格式:属性对象属性名VHDL基本语句-属性描述语句上述属性可以分为以下5类:1、信号类属性2、数组区间类属性3、数值类属性4、函数类属性5、数据类型类属性除此之外,用户还可以自定义属性!VHDL基本语句-属性描述语句1.信号类属性:Delayed(time):产生一个延时的信号,这个新信号与原来的信号具有相同的数据类型。等效于(Transport afte
46、r)传输延时的描述。 例:b= transport a after 5ns; -常用于仿真延时模型 b=adelayed(5ns);信号类属于用于产生一种新的信号。常用的属性包括:Stable(time):检测所加属性的信号在time时间内是否保持不变,属性返回的值是布尔量。 例:b=astable(10ns); b=astable; -当a发生改变,b将在对应时刻产生一个低电平的脉冲VHDL基本语句-属性描述语句1.信号类属性:Quiet(time):这个属性可建立一个布尔信号,若所加属性的信号在time时间内没有发生转换,则返回真。类似属性Stable,常用于描述较复杂的信号值的变化。信号
47、类属于用于产生一种新的信号。常用的属性包括:Transaction:该属性将建立一个数据类型为bit的新信号,当属性所加信号发生跳变时,就触发新bit信号翻转。 VHDL基本语句-属性描述语句2.数组区间类属性:对属性项目取值区间进行测试,返回内容是一个区间。如RANGE和REVERSE_RANGESIGNAL vector :std_logic_vector(0 TO 7);FOR I IN vectorRANGE LOOP-等同于 FOR I IN 0 TO 7 LOOPFOR I IN vectorREVERSE_RANGE LOOP-等同于 FOR I IN 7 DOWNTO 0 LO
48、OPVHDL基本语句-属性描述语句3.数值类属性:LEFT、RIGHT、HIGH及LOW这些属性函数主要用于对属性测试目标的数值特性进行测试例:SUBTYPE ex IS INTEGER Range 0 to 127;exleft - 0exright - 127exlow - 0exhigh - 127例:TYPE ex2 IS (S0,S1,S2,S3,S4);ex2left - S0ex2right - S4ex2low - S0ex2high - S4VHDL基本语句-属性描述语句 数组的数值属性只有一个:LENGTH这个函数用于对数组宽度或元素个数进行测定TYPE array1 AR
49、RAY(0 TO 7) OF bit;SIGNAL wth:Integer;wth=array1Length; -wth=8;VHDL基本语句-属性描述语句4.函数类属性:函数类属性是指属性以函数的形式,给出有关数据类型、数组、信号的某些信息。数据类型属性函数 pos(x)- 返回x值的位置序号 val(x)- 返回位置序号x的值 succ(x)- 返回输入值x的下一个值 pred(x)- 返回输入值x的前一个值 leftof(x)- 返回邻接x值左边的值 rightof(x)- 返回邻接x值右边的值VHDL基本语句-属性描述语句4.函数类属性:函数类属性是指属性以函数的形式,给出有关数据类型
50、、数组、信号的某些信息。数组属性函数(多维数组) right(n)返回n维区间的右端边界号 left(n)-返回n维区间的左端边界号 low(n)-返回n维区间的低端边界号 high(n)-返回n维区间的高端边界号例:type m is array(0 to 7, 3 downto 0)of bit;mleft(1) - 0mleft(2) - 3mright(1) - 7mhigh(2) - 3mlow(1) - 0VHDL基本语句-属性描述语句4.函数类属性:函数类属性是指属性以函数的形式,给出有关数据类型、数组、信号的某些信息。信号类属性函数 event当信号在很短的时间内发生了变化,返
51、回真 last_value-返回信号最后一次改变以前的值例:时钟上升沿的检测表达IF clkevent and clk=1 THEN 更严谨的表达:IF clkevent and clklast_value=0and clk=1THEN VHDL基本语句-属性描述语句5.数据类型属性:base 该属性可以得到一个数据类型的基本类型例:TYPE week IS(S0,S1,S2,S3,S4,S5,S6,S7);SUBTYPE wk IS week RANGE S0 TO S3;Variable x:week;x:=wkbaseright; -S7VHDL基本语句-属性描述语句6.用户自定义属性:
52、属性与属性值的定义格式如下:ATTRIBUTE 属性名:数据类型;ATTRIBUTE 属性名 OF 对象名:对象类型 IS 值;例:枚举类型编码TYPE state IS (S0,S1,S2,S3);默认的编码方式: S0=“00”,S1=“01”,S2=“10”,S3=“11”ATTRIBUTE encoding OF state is : TYPE is “11 10 00 01”;VHDL测试基准测试基准:一旦设计者描述了一个设计,必须对其进行验证,一检查是否符合设计规范。最常用的方法是在模拟时施加输入激励信号。另外一种方法是用VHDL写一个测试模型发生器和要检查的输出,即测试基准(Te
53、st Bench)测试基准的用法将在仿真一节详细介绍VHDL程序的其它构件VHDL程序的其它构件块块(BLOCK)是VHDL中的一种划分机制,它允许设计者将一个模块划分成数个区域注意:BLOCK方式的划分结构只是形式上的,在综合后硬件结构的逻辑层次不会增加,跟元件例化是不同的块标号:BLOCK (防护表达式)接口说明类属说明;BEGINEND BLOCK块标号;VHDL程序的其它构件块块examplelibrary ieee;use ieee.std_logic_1164.all;entity example3 is port ( d , clk : in bit ; q, qb: out b
54、it);end example3;architecture latch_bus of example3 is begin b1: block ( clk =1) -()是防护表达式为布尔型 begin q = guarded d after 5 ns; -由guarded引导防护语句 qb = not (d) after 7 ns; end block b1;end latch_bus;VHDL程序的其它构件块块example仿真分析:防护条件为真时,防护表达式才起作用,而对非防护表达式不起作用VHDL程序的其它构件函数在VHDL中有多种函数形式,包括用户自定义的函数和库中现成的具有专用功能的预定义函数注意:参数表可以是信号或常数,参数表需要放在关键字CONSTANT或SIGNAL之后如果没有特别说明,默认为常数FUNCTION 函数名(参数表)RETURN 数据类型;FUNCTION
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级数学(除数是两位数)计算题专项练习及答案
- 第17课 西晋的短暂统一和北方各族的内迁(说课稿)-2024-2025学年七年级历史上册素养提升说课稿(统编版2024)001
- 粤教版(2019)必修一 3.2.2算法的描述-说课稿
- 跨学科主题学习2-探索太空逐梦航天 说课稿-2024-2025学年粤人版地理七年级上册
- 第11课《我们的课余生活》(说课稿)长春版三年级下册综合实践活动001
- 2025年全国法制宣传日普法知识竞赛题库及答案(共160题)
- 第四单元建立网站第14课二、自我评价网站说课稿 2023-2024学年人教版初中信息技术七年级上册
- 2021年高考化学真题和模拟题分类汇编专题11水的电离和溶液的酸碱性含解析2
- 《老化理论》课件
- 《瓦锡兰柴油发电机》课件
- 医院药剂科年终总结
- (2024年)AED(自动体外除颤器)使用指南
- 麻醉药品精神药品管理
- 抽错血标本护理不良事件
- 科技成果转化培训资料
- 社会稳定风险评估 投标方案(技术标)
- 生产线能耗分析报告模板
- 上海市松江区2023-2024学年高一上学期期末质量监控数学试卷 (解析版)
- 校外安全教育课件
- 人教版小学四年级语文上册基础练习题和答案全册
- GB/T 43474-2023江河生态安全评估技术指南
评论
0/150
提交评论