一、简介
一个VHDL语言通常包括实体(entity),结构体(architecture),配置(configuration),包(package),库(library)。
VHDL核心代码包括两部分:
1、实体描述部分;
2、结构体描述部分
一个·设计单元必须包括实体部分和结构体部分。
LIBRARY library_name ; --调用库
USE _library_name.package_name.ALL;--_library_name.package_name.ALL是库中的文件
ENTITY entity_name IS --实体定义
GENERIC --类属性定义
(
_parameter_name : string := _default_value;
_parameter_name : integer := _default_value;
);
PORT --端口定义
(
_inpout_name,_input_name : IN STD_LOGIC;
_input_vector_name : IN STD_LOGIC_VECTOR(_high DOWEN TO _LOW);
);
END entity_name;
ARCHITECTURE architecture_name OF entity_name IS --结构体定义
SIGNAL _signal_name : STD_LOGIC;
SIGNAL _signal_name : STD_LOGIC;
BEGIN
--...
END architecture_name;
二、实体entity
描述一个设计单元的外部特征,简单说是描述硬件设计的外部引脚。
包括类属性语句(generic)和端口语句(port)。
1、类属性语句(GENERIC)(可选)
定义静态参数,如时间参数,总线宽度。
2、端口(PORT)
PORT(端口名 :端口模式 数据类型);
端口模式:IN
OUT
BUFFER 可以流出实体和作为内部反馈,不可作为双向端口。
INOUT 可以流入流出,可以作为内部反馈。
三、结构体architecture
结构体包括说明语句和功能描述语句
说明语句:信号,常数,数据类型,函数的定义;
功能描述:主体部分,具体描述结构体功能,位于begin,end之间。
并发处理语句包括赋值语句,进程语句,元件例化,块语句,子程序等。
四、配置configuration
可以把特定的结构体关联到一个确定的实体。比如定义了一个实体,该实体有三个结构体(a,b,c),每个结构体都有特定个功能,最后配置语句可以选择指定一个结构体(例如a)为该实体的结构体。
CONFIGURATION configuration_name OF entity_name IS --configuration_name为配置名
FOR architecture_name --architecture_name为要配置的结构体名
END FOR;
END configuration_name;
五、库
1、VHDL库
包括IEEE库,STD库,ASIC矢量库,WORK 库,用户自定义库。
LIBRARY library_name;--library_name为库名
USE _library_name.package_name.item_name;--library_name.package_name.item_name为包集合名(库名.包名.项目名)
2、程序包
用来存放各个设计实体都可以共享的数据类型,子程序说明,属性说明,元件说明。
程序包包括两部分,程序包首和程序包体。
程序包首:说明数据类型,子程序,常量,原件,属性,属性指定。
程序包体:规定实际功能。
程序包包首定义:
PACKAGE pac1 IS --程序包包首定义
TYPE BYTE IS RANGE 0 TO 255; --定义数据类型BYTE
SUBTYPE NIBBLE IS BYTE RANGE 0 TO 15; --定义子类型NIBBLE
CONSTANT BYTE_FF:BYTE := 255; --定义常数BYTE_FF
SIGNAL ADDEND:NIBBLE; --定义信号ADDEND
COMPONENT BYTE_ADDER --定义元件BYTE_ADDER
PORT(A,B IN BYTE);
END COMPONENT;
FUNCTION MY_FUNCTION (A: IN BYTE) RETURN BYTE; --定义函数MY_FUNCTION
END pac1;
END pac1;
程序包包体定义:
PACKAGE BODY pac1 IS
...
END pac1;
3、预定的程序包
STD_LOGIC_1164:最常用的数据包,包含一些数据类型,子类型,和函数的定义。