VHDL的运算符号 VHDL中主要有六类运算符号 赋值运算、逻辑运算、算术运算 关系运算、连接运算、移位运算 运算符号主要用于各类表达式中 运算可以分为单目运算(只有一个运算量)和双目运算 (针对两个运算量); 进行双目运算时,两个运算量必须类型相同 VHDL中运算没有左右优先级差别,同一表达式中进行 多个运算时必须用括号表达先后差别 在同类运算中,单目运算优先; 在所有运算符号中,NOT的优先级别最高 在一般运算中,优先顺序排列为:算术一关系一逻辑 可以通过加括号来改变运算的优先顺序; 赋值运算符 数组内部分元素赋值 适用类型:所有数据类型 赋值号两边的数据类型原则上应该相同 逻辑运算符
VHDL 的运算符号 VHDL 中主要有六类运算符号: 赋值运算、逻辑运算、算术运算 关系运算、连接运算、移位运算 运算符号主要用于各类表达式中; 运算可以分为单目运算(只有一个运算量)和双目运算 (针对两个运算量); 进行双目运算时,两个运算量必须类型相同; VHDL 中运算没有左右优先级差别,同一表达式中进行 多个运算时必须用括号表达先后差别; 在同类运算中,单目运算优先; 在所有运算符号中,NOT 的优先级别最高; 在一般运算中,优先顺序排列为:算术—关系—逻辑 可以通过加括号来改变运算的优先顺序; 赋值运算符 数组内部分元素赋值; 适用类型: 所有数据类型; 赋值号两边的数据类型原则上应该相同; 逻辑运算符
NOT AND OR NAND NOR XOR 适用类型 STD LOGIC STD LOGIC VECTOR BIT BIT VECTOR BOOLEAN 逻辑运算结果为同类型逻辑量: 对数组类型进行逻辑运算时,参与运算的两个数据位数必须 相等,所做运算为对应位进行; 算术运算 /(除)*(乘)+(加)-(减) MOD(求模)REM(取余)**(指数)ABS(绝对值) 适用类型: INTEGER REAL BIT BIT VECTOR TIME 加/减运算的结果为同类型算术量 注意:算术运算大多数只用于抽象的编程(行为设计) 只有少数算术运算符能够进行综合,应尽量只使用加/减; 对数组类型进行算术运算时,两边位数必须相同 关系运算: >(大于等于)(大于)<(小于)/=(不等于) (等于) 适用类型 等于和不等于适用于所有类型
NOT AND OR NAND NOR XOR 适用类型: STD_LOGIC STD_LOGIC_VECTOR BIT BIT_VECTOR BOOLEAN 逻辑运算结果为同类型逻辑量; 对数组类型进行逻辑运算时,参与运算的两个数据位数必须 相等,所做运算为对应位进行; 算术运算: / (除)* (乘) + (加) - (减) MOD(求模)REM(取余) **(指数) ABS(绝对值) 适用类型: INTEGER REAL BIT BIT_VECTOR TIME 加/减运算的结果为同类型算术量; 注意:算术运算大多数只用于抽象的编程(行为设计); 只有少数算术运算符能够进行综合,应尽量只使用加/减; 对数组类型进行算术运算时,两边位数必须相同; 关系运算: => (大于等于) (大于)< (小于) /= (不等于) = (等于) 适用类型: 等于和不等于适用于所有类型;
其他运算适用于整数、实数、位、位矢量,以及枚举类 型和数组类型; 可比较位长度不相同的情况(从左向右逐位比较) 关系运算的结果为 boolean类型: false true 注意 小于等于符号与信号赋值符号的写法相同,应注意使用 位置和意义 连接运算:& 适用类型 bit bitvector character string std logic std logic vector 连接运算结果为同类型元素构成的数组; 库和包集合 除了实体、结构体外的第三种可编程结构 Library库 编译后数据的集合,存放包集合定义、实体定义、构造 体定义和配置定义,其功能相当于其他操作系统中的目录, 经过说明后,设计中就可以使用库中的数据,实现共享; 在前面图形输入的应用中,已多次采用库中的单元进行
其他运算适用于整数、实数、位、位矢量,以及枚举类 型和数组类型; 可比较位长度不相同的情况(从左向右逐位比较); 关系运算的结果为 boolean 类型: false true 注意: 小于等于符号与信号赋值符号的写法相同,应注意使用 位置和意义; 连接运算: & 适用类型 bit bitvector character string std_logic std_logic_vector 连接运算结果为同类型元素构成的数组; 库和包集合 除了实体、结构体外的第三种可编程结构 Library 库 编译后数据的集合,存放包集合定义、实体定义、构造 体定义和配置定义,其功能相当于其他操作系统中的目录, 经过说明后,设计中就可以使用库中的数据,实现共享; 在前面图形输入的应用中,已多次采用库中的单元进行
设计 库的使用: 当使用库时,需要说明使用的库名称,同时需要说明库中 包集合的名称及范围 每个实体都应独立进行库的说明;库的说明应该在实体之 前:经过说明后,实体和结构体就可以自动调用库中的资源 库说明语句格式 library库名; use库名包集合名范围(或项目名); 例: library ieee use ieee std logic 1164 all VHDL中库的主要种类 IEEE库STD库ASC库 work库用户定义库 IEEE库 含有IEEE的标准包集合“ STD LOGIO1164”以及一些 大公司提供的包集合:使用前必须说明
设计; 库的使用: 当使用库时,需要说明使用的库名称,同时需要说明库中 包集合的名称及范围; 每个实体都应独立进行库的说明;库的说明应该在实体之 前;经过说明后,实体和结构体就可以自动调用库中的资源; 库说明语句格式 library 库名; use 库名.包集合名.范围(或项目名); 例 : library ieee; use ieee.std_logic_1164.all; VHDL 中库的主要种类: IEEE 库 STD 库 ASIC 库 work 库 用户定义库 IEEE 库: 含有 IEEE 的标准包集合“STD_LOGIC_1164”以及一些 大公司提供的包集合;使用前必须说明; 例: library ieee;
使用标准逻辑量的定义和运算 use ieee std logic unsigned. all无符号数算术运算的定义; use ieeestd logic arith. all,使用符号数算术运算的定义 STD库: 含有“ STANDARD”包集合和“ TEXTIO”包集合,使 用前者时无需说明 ASIC库: 由各公司提供,存放与逻辑门一一对应的实体,用于ASIC 设计的门级仿真,使用时需加以说明; 例 library altera; use altera. maxplus2. all library lpn use Ipm Ipm components.all: wORK库 WORK库为现行作业库,位于当前使用时设计文件的指 定保存目录 ORK使用时通常无须说明;但在结构设计中进行元件 的宏调用时需要说明 例: use work all
use ieee.std_logic_1164.all; 使用标准逻辑量的定义和运算; use ieee.std_logic_unsigned.all; 无符号数算术运算的定义; use ieee.std_logic_arith.all; 使用符号数算术运算的定义; STD 库: 含有“STANDARD”包集合和“TEXTIO”包集合,使 用前者时无需说明; ASIC 库: 由各公司提供,存放与逻辑门一一对应的实体,用于 ASIC 设计的门级仿真,使用时需加以说明; 例 library altera; use altera.maxplus2.all; library lpm; use lpm.lpm_components.all; WORK 库: WORK 库为现行作业库,位于当前使用时设计文件的指 定保存目录; WORK 使用时通常无须说明;但在结构设计中进行元件 的宏调用时需要说明; 例:use work.all;
用户定义库: 由用户自定义生成,使用时需说明(指定库所在的路径); package包集合 用于罗列ⅤHDL语言中使用的类型定义、信号定义、常 数定义、元件定义、函数定义和过程定义等(类似于C语言 中的 include语句),方便不同模块的设计中公共定义的共享 数字电路设计中经常使用的包集合: ieee std logic 1164 逻辑量的定义 ieeestd logic arith 数据转换,逻辑判断 ieee std logic unsigned算术运算 std textio 文本数据输入/输出格式 包集合在使用前必须采用use语句进行说明(在设计程序 的最前面) 包集合可以由用户自定义; 包的结构与定义:(用户自定义的包集合) 包集合标题+(包集合体) 包集合标题 package包集合名is 说明语句;(只有名称) end包集合名
用户定义库: 由用户自定义生成,使用时需说明(指定库所在的路径); package 包集合 用于罗列 VHDL 语言中使用的类型定义、信号定义、常 数定义、元件定义、函数定义和过程定义等(类似于 C 语言 中的 include 语句),方便不同模块的设计中公共定义的共享; 数字电路设计中经常使用的包集合: ieee.std_logic_1164 逻辑量的定义 ieee.std_logic_arith 数据转换,逻辑判断 ieee.std_logic_unsigned 算术运算 std.textio 文本数据输入/输出格式 包集合在使用前必须采用 use 语句进行说明(在设计程序 的最前面); 包集合可以由用户自定义; 包的结构与定义:(用户自定义的包集合) 包集合标题+(包集合体) 包集合标题: package 包集合名 is 说明语句; (只有名称) end 包集合名;
包集合体 package body包集合名is 说明语句;(完整定义) end包集合名; 例:(函数取自p279表4-38) use ieee std logic 1164. all packge upac constant k: integer: =4 subtype cpu bus is std logic vector(k-Idownto 0); v integer(x: std logic vector) return integer packge body upac is function conv integer(x: std logic vector)return integer is ge loc result =result *2 when O'L=> null when'ITH=> result: =result+1 when otner nd loop eturn result
包集合体: package body 包集合名 is 说明语句; (完整定义) end 包集合名; 例:( 函数取自 p.279 表 4-38 ) library ieee; use ieee.std_logic_1164.all; packge upac is constant k: integer := 4; subtype cpu_bus is std_logic_vector(k-1downto 0); function conv_integer (x:std_logic_vector) return integer; end upac; packge body upac is function conv_integer (x: std_logic_vector) return integer is variable result: integer; begin result := 0; for I in x'range loop result :=result*2; case x(i) is when '0'|'L' => null; when '1'|'H' => result := result+1; when others => null; end case; end loop; return result;
conv integer, 用户自行编写的包集合将自动存放于WORK库中,使用时可 采用下列语句调用 configuration配置 在一个实体内可以编写多种不同的构造体,通过配置语 句来进行选择; 配置语句格式 configuration配置名of实体名is for选择的构造体名 end for end配置名; 此语句可以为设计增加更大的灵活性,可以对不同构造 体进行比较
end conv_integer; end upac; 用户自行编写的包集合将自动存放于 WORK 库中,使用时可 采用下列语句调用 use work.upac.all; configuration 配置 在一个实体内可以编写多种不同的构造体,通过配置语 句来进行选择; 配置语句格式: configuration 配置名 of 实体名 is for 选择的构造体名 end for; end 配置名; 此语句可以为设计增加更大的灵活性,可以对不同构造 体进行比较