当前位置: 代码迷 >> 综合 >> VHDL
  详细解决方案

VHDL

热度:37   发布时间:2023-09-15 07:48:37.0

一、VHDL简介

VHDL

VHDL(Very High Speed Hardware Description Language)超高速硬件描述语言。VHDL是工业标准的文本格式语言,支持仿真和综合,是一种并发执行的语言。VHDL支持结构化设计和TOP-DOWN设计方法。其描述与工艺无关,支持多风格的描述方法。

VHDL的历史:

  • 1982年,诞生于美国国防部赞助的VHSIC(Very High Speed Integrated Circuit)项目。
  • 1987年底,VHDL被IEEE和美国国防部确认无标准硬件描述语言,即IEEE-1076(简称87版)
  • 1993年,IEEE对VHDL进行了修订,共不了新版本的VHDL,即IEEE标准的1076-1993(1164)版
  • 1996年,IEEE-1076.3成为VHDL综合标准。

VHDL的基本设计单元

  1. Library和Package(库和程序包)
    --库主要存放已经编译过的实体、结构体、程序包和配置;
    --程序包主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明、元件说明等部分。
  2. Entity(实体)--用来说明模型的外部特征
  3. Architecture(结构体/构造体)--来定义模型的功能
  4. Configuration(配置)--将实体和它的结构体联系起来

<center>
<img src="./assert/VHDL的基本设计单元.jpg">
<p>图1.VHDL的基本设计单元</p>
</center>

VHDL基本设计单元(例子)

例:用VHDL语言设计一个2选1的数据选择器

--实体声明
entity mux21 is
port(a,b:in bit;--输入-数据(bit类型)s:in bit;--输入-选择信号(bit类型)y:out bit--输出(bit类型));
end entity mux21;
--结构体(实体内部逻辑)
architecture one of mux21 is
signal d,e:bit;--临时中间变量
begin
d<=a and (not s);    --左边三行可以用下面的语句代替。
e<= b and s;          --y<= a when s=’0’ else
y<= d or e;           -- b;
end architecture one;

二、VHDL结构

库和程序包


  • 库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入某个“库”内才可以被其他实体共享。库的说明总是放在设计单元的最前面,表示该库资源对以下的设计单元开放。库语句格式如下:
    LIBRARY 库名 ;
    常用的库有IEEE库、STD库和WORK库:

    • IEEE库:是VHDL设计中最常用的资源库,包含IEEE标准的STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD以及其他一些支持工业标准的程序包。其中最重要和最常用的是STD_LOGIC_1164程序包,大部分程序都是以此程序包中设定的标准为设计基础。
    • STD库:是VHDL的标准库,VHDL在编译过程中会自动调用这个库,所以使用时不需要用语句另外说明。
    • WORK库:是用户在进行VHDL设计时的现行工作库,用户的设计成果将自动保存在这个库中,是用户自己的仓库,同STD库一样,使用该库不需要任何说明。
  • 程序包
    程序包是用VHDL语言编写的一段程序,可以供其他设计单元调用和共享,相当于公用的“工具箱”,各种数据类型、子程序等一旦放入了程序包,就成为共享的“工具”,类似于C语言的头文件,使用它可以减少代码的输入量,使程序结构清晰。在一个设计中,实体部分所定义的数据类型、常量和子程序可以在相应的结构体中使用,但在一个实体的声明部分和结构体部分中定义的数据类型、常量及子程序却不能被其他设计单元使用。因此,程序包的作用是可以使一组数据类型、常量和子程序能够被多个设计单元使用。
    程序包分为包头和包体两部分。包头(也称程序包说明)是对包中使用的数据类型、元件、函数和子程序进行定义,其形式与实体定义类似。包体规定了程序包的实际功能,存放函数和过程的程序体,而且还允许建立内部的子程序、内部变量和数据类型。包头、包体均以关键字PACKAGE开头。程序包格式如下。

    --包头格式:
    PACKAGE 程序包名 IS
    [包头说明语句]
    END 程序包名;