随着半导体技术的发展,数字电路已经由中小规模的集成电路向可编程逻辑器件PLD及专用集成电路ASIC转变。        
数字电路的设计由传统的“自下而上”(由底层电路电子系统)的设计方法,改变为以EDA工具为设计平台的“自上而下” (由电子系统底层硬件电路)的设计方式。
将电子系统的高层行为描述转换到低层硬件描述和确定的物理实现,使设计人员无须直接面对低层电路,不必了解具体的逻辑器件。
硬件描述语言(Hardware Description Language)是一种用于设计硬件电子系统的计算机语言,用软件编程的方式在EDA工具中建立电路模型。
image.png
VHDL——Very High Speed Integrated Circuit HDL
Verilog HDL——Verilog Hardware Description Language
1、 VHDL语言基础
VHDL —— 超高速硬件描述语言,VHDL的主要构件:
image.png
(1) 实体
功能:实现设计单元的端口说明。
image.png
[例]   2 输入与门的实体说明。
image.png
(2)结构体
功能:描述设计单元内部结构和行为,建立输入输出关系。
语法结构:
image.png
(3)库、程序包和配置
1) 库
功能:存储和放置设计单元(元件、程序包等)。
image.png
库说明语句格式:
LIBRARY  库名;
2) 程序包
功能:存放各设计模块共享的数据类型、常数、子程序等。
语法格式:
USE  LIBRARY  库名.程序包名.项目名;
3) 配置
功能:—— 为实体指定所要配置的结构体
语法格式:
CONFIGURATION  配置名 OF  实体名  IS
     FOR  被选结构体名
     END  FOR;
END  配置名;
2、VHDL的数据对象和数据类型
VHDL数据对象:
1)常量
不变的量,定义时进行赋值,在整个程序中保持不变。
语法格式:
CONSTANT  常量名:数据类型:=表达式;
2)变量
语法格式:
VARIABLE  变量名:数据类型[:=表达式];
3)信号
定义电路中的连线和元件的端口的数据对象。
语法格式:
SIGNAL  信号名:数据类型;
VHDL数据类型:
1)整数数据类型(INTEGER)取值范围:-2147483547~ 2147483546
2)实数数据类型(REAL)取值范围:-1.0E38~ 1.0E38
3)位数据类型(BIT)属于枚举数据类型,取值为‘1’和‘0’。
4)位矢量数据类型(BIT_VECTOR)用双引号括起来的一组位数据,如“10011”,通常用来表示数据总线。
5)布尔数据类型(BOOLEAN)属于枚举数据类型,取值为‘TRUE’和‘FALSE’。常用来表示关系运算和关系运算结果。
6)字符数据类型(CHARACTER)ASCII码的128个字符,书写时用单引号,区分大小写,如‘a’、‘A’等。
7)字符串数据类型(STRING)双引号括起来的一串字符,如“abgh”。
8)STD_LOGIC数据类型
属于枚举数据类型,取值有以下九种:
image.png
9)STD_LOGIC_VECTOR数据类型
用双引号括起来的一组STD_LOGIC数据,如“101011”,通常用来表示数据总线。
注意:使用STD_LOGIC、 STD_LOGIC_VECTOR数据类型时必须在库、程序包说明区进行说明。
3、VHDL的操作符和表达式
逻辑操作符和逻辑表达式:
image.png
算术操作符和算术表达式:
image.png
关系操作符和关系表达式:
image.png
并置操作符和并置表达式:
image.png
4、 VHDL基本语句
顺序描述语句:
执行顺序与书写顺序一致,只用于进程和子程序中。
1)顺序信号赋值语句
格式:目标信号<=表达式;  例如:Y<=A AND B;
2)变量赋值语句
格式:目的变量:=表达式;  例如:Y:=A + B ;
3)IF语句(条件控制语句)
格式一:
IF 条件表达式 THEN
     顺序语句;
END IF;
格式二:
IF 条件表达式 THEN
     顺序语句;
ELSE
     顺序语句;
END IF;
格式三:
IF 条件表达式 THEN
     顺序语句;
ELSIF条件表达式 THEN
     顺序语句;
……
ELSE
     顺序语句;
END IF;
4)CASE语句
语法格式:
CASE 表达式 IS
     WHEN 选择值=>顺序语句;
     WHEN 选择值=>顺序语句;
      …
     [WHEN OTHERS=>顺序语句;]
END CASE;
“选择值”的具体表示形式有以下四种:
WHEN 值=>顺序语句;
WHEN 值|值|…|值=>顺序语句;
WHEN 值 TO 值=>顺序语句;
WHEN OTHERS=>顺序语句;
5)LOOP语句
无条件LOOP语句语法格式:
[LOOP标号:]LOOP
      顺序语句;
END LOOP [LOOP标号];
FOR…LOOP语句语法格式:
[LOOP标号:] FOR 循环变量 IN 循环次数范围 LOOP
      顺序语句;
END LOOP [LOOP标号] ;
WHILE…LOOP语句语法格式:
[LOOP标号:] WHILE 条件表达式 LOOP
      顺序语句;
END LOOP [LOOP标号];
6)NEXT语句
格式:NEXT [WHEN  条件];
7)EXIT语句
格式:EXIT [标号][WHEN  条件];
8)子程序和子程序调用语句
函数定义语句的语法格式:
FOUNCTION <函数名>(参数表) RETURN <数据类型> IS
BEGIN
     顺序语句;
     RETURN [返回变量名];
END <函数名>;
函数调用语句的语法格式:
函数名(实际参数表);
函数的参数只能是方式为IN的输入信号,函数只能有一个返回值。
过程定义语句的语法格式:
PROCEDURE <过程名>(参数表) IS
BEGIN
     顺序语句;
END <过程名>;
过程调用语句的语法格式:
过程名(实际参数表);
过程的参数可以为IN、OUT和INOUT方式,在进行参数说明时除了说明其名称、数据类型,还要说明其端口方式。
并行语句:当满足条件时,多个语句同时被执行,与书写 顺序无关。
1)BLOCK语句
功能:将一大段并行语句划分为若干子模块,提 高了程序的可读性。
BLOCK语句的语法格式:
[块标号:]BLOCK[(块保护表达式)]
[块说明语句;]
BEGIN
并行语句;
END BLOCK[块标号];
2)进程语句(PROCESS)
进程语句的语法格式:
[进程名:] PROCESS (敏感信号表)
[说明语句;]
BEGIN
顺序语句;
END PROCESS [进程名];
3)并行信号赋值语句
简单并行信号赋值语句格式:
目标信号<=表达式;
条件信号赋值语句格式:
目标信号 <= 表达式1 when 赋值条件1 else
                       表达式1 when 赋值条件1 else
                        ……
                       表达式n ;
选择信号赋值语句格式:
with 选择表达式 select
目标信号 <= 表达式1 when 选择值1,
                       表达式2 when 选择值2,  
                        ……
                       表达式n when 选择值n;  
4)并行过程调用语句
并行过程调用语句与顺序过程调用语句形式基本相同,只是出现的位置不同。
例:用并行过程调用语句调用过程swap
ARCHITECTURE …
BEGIN
swap(datain,1,2);
……
END;