VHDL硬件描述语言是一种用于电路设计的硬件语言。出现在在80年代的后期,最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种设计语言 。VHDL主要用于描述数字系统的结构,行为,功能和接口。

VHDL语言是用来设计FPGA/PLD硬件的。VHDL语言是基于行为描述的。更加重要的是VHDL语言设计是于硬件电路无关的,它能在任意厂家的FPGA芯片上进行设计。

通常一个完整的VHDL语言包含五个部分,分别是:库,程序包,实体,结构体,配置文件。

实体(ENTITY)

实体的作用是给出实际电路的外部视图(引脚的数目,引脚的作用等),它描述了电路的封装结构。一般一个实体的结构大致如下所示:

ENTITY 实体名 IS[GENERIC(常量名:数据类型:=初始值)];        --中括号内的不是必须的PORT(端口名1:端口输入输出方向 端口数据类型;端口名2:端口输入输出方向 端口数据类型;端口名3:端口输入输出方向 端口数据类型;......端口名n:端口输入输出方向 端口数据类型);
END 实体名;

多个输入输出方向相同以及数据类型相同的端口可以放在同一行进行描述。注意最后一行的端口描述结束没有分号。VHDL语言并不区分大小写,但是习惯是将关键字写作大写,用户定义的使用小写。

端口(PORT)

在VHDL语言里的端口指的就是电路引脚,而非普通软件程序设计语言意义上的进程所拥有的端口。例如:一个2输入与门两个输入引脚,一个输出引脚就是端口。端口语句正如上面实体上定义的一样。

PROT(端口名称:端口输入输出方向 端口数据类型;);

在VHDL语言中,端口输入输出方向有4中,分别是IN,OUT,INOUT,BUFFER。

IN表示端口是用来输入的;

OUT表示端口是用来输出的;

INOUT表示端口是一个双向口;

BUFFER表示端口是一个准双向口。

一个文件只能有一个实体,并且部分编程环境要求文件名与实体名相同。

下面用一个例子来实际体验一下实体。

LIBRARY IEEE;        --在VHDL语言中使用"--"开始一行注释,这一行打开IEEE库
USE IEEE.STD_LOGIC_1164.ALL;            --调用1164程序包
ENTITY and2 ISPORT(in1,in2:IN STD_LOGIC;        --定义两个标准逻辑类型的输入端口out1:OUT STD_LOGIC);       --定义一个标准逻辑类型的输出端口
END and2;

结构体(ARCHITECTURE)

结构体的作用是具体描述一个实体的行为(描述实体所描述的电路的功能),元件以及元件内部的连接关系。一般一个结构体的形式如下:

ARCHITECTURE 结构体名 OF 实体名 IS[声明语句]BEGIN功能描述语句;
END 结构体名;

需要注意的是,在一个结构体内声明的常量,子程序(包括函数和过程)以及元件只能在该结构体内使用。如果希望在别处使用,那么需要将其作为程序包来使用。

下面用结构体来描述上面的2输入与门电路。

ARCHITECTURE behavior_and2 OF and2 IS    --表示该结构体是描述名为and2的实体的功能
BEGINout1 <= in1 AND in2;   --in1与上in2的结果赋值给out1.
END behavior_and2;

结构体和实体,前者用来描述电路的行为(或者说是功能),后者用来描述电路的结构。一个具有实际意义的VHDL程序至少需要结构体和实体才能组成。

库(LIBRARY)

VHDL语言的库和普通的软件程序设计语言的库并没有什么大的区别。一个库的用法正如上面在实体中展示的那样。

LIBRARY 库名;

这样就能在你的VHDL程序中打开这个库了。在VHDL语言中,常用的库主要是IEEE,WORK以及STD这三种库。其中STD是VHDL语言自带的库,默认是打开的。WORK是用户库,让用户自定义自己的库。WORK库也是默认打开的。我们在使用的时候只需要打开IEEE库即可。例如:

LIBRARY IEEE;

程序包(PACKAGE)

通常在我们的VHDL程序中,需要调用的程序包大多数是IEEE库的。一般我们在调用程序包的时候有下面两种形式:

USE 库名.程序包名.项目名;
USE 库名.程序包名.ALL;    --表示使用此程序包的所有内容

这是我们在调用系统或者厂商提供给我们的程序包的方式。硬件开发者本身也是可以定义自己的程序包的。一个程序包可以分为两个部分,程序包首+程序包体,一般定义格式如下:

PACKAGE 程序包名 IS      --程序包首程序包首说明部分;
END 程序包名;
PACKAGE BODY 程序包名 IS        --程序包体程序包体说明部分;
END 程序包名;

在程序包首可以定义用户自定义的数据类型,元件,常量,信号,端口,函数等;程序包体内定义程序包首说明的过程体以及函数体。如果程序包首没有过程和函数,那么可以不定义程序包体。

配置(CONFIGURATION)

配置并不是一个VHDL程序必须的部分,配置语句主要用于给实体从多个结构体中选择一个去描述实体。一般的配置语句格式如下:

CONFIGURATION 配置名 OF 实体名 IS配置说明;
END 配置名;

例如假设我对上面名为and2的电路还有另外一个结构体,现在我需要使用它来描述and2的行为,那么可以使用如下语句

CONFIGURATION cnf OF and2 ISfor behavior_and2_1          --表示使用名为behavior_and2_1的结构体来描述and2实体的行为end behavior_and2_1;
END cnf;

VHDL硬件描述语言(一)——基本结构相关推荐

  1. VHDL硬件描述语言学习笔记(三)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 1.5 VHDL并发语 ...

  2. VHDL硬件描述语言学习笔记(一)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 一.概述 1.1 什么 ...

  3. VHDL硬件描述语言学习笔记(二)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 1.3 VHDL语言要 ...

  4. VHDL硬件描述语言(一)基本概念

    一.EDA技术概述 电子设计自动化(EDA)技术是新一代电子设计工程师及从事电子技术开发和研究人员的必备技能,也是电子技术类专业学生学习的重要内容. EDA以功能强大的计算机为工具,在EDA工具软件平 ...

  5. VHDL硬件描述语言(五)VHDL的顺序语句

    顺序语句和并行语句是VHDL中的两大基本描述语句系列. 一.前言 所谓顺序语句,是指在仿真意义上具有一定顺序性(或者说在逻辑上有先后之分),并不意味着这些语句对于的硬件结构也有相同的顺序性. 所有门电 ...

  6. VHDL硬件描述语言(二)VHDL程序的基本结构

    ​ 一.基本结构 实体说明(entity):描述所设计的系统的外部接口部分 结构体(architecture):描述系统内部的结构和行为 程序包(package):存放各设计模块都能共享的数据类型.常 ...

  7. VHDL硬件描述语言(二)——子程序

    在VHDL语言中,子程序包括函数和过程.一般被定义在程序包里面. 函数 函数在VHDL中可以用于求值,函数的特征是多个输入,一个输出.这和普通的软件程序设计语言没有什么区别.函数定义的形式如下: FU ...

  8. VHDL硬件描述语言(三)VHDL语言要素

    一.文字规则 1.1 标识符 标识符主要用来为端口.信号.变量.子程序.常数和参数等命名. 其规则如下: 有效的字符:包括26个大小写英文字母,数字包括0-9 以及下划线"_" 任 ...

  9. VHDL硬件描述语言(六)VHDL案例

    一.常见电路 1. 分频电路 1)二分频电路 library ieee; use ieee.std_logic_1164.all; entity example isport(clock : in s ...

最新文章

  1. Docker学习(八)-----Docker安装mysql
  2. mysql 常用函数循环_近30个MySQL常用函数,看到就是学到,纯干货收藏!
  3. 【转】你所不知道的HTML head/ 头标签
  4. Ubuntu18.04提示wifi无法连接
  5. opencv 常见细碎问题解决
  6. Java GUI界面
  7. 前端学习(2656):vue2中用v-model实现
  8. 一、第一个注解的 SpringMVC 程序
  9. Pickpocketing.Mifare.pdf
  10. matlab 发动机万有特性,用MATLAB语言绘制发动机万有特性的两种方法
  11. 计算机画布模式,商业模式画布基础知识
  12. 照片打印软件 mac_如何在Mac上轻松打印照片
  13. excel导出动态表头以及二级三级表头,还有数据库动态的数据来源
  14. 【SQLite3+Qt开发】SQLite3简要介绍+在Qt5中的使用步骤
  15. 古剑奇谭二服务器维护,《古剑奇谭网络版》2月28日更新维护公告
  16. Intel中国建厂:中国自主处理器边缘化
  17. 浅谈经典大气辐射传输模型
  18. Java实现crc16校验 附上校验工具对照。解决长数据校验不正确的问题
  19. JavaScript蓝桥杯------学海无涯
  20. 第一次做学年设计 学生成绩管理系统

热门文章

  1. Windows 10彻底关闭windows defender的两种方法
  2. JVM类加载过程和编译器优化
  3. 人事管理系统Hrm1.0
  4. 乐者为王 —— Linus Torvalds
  5. UG模具设计干货!内滑块设计细节
  6. python爬取饿了么外卖商家销量_如何让外卖店铺销量达到9999+
  7. 游戏不能在虚拟机内运行(已解决)
  8. openKylin社区首届咨询委员会会议成功召开!
  9. 马克斯-普朗克计算机科学研究所,GAMES Webinar 2018-38期 | 陈仁杰(德国马克斯普朗克计算机研究所)...
  10. linux系统下文件夹没有权限