2024年3月23日发(作者:)

VHDL总结(1)

——Component, Package, Function 和 Procedure比较

1.Component的构架如下:

LIBRARY ieee;

USE _logic_;

Entity component_name IS

(declarations)

END component_name

ARCHITECTURE architecture_name OF component_name IS

(COMPONENT, FUNCTION and PROCEDURE descriptions)

BEGIN

END architecture_name;

2.Package 的构架如下:

LIBRARY ieee;

USE _logic_;

PACKAGE package_name IS

(declarations)以及变量和常数的定义;

END package_name

PACKAGE BODY package_name IS

(FUNCTION and PROCEDURE descriptions)

END package_name;

3.Function的构架如下:

FUNCTION function_name [] RETURN data_type IS

[declarations]

BEGIN

(sequential statements)

END function_name;

4.Procedure的构架如下:

PROCEDURE procedure_name [] IS

[declarations]

BEGIN

(sequential statements)

END procedure_name;

5.Component和Package都由Library库调用、头文件和实体文件组成,它们都

可以单独成为一个文件。而Function和Procedure都只由一个文件组成,不

能成为单独的一个文件,必须放置在Component或Package中才能成为一个

VHDL文件。Package若仅仅包含变量及常数的定义或Component的声明,

则可以不要实体文件。而Component一般情况下都要包含实体文件,即使仅

1

仅包含变量及常数的定义,也要在Component的实体文件中进行。Component

和Package分别以Entity和Package的形式出现在Library文件中,而Library

文件中也只包含Entity和Package形式的文件。

6.Component头文件部分进行Component本身的端口声明以及各种变量和常数

的定义,而Package头文件的部分进行Component, Function以及Procedure

的声明以及各种变量和常数的定义,这些声明和定义的作用域是包含了

Package所在库文件的文件范围内。Component实体文件部分进行Component

本身的功能定义,而Package的实体部分进行Function或Procedure功能定义

及变量和常数的定义,这些定义的作用域是在Package的实体中所定义的

Function和Procedure文件。Component中包含Function或Procedure时将它

们放置在实体文件的Architecture语句和Begin之间。

7.Package中包含Component时通过在Package的头文件中对一个或多个

Component进行声明即可; Component中包含Package时通过调用Package所

在的Library来调用Package,而不是通过声明Package文件的方法来调用。

Component A中调用别的Component B模块时,通过在Component A的

PackageArchitecture语句和Begin语句之间进行Component B的声明来调用;

不能调用别的Package模块。

8.自己开发的Package在Modelsim中编译时被默认被编译为work库文件目录

下的一个Package。

9.Package和Component中可以进行多个Function或Procedure的定义。Package

中不能进行Component的定义,Component中也不能包含Package定义部分。

10. Component和Package中可以包含Function和Procedure,但Function和

Procedure中不能包含Component和Package文件。

11. Entity中也可以进行Constant和Signal的声明,此时这个Constant是全

局可见的,即对于包含这个Entity的所有Architectures都是可见的。不过这

个不常用,一般全局变量或常数的声明是在Package中进行的。

12. Function和Package中不能有时序电路,只能是组合逻辑电路。因为这两

种模块中不能包含Process和Wait语句。

2