硬件描述语言第02讲

上传人:桔**** 文档编号:569395950 上传时间:2024-07-29 格式:PPT 页数:29 大小:1.41MB
返回 下载 相关 举报
硬件描述语言第02讲_第1页
第1页 / 共29页
硬件描述语言第02讲_第2页
第2页 / 共29页
硬件描述语言第02讲_第3页
第3页 / 共29页
硬件描述语言第02讲_第4页
第4页 / 共29页
硬件描述语言第02讲_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《硬件描述语言第02讲》由会员分享,可在线阅读,更多相关《硬件描述语言第02讲(29页珍藏版)》请在金锄头文库上搜索。

1、硬件描述语言及器件 主讲教师:苏淑靖12/13学年第1学期教材:侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.教学安排n第1讲:VHDL概述及其基本结构n第2讲:VHDL语言的基本元素n第3讲:VHDL的结构体描述,进程n第4讲:VHDL的顺序语句n第5讲:VHDL的并行语句n第6讲:基本逻辑电路设计n第7讲:计数器和状态机第2讲:VHDL语言的基本元素n标识符n数据对象n数据类型n操作符1 1 标识符标识符nVHDL语言中标识符是符号书写的一般规则。不仅对电子系统设计工程师是一个约束,也为各种EDA工具提供了标准的书写规范,使之在综合仿真过程中不产生歧义,易于仿真。nVHDL语 言

2、有 两 个 标 准 版 : VHDL87版 和 VHDL93版 。VHDL87版的标识符语法规则经过扩展后,形成了VHDL93版的标识符语法规则。前一部分称为短标识符,扩展部分称为扩展标识符。VHDL93版含有短标识符和扩展标识符两部分。 VHDLVHDL的短标识符遵守以下规则的字符序列:的短标识符遵守以下规则的字符序列: (1) 标示符由英文字母、数字、下划线组成; (2) 必须以英文字母打头。 (3) 字符不区分大小写、数字(09)和下划线(_)。 (4) 下划线前后都必须有英文字母或数字。 一般地,对VHDL的保保留留字字:ENTITY,ARCHITECTURE,END,BUS,USE,

3、WHEN,WAIT,IS在程序书写时,一般要求大写或黑体,使得程序易于阅读,易于检查错误。1 1 短标识符(短标识符(1 1)合法的标识符: multi_screens Multi_screens Multi_Screens MULTI_SCREENS 非法标识符: illegal%name illegal-name illegal-name 3decode T_ _2 COUNTER_同一标识符同一标识符1 1 短标识符(短标识符(1 1)VHDL93版增加的标识符书写规则:(1) 扩展标识符用反斜杠来定界。multi_screens;(2) 允许包含图形符号、空格符。mode A, $10

4、0 等;(3) 反斜杠之间的字符可以用保留字。entity, end等。(4) 扩展标识符的界定符两个斜杠之间可以用数字打头。 100$, 2chip, 4screens等。(5) 扩展标识符中允许多个下划线相连。 Four_screens, TWO_Computer_sharptor等。(6) 扩展标识符区分大小写。EDA 与eda不同。(7) 扩展标识符与短标识符不同。例如:COMPUTER 与Computer不同。 扩展标识符(扩展标识符(2 2)n数据数据对象:象:在VHDL语言中,可以赋予一个值的客体(object)。n4种基本类型:常量常量(CONSTANT)、信号信号(SIGNA

5、L)、变量量(VARIABLE)和文件文件(FILES)。其中文件类型是VHDL93标准中新增加的。n数据对象的物理意义:常量通常表示数字电路中的地和电源;信号表示设计中的某条硬件连接线;变量通常表示暂存某些值的载体; 2 2 数据对象数据对象n常量(常量(constant):):是一个固定值;常量说明是对某一常量名赋予一个固定值。n常量说明格式:常量说明格式: CONSTANT 常量名:数据类型 : = 表达式; 例: CONSTANT T1,T2:time : = 30ns; CONSTANT D:BIT_VECTOR : = “0001”; 注意:注意:常量一旦赋值不能改变; 常量赋的值

6、应和数据类型一致; 常量必须在实体、结构体或进程的说明区域指定。 定义在实体内的常量在实体对应的结构体中可见,定义在进程内的常量仅在进程内使用。2 2 数据对象数据对象( (常量常量) )n变量(变量(VARIABLEVARIABLE):是局部量,用于对中间数据的临时存储。只能在进程、函数和过程中使用只能在进程、函数和过程中使用。变量说明格式: VARIABLE 变量名:数据类型 约束条件 :=表达式; 例:VARIABLE count:INTEGER RANGE 0 TO 255:=10; 变量赋值语句:目标变量名:=表达式(设定值)注注意意:一旦赋值立即生效,不产生赋值延时。某一时刻仅包含

7、一个值。 变量赋值和初始化赋值符号用“:”表示。 在进程中说明的变量,若用于进程外,必须将值赋给一个相同类型的信号,即进程之间传递数据靠的是信号。2 2 数据对象数据对象( (变量变量) )n信号信号(signal)(signal):电子电路内部硬件实体相互连接的抽象。n信号声明格式:信号声明格式: SIGNAL 信号名:数据类型 约束条件:表达式; 例:SIGNAL sys_clk : BIT :=0; -系统时钟信号 信号赋值语句:信号赋值语句: 目标信号名目标信号名=表达式(设定值);表达式(设定值);注意:注意:信号是全局变量,可在进程之间通信;信号是全局变量,可在进程之间通信; “:

8、=:=”表示对信号直接赋值或初始赋值,不产生延时; 在在程程序序中中信信号号值值代代入入用用“=”带带入入符符,且允许产生延时,是变量之间信号的传递方式,如:T1 = T2;可在结构体、实体、块、包集合中声明和使用信号,在在进程和子程序中只能使用信号,不能声明信号进程和子程序中只能使用信号,不能声明信号;2 2 数据对象数据对象( (信号信号) )适用范围适用范围2 2 数据对象数据对象2 2 数据对象数据对象n在VHDL中,单个位值(bit)用单引号( )标明,而位向量值(bit_vector)用双引号(“ ”)标出。nSTD_LOGIC(标准逻辑)数据类型只能取0或1,没有不定状态和高阻态

9、,也就不能用来描述双向数据总线之类的功能,93版IEEE(IEEE1164)增加了标准逻辑数据类型共9种: TYPE STD_LOGIC IS(U, X, 0, 1, Z,W, L,H,-); 初始值,不定,0低电平,1高电平,高阻,弱信号不定,弱信号0,弱信号1,不可能情况。2 2 数据对象数据对象( (常量常量) )nVHDL标准定义了10种标准的数据类型(1)整数整数(INTEGER):-21474836472147483647 ,(231-1);(2)实数数 (REAL):-1.0E+38+1.0E+38;书写时一定要有小数点;(3)位位(BIT):信号用位值表示,位值用带单引号的0和

10、1表示;(4)位矢量位矢量(BIT_VECTOR):用双引号括起来的一组位数据,“00101”;(5)布布尔尔量量(BOOLEAN):TURE或FALSE,是二值枚举量,但没有数值的含义,不能进行算术运算;(6) 字字符符(CHARACTER):字符量要用单引号括起来,其中的字符可以是az的任一字母、09的任一数及空格或特殊字符等,如A。VHDL对字符量中的大小写有区别,即A和a不同;3 3 数据类型数据类型( (标准标准) )nVHDL语言标准定义了10种标准的数据类型。(7) 字字符符串串 (STRING):双引号括起来的一组字符序列,如“integer range”,用于程序的提示和说明

11、;(8)时时间间(Time):包括整数和单位,二者之间至至少少留留一一个个空空格格,如:10 s,用于表示信号时延;(9)错错误误(NOTE,WARNIING,ERROR,FAILURE ):仿真时用来提示系统当前的工作情况;(10)自然数自然数(NATURAL)、正整数类型(positive) 上述10种标准数据类型在编程时可直接引用。如果用户要使用其他数据类型,则要进行自定义。2 2 数据类型数据类型( (标准标准) )n用户自定义数据类型格式: TYPE 数据类型名 ,数据类型名 数据类型定义; 常用的用户自定义数据类型:枚枚举举类类型型、整整数数类类型型和和实数类型、数组类型、记录类型

12、实数类型、数组类型、记录类型。(1)枚举类型 格式: TYPE 数据类型名 IS (元素,元素); 例:表示一周每天状态的逻辑电路 TYPE week IS(sun, mon, tue, wed, thu, fri, sat);在综合过程中,对枚举类型的编码通常是自动的,枚举类型按二进制编码。依据类型定义时各元素自左向右的出现顺序,分配一个二进制代码。上述语句中,最左边的元素的值为000, 001, 010, 011,100,101,综合成三根信号线表示states。2 2 数据类型数据类型( (用户自定义用户自定义) )(2)整数类型和实数类型整数和实数类型在标准的程序包中已经作了定义。但在

13、实际应用中,数据类型的取值范围比较小,应该重新定义,限定取值范围,以提高芯片的利用率.格式: TYPE 数据类型名 IS 数据类型 定义约束范围; 例:定义一个数码管上显示数字09的整数 TYPE digit IS INTEGER RANGE 0 TO 9; 实数类型 TYPE current IS REAL RANGE -1.0E4 TO 1.0E4;2 2 数据类型数据类型( (用户自定义用户自定义) )(3)数组类型数组类型是相同类型数据集合在一起形成的一个新的数据类型。数组可以是一维数组或多维数组。 格式:TYPE 数据类型名 IS ARRAY 范围 OF源数据类型; 例:TYPE w

14、ord IS ARRAY (1 TO 8) OF STD_LOGIC;TYPE IS ARRAY (7 downto 0) of bit;其中,“(7DOWNTO0)”决定了数组元素的个数有8个和元素的排序方向,“DOWNTO”指明下标将以降序变化。(1 TO 8) “TO”指明下标将以升序变化,按低到高的顺序排列9个元素。 数组类型常用于总线、ROM、RAMA等系统中。 2 2 数据类型数据类型( (用户自定义用户自定义) )(4)记录类型:记录是不同类型的名称域的集合 格式: 例:TYPE 数据类型名 IS RECORD 元素名:数据类型名; 元素名:数据类型名; END RECORD;T

15、YPEBANKISRECORDaddr0:STD_LOGIC_VECTOR(7DOWNTO0);addr1:STD_LOGIC_VECTOR(7DOWNTO0);r0:INTEGER;ENDRECORDESIGNALresult:BANK;SIGNALaddr:addr0ANDaddr1;2 2 数据类型数据类型( (用户自定义用户自定义) )3 3 数据类型数据类型( (数据类型的转换数据类型的转换) ) VHDL是一种强类型语言,这意味着如果两个信号的数据类型不同,则不允许将其中的一个信号的值赋给另一个信号,这个问题一般可以通过将信号的数据类型转换成相同的数据类型来解决。整数类型与整数类型

16、与STD_LOGICSTD_LOGIC类型可以相互转换。类型可以相互转换。将STD_LOGIC_VECTOR类型转换成整数类型的函数为: CONV_INTEGER;将整数类型转换成STD_LOGIC_VECTOR类型的函数为: CONV_STD_LOGIC_VECTOR;转换函数由IEEE.STD_LOGIC_ARITH库提供。3 3 数据类型数据类型( (数据类型的转换数据类型的转换) )函数函数说明说明STD_LOGIC_1164包包TO_STDLOGIC_VECTOR(A)TO_BITVECTOR(A)TO_LOGIC(A)TO_BIT(A)由BIT_VECTOR转换成STD_LOGIC

17、_VECTOR由STD_LOGIC_VECTOR转换成BIT_VECTOR由BIT转换成STD_LOGIC由STD_LOGIC转换成BITSTD_LOGIC_ARITH包包CONV_STD_LOGIC_VECTOR(A,位长)CONV_INTEGER(A)由INTEGER,UNSIGNED和SIGNED转换成STD_LOGIC_VECTOR由UNSIGNED和SIGNED转换成INTEGERSTD_LOGIC_UNSIGNED包包CONV_INTEGER(A)STD_LOGIC_VECTOR转换成INTEGER3 3 数据类型数据类型( (数据类型的转换数据类型的转换) )LIBRARY IE

18、EE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;-在实体说明前,必须加上这条语句,-因为转换函数是由IEEE.STD_LOGIC_ARITH库提供的ENTITY test IS PORT (a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); b: IN INTEGER RANGE 0 TO 15; c: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); d: OUT INTEGER RANGE 0 TO 15);END test;ARCHITECTURE test_bodyOFtest

19、ISBEGINc=CONV_STD_LOGIC_VECTOR(b,4);-将整数转换成STD_LOGIC_VECTOR类型d=CONV_INTEGER(a);-将STD_LOGIC_VECTOR转换成整数类型END test_body;优先级顺序优先级顺序运算符类型运算符类型操作符操作符功能功能低高逻辑运算And or nand nor xor 与、或、与非、或非、异或关系运算= /= =等于、不等于、小于、大于、小于等于、大于等于加、减、并置运算+ - &加、减、并置正、负运算符+-正、负乘法运算符* / mod rem乘、除、求模、取余* abs Not指数、绝对值、取反低高4 4 运算操

20、作符运算操作符逻辑运算符逻辑运算符4 4 运算操作符运算操作符d1 and d24 4 运算操作符运算操作符n关系运算符,在关系运算符,在VHDLVHDL程序设计中的规则:程序设计中的规则:两个对象进行比较时,数据类型一定要相同。(等于)和/(不等于)适用于所有数据类型的对象之间的比较。大于、小于、大于等于、小于等于适用于整数、实数位、位矢量及数组类型的比较。=符号有两种含义:代入符和小于等于符,要根据上下文判断。两个位矢量类型的对象比较时,自左至右,按位比较。4 4 运算操作符运算操作符n在在VHDLVHDL程序设计中,并置运算符程序设计中,并置运算符“”的使用规则:的使用规则:并置运算符可

21、用于位的连接,形成位矢量。并置运算符可用两位矢量的连接构成更大的位矢量。位的连接,可以用并置符连接法,也可用集合体连接法。如: DATA_C DATA_C = D0 & D1 & D2 & D3; DATA_C DATA_C = (D0,D1,D2,D3);4 4 运算操作符运算操作符ENTITY oprISPORT ( a:ININTEGERRANGE0TO16;b:ININTEGERRANGE0TO16;sum:OUTINTEGERRANGE0TO32);END opr;ARCHITECTURE exampleOF oprISBEGINPROCESS (a,b)BEGINsum=a+ b;

22、END PROCESS END example;注:库STD 和包Standard 不需要引用VHDL 编译器能够理解该运算符,因为算术运算符是为内建的数据类型 INTEGER定义的ENTITY overloadISEND overload;ARCHITECTURE exampleOF overloadISBEGINPROCESS (a,b)BEGINEND PROCESS;END example;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;PORT (a:INSTD_LOGIC_VECTOR(3downto0);b:INSTD_LOGIC_VECTOR(3downto0);sm:OUTSTD_LOGIC_VECTOR(4downto0);sm=a+ b;在设计文件的开头在设计文件的开头部分包括这些语句部分包括这些语句允许对非内建的数允许对非内建的数据类型进行运算据类型进行运算

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号