收藏 分享(赏)

EDA技术P7-VHDL语言深入1PPT课件.ppt

上传人:Facebook 文档编号:3833889 上传时间:2018-11-20 格式:PPT 页数:65 大小:507.50KB
下载 相关 举报
EDA技术P7-VHDL语言深入1PPT课件.ppt_第1页
第1页 / 共65页
EDA技术P7-VHDL语言深入1PPT课件.ppt_第2页
第2页 / 共65页
EDA技术P7-VHDL语言深入1PPT课件.ppt_第3页
第3页 / 共65页
EDA技术P7-VHDL语言深入1PPT课件.ppt_第4页
第4页 / 共65页
EDA技术P7-VHDL语言深入1PPT课件.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、1,EDA技术,VHDL语言深入1,任课教师:于国庆电话:13703115396 电子邮箱:HBKDEDA密码:123456 办公地点:C205,2,系统讲解VHDL相关语法VHDL主要语句讲解及示例,VHDL 语言程序设计深入,3,VHDL 语言程序设计,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型 4、 VHDL运算操作符 5、 VHDL属性、时钟,4,VHDL 语言程序设计,A:数字 B:字符串 C:标识符 D:下标名,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型 4、VHDL数据类型转换 5、 VHDL运算操作符

2、6、 VHDL属性、时钟,5,A、VHDL文字规则-数字,数字有多种表达方式:,整数:都是十进制的数:5 678 156E2 123_56_7即 5 678 15600 1234567,实数:都是十进制的数,但必须带小数点:1.335 即 1.33588_670_351.433 即 88670351.4331.0 即 1.0 44.99E-2 即 0.4499,注:数字间的下划线仅仅是为了提高文字的可读性,相当于一个空的间隔符。,6,A、VHDL文字规则-数字,以数制基数表示的数:格式: (进制) # (基于进制的整数) # 十进制表示的指数 例:singnal d1,d2,d3,d4,d5:

3、 INTEGER RANGE 0 to 255d1 = 10#170# ; -十进制, 即170d2 = 16#FE# ; -十六进制, 即254d3 = 2#1111_1110# ; -二进制, 即254d4 = 16#E0# ; -十六进制,即E0H, 224,物理量的数:(综合器不接受)60 s 即 60秒100 m 即 100米10 k 即 10千欧姆177 A 即 177A,7,B、VHDL文字规则-字符串,(1)文字字符串,(2)数位字符串,用双引号括起来的一串文字:如 “ERROR“ , “Both S and Q equal to 1“ , “X“ , “BB$CC“,B:二进

4、制基数符号,在字符串中的每位表示一个Bit。 O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。 X:十六进制基数符号(0F),代表一个十六进制数,即一个4位的二进制数。,data1 = B“1_1101_1110“ - 二进制数数组,位矢数组长度是9 data2 = O“15“ - 八进制数数组,位矢数组长度是6 data3 = X“AD0“ - 十六进制数数组,位矢数组长度是12 data4 = B“101_010_101_010“ -二进制数数组,位矢数组长度是12 data5 = “101_010_101_010“ -表达错误,缺B。 dat

5、a6 = “0AD0“ -表达错误,缺X。,默认方式,一般可省略B,8,C、 VHDL文字规则- 标识符,定义:在VHDL语言中,对程序元素进行标识的标识符号规范:VHDL-87标准,通常称为短标识符VHDL-93标准,通常称为扩展标识符。,1) 必须由英文字母、数字以及下划线组成; 2) 必须以英文字母开头; 3) 不区分大小写; 4) 下划线前后有且必须是英文字母; 5) 不能含有两个连续的下划线; 6) 不能有空格 7)VHDL语言中的保留字不能作为短标识符来使用。,VHDL-87标准标识符命名规则:,9,C、 VHDL文字规则- 标识符,VHDL-93标准与VHDL-87标准一样,但还

6、支持了扩展标识符 。,1) 用反斜杠来界定,例如:data_bus; 2) 可以包含图形符号和空格等,例如:data&_bus; 3) 两个反斜杠之间可以使用保留字,例如:ENTITY; 4) 两个反斜杠之间可以用数字开头,例如:8_data_bus; 5) 允许多个下划线相连,例如:data_bus; 6)同名扩展标识符和短标识符是不同的,如:data_bus和data_bus不同; 7)扩展标识符中如含一反斜杠,则用两相邻反斜杠代替,如:扩展标识符名称为databus,则扩展标识符应表示为databus; 8) 扩展标识符是区分大小写的,如:a和A是不同的和识符。,VHDL-93标准中的扩

7、展标识符命名规则:,10,D、 VHDL文字规则- 下标名,格式: 标识符(表达式),下例中下标名m,属不可计算,另一个是3,属可计算的。 SIGNAL a,b : BIT_VECTOR (0 TO 3) ; SIGNAL m : INTEGER RANGE 0 TO 3 ; SIGNAL y,z : BIT ; y = a(m) ; - 不可计算型下标表示 z = b(3) ; - 可计算型下标表示,下标名用于指示数组型变量或信号的某一元素:,标识符必须是数组型的变量或信号的名字 表达式必须是数组下标范围中的值。 如表达式是一可计算值,则综合容易 如表达式是一不可计算值,则只能在特定情况下综

8、合,其消耗较大资源。,11,D、 VHDL文字规则- 下标名,段名多个下标名的组合 格式:标识符(表达式 方向 表达式) 方向: TO下标序号由低到高DOWNTO下标序号由高到低 例如: D(7 DOWNTO 0);表示数据总线D7D0D(0 TO 7 );表示数据总线D0D7,12,VHDL 语言程序设计,A:信号 B:变量 C:常量,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型 4、VHDL数据类型转换 5、 VHDL运算操作符 6、 VHDL属性、时钟,13,VHDL语言的数据对象, 数据对象也称客体(Object),主要有三种: 信号(signal)

9、 变量(variable) 常量(constant),14,信号(Signal)是电子电路内部硬件连接的抽象。是内部信号,而非外部信号(即端口,对应为 IN、 OUT、INOUT、BUFFER)。它和端口的区别:没有数据流动的方向。声明位置:包集合、实体、结构体作用范围:全局(包集合实体结构体 (进程))。,格式 signal 信号名:数据类型 约束条件 := 表达式,例 signal binadd:integer range 0 to 18 := 6; -声明信号binadd为整型数,范围是018(约束条件),初值为6.binadd = 12; -为信号binadd赋值为12.,初值,必须与

10、数据类型一致,VHDL语言的数据对象,15,SIGNAL temp :Std_Logic_Vector(7 Downto 0); 整体赋值:temp = “10101010”temp = x“AA”;逐位赋值:temp(7) = 1; 多位赋值:temp(7 downto 4) = “0110”,信号赋值,多位赋值用双引号,逐位赋值用单引号,赋值符号,16,VHDL语言的数据对象,17,变量(variable)变量是只能在进程和子程序等顺序语句模块中使用,做局部存储。所有对变量的赋值立即生效 和信号区别:说明位置、赋值符号、生效时间、有效范围。 声明位置:进程、子程序 作用范围:只在定义的进程

11、或子程序内有效。,格式 variable 变量名:数据类型 约束条件 := 表达式,例 variable x, y:integer range 0 to 255 := 200; -声明变量x和y为整型数,范围是0255(约束条件),初值为200.x := 12; -为变量x赋值为12.,初值,必须与数据类型一致,VHDL语言的数据对象,18,整体赋值:Temp:=“10101010”Temp := x“AA”;逐位赋值:Temp(7) := 1; 多位赋值:Temp(7 downto 4) := “0110”,变量赋值,多位赋值用双引号,逐位赋值用单引号,赋值符号,19,说明位置 赋值符号 生

12、效时间 有效范围,变量,信号,在进程、子程序中说明,在实体、结构体、包集合中说明,:= 变量值可传递给信号,= 信号值不能传递给变量,赋值后立即生效,下一条语句即可用新值,信号的赋值需经延时后才能得到,在顺序语句中退出时才更新。,只在定义的进程或子程序内有效,从声明处至下,在整个构造体内有效,VHDL语言的数据对象,变量和信号的区别:,20,常量(Constant)在VHDL语言中是一固定值。所谓常量就是对某一标识符(常量名)赋予一固定的值。声明时就赋初值。 特点:一旦赋值不能改变。 声明位置:实体、结构体、包集合、块、进程、子程序 作用范围:全局性(程序包实体结构体进程)。,格式 const

13、ant 常量名:数据类型 := 表达式,须与数据类型一致,VHDL语言的数据对象,例 CONSTANT fbus:BIT VECTOR:=“010111”;CONSTANT Vcc:REAL:=5.0;CONSTANT dely:TIME:=25ns;,21,信号、常量、变量三种数据对象对比。,22, 端口默认为信号 信号和变量都能够连续被赋值 常量只能在说明时被赋值 不能通过赋值更新文件内容 如果在说明信号或变量时没有指定初始值,系统则认为取默认值,即该类型的最左值或最小值 可以采用函数调用方式给对象赋值,VHDL语言的数据对象,信号、常量、变量的注意事项。,23,VHDL语言的数据对象,重

14、要的分析,24,VHDL 语言程序设计,A:标准数据类型 B:用户自定义类型 C:其他类型 D:子类型,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型 4、VHDL数据类型转换 5、 VHDL运算操作符 6、 VHDL属性、时钟,25,VHDL语言的数据类型, VHDL是强类型语言,信号、变量、常数都必须具有确定的数据类型,每一个对象具有1类型且只能具有那个类型的值。并且相同的数据类型的量才能相互传递和作用。 VHDL具有丰富的数据类型,这使得VHDL能够创建高层次的系统和算法模型。 操作类型与对象类型要匹配。 好处是使用编译或综合工具很容易找出设计中的各种常

15、见错误,26,VHDL语言的数据类型,这些数据类型又分为标准数据类型和用户自定义数据类型两类。 标准数据类型是在VHDL的标准包集合中作了预定义,随时调用。 用户可在标准数据类型的基础上自定义数据类型,27,A、VHDL语言的数据类型 - 标准数据类型,VHDL本身在标准库(STD库) 中预定义的 有10种:,1. 布尔(BOOLEAN)数据类型 2. 位(BIT)数据类型 3. 位矢量(BIT_VECTOR)数据类型 4. 字符(CHARACTER)数据类型 5.字符串(STRING)数据类型 6.整数(INTEGER)数据类型 7.实数(REAL)数据类型 8. 时间(TIME)数据类型

16、9. 错误等级(severity_level) 10. 自然数和正整数(natural and positive),VHDL在IEEE库中预定义的标准逻辑和矢量:,VHDL在IEEE扩展库中预定义的 有3种:,1.无符号数据类型(UNSIGNED TYPE) 2.有符号数据类型(SIGNED TYPE) 3. 小整型数据类型(SMALL_INT),不必用USE说明而直接使用,28,A:标准数据类型- VHDL本身在标准库(STD库) 中预定义的 10种:,布尔(BOOLEAN)数据类型取值只有 “TURE ” 或 “FALSE”,综合器将其变为1、0信号,布尔量不能用于计算,只能通过关系运算符

17、获得。,2. 位(BIT)数据类型是一位二进制数, 0 或 1,其对象可以是变量、信号等,可参与逻辑运算,结果仍是位的数据类型。 直接使用位数据类型值时用单引号 如 0 1。,3. 位矢量(BIT_VECTOR)数据类型是位数据类型的数组直接使用位数据类型值时用双引号。例 “0000” X“00BE” O“123”使用位矢量必须注明位宽:例: SIGNAL a: BIT_VECTOR(7 DOWNTO 0),29,4. 字符(CHARACTER)数据类型在ieee.std_logic_1164包集合中有预定义的128个字符。字符类型的表示通常用单引号引起来。例: A a b 注意:字符类型是区

18、分大小写的。,5.字符串(STRING)数据类型是字符数据类型数组,必须用双引号标明。例:VARIABLE string_var : STRING (1 TO 7 ) ;string_var := “abcdefg“ ;,6.整数(INTEGER)数据类型整数类型的数代表正整数、负整数和零。取值范围:-2147483647 +2147483647(相当32位有符号数)可使用运算操作符 +、*、/进行算术运算。 必须通过RANGE限定数的范围,才能决定表示此信号或变量的二进制位数。,A:标准数据类型- VHDL本身在标准库(STD库) 中预定义的 10种:,30,7.实数(REAL)数据类型VH

19、DL的实数类似数学上的实数,或称浮点数。 取值范围:-1.0 E38 +1.0 E38 通常仅仿真支持,综合则不支持。,1.0 0.0 65971.333333 43.6E-4 65_971.333_3333 十进制浮点数 8#43.6#e+4 八进制浮点数,8. 时间(TIME)数据类型VHDL唯一预定义的物理类型,不能参与综合。一般用于仿真。 格式: 整数 物理量单位 如 50 ms 20ns 单位:fs 飞秒,VHDL中最小时间单位 ps 皮秒 = 1000 fs ns 纳秒 = 1000 ps us 微秒 = 1000 ns ms 毫秒 = 1000 ussec 秒 = 1000 ms

20、 min 分 = 60 sec hr 时 = 60 min,实数常量的书写:,A:标准数据类型- VHDL本身在标准库(STD库) 中预定义的 10种:,31,10. 自然数和正整数(natural and positive)是整数的一个子类型 。自然数:大于或等于零的整数正整数:大于零的整数,A:标准数据类型- VHDL本身在标准库(STD库) 中预定义的 10种:,9. 错误等级 错误等级数据用于表征系统的状态,包括:NOTE(注意) WARNING(警告)ERROR(出错) FAILURE(失败) 在仿真过程中,可输出这4种值来提示被仿真系统当前的工作状态。,32,A:标准数据类型-VH

21、DL在IEEE库中预定义的标准逻辑和矢量,1)std_logic: 工业标准的逻辑类型。取值0 1 Z X。 2)std_logic_vector: 工业标准的逻辑类型。std_logic的组合。 注意:使用这两种数据时,程序中必须声明: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL Std_Logic数据类型包含9种取值分别为:,0, 1 Strong Logic 强逻辑0 ,1 综合与仿真 X Strong unknown 强未知 用于仿真 Z High-impedance 高阻 综合与仿真 U uninitialized 未初始化的 用于仿真 W W

22、eak Unknown 弱未知 用于仿真 L, H Weak Logic 弱逻辑0,1 综合与仿真 - Ignore 忽略 综合与仿真,数字器件中实现的只有这4种,33,A:标准数据类型- VHDL在IEEE库扩展预定义的 3种:,1. 无符号数据类型(UNSIGNED TYPE),2. 有符号数据类型(SIGNED TYPE),十进制8可如下表示: UNSIGNED(“1000“),两则无符号数据定义的示例: VARIABLE var : UNSIGNED(0 TO 10) ; SIGNAL sig : UNSIGNED(5 TO 0) ;,例如: SIGNED(“0101“) 代表+5 S

23、IGNED(“1011“) 代表5,在IEEE STD_LOGIC_ARITH中定义了,3. 小整型数据类型(SMALL_INT),两则有符号数据定义的示例: VARIABLE var : SIGNED(0 TO 10) ; SIGNAL sig : SIGNED(5 TO 0) ;,8位整数范围,取值-128+128 或0255. 可节省大量系统资源,最高位var(0),符号位var(0),LIBRARY IEEE; USE IEEE.STD_LOGIC_ARITH.ALL,注意:使用这3种数据时,程序中必须声明:,34,B: 用户自定义类型,1. 枚举类型(Enumerated) 2. 整

24、数类型和实数类型(integer and REAL) 3. 数组类型(array) 4. 记录类型(Recode) 5. 时间类型(time),例如: TYPE st IS ARRAY(0 TO 15)OF STD LOGIC; TYPE week IS (sun,mon,tue,wed,thu,fri,sat);,用户自定义类型有:,定义格式:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;或:TYPE 数据类型名 IS 数据类型定义;,35,B: 用户自定义类型,1. 枚举类型(Enumerated)是将所有可能用到的数据一个一个的列举出来例:TYPE week IS (su

25、n, mon, tue, wed, thu, fri, sat);TYPE std_logic is (u, x, 0, 1, z, w, l, h, -);std_logic已作为标准类型收集在std_logic_1164包集合,2. 整数类型和实数类型例如:TYPE num1 IS RANGE 0 TO 100;,定义格式:TYPE 数据类型名 IS (元素1,元素2 );,定义格式:TYPE 数据类型名 IS RANGE 范围;,36,B: 用户自定义类型,3. 数组类型数组是一组具有相同数据类型的元素的组合。,例:TYPE d_bus IS ARRAY (7 DOWNTO 0) OF

26、STD_LOGIC;-定义数据总线,下标由高到低,即D7位权值最高,D0最低。,如:TYPE std_logic_vector IS ARRAY (Natural range) OF STD_LOGIC;,则在程序声明这样类型的信号或量时必须传递给出: 如:signal ma:std_logic_vector(3 downto 0),范围数的类型,限定性数组:,限定性数组定义语句格式如下: TYPE 数组名IS ARRAY (数组范围)OF 原数据类型名;,非限定性数组,TYPE 数组名IS ARRAY (数组范围数类型 RANGE )OF 原数据类型名;,37,B: 用户自定义类型,TYPE

27、 数组名 IS ARRAY (范围1,范围2, 范围n) OF 原数据类型名;,多维数组,例:用户自定义一多维数组数据类型 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;Package xxxx is -自定义一包集合type marray is array(1 downto 0, 1downto 0) of std_logic_vector(3 downto 0) - 多维数组的定义End package xxxx USE work.xxxx.ALL; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY de

28、coder3to8 IS END behave;,MAX PLUS II不支持多维数组,参见:例,38,B: 用户自定义类型,4. 记录类型(Recode),定义格式:TYPE 记录类型名 IS RECODE元素名:元素数据类型;元素名:元素数据类型;:END RECODE 记录类型名,记录是一组不同数据类型的元素的组合。,从记录数据类型中提取数据元素时,应使用 “.”,例已定义了一记录类型 TYPE yyyy IS RECODEyyy1:std_logic_vector(7 downto 0);yyy2:std_logic_vector(15 downto 8);END RECODE yyy

29、y;,赋值给信号时: a = yyyy.yyy1 直接赋值时: yyyy.yyy2:=x“FF”,39,B: 用户自定义类型,记录赋值varialbe today : date; 整体赋值 today := (24, Apr, 2006); 分别赋值 today.day := 24;today.month := Apr;today.year := 2006;,type month is ( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); type date is recordday : integer range 1 t

30、o 31;month : month;year : integer range 0 to 3000; end record;,定义月为枚举类型,定义data为记录类型,参见:例,40,B: 用户自定义类型,5. 时间类型(time),TYPE time IS RANGE 2147483647 TO 2147483647 units fs ; - 飞秒,VHDL中的最小时间单位 ps = 1000 fs ; - 皮秒ns = 1000 ps ; - 纳秒us = 1000 ns ; - 微秒ms = 1000 us ; - 毫秒sec = 1000 ms ; - 秒min = 60 sec ;

31、- 分hr = 60 min ; - 时 end units ;,定义格式:TYPE 数据类型名 IS 范围UNITS 基本单位;单位;:END UNITS;,41,C: 其他类型,实际上是指针类型,用于在对象之间建立联系,或者给新对象分配或释放存储空间 很少用到存取类型 只有变量才可以是存取类型,存取类型,42,C: 其他类型,文件类型, 在主系统环境中定义代表文件的对象,文件对象的值是主系统文件中值的序列 预定义文件类型type text is file of string 用户定义的文件类型type input_type is file of character;,参见:例,43,D:

32、子类型,子类型, 当一个对象可能取值的值域是某个类型说明定义的值域的子集,则需用到VHDL提供的子类型。 子类型和父类型完全兼容 为了增加可重用性,只要有可能定义为子类型时,就不要将其定义为新类型。 子类型对父类型施加限制条件,也可以是简单地对父类型重新取名,没有增加任何新的意义。 子类型定义主要是为了对选择信号赋值语句或者CASE语句加约束.,例:自然数类型就是整数的一个子集type integer is 2147483647 to +2147483647subtype natural is integer range 0 to +2147483647,44,D: 子类型,子类型,其他举例:

33、 subtype data is bit_vector (31 downto 0); subtype operand is data; type x_int is range 1 to 50; type y_int is range 1 to 30; subtype z_int is x_int range 1 to 30; subtype a_int is x_int range 3 to 32; subtype b_int is z_int range 5 to 20; signal x : x_int := 1; signal z : z_int := 3; signal a : a_i

34、nt := 4; z = x; -正确,但x越出z_int的界,则运行出错 a = z; - 正确,45, 整数不能看作是位矢量,也不能按位来访问,对整数不能用逻辑操作符。需要时,可转换成位矢量。部分EDA工具对以上规定有所突破建议:用位矢量描述数据对象。,VHDL语言的数据类型,注意事项, 数组:通常在总线定义及ROM、RAM等的系统模型中使用。 记录用记录描述SCSI总线及通信协议较方便 数组和记录比较适合用于系统仿真,不适合于电路实现。,46,VHDL 语言程序设计,A:直接类型转换 B:包集合提供类型转换 C:用户创建的类型转换,1、VHDL文字规则 2、 VHDL语言的数据对象 3、

35、 VHDL语言的数据类型VHDL数据类型转换 4、 VHDL运算操作符 5、 VHDL属性、时钟,47,VHDL数据类型转换,在VHDL中,不同类型的数据不能直接进行算术或逻辑运算。因此有必要进行数据类型转换操作。,A: 直接类型转换,B: 包集合提供类型转换, VHDL是强类型语言,每一个对象只能有1种类型,并且只能取该类型的值 如果值类型和对象类型不一致,需要使用显式类型转换 VHDL中没有隐式类型转换 三种转换方式:,C: 用户创建的类型转换,48,A: VHDL数据类型转换-直接类型转换,所谓直接类型转换,就是将欲转换的目的类型直接标出,后面紧跟用括号括起来的源数据。,如 a 为uns

36、igned类型 则用std_logic_vector (a) 转换成std_logic_vector 类型了,直接类型转换用于关系较密切的数据类型间转换Unsigne、signed 与 bit_vectorUnsigne、signed 与 std_logic_vector,直接类型转换时,要打开包集合 std_logic_arith.all,49,B: VHDL数据类型转换-包集合提供类型转换,VHDL包集合中提供了预定义的数据类型转换函数,num: std_logic_vector ( 2 downto 0 ) ; in_num: integer range 0 to 5 ; in_num

37、= conv_integer ( num ) ;,例:,50,C: VHDL数据类型转换-用户创建的类型转换,用函数实现类型转换 举例 由STD_LOGIC 转换为BIT function to_bit ( s : std_logic; xmap : bit := 0 ) return bit isbegincase s iswhen 0 | L = return (0);when 1 | H = return (1);when others = return xmap;end case; end;,强弱逻辑0,返回0,强弱逻辑1,返回1,其他情况,按要求返回0,51,VHDL数据类型转换举例

38、,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY amp ISPORT ( a1,a2 : IN BIT_VECTOR(3 DOWNTO 0);c1,c2,c3 : IN STD_LOGIC_VECTOR (3 DOWNTO 0);b1, b2, b3 : IN INTEGER RANGE 0 TO 15;d1, d2, d3, d4 : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );END ENTITY amp; ARCHITECTURE behave O

39、F amp ISd1 = TO_STDLOGICVECTOR( a1 -(4)END ARCHITECTURE behave,STD_LOGIC_UNSIGNED支持函数“=”对逻辑矢量与整数转换的重载,52,VHDL 语言程序设计,A: 算术运算符 B:关系运算符 C:逻辑运算符 D:并置运算符 F:移位操作,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型VHDL数据类型转换 4、 VHDL运算操作符 5、 VHDL属性、时钟,53,4. VHDL运算操作符, 在VHDL语言中主要有5中运算操作符: A:算术运算符(logical)B:关系运算符(relat

40、ion)C:逻辑运算符(Arithmetic)D:并置运算符(concatenation)E:移位操作(shift) 被操作符所操作的对象是操作数,操作数的类型应该和操作符所要求的类型相一致 运算操作符有优先级,54,VHDL运算操作符 A:算术运算符(Arithmetic),绿色部分MAX PLUS II不支持,55,VHDL运算操作符 B:关系运算符(relation),关系运算结果为布尔值,左右两边的操作数的数据类型必须相同,但是位长度不一定相同。,56,VHDL运算操作符 C:逻辑运算符(logical),运算符的右边和左边,以及代入的信号的数据类型必须相同。 如果是数组,这两个数组位

41、宽要相等。,57,VHDL运算操作符 D:并置运算符(concatenation),注意:赋值语句中使用“&” 时,等式右边至少要有一信号或变量。,Signal a,d : std_logic_vector(3 downto 0) := “1111”; Signal b,c,g : std_logic_vector(1 downto 0) := “10”; Signal e : std_logic_vector(2 downto 0) := “001”; Signal f,h,l : std_logic := 0;a= not b 结果 a: “0101” d: “1101”,58,VHDL运

42、算操作符 E: 移位操作(shift),移位操作符的语句格式是: 标识符 移位操作符 移位位数 ;,Variable ma: bit_vector(3 downto 0):=“1011”,Ma SLL 1; -(ma=“0110”) Ma SLL -3; -(ma=“0001”) Ma SRL 1; -(ma=“0101”) Ma SRL -2; -(ma=“1100”),Ma SLA 1; -(ma=“0111”) Ma SLA -3; -(ma=“1111”) Ma SRA 1; -(ma=“1101”) Ma SRA -2; -(ma=“1111”),59,VHDL 语言程序设计,A:

43、值类属性 B:信号类属性函数 C:范围类属性 D:其他,1、VHDL文字规则 2、 VHDL语言的数据对象 3、 VHDL语言的数据类型VHDL数据类型转换 4、 VHDL运算操作符 5、 VHDL属性、时钟,60,5、 VHDL属性、时钟,A: 值类属性, VHDL值类属性 主要用来返回一个数据类型的边界值和上下限值。主要包括 5 种 (1) left: 返回一个数据类型或子类型最左边的值 ; (2) right: 返回一个数据类型或子类型最右边的值 ; (3) high: 返回一个数据类型或子类型的最大值 ; (4) low: 返回一个数据类型或子类型的最小值。 (5) length: 返

44、回一个数组中元素的个数。,VHDL属性类语法,不仅适合数字类型,也适合其他标志类型 枚举类型,是按元素位置序号取值的 必须注意升降序,61,5、 VHDL属性、时钟,举例:sdn : in std_logic_vector ( 8 downto 0);sup : in std_logic_vector ( 0 to 8);Sb : in bit(0 to 1);st : out nq; 则: sdnleft =8 sdnright=0 sdnlow=0 sdnhigh=8 sdnlength=9supleft =0 supright=8 suplow=0 suphigh=8 suplength

45、=9sbleft =0 sbright=1 sblow=0 sbhigh=1 sblength=2stleft =0 stright=3 stlow=0 sthigh=3 stlength=4,Nq是自定义的枚举类型 Type nq is (day,week,month,year),62, VHDL信号属性函数 用来得到有关信号的行为信息 , 这类预定义属性函数包括5种: (1)信号event: 如在当前一个相当小的时间间隔内有信号事件发生,返回值为“true”;否则返回值为“false“。 (2) 信号active: 如果在当前的一个相当小的时间间隔内信号有事物,则函数的返回值“true”;

46、否则函数的返回值为“false“。 (3)信号last_event: 函数将返回该信号从前一个事件发生到现在时刻所经历的时间值。 (4)信号last_value:函数将返回该信号在最近一个事件发生以前的值。 (5)信号last_active:函数将返回该信号从前一次信号事物到现在时刻所经历的时间值。,VHDL属性类语法,事物:比事件更多涵盖,和“与” 事件相关的信号发生事物触发。如:与门输入变化了,输出未变,但输出有事物产生。,5、 VHDL属性、时钟,B:信号类属性函数,63,我们用的最多的是EVENT, 主要是检测信号(时钟)的边沿。例:若有如下定义: signal clk : in st

47、d_logic;,5、 VHDL属性、时钟,process ( clk ) begin if clkevent and clk=1 then ; .end process;,process ( clk ) begin if clkevent and clk=0 then ; .end process;,判断上沿,判断下沿,STD_LOGIC_1164还定义了两个函数来表示信号的边沿:,IF ( rising_edge(clock) ) THEN q = d;,IF ( falling_edge(clock) ) THEN q = d;,判断上沿,判断下沿,B:信号类属性函数,64, VHDL范围类属性 格式: a range (n) 按正序返回值的范围a reverse (n) 按逆序返回值的范围其中 (n) 是如果客体为多维数组,指定其中第n维的。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报