《第3章1 VHDL语言基本结构和语言要素.ppt》由会员分享,可在线阅读,更多相关《第3章1 VHDL语言基本结构和语言要素.ppt(130页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第三章第三章 硬件描述语言(硬件描述语言(VHDLVHDL)第一部分第一部分 基本结构和语言要素基本结构和语言要素1 掌握掌握VHDL程序设计约定程序设计约定 掌握掌握VHDL程序基本结构程序基本结构 库、程序包、实库、程序包、实 体和结构体体和结构体 掌握掌握VHDL语言要素文字规则、数据对象、语言要素文字规则、数据对象、数据类型和操作符数据类型和操作符 本章教学目的与要求本章教学目的与要求2VHDL程序基本结构程序基本结构 VHDL语言要素语言要素 本章教学重点本章教学重点 本章教学难点本章教学难点VHDL程序基本结构程序基本结构 VHDL语言要素数据对象和数据类型语言要素数据对象和数据
2、类型3 本章教学方法本章教学方法 本章学时本章学时4学时学时 本本章章采采用用讲讲授授为为主主,自自学学为为辅辅的的教教学学方方法法。对对重重点点内内容容,课课堂堂上上要要讲讲解解透透彻彻,课课下下布布置置一一定定的的作作业业,使使学学生生加加深深对对内内 容容的的理理解解并并牢牢固固掌掌握握;对对难难点点内内容容,通通过过举举例例加加以以分分析析,深深入入浅浅出出,举举一一反反三三,理理论论联联系系实实际际,使学生能学会学懂,为以后进一步学习打下基础。使学生能学会学懂,为以后进一步学习打下基础。4 VHDL:VHSIC(Very High Speed Integrated Circuit)H
3、ardware Description Language3.1 3.1 概述概述一、什么是一、什么是VHDLVHDL?5 80年代初由美国国防部在实施超高速集成电路(VHSIC)项目时开发的。1987年由 IEEE 协会批准为 IEEE 工业标准,称为 IEEE1076-1987。各EDA公司相继推出支持VHDL的设计环境。1993年被更新为 93 标准,即IEEE1076-1993。进一步提高抽象描述层次,扩展系统描述能力。二、二、VHDLVHDL的历史的历史6 1、VHDL打破软、硬件的界限 传统的数字系统设计分为:硬件设计(硬件设计人员)软件设计(软件设计人员)VHDL是电子系统设计者和
4、 EDA工具之间的界面。三、三、VHDLVHDL的作用的作用 EDA工具及 HDL的流行,使电子系统向集 成化、大规模和高速度等方向发展。美国硅谷约有80%的 ASIC和 FPGA/CPLD 已采用 HDL进行设计。72、VHDL与C、C+的比较:C、C+代替汇编等语言 VHDL 代替原理图、逻辑状态图等3、VHDL与电原理图描述的比较:VHDL具有较强的抽象描述能力,可进行系统 行为级别的描述。描述简洁,效率高。VHDL描述与实现工艺无关。电原理图描述需给出完整、具体的电路结构 图,不能进行抽象描述。描述繁杂,效率低。电原理图描述与实现工艺有关。8 1、VHDL具有强大的语言结构,系统硬件描
5、述能 力强、设计效率高;具有较高的抽象描述能力。如:一个可置数的16位计数器的电原理图:四、四、VHDLVHDL语言特点语言特点9用VHDL描述的可置数16位计数器:10 2、VHDL语言可读性强,易于修改和发现错误。3、VHDL具有丰富的仿真语句和库函数,可对 VHDL源代码进行早期功能仿真,有利于大 系统的设计与验证。4、VHDL设计与硬件电路关系不大。5、VHDL设计不依赖于器件,与工艺无关。6、移植性好。7、VHDL体系符合TOP-DOWN和CE(并行工程)设计 思想。8、VHDL设计效率高,产品上市时间快,成本低。9、易于ASIC实现。11五、五、VHDLVHDL与其它硬件描述语言的
6、比较与其它硬件描述语言的比较VHDL:具有较强的系统级抽象描述能力,适合行为级和 RTL级的描述。设计者可不必了解电路细节,所作工作较少,效率高。但对综合器的要求高,不易控制底层电路的生成。IEEE标准,支持广泛。行为级RTL级门电路级RTL:Register Translate Level12Verilog HDL:系统级抽象描述能力比VHDL稍差;门级开关电路描述方面比 VHDL 强。适合 RTL级和门电路级的描述。设计者需要了解电路细节,所作工作较多。IEEE标准,支持广泛。ABEL、PALASM、AHDL(Altera HDL):系统级抽象描述能力差,一般作门级 电路描述。要求设计者对
7、电路细节有详细的了解。对综合器的性能要求低,易于控制电路资源。支持少。13 VHDL主要用于描述数字系统的结构、行 为、功能和接口。VHDL将一个设计(元件、电路、系统)分为:外部(可视部分、端口)内部(不可视部分、内部功能、算法)六、六、VHDLVHDL设计简述设计简述14外部与内部:器件或子系统 ARCHITECTURE Process ProcessENTITYSequentialProcessCombinational Processportsportscomponentportsports152选1选择器的VHDL描述:16 一般,VHDL语言对字母大小写不敏感;例外、“”所括的字符
8、、字符串;每条VHDL语句由一个分号(;)结束;VHDL语言对空格不敏感,增加可读性;在“-”之后的是VHDL的注释语句,不参加编译和综合;命名不能用保留关键字构成;用户所定义的变量名和实体名必须以字母为开头;在MAXPLUS中,存盘文件名必须与设计的实体名相同;为了便于程序的阅读与调试,书写程序时,使用层次缩进格式,同一层次的对齐,低层次的,较高层次的缩进两个字符。VHDLVHDL语言的一些语言的一些相关约定相关约定:17基本结构包括基本结构包括:实体(Entity)结构体(Architecture)配置(Configuration)库(Library)、程序包(Package)3.2 VH
9、DL3.2 VHDL程序基本结构程序基本结构18 库、程序包 实体(Entity)结构体 (Architecture)进程 或其它并行结构 配置(Configuration)19一、实体(说明)一、实体(说明)实体(说明):定义系统的输入输出端口 语法:ENTITY IS Generic Declarations Port DeclarationsEND;(1076-1987 version)END ENTITY ;(1076-1993 version)201 1、类属说明、类属说明 类属说明:确定实体或组件中定义的局部常数。模 块化设计时多用于不同层次模块之间信息的 传递。可从外部改变内部电
10、路结构和规模。类属说明必须放在端口说明之前。Generic(常数名称:类型:=缺省值 常数名称:类型:=缺省值 );21类属常用于定义:实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。例:entity mck is generic(width:integer:=16);port(add_bus:out std_logic_vector (width-1 downto 0);22例:2输入与门的实体描述 entity and2 is generic(risewidth:time:=1 ns;fallwidth:time:=1 ns);port(a1:in std_logic;a0
11、:in std_logic;z0:out std_loigc);end entity and2;注:数据类型 time 用于仿真模块的设计。综合器仅支持数据类型为整数的类属值。23其中,端口模式:in:输入型,此端口为只读型。out:输出型,只能在实体内部对其赋值。inout:输入输出型,既可读也可赋值。buffer:缓冲型,与 out 相似,但可读。Port(端口名称,端口名称:端口模式 数据类型;端口名称,端口名称:端口模式 数据类型 );2 2、端口声明、端口声明端口声明:确定输入、输出端口的数目和类型。24out 和 buffer 的区别:25 指端口上流动的数据的表达格式。为预先定义
12、好的数据类型。如:bit、bit_vector、integer、std_logic、std_logic_vector 等。例:entity nand2 is entity m81 is port(port(a,b:in bit;a:in bit_vector(7 downto 0);z:out bit sel:in bit_vector(2 downto 0););b:out bit);end entity nand2;end entity m81;3 3、数据类型:、数据类型:26作用:定义系统(或模块)的行为、元件及内部 的连接关系,即描述其逻辑功能。两个组成部分:对数据类型、常数、信号、
13、子程序、元件等 元素的说明部分。以各种不同的描述风格描述的系统的逻辑功 能实现的部分。常用的描述风格有:行为描 述、数据流描述、结构化描述。二、结构体二、结构体27结构体结构体说明结构体功能描述 常数说明 数据类型说明 信号说明 例化元件说明 子程序说明 块语句 进程语句 信号赋值语句 子程序调用语句 元件例化语句 28实体与结构体的关系:设计实体结构体1结构体2结构体3结构体n。一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。29注:同一实体的结构体不能同名。定义语句中的 常数、信号不能与实体中的端口同名。architecture 结构体名称 of 实体名称 is
14、说明语句内部信号、常数、数据类型、子程序(函数、过程)、元件等的说明;begin 并行处理(功能描述)语句;end architecture 结构体名称;结构体的语法:30例:结构体中错误的信号声明31例:一个完整描述(3 bit 计数器)323bit计数器的等效描述(out与buffer的区别):33 与Out 端口比,Buffer端口具有回读功能,也即内部反馈,但在设计时最好不要使用buffer,因为buffer类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,
15、由该信号完成回读功能。注:注:outout与与bufferbuffer的区别总结的区别总结:34 双向端口Inout是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供一个简单程序进行阐述,部分程序如下:control,in1为in,x为out,q为inout模式。process(control,q,in1)begin if(control=0)then x=q;else q=in1;x=“ZZZZZZZZ”;end if;end process;process(control,q,in1)begin if(control=0)then x=q;q=“ZZZZZZZZ”;else q
16、=in1;x=“ZZZZZZZZ”;end if;end process;关于双向端口关于双向端口INOUTINOUT的的使用使用总结总结:35三、配置三、配置设计实体结构体1结构体2结构体3结构体n。一个设计实体的多种实现方式配置:从某个实体的多种结构体描述方式中选择 特定的一个。36configuration 配置名 of 实体名 is for 选配结构体名 end for;end 配置名;简单配置的语法:37 library ieee;use ieee.std_logic_1164.all;entity nand is port(a:in std_logic;b:in std_logic
17、;c:out std_logic);end entity nand;architecture art1 of nand is begin c=not(a and b);end architecture art1;例:一个与非门不同实现方式的配置如下:38architecture art2 of nand is begin c=1 when(a=0)and(b=0)else 1 when(a=0)and(b=1)else 1 when(a=1)and(b=0)else 0 when(a=1)and(b=1)else 0;end architecture art2;39configuration
18、first of nand is for art1;end for;end first;configuration second of nand is for art2 end for;end second;40例:一个对计数器实现多种形式的配置如下:4142程序包:程序包:已定义的常数、数据类型、元件调用说明、子程序的一个集合。目的:方便公共信息、资源的访问和共享。库:库:多个程序包构成库。四、四、程序包、库程序包、库43程序包说明的内容:常量说明;VHDL数据类型说明;元件说明;子程序说明;程序包的结构包括:程序包说明(包首)程序包主体(包体)44包声明项可由以下语句组成:use 语句(用
19、来包括其它程序包);类型说明;子类型说明;常量说明;信号说明;子程序说明;元件说明。package 程序包名 is 包说明项 end 程序包名;1 1、程序包说明(包首)、程序包说明(包首)语法:45例:程序包说明46包体说明项可含:use 语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。package body 程序包名 is 包体说明项 end 程序包名;2 2、程序包包体、程序包包体程序包的内容:子程序的实现算法。包体语法:47程序包首与程序包体的关系:程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。程序包首可以独立定义和使用。如下:48package
20、seven is subtype segments is bit_vector(0 to 6);type bcd is range 0 to 9;end seven;library work;use work.seven.all;entity decoder is port(input:in bcd;drive:out segments);end decoder;architecture art of decoder isbegin49 with input select drive=B“1111110”when 0,B“0110000”when 1,B“1101101”when 2,B“11
21、11001”when 3,B“0110011”when 4,B“1011011”when 5,B“1011111”when 6,B“1110000”when 7,B“1111111”when 8,B“1111011”when 9,B“0000000”when others;end architecture art;abcdefg503 3、库的种类、库的种类 VHDL库可分为 5种:1 1)IEEE IEEE 库库 定义了四个常用的程序包:std_logic_1164 std_logic_1164(std_logic types&related functions)std_logic_arit
22、hstd_logic_arith (arithmetic functions)std_logic_signed std_logic_signed(signed arithmetic functions)std_logic_unsigned std_logic_unsigned(unsigned arithmetic functions)51 Type STD_LOGIC:9 logic value system(U,X,0,1,Z,W,L,H,-)W,L,H”weak values(Not supported by Synthesis)X-(not x)used for unknown Z-(
23、not z)used for tri-state -Dont Care 52 2 2)STD STD 库(默认库)库(默认库)库中程序包为:standard,定义最基本的数据类型:Bit,bit_vector,Boolean,Integer,Real,and Time 注:Type Bit 2 logic value system(0,1)3 3)面向面向ASICASIC的库的库 4 4)WORKWORK库(默认库)库(默认库)5 5)用户定义库)用户定义库534 4、库及程序包的使用、库及程序包的使用 库及程序包的说明总是放在实体单元前面,默认库及程序包可不作说明。用关健字library 说
24、明要使用的库,用关健字 use 说明要使用的库中的程序包。库及程序包的作用范围:仅限于所说明的设计实体。每一个设计实体都必须有自已完整的库及程序包说明语句。54 库、程序包 实体(Entity)结构体 (Architecture)进程 或其它并行结构 配置(Configuration)55库的使用语法:程序包的使用有两种常用格式:例:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.conv_integer;library 库名;use 库名程序包名项目名 use 库名程序包名All;562 选 1 选择器
25、:572选1的另一种描述58VHDLVHDL程序设计举例程序设计举例(1 1 位全加器的设计位全加器的设计)1设计思路设计思路 全加器可以由两个1位的半加器构成,而1位半加器可以由如图所示的门电路构成。592.VHDL2.VHDL源程序源程序1)或门的逻辑描述-IEEE库的使用说明 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-实体OR2的说明 ENTITY OR2 IS PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END ENTITY OR2;-实体OR2的结构体ART1的说明 ARCHITECTURE ART1 OF
26、OR2 IS BEGIN C=A OR B;END ARCHITECTURE ART1;602)半加器的逻辑描述-IEEE库的使用说明 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-实体H_ADDER的说明 ENTITY H_ADDER IS PROT(A,B:IN STD_LOGIC;CO,SO:OUT STD_LOGIC);END ENTITY H_ADDER;-实体H_ADDER的结构体ART2的说明 ARCHITECTURE ART2 OF H_ADDER IS BEGIN SO=(A OR B)AND(A NAND B);COAIN,B=BIN,
27、CO=S1,SO=S2);U2:H_ADDER PORT MAP(A=S2,B=CIN,CO=S3,SO=SUM);U3:OR2 PORT MAP(A=S1,B=S3,C=COUT);END ARCHITECTURE ART3;63四类语言要素:四类语言要素:数据对象(Data Object)数据类型(Data Type)操作数(Operands)操作符(Operator)3.3 VHDL3.3 VHDL语言要素语言要素64一、一、VHDLVHDL文字规则文字规则1、数字型文字 1)整数文字:十进制整数 如:5,678,156E2(=15600),45_234_287(=45234287)2)
28、实数文字:带小数的十进制数 如:23.34,2.0,44.99E-2(=0.4499)8_867_551.23_909(8867551.23909)65 3)以数制基数表示的文字 格式:如:10#170#(=170)2#1111_1110#(=254)16#E#E1(=2#1110_0000#=224)或:(=1416=224)16#F.01#E+2 (=(15+1/(1616)1616=3841.00)基数#数字文字#E指数66 4)物理量文字 如:60 s、100 m、177 mA 注:整数可综合实现;实数一般不可综合实现;物理量不可综合实现;672、字符串型文字(文字串和数字串)按字符个
29、数多少分为:字符:用单引号引起来的ASCII字符,可以 是数值,也可以是符号或字母。如:A,*,Z 字符串:用双引号引起来的一维字符数组68字符串分为:1)文字字符串:“文字”如:“ERROR”,“XXXXXXXX”,“ZZZZZZZZ”,“X”,“BOTH S AND Q EQUAL TO L”。692)数位字符串:称为位矢量,代表二进制、八进制、十六进 制的数组。其位矢量的长度为等值的二进制数的 位数。格式:其中基数符号有三种:B:二进制基数符号。O:八进制基数符号,每一个八进制数 代表一个3位的二进制数。基数符号“数值”70 X:十六进制基数符号,每一个十六进制数代表 一个4位的二进制数
30、。如:B“1_1101_1110”:二进制数数组,长度为9 O“34”:八进制数数组,长度为6 X“1AB”:十六进制数数组,长度为12 71 基本标识符的要求(87标准):以英文字母开头;不连续使用下划线“_”;不以下划线“_”结尾;由26个大小写英文字母、数字0-9及 下划线“_”组成的字符串。3 3、标识符、标识符 定义常数、变量、信号、端口、子程序或 参数的名字。72基本标识符中的英文字母不分大小写;VHDL的保留字不能作为标识符使用。合法标识符_Decoder_1、2FFT、Sig_#N、Not-Ack、ALL_RST_、data_BUS、return、entitymy_counte
31、r、Decoder_1、FFT、Sig_N、Not_Ack、State0、entity1不合法标识符73扩展标识符(93标准):以反斜杠来界定,免去了87标准中基本标识符的一些限制。可以以数字打头,允许包含图形符号,允许使用VHDL保留字,区分字母大小写等。如:74LS163、Sig_#N、entity、ENTITY744、下标名及下标段名 下标名:用于指示数组型变量或信号的某一个 元素。格式:下标段名:用于指示数组型变量或信号的某一 段元素。格式:如:a:std_logic_vector(7 downto 0)a(7),a(6)a(0)a(7downto0),a(7 downto 4),a(
32、5 downto 3)标识符(表达式)标识符(表达式 to/downto 表达式)75二、数据对象二、数据对象 三种对象:常量(Constant)变量(Variable)信号(Signal)三种对象的物理含义:常量代表数字电路中的电源、地、恒定逻 辑值等常数;变量代表暂存某些值的载体,常用于描述 算法;信号代表物理设计中的某一条硬件连接线,包括输入、输出端口。76三种对象的特点及说明场合:信号:全局量,用于architecture、package、entitiy。变量:局部量,用于process、function、procedure。常量:全局量,可用于上面两种场合。771 1、常量说明、常量
33、说明 常量说明:对某一个常量名赋予一个固定的值。格式:例:constant data:bit_vector(3 downto 0):=“1010”constant width:integer:=8;constant x:new_bit:=x;常量数据类型必须与表达式的数据类型一致。constant 常数名:数据类型:=表达式;78常量的可视性(作用范围):库、程序包 实体(Entity)结构体1 进 程1 结构体2 进 程2 常量是全局量,其作用范围取决于常量被定义的位置。792 2、变量说明、变量说明 变量是一个局部量,只能在进程和子程序中定义、使用。其作用范围仅限于定义了变量的进程和子程序
34、中。格式:例:variable a,b:bit;variable count:integer range 0 to 255:=10;变量的初值可用于仿真,但综合时被忽略。variable 变量名:数据类型 约束条件:=表达式;803 3、信号说明、信号说明 电子硬件系统运行的基本特性:各部分电路工作的并行特性;信号传输过程中的延时特性;多驱动源的总线特性;时序电路中触发器的记忆特性等。信号是电子系统内部硬件连接和硬件特性的抽象表示。用来描述硬件系统的基本特性。格式:signal 信号名:数据类型 约束条件:表达式;81例:signal a,b:bit;signal init:integer:=
35、-1;signal s1:std_logic:=0;signal s2:std_logic_vector(15 downto 0);注:a.综合时初值被忽略。b.信号是全局量。可在结构体、实体、块中 说明和使用信号。c.在进程和子程序中只能使用信号,不能说 明信号。8283信号与变量的区别信号与变量的区别architecture rtl of start is signal count:integer range 0 to 7;begin process(clk)begin if(clkevent and clk=1)then count=count+1;if(count=0)then car
36、ryout=1;else carryout=0;end if;end if;end process;end rtl;architecture rtl of start is begin process(clk)variable count:integer range 0 to 7;begin if(clkevent and clk=1)then count:=count+1;if(count=0)then carryout=1;else carryout=0;end if;end if;end process;end rtl;84例:进程中信号与变量的使用entity ex is port(.
37、);end ex;architecture arch_ex of ex is signal a,b:std_logic;begin process(a,b)variable c,d:std_logic;begin c:=a+b;d:=a-b;end process;end arch_ex;85信号与端口的区别:除没有方向说明外,信号与 实体的“端口(PORT)”概念相似。端口是一种隐形的信号。entity exam is port(signal a,b:in std_logic;signal c:out std_logic);end exam;端口是一种有方向的信号。即输出端口不能读出数据,只
38、能写入数据;输入端口不能写入数据,只能读出数据。信号本身无方向,可读可写。86 常数、信号和变量是VHDL中最主要的对象,分别代表一定的物理意义。常数对应于数字电路中的电源或地;信号对应某条硬件连线;变量通常指临时数据的局部存储。信号和变量功能相近,用法上却有很大不同。关于信号和变量的使用总结:87信号:赋值有延迟;具有全局性,可存在于多个进程中;信号不能给变量赋值;变量:赋值无延迟,立即变化;只能在某个进程或子程序中有效;变量可以给信号赋值;对于变量赋值操作无延迟,初学者认为这个特性对VHDL设计非常有利,但这只是理论上的。基于以下几点原因,建议编程时还是应以信号为主,尽量减少变量的使用。8
39、8 1、变量赋值无延时是针对进程运行而言的,只是一个理想值,对于变量的操作往往被综合成为组合逻辑的形式,而硬件上的组合逻辑必然存在输入到输出延时。当进程内关于变量的操作越多,其组合逻辑就会变得越大越复杂。假设在一个进程内,有关于变量的3个级连操作,其输出延时分别为5ns,6ns,7ns,则其最快的时钟只能达到18ns。相反,采用信号编程,在时钟控制下,往往综合成触发器的形式,特别是对于FPGA芯片而言,具有丰富的触发器结构,易形成流水作业,其时钟频率只受控于延时最大的那一级,而不会与变量一样层层累积。假设某个设计为3级流水作业,其每一级延时分别为10ns,11ns,12ns,则其最快时钟可达1
40、2ns。因此,采用信号反而更能提高设计的速度。89 2、由于变量不具备信息的相关性,只有当前值,因此也无法在仿真时观察其波形和状态改变情况,无法对设计的运行情况有效验证,而测试验证工作量往往会占到整个设计7080的工作量,采用信号则不会存在这类问题。3、变量有效范围只能局限在单个进程或子程序中,要想将其值带出与其余进程、子模块之间相互作用,必须借助信号,这在一定程度上会造成代码不够简洁,可读性下降等缺点。90三、三、VHDLVHDL数据类型数据类型 VHDL是一种强数据类型语言。要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且相同数据类型的量才能互相
41、传递和作用。VHDL数据类型分为四大类:标量类型(SCALAR TYPE);复合类型(COMPOSITE TYPE);存取类型(ACCESS TYPE);文件类型(FILES TYPE)91又分为:预定义数据类型、用户自定义数据类型1 1、VHDLVHDL的预定义数据类型的预定义数据类型 1 1)布尔量()布尔量(booleanboolean)布尔量具有两种状态:false 和 true 常用于逻辑函数,如相等(=)、比较()等中作逻辑比较。如,bit 值转化成boolean 值:boolean_var:=(bit_var=1);922 2)位()位(bitbit)bit 表示一位的信号值。放
42、在单引号中,如 0 或 1。3 3)位矢量位矢量 (bit_vectorbit_vector)bit_vector 是用双引号括起来的一组位数据。如:“001100”X“00B10B”4 4)字符(字符(charactercharacter)用单引号将字符括起来。variable character_var:character;.Character_var:=A;935 5)整数()整数(integerinteger)integer 表示所有正的和负的整数。硬件实现时,利用32位的位矢量来表示。可实现的整数范围为:-(231-1)to (231-1)VHDL综合器要求对具体的整数作出范围限定,
43、否则无法综合成硬件电路。如:signal s:integer range 0 to 15;信号 s 的取值范围是0-15,可用4位二进制数表示,因此 s 将被综合成由四条信号线构成的信号。946 6)自然数(自然数(naturalnatural)和)和正整数(正整数(positivepositive)natural是integer的子类型,表示非负整数。positive是integer的子类型,表示正整数。定义如下:subtype natural is integer range 0 to integerhigh;subtype positive is integer range 1 to i
44、ntegerhigh;957 7)实数(实数(REALREAL)或称浮点数 取值范围:-1.0E38-+1.0E38 实数类型仅能用于VHDL仿真器,一般综合器 不支持。8 8)字符串(字符串(stringstring)string 是 character 类型的一个非限定 数组。用双引号将一串字符括起来。如:variable string_var:string(1 to 7);string_var:=“Rosebud”;969 9)时间()时间(TIMETIME)由整数和物理单位组成 如:55 ms,20 ns1010)错误等级(错误等级(SEVERITY_LEVELSEVERITY_LEV
45、EL)仿真中用来指示系统的工作状态,共有四种:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)972 2、IEEEIEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量 1 1)std_logic std_logic 类型类型 由 ieee 库中的std_logic_1164 程序 包定义,为九值逻辑系统,如下:(U,X,0,1,Z,W,L,H,-)U:未初始化的,X:强未知的,0:强0,1:强1,Z:高阻态,W:弱未知的,L:弱0,H:弱1,-:忽略98 由 std_logic 类型代替 bit 类型可以完成电子系统的精确模拟,并可实现常见的三态总线电路。2
46、 2)std_logic_vector std_logic_vector 类型类型 由 std_logic 构成的数组。定义如下:type std_logic_vector is array(natural range)of std_logic;赋值的原则:相同位宽,相同数据类型。99 bit 或其矢量形式bit_vector只有0和1两种状态,数字电路中也只有0和1两种逻辑,因此会给初学者一个误区,认为采用位(矢量)则足够设计之用,而不必像std_logic那样出现X,U,W各种状态,增加编程难度。但实际情况却并非如此,以一个最简单D型触发器设计为例 process(clk)begin if
47、 clkevent and clk=1 then Q=D;end if;end process;实际中clk对数据端D的输入有一定的时间限制,即在clk上升沿附近(建立时间和保持时间之内),D必须保持稳定,否则Q输出会出现亚稳态,如下图所示。关于位(矢量)与逻辑(矢量关于位(矢量)与逻辑(矢量)的使用总结:的使用总结:100 当clk和D时序关系不满足时,由于bit只有0或1,系统只能随机的从0和1中给Q输出,这样的结果显然是不可信的;而采用std_logic类型,则时序仿真时会输出为一个X,提醒用户建立保持时间存在问题,应重新安排D和clk之间时序关系。此外,对于双向总线设计(前面已提及)如
48、果没有Z,X等状态,根本无法进行设计和有效验证。1013 3、用户自定义类型、用户自定义类型 用户自定义类型是VHDL语言的一大特色。可由用户定义的数据类型有:枚举类型、整数和实数类型、数组类型、记录类型、子类型102 用类型定义语句TYPE和子类型定义语句SUBTYPE实现用户自定义数据类型。TYPE语句格式:例:type byte is array(7 downto 0)of bit;variable addend:byte;type week is(sun,mon,tue,wed,thu,fri,sat);type 数据类型名 is 数据类型定义 of 基本数据类型;103SUBTYPE
49、语句格式:例:subtype digits is integer range 0 to 9;由subtype 语句定义的数据类型称为子类型。subtype 子类型名 is 基本数据类型 约束范围;1041 1)枚举类型)枚举类型 枚举该类型的所有可能的值。格式:如:type std_logic is(U,X,0,1,Z,W,L,H,-)如:type color is(blue,green,yellow,red);type my_logic is(0,1,U,Z);variable hue:color;signal sig:my_logic;hue:=blue;sig=Z;type 类型名称 i
50、s (枚举文字,枚举文字);105枚举类型的编码:综合器自动实现枚举类型元素的编码,一般将第一个枚举量(最左边)编码为0,以后的依次加1。编码用位矢量表示,位矢量的长度将取所需表达的所有枚举元素的最小值。如:type color is(blue,green,yellow,red);编码为:blue=“00”;green=“01”;yellow=“10”;red=“11”;1062 2)整数类型)整数类型 用户定义的整数类型是标准包中整数类型的子范围。格式:例:type my_integer is integer range 0 to 9;3 3)数组类型数组类型 数组数组:同类型元素的集合。V