用VHDL描述排序功能,将一个数组的元素按从小到大的顺序排列,引入了过程(PROCEDURE)调用、自定义程序包、数据类型(整型数组)。
PACKAGE data_type IS --定义程序包
SUBTYPE data_element IS INTEGER RANGE 0 TO 3; --定义数据类型
TYPE data_array IS array(1 TO 3) OF data_element;
END data_type;
USE WORK.data_type.ALL; --打开以上建立在当前工作库的程序包data_type
ENTITY sort IS
PORT(in_array: IN data_array;
out_array: OUT data_array);
END ENTITY;
ARCHITECTURE behave OF sort IS
BEGIN
PROCESS(in_array) --进程开始,设data_type为敏感信号
PROCEDURE swap(data: INOUT data_array; --swap的形参名为data、low、high
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; --过程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 behave;
在进程中三次调用过程,依次把相邻的两个数按大小排序。