第5章 VHDL结构及实例

  • 格式:pdf
  • 大小:286.03 KB
  • 文档页数:82

--程序包首 --函数首 --函数首 --函数首 --函数首
--程序包体 --函数体
【例5-2】函数调用实例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.packexp.ALL ; ENTITY axamp IS PORT( dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END; ARCHITECTURE bhv OF axamp IS BEGIN out1 <= max(dat1,dat2); --用在赋值语句中的并行函数 调用语句 PROCESS(dat3,dat4) BEGIN out2 <= max(dat3,dat4); --顺序函数调用语句 END PROCESS; END;
HDL可编程逻辑器件 第5章 VHDL结构及实例
5.1 VHDL程序的基本结构
通常一个完整的VHDL程序(或称为设 计实体)应该包含库(LIBRARY)、程序包 (PACKAGE)、实体(ENTITY)、结构体 ( A R C H I T E C T U R E ) 和 配 置 (CONFIGURATION)五个部分,如图5.1 所示。
程序包体说明 END 程序包名;
5.1.3 实体(ENTITY) 5.1.4 结构体(ARCHITECTURE)
常数说明 结 构 体 说 明 结 子程序说明 构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句 例化元件说明 数据类型说明 信号说明
图5.2 结构体构造图
5.1.5 配置(CONFIGURATION)
配置语句的一般格式如下: CONFIGURATION 配置名 OF 实体名 IS FOR 结构体名 END FOR; END 配置名; --配置说明
5.2 子程序(SUBPROGRAM)
子 程 序 是 一 个 VHDL 程 序 模 块 , 包 括 函 数 (FUCTION)和过程(PROCEDURE)两种类型。 子程序可以在VHDL程序中的程序包、结构体和进 程3个不同位置定义,但由于只有在程序包中定义 的子程序才能被不同的设计调用,因此一般将常 用逻辑功能的子程序放在程序包中。与进程 (PROCESS)相似,子程序中只能放置顺序语句。

型 + - & * /
操作符 加 减

能 整数 整数 一维数组
操作数数据类型
并置 乘 除 取模 取余 逻辑左移 逻辑右移 算术左移 算术右移 逻辑循环左移 逻辑循环右移 乘方 取绝对值
整数和实数(包括浮点数) 整数和实数(包括浮点数) 整数 整数 BIT或布尔型一维数组 BIT或布尔型一维数组 BIT或布尔型一维数组 BIT或布尔型一维数组 BIT或布尔型一维数组 BIT或布尔型一维数组 整数 整数
库、程序包使用说明 设 计 实 体 结构体(ARCHITECTURE)
GENERIC 类属说明
实体(ENTITY)
PORT 端口说明 结构体说明
配置(CONFIGURATION)
结构体功能描述
图5.1 VHDL程序设计基本结构
VHDL 大小写不敏感
文件名和实体 名一致
eqcomp4.vhd 库 包 实体
每行;结尾 关键字end后跟 实体名 关键字begin 关键字end后跟 结构体名
结构体
5.1.1 库(LIBRARY) 5.1.2 程序包(PACKAGE)
定义程序包的一般语句结构如下: PACKAGE 程序包名 IS -程序包首 程序包首说明 END 程序包名; 程序包名 IS -程序包体
PACKAGE BODY
5.2.2 VHDL过程
函数的语句表达格式如下: PROCEDURE 过程名(参数表) -- 过程首
PROCEDURE 过程名(参数表) IS [说明部分] BIGIN 顺序语句; END PROCEDURE 过程名
-- 过程体
【例5-4】进程中的过程实例
PACKAGE data_types IS -- 定义程序包 SUBTYPE data_element IS INTEGER RANGE 0 TO 3 ; -- 定义数据类型 TYPE data_array IS ARRAY (1 TO 3) OF data_element; END data_types; USE WORK.data_types.ALL; --打开以上建立在当前工作库的程序包data_types ENTITY sort IS PORT ( in_array : IN data_array ; out_array : OUT data_array); END sort; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in_array) PROCEDURE swap(data : INOUT data_array; -- 过程体 low, high : IN INTEGER ) IS VARIABLE temp : data_element ; BEGIN IF (data(low) > data(high)) THEN temp := data(low) ; data(low) := data(high); data(high) := temp ; END IF ; END swap ; VARIABLE my_array : data_array ; -- 在本进程中定义变量my_array BEGIN my_array := in_array ; swap(my_array, 1, 2); -- my_array、1、2是对应于data、low、high的实参 swap(my_array, 2, 3); -- 位置关联法调用, 第2、第3元素交换 swap(my_array, 1, 2); -- 位置关联法调用, 第1、第2元素再次交换 out_array <= my_array ; END Process ; END exmp ;
8.3 VHDL子程序
8.3.7 子程序调用语句
1. 过程调用
5.3 VHDL操作符
逻辑操作符(Logical Operator) 关系操作符(Relational Operator) 算术操作符(Arithmetic Operator) 符号操作符(Sign Operator) 重载操作符(Overloading Ope: FUNCTION 函数名(参数表) RETURN 数据类型 FUNCTION 函数名(参数表) RETURN 数据类型 IS [ 说明部分 ] BEGIN 顺序语句 ; END FUNCTION 函数名; --函数首 -- 函数体
注:一般地,函数定义应由两部分组成,即函数首和函数 体,在进程或结构体中不必定义函数首,而在程序包中必 须定义函数首。
【例5-1】程序包中的函数定义实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE packexp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR ; FUNCTION func1 ( a,b,c : REAL ) RETURN REAL ; FUNCTION "*" ( a ,b : INTEGER ) RETURN INTEGER ; FUNCTION as2 (SIGNAL in1 ,in2 : REAL ) RETURN REAL ; END ; PACKAGE BODY packexp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; END;
MOD REM 算术操作符 SLL SRL SLA SRA ROL ROR ** ABS

型 = /=
操作符
功 等于 不等于 小于 大于 小于等于 大于等于 与 或 与非 或非 异或 异或非 非 正 负

操作数数据类型 任何数据类型 任何数据类型 枚举与整数类型,及对应的一维数组 枚举与整数类型,及对应的一维数组 枚举与整数类型,及对应的一维数组 枚举与整数类型,及对应的一维数组 BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC BIT,BOOLEAN,STD_LOGIC 整数 整数
VHDL转换函数:
函数名 程序包: STD_LOGIC_1164 to_stdlogicvector(A) to_bitvector(A) to_stdlogic (A) to_bit(A) 由bit_vector类型的A转换为std_logic_vector 由std_logic _vector转换为bit_vector 由bit转换成std_logic 由std_logic转换成bit 程序包: STD_LOGIC_ARITH conv_std_logic_vector(A, 位长) conv_integer(A) 将整数integer转换成std_logic_vector类型,A是整数 将std_logic_vector转换成整数integer 程序包: STD_LOGIC_UNSIGNED conv_integer(A) 由std_logic_vector转换成integer 功能