导图社区 VHDL知识点
总结的VHDL基础知识点,实体结构体语句等等...只有举出的知识导图
编辑于2019-12-12 13:58:06VHDL语言
组成部分
实体(外部引脚)
GENERIC(参数定义语句)
位置
端口说明语句之前
功能
用以设定实体或元件内部电路结构和规模
书写格式
GENERIC(常数名:数据类型:=设定值; 常数名:数据类型:=设定值);
PORT(端口说明)
功能
在电路图上,对应元件符号的外部引脚
是对实体界面的说明,是对端口信号名、数据类型和端口模式的描述
书写格式
PORT(端口信号名,端口信号名......:端口模式 端口类型; 端口信号名,端口信号名.......:端口模式 端口类型);
注意事项
端口名字在实体中是唯一的,不能重复
端口模式说明信号方向
结构体(外部功能)
功能
描述实体内部结构与性能
描述实体的硬件结构
元件间得互联关系
实体所完成的逻辑功能
数据的传输变换
注意事项
当实体中有多个结构体时,结构体名字不能重复
结构体内定义的数据类型,常数,函数只能用于该结构体内部
其他实体或结构体使用时需把参数放进程序包,从该程序包调用
构成(并行语句)
块语句block
进程语句precess(最常用)
并行赋值语句
条件赋值语句
元件例化语句
生成语句
并行过程调用
书写格式
构造图
库LIBRARY
书写格式
LIBRARY 库名;
常用库
IEEE(最常用)
STD_LOGIC_SIGNED
STD_lOGIC_USIGNED
STD_LOGIC_1164
STD_LOGIC
STD_LOGIC_VECTOR
STD-LOGIC_ARITH
STD(不常用)(标准库)
STANDARD
TEXTIO
自动使用,不许调用
WORK用户的现行工作库
VITAL
使用
LIBRARY 库名; USE 库名.程序包.使用项目;或者USE 库名.程序包.ALL
程序包package
程序包定义的数据类型、子程序、元件调用说明等可提供各个实体使用
格式
PACKAGE 程序包名 IS //程序包首 [说明语句] END 程序包名; PACKAGE BODY 程序包名 IS //程序包体 [程序包体说明语句] END 程序包名;
组成
程序包首
可独立使用
收集多个不同信息
数据类型、信号说明等
程序包体
非必须
元件函数必须有的内容安排在包体内
包含内容
常数说明
数据类型说明
元件定义
子程序
常用的标准程序包
STANDRD
定义了若干数据类型,子类型、函数
属于STD库
STD-LOGIC-1164
属于IEEE库
定义了常用的数据类型和函数
STD_LOGIC
STD_LOGIC_VECTOR
使用时在实体前加上调用语句
STD_LOGIC_UNSIGNED STD_LOGIC_SIGNED
属于IEEE 库
重载后用于INTEGER ,STD_LOGIC,STD_LOGIC_VECTOR几种类型数据之间混合运算的运算符
STD_LOGIC_ARITH
属于IEEE库
在1164基础上定义了三个数据类型UNSIGNED SIGNED SMALL_INT及其相关算术运算符和转换函数
用户自定义的程序包
配置
书写
CONFIGURATION 配置名 OF 实体名 IS [配置语句说明] END 配置名
描述风格
行为描述
真值表
描述实体的输出端口与输入端口之间的行文关系
数据流描述
布尔方程
描述实体的数据流向
结构描述
逻辑图
描述实体的硬件是如何构成的 各个元件的连接关系
语法
结构体
类型
块语句BLOCK
书写格式
块标号 BLOCK [块保护表达式] [接口说明语句] //类似实体定义 [类属参数说明语句] BEGIN 并行语句+ END BLOCK 块标号;
使用目的
改善程序的可读性和关闭某些信号
定义的对象
USE语句,子程序,数据类型,子类型,常数,信号及元件
进程语句PROCESS
构成
进程说明部分
定义局部量
包含数据类型、常数、变量、属性、子程序等
不能定义信号共享变量
顺序描述语句
信号赋值语句
向信号赋值
变量赋值语句
以变量的形式存储中间值
进程启动语句
WAIT语句
子程序调用语句
对已经定义的过程和函数进行并参与运算
顺序描述语句
IF CASE LOOP
进程跳出语句
NEXT EXIT(只能用于LOOP的循环体中)
NEXT
终止当前的一次循环开始下次循环
格式
ENXT;
ENXT LOOP 语句标号;
ENXT LOOP 语句标号 WHEN 布尔表达式;
EXIT
直接结束循环
格式
EXIT;
EXIT LOPP 语句标号;
EXIT LOOP 语句标号 WHEN 布尔表达式;
敏感信号参数表
特点
可以有多个precess结构
进程都是并行的,但内部的语句是按顺序执行的
任意敏感参量变化PROCESS都被激活
无限循环语句
只有两种状态
执行状态
遇到END是自动返回到起始语句
等待状态
无敏感信号变化时,在等待状态,一旦信号发生变化,进入执行状态
只允许一个时钟信号的同步时序逻辑
执行状态和运行时间与外部因素无关
由敏感信号的变化启动如果没有敏感信号,必须有一个显式的WAIT语句来激励
语句格式
[进程名 :] PROCESS [(敏感信号表)][IS] [进程说明部分] BEGIN 顺序描述语句 END PROCESS [进程标号];
元件例化语句
子程序语句SUBPROGRAM
定义
在主程序调用它之后能将处理结果返回到主程序的程序模块 利用顺序语句定义和完成算法
类型
函数
书写格式
FUNCTION 函数名 (参数.......)RETURN 数据类型名 //函数首部 FUNCTION 函数名 (参数......) //函数体 RETURN 数据类型名 IS //函数体要求返回的类型 [说明语句] BEGIN [顺序处理语句] END 函数名
特点
只能有一个返回值
FUNCTION只能计算数值,不能改变其参数的值 参数的模式只能是IS
函数首在用户自定义中不是必须的
重载函数
同样名称的函数可以用不同类型的参数定义多次
过程
书写格式
PROCEDURE 过程名 (参数表) //首部 PROCEDURE 过程名 (参数1;参数2;..) IS //过程体 [定义语句] BEGIN [顺序处理语句] END 过程名
特点
参数可以是IN OUT INOUT等多种模式,都列在紧跟过程名的括号内
与进程语句PROCESS相同,语句顺序执行
函数与过程的不同
过程内部无RETURN语句,但有多个返回值,函数通过RETURN语句有返回值,有且只有一个
函数的参数传递只有IN 过程有多个
函数通常作为表达式的一部分,过程多作为一个语句
使用规则
每次使用都要进行初始化
可反复调用,但每次会生成一个电路模块,需考虑硬件的承受能力
RETURN语句
结束当前的过程或者函数
格式
RETURN;
RETURN 表达式;(不能用在过程中)(必须用在函数体中)表达式的值为函数返回值
信号赋值语句
并行赋值语句
生成语句
并行过程调用
断言语句
用在进程和子程序中的被称为顺序断言语句
格式
ASSERT 布尔表达式 [REPORT 信息][SEVERITY 错误级别];
工作方式
并行
描述语句
并行语句
描述模块间连接关系
特点
并行关系,受信号触发,语句同时执行
常用语句
进程语句PROCESS
并行信号赋值语句
简单信号赋值语句
格式
目标信号<=表达式;
条件信号赋值语句
格式
目标信号<=表达式 WHEN 条件表达式 ELSE 表达式 WHEN 条件表达式 ELSE .......... 表达式;
有优先级,按书写顺序测试
选择信号赋值语句
格式
WITH 选择表达式 SELECT 目标信号<=表达式WHEN 选择表达式; 表达式WHEN 选择表达式; 表达式WHEN 选择表达式;
同一优先级
赋值目标只能是信号
元件例化语句(重点)(难点)
组成
元件声明
定义i
讲一个现成的设计实体定义为一个元件,功能是对待调用的这个元件做调用声明 相当于对一个现成的设计实体进行封装,只留除对外的接口界面
ARCHITECTURE和BEGIN之间
书写格式
COMPONENT 元件名 IS GENERIC (参数表); PORT(端口名表); END COMPONENT
元件例化
书写格式
例化名:元件名 PORT MAP(端口名=>连接端口名,....);
生成语句
形式一
[标号:] FOR 循环变量 IN 取值范围 GENERATE 说明语句 BEGIN 并行语句 END GENEERATE
形式二
IF 条件 GENERATE 说明语句 BEGIN 并行语句 END GENERATE
组成
生成方式
FOR或IF,规定并行语句的复制方式
说明语句
对元件数据类型,子程序,数据对象做说明
并行语句
是用来复制的基本单元
标号
可有可无,但在嵌套中必须有标号
表达式
TO表达式;(递增)
DOWNTO表达式(递减)
顺序语句
实现模型的算法部分
特点
按照书写顺序执行
只在进程和子程序内部使用
常用语句
顺序赋值语句
可以对信号赋值,也可以对变量赋值
赋值
变量
格式
赋值目标:=赋值源;
信号
格式
赋值目标<=赋值源
IF语句IF-THEN-ELSE-END IG;
特点
与并行语句中的条件赋值功能相似
条件表达式有优先级
先写的条件具有更高的优先级
格式
单分支
格式
IF 条件表达式 (布尔表达式) THEN 顺序语句; END IF;
双分支
格式
IF 条件表达式(布尔表达式)THEN 顺序语句; ELSE 顺序语句; END IF;
多分支
格式
IF 条件表达式 THEN 顺序语句; ELSIF 条件表达式 THEN 顺序语句; ELSE 顺序语句; END IF
嵌套
格式
IF 条件表达式 THEN 顺序语句; IF 条件表达式 THEN ....... END IF END IF
注意事项
至少有一个条件语句
必须以END IF 结束
条件表示为布尔表达式
最后一个为ELSE
CASE语句
与并行语句中的选择信号赋值语句功能相当
格式
CASE 表达式 IS WHEN 选择值=>顺序语句; WHEN 选择值=>顺序语句; ........ WHEN OTHERS; END CASE;
注意事项
选择值必须在表达式取值范围内
如果选择值不能完全覆盖表达式取值时,必须加WHEN OTHERS。
没个选择值只能出现一次
至少包含一个条件语句,且必须执行一条
LOOP语句
循环语句,使语句循环若干次
格式
格式一
[标号]: LOOP 顺序语句; END LOOP[标号] ;
格式二
[标号]:FOR 循环变量IN循环范围LOOP 顺序语句; END LOOP[标号];
格式三
[标号] :WHILE 条件表达式 LOOP 顺序语句; END LOOP[标号];
NEXT EXIT(只能用于LOOP的循环体中)
NEXT
终止当前的一次循环开始下次循环
格式
ENXT;
ENXT LOOP 语句标号;
ENXT LOOP 语句标号 WHEN 布尔表达式;
EXIT
直接结束循环
格式
EXIT;
EXIT LOPP 语句标号;
EXIT LOOP 语句标号 WHEN 布尔表达式;
WAIT语句
等待语句,程序顺序执行该语句时将暂停,知道某个条件满足后才继续执行
常用格式
WAIT;
没有条件,表示永远挂起
WAIT ON 信号表;
敏感信号等待语句。敏感信号的任何变化都会启动该程序
WAIT UNTIL 条件表达式;
条件等待语句,需要两个条件才能据需(敏高信号变化,满足UNTIL条件)
WAIT FOR 时间表达式;
超时等待语句
从执行WAIT开始,在除时间段内,进程挂起
NULL语句(补充)
格式
NULL [AFTER 时间表达式]
不执行任何动作,在语句中必须显式地指出不执行任何动作时,使用
数据类型
四大种类
标量类型
基本数据类型
包含
整型
实数型
枚举型
物理类型
格式
TYPE 类型名 IS值域
复合类型
数组(Array)
书写格式
TYPE 数据类型名 IS ARRAY 范围 OF 元数据类型;
记录
格式
TYPE 记录名称 IS RECORD {元素名称 :元素类型;} END RECORD;
存取类型
等价于指针型
只有变量被说明为存取类型
文件类型
提供多值存取
标准数据类型
位(bit)
表示信号值
表示方法
字符0或1
‘’
位矢量(bit_Vector)
位的数组
一组位数据
可以是10 2 16(H)进制
“”
使用时必须标明带宽(数组的长度必须明确定义)
布尔值(boolean)
在IF语句中测试产生两种值
true(真)
false(假)
整数(Integer)
整数,负数,0
范围-2147484647到2147484647
32位
实数(Real)
范围-1.0E+48到1.0E+48
字符(Character)
区分字母大小写
字符串(String)
时间(Time)
物理量数据
包含整数和单位且之间至少留一个空格
错误等级(Severity Level)
NOTE(注意)
WARNING(警告)
ERROR(出错)
FAILURE(失败)
程序包定义的数据类型
STD_LOGIC_1164
STD_LOGIC
'U'初始值
'x' 强未知
'0'强逻辑0
'1'强逻辑1
'Z'高阻态
'w' 弱信号未知
'L' 弱逻辑0
下拉
'H'弱逻辑1
上拉
'-'不可能的事
STD_LOGIC_VECTOR
标准一位数组
STD_LOGIC_ARITH
无符号(UNSIGNED)
在综合器中被解释为二进制,最高位为其最高值
有符号(SIGNED)
在综合器中解释为补码,最高位为符号位
小整形(SMALL_INT)
用户自己定义的数据类型
书写格式
TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型
TYPE 数据类型名 IS 数据类型定义
常用数据类型
枚举型
书写格式
TYPE 数据类型名 IS (元素,元素,....);
子类型
SUBTYPE 子类型名 IS 书记类型名[范围]
TYPE和SUBTYPE区别
TYPE
定义的是一个新的类型
SUBTYPE
定义的是原类型的子类,其值还可赋给原类型的数据
子类型 继承父类
SUBTYPE 子类型名称 IS 基本类型值域的子集
标识符(命名)
命名规则
大小写英文字母 数字 下划线
起始字符必须为英文字母
下划线不能连续且前后必须有英文或数字
不区分大小写
允许包括图形符号(回车、换行、空格)
不能是系统定义的保留字
实体,结构体,对象,元件,端口用标识符命名
数据对象(保存数据的课题单元)
信号(基本客体)(全局变量)
物理设计中某一条硬件连接线
赋值时必须有时延
赋值符号“<=”
说明场合
实体,结构体,程序包
书写格式
SIGNAL 信号名:信号类型 约束条件 :=表达式
在进程和子程序的顺序语句中不能定义信号
变量(局部变量)
存放数值
值可以传送给信号
赋值不能有时延
赋值号 “:=”
说明场合
进程,子程序
书写格式
VARIABLE 变量名:数据类型 约束条件:=表达式
常量(全局变量)
数字电路中的电源和地等
说明场合
实体,结构体,程序包,块,进程,子程序
书写格式
CONSTANT 常数名:常数类型:=表达式
常数的值不可改变
属性
定义
是类型、子类型、过程、函数、信号、变量、常量、结构体、配置、程序包、元件、语句标号等项目的特征
一个数据对象只能有一个值,但可以具有多种属性
语句格式
项目名'属性名
种类
型号类属性
EVENT(事件)
信号在单位事件内有事发生
较常用,只能用于IF和WAIT语句中
STABLE(稳定)
信号在单位时间内无事发生
数据区间类属性
'RANGE[(n)]
返回的区间于原项目相同
'REVERSE_RANGE[(n)]
返回的区间于原项目相反
返回的是一值的取值区间
数值类属性
LEFT
最左侧位
RIGHT
最右侧位
HIGH
最高位
LOW
最低位
数组属性
'LENGTH
对数组的宽度和元素个数进行测定
用户自定义属性
格式
ATTRIBUTE 属性名 : 数据类型; ATTRIBUTE 属性名 OF 对象名 :对象类型的IS值;
运算符
逻辑操作符
种类
NOT
取反
AND
与
OR
或
NAND
与非
NOR
或非
XOR
异或
XNOR
同或
应用
逻辑型数据
STD_LOGIC
BIT
逻辑型数组
STD_LOGIC_VECTOR
BIT_VECTOR
布尔型数据
注意事项
运算式左右两边类型必须相同
运算式左右没有优先级
必须加括号区分优先级
只有一种逻辑运算符时可以不加括号
算术操作符
求和运算符
+加
操作整数类型
-减
操作整数类型
&并置
将两部分连接
不能出现在赋值号左边
求积运算
*乘
整数类型和实数类型
/除
整数类型和实数类型
MOD求模
REM取余
符号操作符
一元运算
+正
-负
可以操作任意数据类型
混合操作符
**指数
左操作数可以是整数或浮点型,而右边不许为整数
ABS取绝对值
关系操作符
=等于
/=不等于
排序操作符
>大于
<小于
>=大于等于
<=小与等于
符号操作符
移位操作符
逻辑移位
SLL
逻辑左移
SRL
逻辑右移
用“0”填补移空的位
算术移位
SLA
算术左移
SRA
算术右移
把首位看作符号,保持符号不变,空位用最初首位填补
循环移位
ROL
左循环移位
ROR
右循环移位
ARCHITECTURE 结构体名 OF 实体名 IS [说明语句] 内部信号,常数,数据类型,函数等的定义 BEGIN [功能描述语句] EDD ARCHITECTURE 结构体名
IN 输入 OUT 输出 只能被赋值 INOUT 双向 可做对象可做预源,但对象和源不是同一对象 BUFFET 缓冲端口 带反馈的输出,可读可写,对象和源同时发生
ENTITY 实体名 IS GENERIC(类属参数说明 ) PORT(端口说明); END ENTITY实体名