集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1083|回复: 2

VHDL学习笔记

[复制链接]
fpga_feixiang 发表于 2019-3-22 15:40:09 | 显示全部楼层 |阅读模式
一、实体:说明主要描述的是一个设计单元的外部特征,即对外的输入/输出接口及一些用于结构体的参数定义。

规则一:建议将VHDL的标识符或基本语句关键词,以大写方式表示;而又设计者添加的内容有小写字母表示。


1、GENERIC类属说明语句
作用:是操作者很容易的改变一个设计实体或一个元件的内部电路的结构和规模。

结构:引到一个类属参量表,在表中提供时间参数及总线宽度等内部信息。

2、PORT端口说明
常用的端口类别:

IN(输入): 仅允许数据流进入端口 用于 时钟输入、控制输入、单项数据输入。

OUT(输出):  仅允许数据流流出端口 用于终端计数一类的输出,不能用于反馈。

BUFFER(缓冲):主要用于内部的反馈

INOUT(双向): 也可以用于内部的反馈


二、结构体
用来描述设计的内部结构和逻辑功能。

基本结构

ARCHITECTURE<J结构体名>OF<实体名> IS

[结构体说明部分]

BEGIN

<并行处理语句>

END  [ARCHTECTURE<结构体名>];


其中ARCHITECTURE、BEGIN、END  等称为保留字

结构体说明部分:用于对结构体需要使用的信号、常数、数据类型和函数进行定义和说明。

功能描述语句:  描述了结构体的主要功能。


三、配置
功能:把特定的结构体关联到一个确定的实体,是为较大的系统设计提供管理和工程组织服务的。在仿真一个实体时可以利用配置进行不同结构体的对比试验。

基本结构:

CONFIGURATION 配置名 OF 实体名 IS

FOR 选配结构体名

END FOR;

END:配置名;

四、库
定义:用于存放定义好的数据单元、子程序等设计单元的集合。

1、VHDL的5种库

IEEE库:

STD库:

ASIC库:

WORK库:用于存放设计者描述的VHDL语句。

用户定义库:将自己使用的包集合和实体等汇集在一起,定义成的一个库。

上述5种库中,除了STD库和WORK库外,其他库均属于资源库使用的时候都需要进行说明。


说明的方法:

LIBRARY 库名;  --说明使用什么库

USE   包集合名; --说明使用库中哪一个包集合及包集合中的项目等。

2、VHDL程序包

功能:主要用来存放各个设计实体能共享的数据类型、子程序说明、属性说明和元件说明等部分。

程序包有两个部分构成:

程序包首:对数据类型、子程序、常量、元件、属性和属性指定等进行说明。

程序包体:由包首指定的过程和函数的程序体组成,用来规定程序包的实际功能。


使用这个程序包的所有定义,可用USE语句访问此程序包

LIBRARY WORK;

USE WORK.PAC1.ALL     ---访问程序包


3、常用的预定义的程序包




VHDL语言要素
即编程语句的基本单元

一、VHDL语法规则
这里主要介绍其特有的语法规则

1、数学表示
整数:都是十进制的数  5,678,0,156E2(=15600),45_234_287(=45234287)   下划线只是为了提高数字的可读性,并没有其他影响。

实数:都是十进制的数 ,但是必须有小数点。

以数值基数表示的数字:     10#170# --(十进制数表示,等于170)

2#1111_1110# --(二进制数表示,等于254)

注:上面省略了最后一位,用于表示十进制数表示的指数部分当为0时,可以进行省略

注:实数一般不可综合实现,物理量(带有单位的)一般不可综合实现

2、字符串型文字
字符放在单引号中 字符串放在双引号中。

3、数位字符串
B“1_1101_1110”

O”34”

X”1AB”

4、标识符
用来定义常数、端口、变量、信号、子程序、或参数的名字。规则通C语言。

5、下标名
即表示数组中的某一个数。

二、VHDL数据对象
有三种:常量(constant)、变量(VARIBLE)和信号(SIGNAL)

前两者对应传统的机器语言,信号具有更多的硬件特征

1、常量(CONSTANT)
一般用来代表数字电路中的电源、地、恒等逻辑值等常数。

常量的使用范围取决于它被定义的位置。即在程序包中定义可在整个程序包中使用,在实体中定义,有效范围为这个实体定义的所有结构体;定义在结构体中只能用于该结构体;定义在结构体中某一单元如一个进程则只能用在这个进程当中。

2、变量
常用在实现某些算法的赋值语句当中,只是个局部变量,只能在进程和子程序中使用。(是一种理想化的数据传输,不存在任何的延时行为)

3、信号
表示一条硬件连接线:如输入输出端口,描述硬件系统的基本数据对象。

4、三者的比较
三、数据类型
1、标注数据类型
(1)、Integer(整形),取值范围-(2^31-1)~(2^31-1)

(2)、Real,取值范围-1.0E+38~+1.0E+38,综合工具常常不支持

(3)、Bit(位),只取0或1,描述信号取值

(4)、Bit_Vector(位矢量),每位只取两个值

(5)、Boolean(布尔量),TRUE和FALSE

(6)、Character(字符)

(7)、String

(8)、Time

(9)、Natural(自然数)和Positive(正整数)  0~(2^31-1)

(10)、Severity Level(错误等级):Note,Warning,Error,Failure。

2、标准逻辑类型
(1)STD_LOGIC类型

‘U’——初始值

‘X’——不定态

‘0’——强制0

‘1’——强制1

‘Z’——高阻态

‘W’——弱信号不定态

‘L’——弱信号0

‘H’——弱信号1

‘_’——不可能情况(可忽略值)

(2)STD_LOGIC_VECTOR

3、用户自定义数据类型
(1)、枚举(Enumerated)

TYPE STD_LOGIC IS (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’_’);

(2)数组(ARRAY)

TYPE 数据类型名IS ARRAY (范围) OF 元素类型名;

(3)子类型(SYBTYPE) 用来定义含有限制条件的数据类型

SYBTYPE 类型名 IS 数据类型名【约束范围】

4、数据类型的转换
三、操作符
注意点 :

(1)、&并置操作符 前后的数组长度应该一致

(2)、**乘方 左边可以是整数或浮点数 但右边一定是整数

(3)、操作符能够产生逻辑电路,但就效率而言使用常数或简单的一位数据类型能够产生较为紧凑的电路。

顺序语句
一、赋值语句
变量赋值 变量名:=表达式

信号赋值 信号名<=信号变量表达式

二、IF语句
三、CASE语句
四、LOOP语句
1、FOR LOOP循环 用于规定重复次数的情况

[标号]: FOR 循环变量 IN 离散范围 LOOP

顺序处理语句;

END  LOOP  [标号];

2、WHILE  LOOP循环

[标号]:WHILE 循环条件 LOOP

     顺序处理语句;

END  LOOP   [标号] ;

五、跳出循环语句
NEXT   [循环标号]   [WHEN 条件];

       有条件或者无条件的结束当前循环开始下一次循环

EXIT    [标号]  [WHEN 条件];

当条件为真时跳出LOOP至程序标号处。如果后面什么都没有,则无条件的跳出,继续执行后继语句。

六、RETRUN语句
只能用在函数和过程当中,用来结束当前最内层的函数或过程体的执行。

RETURN 表达式;     --只能用在函数体中,必须返回一个值

RETURN ; ---只能用在过程体中。

七、NULL语句
常用在CASE语句中 OTHERS的后面,即其他的情况什么都不做。

并行语句
特点:在结构体中的执行时同步执行的。并发语句之间可以可以有信息往来,也可以是相互独立、互不相关、异步执行的(如多时钟情况)。

一、并行信号赋值语句
1、并发信号赋值语句
实际上是一个进程的缩写,当信号赋值符号“<=”右边的信号发生任何变化时,该信号赋值语句就执行一次。

q<=tmp3;

这里tmp3就相当于进程括号中的敏感信号。当期发生变化时就开始执行该语句。

2、条件信号赋值

根据不同的条件,将不同的值赋给信号

信号名<=表达式1 WHEN 条件 ELSE

表达式2 WHEN 条件 ELSE

表达式3 WHEN 条件 ELSE

表达式4 WHEN 条件 ELSE

。。。。。。。。。

3、选择信号赋值
WITH  条件表达式 SELECT

目标信号<=表达式1  WHEN 选择条件1,

表达式2 WHEN 选择条件2,

表达式3 WHEN 选择条件3,

表达式4 WHEN 选择条件4,

。。。。。。。。。。。;

二、进程(PROCESS)语句
特点:(1)一个结构体中的多个进程可以并发的执行,并可存取结构体或实体所定义的信号。

(2)进程中所有语句都是顺序执行的

(3)必须包含一个显示的敏感信号表或者一个WAIT语句。

(4)进程之间的通信是通过信号量传递实现。

[进程标号:]   PROCESS    [(敏感信号参数表)]

[进程说明部分]

BEGIN

顺序描述语句

END PROCESS [进程标号];

进程说明部分用于定义该进程所需要的变量、数据类型、属性、子程序等,但不能定义信号及共享变量

进程的激活必须有敏感信号的变化或者相应的WAIT语句


WAIT:

WAIT;                       ——永远挂起,无限等待

WAIT ON 敏感信号表;   ——一旦变化,进程启动

WAIT UNTIL 条件表达式;   ——条件等待

WAIT FOR 时间表达式;   ——

子程序
与进程的区别:进程可以从本结构体的其他模块或进程结构体中,直接读取信号或者向信号赋值而子程序不行。

特点:1、一般在程序包中调用,这样可以在几个不同的设计来调用(可在结构体、进程、及程序包中调用)

2、可重载,几个同名,但返回值类型不同

3、过程可返回多个值,而函数只能返回一个值。

4、函数所有参数为输入参数,过程有输入参数、输出参数、还有双向参数。

一、过程
包括过程首和过程体两部分:  首定义过程接口,体描述具体算法。

PROCEDURE <过程名>

(参数名[,参数名。。。]:[端口模式]数据类型;

  参数名[,参数名。。。]:[端口模式]数据类型;

。。。。。。。。。) ——定义过程首

PROCEDURE<过程名>

(参数名[,参数名。。。]:[端口模式]数据类型;

  参数名[,参数名。。。]:[端口模式]数据类型;

。。。。。。。。。) IS

[过程说明部分;]

BEGIN

<过程语句部分>;

END [PROCEDURE] <过程名>; ——定义过程体

二、函数
在程序包中定义一定要有函数首,在进程或结构体中定义不必定义函数首

FUCTION 函数名 输入参数表 RETURN 数据类型; ——函数首

FUCTION 函数名 输入参数表 RETURN 数据类型 IS     ——函数体

[说明语句];

BEGIN

顺序语句;

RETURN [返回变量名]; ——函数返回值

END FUCTION 函数名;

注:函数参数的数据类型只能包。括常量和信号,参数端口模式只能是IN ,因此参数的端口模式可以省略。

VHDL语言描述风格
VHDL的结构体具有描述整个设计实体的逻辑功能

对于所想要实现的电路可以有不同的语句表达式,这种不同的描述方式或者说建模方法,成为描述风格

一、行为描述
只描述了所希望的硬件电路的功能,没有直接指明或者描述这些行为的电路结构。

这种方法是VHDL语言的核心是区别于RTL级硬件语言的Verilog 的根本区别。


特点:大量使用算术运算、关系运算、惯性延时、传输延时等VHDL语句。

二、数据流描述
也称为寄存器传输(RTL)描述方式。

特点:主要使用AND OR等。

三、结构化描述
描述建模步骤:

(1)原件说明,用于说明原件的调用,并描述该元件的接口

(2)原件例化,指定原件的安放位置,并确定与其他元件放置的连线关系

(3)原件配置,指定原件所用的设计实体

1、原件描述语句: COMPONENT

GENERIC 用于该元件的可变参数的代入或赋值。

2、结构例化语句

该语句将现成的元件端口号映射成高层次设计电路中的信号。

Instance_name : component_name

PORT MAP

(

Component_port=> connect_port,

_component_port=>connect_port

);

3、编写结构描述程序的主要步骤

(1)绘制框图

(2)原件说明

(3)信号说明

(4)元件例化

(5)添加必要的框架。

有限状态机电路设计
状态机是按照预先设定的状态顺序一次运行的,是纯硬件的顺序控制电路

一、有限状态机概述组合
有限状态机是指输出取决于输入信号和当前所处状态的时序逻辑电路

有限状态机可以认为是组合逻辑和寄存器逻辑的一种组合。其中,寄存器逻辑的功能是存储有限状态机的的内部状态;而组很逻辑又可分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。

Moore型:输出仅与当前状态有关

Mealy型:输出与当前状态和输入信号均有关系。

二、VHDL描述模式
1、实体部分

输入、输出端口

2、说明部分

就是两句话

3、状态转换进程

根据外部输入的控制信号和当前状态的状态值确定下一状态的去向

4、时序控制进程

说明状态何时转换的进程

5、辅助进程
zhangyukun 发表于 2019-3-23 09:47:08 | 显示全部楼层
VHDL学习笔记
zxopenhl 发表于 2019-3-23 13:43:16 | 显示全部楼层
实体:说明主要描述的是一个设计单元的外部特征,即对外的输入/输出接口及一些用于结构体的参数定义。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-24 00:18 , Processed in 0.069849 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表