VHDL运算符和库的使用

VHDL的运算符号VHDL中主要有六类运算符号:赋值运算、逻辑运算、算术运算关系运算、连接运算、移位运算运算符号主要用于各类表达式中;

运算可以分为单目运算(只有一个运算量)和双目运算(针对两个运算量);进行双目运算时,两个运算量必须类型相同;VHDL中运算没有左右优先级差别,同一表达式中进行多个运算时必须用括号表达先后差别;

在同类运算中,单目运算优先;在所有运算符号中, NOT的优先级别最高;

赋值运算符

<=  信号赋值:将右端值赋给左端信号;

:= 变量赋值:将右端值赋给左端变量;或用于赋初始值;

=>数组内部分元素赋值;适用类型: 所有数据类型;

赋值号两边的数据类型原则上应该相同;

逻辑运算符 

NOT AND OR NAND NOR XOR适用类型:STD LOGIC STD LOGIC VECTORBIT BIT VECTOR BOOLEAN

逻辑运算结果为同类型逻辑量;对数组类型进行逻辑运算时,参与运算的两个数据位数必须相等,所做运算为对应位进行;

 

算术运算:

/ 除)* (乘) + (加)减MOD (求模) REM (取余) ** (指数) ABS (绝对值)适用类型:INTEGER REAL BIT BIT VECTOR TIME

加/减运算的结果为同类型算术量;注意:算术运算大多数只用于抽象的编程(行为设计); 

只有少数算术运算符能够进行综合,应尽量只使用加/减;对数组类型进行算术运算时,两边位数必须相同;

 

关系运算:

=> (大于等于) <= (小于等于)> (大于)< (小于) /= (不等于) = (等于)适用类型:等于和不等于适用于所有类型;

其他运算适用于整数、实数、位、位矢量,以及枚举类型和数组类型;

可比较位长度不相同的情况(从左向右逐位比较);关系运算的结果为boolean类型: false true

注意:小于等于符号与信号赋值符号的写法相同,应注意使用位置和意义;

 

连接运算: & 

适用类型bit bitvector character stringstd logic std logic_vector

连接运算结果为同类型元素构成的数组; 

 

库和包集合除了实体、结构体外的第三种可编程结构

Library 库编译后数据的集合,存放包集合定义、实体定义、构造体定义和配置定义,

其功能相当于其他操作系统中的目录,经过说明后,设计中就可以使用库中的数据,实现共享;在前面图形输入的应用中,已多次采用库中的单元进行设计

 

库的使用:

当使用库时,需要说明使用的库名称,同时需要说明库中包集合的名称及范围;每个实体都应独立进行库的说明;

库的说明应该在实体之前;经过说明后,实体和结构体就可以自动调用库中的资源;

库说明语句格式library库名;use库名包集合名.范围(或项目名);

例: library ieee;use ieee.std_logic_1164.all:VHDL中库的主要种类:IEEE库 STD库 ASIC库work库 用户定义库IEEE库:含有IEEE的标准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必须说明;例:library ieee; 

 

VHDL中库的主要种类:

IEEE库    STD库    ASIC库   work库   用户定义库

 

IEEE库:含有IEEE的标准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必须说明;例:library ieee.

use ieee.std logic 1164.all;使用标准逻辑量的定义和运算;

use ieeestd logic-unsigned.all;无符号数算术运算的定义;

use ieee.std logic-arith.all;使用符号数算术运算的定义;

 

STD库:

含有"STANDARD"包集合和"TEXTIO"包集合,使用前者时无需说明;

 

ASIC库:

由各公司提供,存放与逻辑门-对应的实体,用于ASIC设计的门级仿真,使用时需加以说明;例library altera;use altera.maxplus2.all;library Ipmuse Ipm.Ipm_components.all

 

WORK库:

WORK库为现行作业库,位于当前使用时设计文件的指定保存目录; 

WORK使用时通常无须说明;但在结构设计中进行元件,的宏调用时需要说明;例: use work.all

 

用户定义库:

由用户自定义生成,使用时需说明(指定库所在的路径);

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包集合名;

例: (函数取自p.279表4-38 )library ieee;use ieee.std_logic_1164.all; 

 

library ieee;

use ieee. std_logic 1164. all;

packge upac isconstant 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 'O'L' =>null;

when '1'H'=> result := result+ 1;

when others =>null: 

end case;

end loop;

return result;

end conv_integer;

end upac;

用户自行编写的包集合将自动存放于WORK库中,使用时可采用下列语句调用use work.upac.all; 

 

上一篇:基于FPGA的呼吸灯的实现(vhdl实现)


下一篇:win10 开机静默挂载 vhd 虚拟磁盘 - 不会开机弹出文件夹或 cmd 黑框