zoukankan      html  css  js  c++  java
  • 【FPGA】库、包和子程序 过程 函数

    库和包

    • 一组相关的过程和函数可以汇集在一起,组成一个包;

    • 一个包可以在一些VHDL模型中共享;

    • 一个包可以包含用户定义的数据类型和约束;

    • 库是包的集合; 包和库可视为函数、过程和数据类型的容器;

    • 包的另外一个重要特征是可包含不同用户定义的元件。

     

    Library(库)

    库是经编译后的数据的集合,包含一个或多个包

    库的分类

    设计库: STD库 ;Work库

    资源库: IEEE库 ;Vital库(面向ASIC的VHDL模型基准库) ;用户自定义库

    package(包)

    包的主要用途是实现整个设计工程中信息的共享。

    包的组成

      包的声明

        类型声明

        子程序声明

      包体

        子程序定义

    VHDL 的标准库(std)有两个内嵌包

      标准包

      TEXTIO


    (1) IEEE库

    VHDL设计中最为常用的库。

      4个程序包:std_logic_1164,std_ logic_ arith, std_ logic_ signed和std_ logic_ unsigned。

    std_logic_1164程序包:包含std_logic、std_logic_vector等类型定义及其相关逻辑类运算子程序定义。

    std_logic_arith程序包:包含std_logic类型数据的算术运算子程序定义。(如+-*移位比较等)

    std_logic_signed程序包:std_logic_vector类型的符号数算术运算子程序定义。

    std_logic_unsigned程序包: std_logic_vector类型的无符号数算术运算子程序定义。

    使用这4个程序包必须在设计实体前显式表达出来.

    library ieee;
    
    use ieee.std_logic_1164.all;
    
    use ieee.std_logic_unsigned.all;

    (2) std库

    std库是VHDL语言的标准库.库中定义了standard和textio两个标准程序包.

    standard程序包中定义了VHDL的基本的数据类型.

      用户在程序中可以随时调用standard包中的内容,不需要作任何说明.

    textio程序包中定义了对文本文件的读和写控制的数据类型和子程序.

      用户在程序中调用textio程序包中的内容时,需要用use语句加以说明.

    library std;
    
    use std.textio.all;

    (3)work库

    work库是现行的作业库,设计者所描述的VHDL语句经过编译后在缺省状态下将全部存放在work库中.

    当使用该库时,不需要作任何说明.

    但使用该库中的程序包,需要用USE语句进行说明.

    自定义程序包

    程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、常数、子程序说明和元件说明等部分。

      设计者使用时只要用USE语句进行说明即可。

    程序包由两部分组成:

      程序包首和程序包体。

    程序包结构中,程序包体并非必须的。程序包首可以独立定义和使用。

    一个完整的程序包中,程序包首名和程序包体名是同一个名字.

    1.程序包首

    格式:

    PACKAGE   程序包名 IS
           程序包首说明语句
    END [PACKAGE] 程序包名;

    程序包首说明部分包括程序包中的数据类型、信号、常量、子程序及元件说明。

    这些说明是公用的,可供外部引用。

    例5-38:

      PACKAGE pacl IS
        type byte is range 0 to 255subtype nibble is byte  range 0 to 15;
        constant byte_ff: byte:=255;
        signal addend: nibble;
        component  byte_adder is
         port(a,b:in byte;
              c:out byte;
              overflow:out boolean);
           end component;
     function my_function(a: byte)return byte;
        end  pacl;

    2.程序包体

    程序包体格式如下:

    package  body  程序包名   IS
      程序包体说明语句及包体内容
    end  [package  body] 程序包名;

    程序包体规定子程序的实际功能,存放程序包首中说明的子程序.这些内容是专用的,不能被其他设计单元引用.

    如果程序包首中没有子程序的说明,则程序包体可以省去。

    程序包体说明部分可以是USE语句,数据类型说明、子类型说明、子程序定义、子程序体及常数说明。

    包体

    包体用来存储函数和过程的定义或实现。

    包体通常和包声明是联系在一起的。

    主要包括子程序的实现代码。

     

     

    工作库 包含一个名为my_pack的包;

    有一个名为 myadd 声明在包中;

    包体是可选的. 元件 myadd 在另外一个vhd中实现.

    如下图:

    Myadd.vhd的实现

    一个自定义的库

    库名mylib

    一般库名设置为库文件夹名或者文件名

    包: mypack

    库文件需要添加到当前工程,实质库为work库,库名不重要 应用

     

     

     

    子程序

    类似于其他语言中的子程序

    可使代码重复利用,不用重写

    每一次调用生成相对于的一个电路

    与普通软件中子程序调用的区别:

    普通软件子程序调用增加处理时间;

      VHDL中每调用一次子程序,其综合后都将对应一个相应的电路模块。子程序调用次数与综合后的电路规模成正比。

    设计中应严格控制子程序调用次数。

    子程序的类型:

    (1)函数(Function)

    (2)过程(Procedure)

    类似于其他语言中的子程序

    可使代码重复利用,不用重写

    每一次调用生成相对于的一个电路

    VHDL提供函数和过程

      子程序中的VHDL代码是顺序语句,这意味着在子程序中只允许使用顺序语句,并发语句、进程语句等是不允许出现的。

      在子程序中,只能声明变量,不能声明信号。

      在子程序中,不能使用wait语句。

    函数

    产生一个返回值

    参数只能为in模式

    传递的参数在函数内部只能使用不能修改(因为参数为in)

    允许的参数数据类型为 constant或signal,默认constant

    需要一个RETURN 语句

    格式:

    函数特征

    函数由实参调用

    Example:

      rising_edge(enable);

    形参和实参必须匹配.

    形参为constant,则实参可以是variable、signal、constant或表达式;形参为signal,实参要为signal.

    过程

    与函数类似

    参数可以是 in, out, inout 模式

      输入参数(in)的默认数据类型是constant

      输出参数(out)或者inout参数默认数据类型variable

      参数对象可为 constant, variable and signal

    其特征是过程中可以修改参数值(out,inout模式参数)

    不需要RETURN语句

    过程特征

    过程调用参数需要一一对应,形参为constant,实参可以为signal、constant或variable;

    形参若为signal或variable,则实参需对应一致的类型

    作为独立的语句进行调用

    函数和过程

  • 相关阅读:
    Ext.MessageBox.show的用法
    DecimalFormat很强大
    java根据模板导出excel和excel的一些知识
    数组分成若干个数组
    SQL SERVER 创建视图
    java 中怎么根据当前时间得到上周一和上周五的日期
    复选框提交后不合格还在选中状态
    sql语句的学习(2)
    sql语句的学习(1)
    利用LinkedList实现洗牌功能
  • 原文地址:https://www.cnblogs.com/Osea/p/13191907.html
Copyright © 2011-2022 走看看