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 [
[declarations]
BEGIN
(sequential statements)
END function_name;
4.Procedure的构架如下:
PROCEDURE procedure_name [
[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


发布评论