版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL简介(jin ji)VHDL的历史(lsh)VHDL的作用VHDL的语言特点VHDL与其它硬件描述语言的比较VHDL设计概述共九十三页 VHDL的历史(lsh)VHDL:VHSIC (Very High Speed Integrated Circuit) Hardware Description Language80年代初由美国国防部在实施超高速集成电路(VHSIC)项目(xingm)时开发的。1987年由 IEEE 协会批准为 IEEE 工业标准,称为 IEEE1076-1987。 各EDA公司相继推出支持VHDL的设计环境。1993年被更新为 93 标准,即IEEE1076-199
2、3。进一步提高抽象描述层次,扩展系统描述能力。共九十三页 VHDL的作用(zuyng) VHDL打破软、硬件的界限。传统的数字系统设计分为: 硬件设计(硬件设计人员) 软件设计(软件设计人员)采用文本形式进行程序设计,包含许多具有硬件特征的语句 用于描述数字系统的结构、功能、行为和接口;能够支持电路硬件的设计、验证、综合和测试;设计与具体工艺无关,适合于多层次大规模设计;具有良好的开放性和并行设计能力、便于交流(jioli)保存共享。 共九十三页VHDL的作用(zuyng)(2)VHDL是电子系统设计者和 EDA工具之间的交流界面。EDA工具及 HDL的流行,使电子系统向集成化、大规模和高速度
3、等方向发展(fzhn)。美国硅谷约有80%的 ASIC和 PGA/CPLD已采用 HDL设计。共九十三页VHDL的语言特点VHDL具有强大的语言结构,系统硬件(yn jin)描述能力强、设计效率高;具有较高的抽象描述能力。VHDL语言可读性强,易于修改和发现错误。VHDL具有丰富的仿真语句和库函数。 VHDL源代码进行早期功能仿真,有利于大系统的设计与验证。可移植性好。VHDL体系符合TOP-DOWN和CE(并行工程)设计思想。VHDL设计与硬件电路关系不大。易于ASIC实现。共九十三页2、VHDL与C、C+的比较 C、C+ 代替汇编(hubin)等语言 VHDL 代替原理图、逻辑状态图等3、
4、VHDL与电原理图描述的比较(bjio) VHDL具有较强的抽象描述能力,可进行系统 行为级别的描述。描述简洁,效率高。 VHDL描述与实现工艺无关。 电原理图描述需给出完整、具体的电路结构 图,不能进行抽象描述。描述繁杂,效率低。 电原理图描述与实现工艺有关。4、VHDL的不足之处 设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。共九十三页VHDL在电子系统设计(shj)中的应用电子系统的设计(shj)模块共九十三页VHDL在电子系统设计(shj)中的应用电子系统设计的描述等级1、行为(xngwi)级2、RTL级(Register transfer level)3、
5、逻辑门级4、版图级用VHDL可以描述以上四个等级共九十三页VHDL在电子系统设计(shj)中的应用系统设计(shj)的描述等级-制版级共九十三页VHDL在电子系统设计(shj)中的应用系统设计的描述(mio sh)等级-逻辑门级共九十三页VHDL在电子系统设计(shj)中的应用系统设计(shj)的描述等级-RTL级共九十三页VHDL在电子系统设计(shj)中的应用系统(xtng)设计的描述等级-行为级共九十三页VHDL与其它硬件(yn jin)描述语言的比较 VHDL 适合行为级和 RTL级的描述;但对综合器的要求高,不易控制底层电路的生成。 Verilog HDL 适合 RTL级和门电路级的
6、描述,系统级抽象(chuxing)描述能力比VHDL稍差.设计者需要了解电路细节,所作工作较多. 行为级RTL级门电路级共九十三页VHDL与其它(qt)硬件描述语言的比较(1) ABEL、PALASM、AHDL(Altera HDL) 系统级抽象描述能力差,一般作门级电路描述。要求设计者对电路细节有详细的了解。对综合器的性能(xngnng)要求低,易于控制电路资源。支持少。 共九十三页VHDL设计(shj)简述VHDL包括语言设计的结果应包括集成电路芯片的名称及管脚、电路所具有的逻辑功能;VHDL将一个(y )设计(元件、电路、系统)分为:外部实体ENTITY 描述所设计芯片的外观特性 内部构
7、造体ARCHITECTURE 描述所设计芯片的逻辑功能共九十三页图3-15 cnt4.vhd综合(zngh)后的RTL级原理图图3-16 cnt4.vhd综合(zngh)后的门级原理图共九十三页 库、程序包 实体(Entity) 构造体 (Architecture) 进程 或其它并行结构 配置(Configuration) cnt4.vhd描述设计的实体(sht)的基本程序结构提供(tgng)预定义的程序包定义实体的输入输出端口描述实体的逻辑功能为实体选择特定的构造体共九十三页VHDL代码结构(jigu)说明(1)VHDL中实体、构造体、库、程序包是必备的结构,而配置不是必备结构,可以(ky)
8、省略。(2)在一个VHDL设计中只能有一个实体;而同一个设计实体可以对应多个构造体。这是由于VHDL语言支持行为级、RTL传输级等多种抽象描述层次,而一个抽象层次通常可以对应至少一种的描述语句。18共九十三页VHDL代码(di m)书写规范 为了便于程序的阅读和调试VHDL代码,对书写作如下约定:(1) 语句结构描述中方括号“ ”内的内容为可选内容(2) 对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的,但自己定义的文字要符合(fh)VHDL命名规范。(3) 程序中的注释使用双横线“-”。在VHDL程序的任何一行中,双横线“-”后的文字都不参加编译和综合。 (4) 同一层次的语句
9、对齐,低层次的语句较高层次的语句缩进两个字符。(5) 为了使同一个VHDL源程序文件能适应各个EDA开发软件的使用要求,建议各个源程序文件的命名均与其实体名一致。19共九十三页注释举例:Q:OUT STD_LOGIC _VECTOR(11 DOWNTO 0); -A/D转换数据输出(shch)显示(行注释) -SRAM 数据写入控制状态机(段注释)WRIT_STATE:PROCESS(clk,rst) -SRAM写入控制状态机时序电路进程 共九十三页VHDL字符(z f)及数据类型21 VHDL标识符 VHDL语言(yyn)的数据类型共九十三页 标识符是最常用的操作符,可以是常数、变量、信号(
10、xnho)、端口、子程序或参数的名字。 标识符规则是VHDL语言中符号书写的一般规则,为EDA工具提供了标准的书写规范。 VHDL87版本标识符为短标识符 VHDL93版标识符为扩展标识符。 标识符共九十三页3.1.1 短标识符(short Identifiers)要求: 首字符必须是字母 末字符不能为下划线 不允许出现(chxin)两个连续的下划线 不区分大小写 VHDL定义的保留字(关键字),不能用作标识符 标识符字符最长可以是32个字符。3.1 VHDL语言(yyn)基础 标识符用来定义常数、变量、信号、端口、子程序或参数的名字,由字母(AZ,az)、数字(09)和下划线(_)字符组成。
11、共九十三页例如(lr):ABS, ACCESS,AFTER,ALL,AND,ARCHITECTURE,ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE ,COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,FILE,FOR,FUNCTION,GENERIC,GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR ,NOT,NULL,OF,ON,OPEN ,OR ,OTHERS,O
12、UT,PACKAGE,POUT,PROCEDURE ,PROCESS,PURE,RANGE ,RECODE,REM,REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO,TYPE ,UNAFFECTED,UNITS,UNTIL,USE,VARIABLE,WAIT,WHEN,WHILE,WITH,XOR ,XNOR 关键字(保留字): 关键字(keyword)是VHDL中具有(jyu)特别含义的单词,只能做为固定的用途,用户不能用其做为标识符。共九十三页例_Decoder_1-起始(q s
13、h)为非英文字母3DOP-起始(q sh)为数字Large # number-“#”不能成为标识符的构成符号Date_ _bus-不能有双下划线Copper_-最后字符不能为下划线on-关键字共九十三页 扩展标识符 扩展标识符的识别和书写有下面的规则:用反斜杠来界定扩展标识符 如 control_machine,s_block 等都是合法(hf)的扩展标识符扩展标识符允许包含图形符号和空格 如 s&33,legal$state 是合法的扩展标识符两个(lin )反斜杠之间的字可以和保留字相同 如 SIGNAL,ENTITY 是合法的标识符,与SIGNAL、ENTITY是不同的;共九十三页两个反
14、斜杠之间的标识符可以用数字开头 如 15BIT,5ns是合法的;扩展标识符是区分大小写的 如 a 与 A 是不同的标识符;扩展标识符允许多个下划线相邻 如 our_ _entity 是合法的扩展标识符(不推荐(tujin)这种方式);扩展标识符的名字中如果含有一个反斜杠,则用相邻的两个反斜杠来代表它如 texe 表示该扩展标识符的名字为 texe (共5个字符); 共九十三页 数字型文字可以有多种表达方式:可以是十进制数,也可以表示(biosh)为二进制、八进制或十六进制等为基的数,可以是整数,也可以是含有小数点的浮点数。十进制整数表示法: 如: 012 5 78_456 (=78456) 2
15、E6 在相邻数字之间插入下划线,对十进制数值不产生影响,仅仅是为了提高文字(wnz)的可读性。允许在数字之前冠以若干个0,但不允许在数字之间存在空格。3.1.2 VHDL语言中的数字共九十三页 以基表示的数: 用这种方式表示的数由五个部分组成。 第一部分,用十进制数标明数值进位的基数; 第二部分,数值隔离符号“#”; 第三部分,表达(biod)的文字; 第四部分,指数隔离符号“#”;第五部分,用十进制表示的指数部分,这一部分的数如 果为0可以省去不写。共九十三页 SIGNAL d1,d2,d3,d4: INTEGER RANGE 0 TO 255;d1 = 10#170# ; - (十进制表示
16、(biosh),等于 170)d2 = 16#FE#; - (十六进制表示,等于 254)d3 =2#1111_1110#; -(二进制表示,等于 254)d4 = 8#376#; - (八进制表示,等于 254)共九十三页 实数:实数必须带有小数点。 如: 12.0 0.0 3.14 6_741_113.666 52.6 E-2物理量文字(wnz):综合器不支持物理量文字(wnz)的综合。 如: 60 s(秒) 100 m (米) 10 A(安培) 共九十三页字符 用单引号引起来的ASC字符,可以是数值,也可以是符号或字母。 如: E, e, $, 23, A 字符串 一维的字符数组,需放在
17、双引号中。有两种类型的字符串:文字(wnz)字符串和位矢量字符串。 文字字符串是用双引号引起来的一串文字。 如: “FALSE”, “X”, “THIS IS END” 3.1.2 VHDL语言(yyn)中的字符和字符串共九十三页 位矢量字符串 被双引号引起来的扩展的数字(shz)序列,数字(shz)序列前冠以基数说明符。 基数符有“B”、“O”、“X”,他们的含义如下。B:二进制基数符号,表示二进制位0或1,在字符串中每一个位表示一个BIT。O:八进制基数符号,在字符串中每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。X:十六进制基数符号,代表一个十六进制数,即代表一个4位二进
18、制数。例如: B“1011_1111”, O“152”, X“F821” 共九十三页下标名用于指示数组型变量或信号的某一元素。SIGNAL a,b:BIT _VECTOR(0 TO 3);SIGNAL s:INTEGER RANGE 0 TO 2;SIGNAL x,y:BIT;x = a (s);y = b (3); 上例中,a (s)为一下标语(bioy)句,s是不可计算的下标名,只能在特定情况下进行综合;b (3)的下标为3,可以进行综合。 s,3 均为下标(xi bio)!3.1.3 VHDL语言中的下标名共九十三页 常量(chngling)ConstantConstant bus_wi
19、dth: integer := 8; -定义总线宽度(kund)为常数8 数据对象主要包括常量、变量、信号和三种类型。 常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。Constant 常数名:数据类型:表达式Constant Vcc:real:=5.0; -定义Vcc的数据类型是实数,赋值为5.0V常量所赋的值应和定义的数据类型一致;常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程
20、内可见。 VHDL语言的数据对象共九十三页Variable 变量名:数据类型 约束条件 :初始值;Variable count: integer 0 to 255:=20 ; - 定义(dngy)count整数变量,变化 范围0255,初始值为20。 变量(binling)Variable 变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直接的,非预设的,分配给变量的值立即成为当前值,变量不能表达“连线”或存储元件,不能设置传输延迟量。变量赋值语句: 目标变量名 := 表达式;变量定义语句:共九十三页例VARIABLE x, y :REAL;VARIABLE a, b: BIT_
21、VECTOR(0 TO 7);x:=100.0; -实数(shsh)赋值,x是实数变量y:=1.5+x; -运算(yn sun)表达式赋值,y也是实数变量a:=b;a:=”1010101”; -位矢量赋值,a的数据类型是位矢量a(3 TO 6):=(1,1,0,1); -段赋值a(0 TO 5):=b(2 TO 7);a(7):=0; -位赋值共九十三页Signal 信号(xnho)名: 数据类型 约束条件:初始值Signal clock:bit :=; -定义(dngy)时钟信号类型,初始值为0 信号Signal 信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在
22、构造体、程序包和实体中说明。信号定义语句:Signal count:BIT_VECTOR(3 DOWNTO 0); -定义count为4位位矢量信号赋值语句: 目标信号名 = 表达式;共九十三页例SIGNAL a,z: BIT_VECTOR(0 TO 7);SIGNAL b: STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL c: STD_LOGIC_VECTOR(0 DOWNTO 4);SIGNAL e: STD_LOGIC_VECTOR(0 DOWNTO 3);SIGNAL d: STD_LOGIC;c=b; -c(0)=b(4),c(1)=b(3);e=c; -错误
23、,长度(chngd)不一致e=c(0 TO 3);z(0 TO 3)=a(4 To 7) -z(0)=a(4),z(1)=a(5);b(3 DOWNTO 0):=“1010”; -段赋值c(2)=d; -位赋值b(2)=0; -位赋值共九十三页在程序(chngx)中: (1) 信号值的代入采用“=”代入符,而且信号代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。例: X=Y AFTER 10 ns; -X,Y都是信号,且Y的值经过(jnggu)10ns延时以后才被代入X。信号是一个全局量,它可以用来进行进程之间的通信。共九十三页信号与
24、变量(binling)的区别(2)赋值符不同(b tn)信号 signal count : std_logic_vector(7 downto 0); 变量 variable tema:std_logic_vector(3 downto 0); 信号在结构体中声明;变量在进程中声明(1)声明的形式与位置不同count=“00000000”, count=“ZZZZZZZZ”count=tema;tema:=0000; 共九十三页(3)赋值生效(shng xio)的时间不同信号(xnho):进程结束时变量:立即生效(4)进程对信号敏感,对变量不敏感(5)作用域不同信号可以是多个进程的全局信号,变
25、量只在定义后的顺序域可见共九十三页例 进程(jnchng)1:PROCESS(A,B,C,D)BEGIN D=A; X=B+D; D=C; Y=B+D;END PROCESS; D中最初(zuch)代入的值是A,接着又代入C值。尽管D中先代入A值,后代入C值,在时间上有一个的延时,但是,在代入时由于不进行处理,因此仿真时认为是时间0值延时。所以D的最终值应为C,这样执行的结果:X,Y的内容都为B+C。进程2:PROCESS(A,B,C)VARIABLE D:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN D:=A; X=B+D; D:=C; Y=B+D;END PROCE
26、SS; 在执行“D:=A;”语句后,A的值就被赋给D,所以X为B+A。此后又执行“D:=C;”,从而使Y为B+C。由此可看出,信号的值将进程语句最后所代入的值作为最终代入值。而变量的值一经赋值就变成新的值。 在仿真过程中,信号到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。共九十三页 VHDL语言(yyn)的数据类型 在对VHDL的客体进行定义时,都要指定其数据类型。VHDL有多种标准的数据类型,并且允许用户自定义数据类型。 在VHDL语言(yyn)语义约束中,对类型的要求 赋值语句的目标与源的一致; 表达式中操作的一致 子类型中约束与类型的一致等许多方面。共九十三页 数据类型分类(fn
27、 li)标量(bioling)型(Scalar Type)复合类型(Composite Type)存取类型(Access Type)文件类型(Files Type)共九十三页 标量型(SCALAR TYPE):属单元素的最基本的数据类型,通常(tngchng)用于描述一个单值数据对象,它包括实数类型、整数类型、枚举类型和时间类型。复合类型(COMPOSITE TYPE):可以由细小的数据类型复合而成,如可由标量复合而成。复合类型主要有数组型(ARRAY)和记录型(RECORD)。存取类型(ACCESS TYPE):为给定的数据类型的数据对象提供存取方式。文件类型(FILES TYPE):用于提
28、供多值存取类型。共九十三页 预定义类型在VHDL标准(biozhn)程序包STANDARD中定义,在应用中自动包含进VHDL的源文件,不需要USE语句显示调用。 VHDL中预定(ydng)义的数据类型数据类型说明如下共九十三页 整数与数学中整数的定义相似(xin s),可以使用预定义运算操作符,如加“”、减“-”、乘“”、除“”进行算术运算。在VHDL语言中,整数的表示范围为 -21474836472147483647,即从-(231-1)到(231-1)。 在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义(dngy)值范围为-1.0E+38+1.0E+38。
29、实数有正负数,书写时一定要有小数点。例如:-1.0,+2.5,-1.0E+38 整数(INTEGER)实数(REAL)共九十三页位(BIT) 用来表示数字系统中的信号值。位值用字符0或者1(将值放在引号中)表示。与整数中的1和0不同,1和0仅仅表示一个位的两种取值。 位数据可以用来描述数字系统中总线的值。位数据不同于布尔数据,可以用转换(zhunhun)函数进行转换(zhunhun)。 位矢量(shling)是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的X表示是十六进制。用位矢量数据表示总线状态最形象也最方便,在VHDL程序中将会经常遇到。使用位矢量时必
30、须注明位宽,即数组中元素个数和排列.例如:SIGNAL s1:BIT_VECTOR(15 DOWNTO 0); 位矢量(BIT_VECTOR)共九十三页 一个布尔量具有两种状态,“TRUE”或者“FALSE”。虽然布尔量也是二值枚举量,但它和位类型不同,没有数值(shz)的含义,也不能进行算术运算。它能进行关系运算。 例如,它可以在if语句中被测试,测试结果产生一个布尔量TRUE或者FALSE。 字符也是一种数据类型,所定义(dngy)的字符量通常用单引号括起来,如a。字符量中的大小写则认为是不一样的。例如,B不同于b。 布尔量(BOOLEAN)字符(CHARACTER)共九十三页 字符量中的
31、字符可以是从a到z中的任一个字母,从0到9中的任一个数以及空格(kn )或者特殊字符,如$,%等等。 包集合standard中给出了预定义的128个ASC码字符,不能打印的用标识符给出。 字符1与整数1和实数1.0都是不相同的,当要明确指出1的字符数据 时,则可写为:CHARACTER( 1)。 共九十三页 字符串是由双引号括起的一个字符(z f)序列,也称字符矢量或字符串组。字符串常用于程序的提示和说明。字符串举例如下: VATIABLE string_1 : STRING (0TO 3); string_1:= “a b c d”; 时间是一个物理量数据(shj)。完整的时间量数据(shj
32、)应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。 例如55 sec,2 min等。时间(TIME)字符串(STRING)共九十三页TYPE time IS RANGE 2147483647 TO 2147483647 units fs ; - 飞秒,VHDL中的最小时间(shjin)单位 ps = 1000 fs ; - 皮秒 ns = 1000 ps ; - 纳秒 us = 1000 ns ; - 微秒 ms = 1000 us ; - 毫秒 sec = 1000 ms ; - 秒 min = 60 sec ; - 分 hr = 60 min ; - 时end units
33、 ;STANDARD 程序包中定义(dngy)时间如下:共九十三页 错误等级类型数据用来表征系统的状态,共有4种:note(注意),warning(警告),error(出错),failure(失败(shbi))。 在系统仿真过程中可以用这4种状态来提示系统当前的工作情况,从而使设计人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。错误(cuw)等级(SEVERITY LEVEL)共九十三页 这两种数据是整数(zhngsh)的子类,NATURAL类数据为取0和0以上的正整数;而POSITIVE 则只能为正整数。 上述10种数据类型是VHDL语言中标准的数据类型,在编程时可以直接
34、引用。如果(rgu)用户需使用这10种以外的数据类型,则必须进行自定义。但大多数的CAD厂商已在包集合中对标准数据类型进行了扩展。 例如,数组型数据等,请同学们注意。 大于等于零的整数NATURAL),正整数(POSITIVE)共九十三页 在IEEE库的程序包STD_LOGIC_1164中,定义了两个非常重要的数据类型,即: 标准(biozhn)逻辑位STD_LOGIC 标准逻辑矢量STD_LOGIC_VECTOR1) 标准(biozhn)逻辑位STD_LOGIC数据类型2. IEEE预定义标准逻辑位与矢量TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); 在IEEE
35、库程序包STD_LOGIC_1164中的数据类型STD_LOGIC的定义如下所示:共九十三页“U” 未初始化 “X” 强不定“0” 0 “1” 1“Z” 高阻 “W” 弱信号不定“L” 弱信号0 “H” 弱信号1“_” 忽略(或不可能(knng)情况) 注意在使用该类型数据时,在程序中必须写出库说明(shumng)语句和使用包集合的说明(shumng)语句。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;共九十三页STD_LOGIC_VECTOR类型定义如下(rxi):TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE)
36、 OF STD_LOGIC;2) 标准(biozhn)逻辑矢量(STD_LOGIC_VECTOR)共九十三页 VHDL允许用户自行定义新的数据类型,它们(t men)可以有多种,如: 4. 用户(yngh)自定义数据类型方式可由用户定义的数据类型常见的有8种: 枚举(Enumerated)类型; 整数(Integer)类型 实数(Real),浮点数(Floating)类型; 数组(Array)类型; 存取(Access)类型; 文件(File)类型; 记录(Recode)类型; 时间(Time)类型。共九十三页语法结构如下(rxi):1) TYPE语句(yj)用法TYPE 数据类型名 IS 数
37、据类型定义 OF 基本数据类型;TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 约束范围;TYPE current IS REAL RANGE -1E4 TO 1E4;TYPE digit IS INTEGER ;TYPE digit1 IS INTEGER RANGE 0 TO 9;例如:数据类型如果没有被指定,则默认为整数类型。共九十三页1) 数组类型(lixng) VHDL仿真器支持多维数组,但VHDL综合器只支持一维数组。 用以定义数组元素的下标范围子句决定了数组中元素的个数以及元素的排序(pi x)方向,即下标数是由低到高,或是由高到低。 可分为限定性和非限定性两种。共
38、九十三页限定性数组定义语句(yj)格式如下: TYPE 数组名 IS ARRAY (数组范围) OF 数据类型; 【例】TYPE STB IS ARRAY(7 DOWNTO 0) OF STD_LOGIC;非限制性数组的定义语句格式(g shi)如下: TYPE 数组名 IS ARRAY (数组下标名 RANGE) OF 数据类型; 数组下标名是以整数类型设定的一个数组下标名称共九十三页【例】TYPE BIT_VECTOR IS ARRAY(NATURAL RANE) OF BIT;VARIABLE VA:BIT_VECTOR(1 TO 6); -将数组取值范围(fnwi)定在16【例】 TY
39、PE LOGIC_VECTOR IS ARRAY(NATURAL RANGE,POSITIVE RANGE) OF LOGIC; VARIABLE L16_OBJECT:LOGIC_VECTOR(0 TO 7,1 TO 2); -限定(xindng)范围共九十三页2) 整数(zhngsh)和实数类型 重新限定整数和实数(shsh)的取值范围,提高利用率。 TYPE 数组名 IS 数据类型定义 约束范围TYPE my_integer IS INTEGER RANGE -32 TO + 32TYPE student_grade IS INTEGER RANGE 0 TO 100共九十三页 VHDL
40、中的枚举数据类型是用文字符号来表示(biosh)一组实际的二进制数的类型。(若直接用数值来定义,则必须使用单引号)。 自动编码,默认为0,依次加1【例】TYPE M_STATE IS( STATE1,STATE2,STATE3,STATE4,STATE5);3) 枚举(mi j)类型【例】TYPE M_LOGIC IS ( 1,Z,U,0);共九十三页 由已定义的、数据类型不同(b tn)的对象元素构成的数组称为记录类型的对象。定义记录类型的语句格式如下: TYPE 记录类型名 IS RECORD 元素名 : 元素数据类型; 元素名 : 元素数据类型; END RECORD 记录类型名;4)
41、记录(jl)类型共九十三页【例】TYPE RECDATA IS RECORD element1 TIME; element2 TIME; element3 STD_LOGIC; END RECORD RECDATA;【例】 利用记录类型定义的一个微处理器命令(mng lng)信息表。TYPE REGNAME IS (AX,BX,CX,DX);TYPE OPERATION IS RECORD OPSTRSTRING(1 TO 10); OPCODEBIT_VECTOR(3 DOWNTO 0); OP1,OP2,RES:REGNAME;END RECORD OPERATION;共九十三页 在原有的
42、已定义数据类型基础上加上一些(yxi)约束条件,可以定义数据类型的子类型。 SUBTYPE 子类型名 IS 数据类型名范围 5) 子类型(lixng)SUBTYPE my_color IS color RANGE red TO blue;SUBTYPE my_logic IS STD_lOGIC RANGE 0 TO z;共九十三页 类型标记就是类型的名称。类型标记法适合那些关系密切的标量(bioling)类型之间的类型转换,如整数和实数的类型转换。例如:VARIABLE I:INTEGER;VARIABLE R:REAL; I := INTEGER(R); R := REAL(I); 类型(
43、lixng)标记法实现类型(lixng)转换共九十三页 用函数(hnsh)进行类型转换 VHDL语言中,程序包中提供了变换函数,这些(zhxi)程序包有3种,每个程序包中的变换函数不一样。现列表如下。STD_LOGIC_1164包集合函数 函数 TO_ STDLOGICVECTOR(A): -由BIT_VECTOR转换为STD_LOGIC_VECTOR 函数 TO_ BITVECTOR(A): -由STD_LOGIC_VECTOR转换为BIT_VECTOR 函数 TO_ STDLOGIC(A): -由BIT转换为STD_LOGIC 函数 TO_ BIT(A): -由STD_LOGIC转换为BI
44、T共九十三页STD_LOGIC_ARITH包集合函数(hnsh) 函数:CONV_STD_LOGIC_VECTOR (A,位长) : -由UNSINGED,SINGED转换为STD_LOGIC_ UNSINGED包集合 函数:CONV_INTEGER (A): -由STD_LOGIC_VECTOR转换为INTEGERSTD_LOGIC_ UNSINGED包集合 函数:CONV_INTEGER (A) : -由INTEGER,UNSINGED,SINGED转换为 STD_LOGIC_VECTOR共九十三页赋值运算符逻辑运算符关系(gun x)运算符算术运算符移位运算符并置运算符VHDL操作符与其
45、他程序设计语言相似(xin s),VHDL中的表达式也是由运算符将基本元素连接起来形成。在VHDL语言中共有6类操作符共九十三页VHDL操作符共九十三页接上页共九十三页 运算符 NOT,ABS,*,/,MOD,REM +(正号),(负号(f ho))+,& SLL,SLA,SRL,SRA,ROL,ROR =,/=,= AND,OR,NAND,NOR,XOR,XNOR VHDL操作符的优先(yuxin)顺序 最高优先级最低优先级优先级运算操作符总汇列表如下:共九十三页在VHDL语言中,共有6种逻辑运算符,他们(t men)分别是: NOT 取反; AND 与; OR 或; NAND 与非; NO
46、R 或非; XOR 异或。 逻辑(lu j)运算符 这6种逻辑运算符可以对 “BIT”和“STD_LOGIC ”等逻辑型数据、“STD_LOGIC _VECTOR”逻辑型数组及布尔数据进行逻辑运算。必须注意: 运算符的左边和右边,以及代入的信号的数据类型必须是相同的。 共九十三页【例1】 SIGNAL a ,b,c : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d,e,f,g : STD_LOGIC_VECTOR (1 DOWNTO 0) ; SIGNAL h,I,j,k : STD_LOGIC ; SIGNAL l,m,n,o,p : BOOLEAN ;
47、. a=b AND c; -b、c相与后向a赋值,a、b、c的数据类型同属(tn sh)4位长的位矢量 d=e OR f OR g ; - 两个操作符OR相同,不需括号 h=(i NAND j)NAND k ; - NAND不属上述三种算符中的一种,必须加括号 l=(m XOR n)AND(o XOR p); - 操作符不同,必须加括号 h=i AND j AND k ; - 两个操作符都是AND,不必加括号 h=i AND j OR k ; - 两个操作符不同,未加括号,表达错误 a=b AND e ; - 操作数b 与 e的位矢长度不一致,表达错误 h=i OR l ; - i 的数据类型
48、是位STD_LOGIC,而l的数据类型是 . - 布尔量BOOLEAN,因而不能相互作用,表达错误。 逻辑(lu j)操作符共九十三页 关系(gun x)操作符【例2】 ENTITY relational_ops_1 IS PORT ( a,b : IN BITVECTOR (0 TO 3) ; m : OUT BOOLEAN) ; END relational_ops_1 ; ARCHITECTURE example OF relational_ops_1 IS BEGIN output = (a = b) ; END example ; 【例3】 ENTITY relational_ops
49、_2 IS PORT (a,b : IN INTEGER RANGE 0 TO 3 ; m : OUT BOOLEAN) ; END relational_ops_2 ; ARCHITECTURE example OF relational_ops_2 IS BEGIN output = b) ; END example ;六种关系运算(yn sun)操作符:“ = ”(等于)、“/=”(不等于)、“ ”(大于)、“=”(大于等于)“=”(小于等于)共九十三页 VHDL语言中有5类算术运算符,他们(t men)分别是:求和操作符: 、求积操作符:*、/、MOD、REM符号操作符: 、混合操作符
50、: *、ABS移位操作符:SLL、SRL、SLA、SRA、ROL、ROR 算术(sunsh)运算符共九十三页求和(qi h)操作符【例5】VARIABLE a,b ,c ,d ,e ,f : INTEGER RANGE 0 TO 255 ;.a := b + c ; d := e f ; 【例4】PROCEDURE adding_e (a :IN INTEGER ; b :INOUT INTEGER )IS.b := a + b ; 共九十三页【例6】 PACKAGE example_arithmetic IS TYPE small_INt IS RANGE 0 TO 7 ; END exam
51、ple_arithmetic ; USE work.example_arithmetic.ALL ; ENTITY arithmetic IS PORT (a,b : IN SMALL_INT ; c : OUT SMALL_INT) ; END arithmetic ; ARCHITECTURE example OF arithmetic IS BEGIN c = a + b ; END example ; 共九十三页求积操作符求积操作符包括(boku) * (乘)、 / (除)、MOD(取模)和REM(取余)四种操作符。取余运算(a REM b)的符号与a相同(xin tn),其绝对值小于
52、b的绝对值。 例如:(-5)REM 2=(-1) 5 REM 2=(1) 取模运算(a MOD b)的符号与b相同,其绝对值小于b的绝对值。 例如:(-5)MOD 2=1 5 MOD (- 2)=(-1)共九十三页符号(fho)操作符符号(fho)操作符“+”和“”的操作数只有一个。共九十三页混合(hnh)操作符【例7】SIGNAL a,b: INTEGER RANGE -8 to 7;SIGNAL c: INTEGER RANGE 0 to 15;SIGNAL d: INTEGER RANGE 0 to 3;a = ABS(b); c = 2 * d ;混合操作符包括(boku)乘方“*”操作符和取绝对值“ABS”操作符两种共九十三页 移位(y wi)操作符移位(y wi)操作符的语句格式是: 标识符 移位操作符 移位位数 ;SLL(逻辑左移)SRL(逻辑右移)SLA(算术左移)SRA(算术右移)ROL(逻辑循环左移)ROR(逻辑循环右移) 共九十三页 移位运算符的左边为一维数组,其类型必须是BIT或BOOLEAN,右边必须是整数(zhngsh)移位次数为整数(zhngsh)的绝对值。移位(y wi)运算符操作示意图“1100”SLL1 =“1000” “1100”SRL1 =“0110” “1100”SLA1 =“1000” “110
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论