一、基本标识符
VHDL中,基本标识符有:“A-Z”,“a-z”,“0-9”以及“_"VHDL不区分大小写。标识符必须以字母开头,不能以下划线结尾,不能出现连续两个或多个下划线。
##########################################################################################
二、数据对象
数据对象可看做数值的载体,有三种形式的对象:常量,变量,信号
常量声明格式:
constant 常数名: 数据类型:=表达式
constant vcc:real:=3.1 --常数名vcc,数据类型real,赋初始值为3.1
变量声明格式:
variable 变量名:数据类型:=初始值、表达式
variable temperature:std_logic:='0' --变量名temperature,数据类型std_logic,初始值为0
a(3 to6):=('1','1','1','0'); --段赋值
a(7):='0' --位赋值
信号:信号是电子电路内部硬件连接的抽象,可以将结构体中分离的并行语句连接起来,并能通过端口于其他模块连接。信号可以随时间改变,不像变量赋值,立即生效,允许产生时延。
信号通常在实体(entity)、结构体和程序包中使用,但不能在进程中说名。
对信号赋值使用符号“<="号,允许产生时延(一般用delta表示延时),这和实际原件的传输延时特性吻合。
信号声明格式:
signal 信号名:数据类型:=初始值
signal a:bit:='0' --信号名a,数据类型是位数据,初值为0
注:赋值符号“:=与<=”的不同在于,:=赋值后,会立即生效,而不产生延时。
信号可以赋初始值,也可不赋。即取默认值,指定数据类型的最左值例如:
signal INIT:bit_vector(7 downto 0); --定义信号INIT是位矢量
signal c:integer range 0 to 15; --定义信号c的数据类型是整数类型,整数范围0-15
signal y,x:real; --定义信号y、x数据为实数
y<=x; --经过delta延时后将x值赋给y
#####################################################################################
三、数据类型
标准数据类型
常见的数据类型共有10种:
数据类型 |
含义 |
备注 |
eg. |
整数 |
|
integer |
+125,-345 |
实数 |
实数范围-1.0E38-1.0E38 |
real |
1.0,——2.5e23 |
位 |
逻辑0或1 |
bit |
‘1’,‘0’ |
位矢量 |
位矢量 |
bit_vector(双括号括起来) |
“0110” |
布尔矢量 |
逻辑真或假 |
boolean(只有true和false)
|
|
字符 |
ASCII字符 |
character |
‘a’ |
时间 |
整数和时间单位 |
time,fs,ps,ns,us,ms,sec,min,hr
time,fs,ps,ns,us,ms,sec,min,hr
|
20us |
错误等级 |
VHDL程序在编译、仿真、综合过程的工作状态 |
severitylevel notewarning,errorfailure |
note,warning可以忽略,error,failure不可忽略 |
自然数、正整数 |
整数的子集 |
natural,positive |
|
字符串 |
字符矢量 |
string双引号括起来的字符序列 |
“start” |
用户自定义数据类型
VHDL允许用户自定义数据类型
定义格式:
type 数据类型名称 is 数据类型定义;
VHDL常用的用户自定义类型包括枚举类型,整数类型,数组类型,子类型等
枚举型:
type 数据类型名称 is(元素1,元素2,......);
eg. type color is(blue,green,brown);
枚举类型,编码顺序是默认的,左边第一元素编码为0,以后依次加1.编码过程中自动将每个元素转变成位矢量,位矢量的长度由所列举元素个数决定。
整数类型,实数类型。
自定义的整数类型、实数类型是标准的整数、实数的子类型,是跟据特殊需要自己定义的。目的是降低逻辑综合的复杂型和提高芯片利用率。
定义格式:
type 数据类型名称 is integer range 整数范围;
type 数据类型名称 is real range 实数范围;
数组类型:
type 数组类型名称 is array 范围 of 数组元素的数据类型
type 数据类型名称 is array (range<>)of 数组元素的数据类型;
其中范围是用整数指明数组的上下界,是一个限定数组
例如:type stb is array (7 downto 0) of bit;
variable addend:stb --变量addend定义为std数组
子类型:子类型说明语句就是对已经存在的基本数据类型作一些范围限制,形成了新的一种数据类型,即子类型subtype
subtype定义格式:
subtype 子类型名 is 基本数据类型 range 约束范围
eg: type nat is integer range 0 to 999; --自定义整数类型nat是整数,范围0-999
IEEE标准数据类型“std-logic”和“std-logic-vector”
std-logic:标准逻辑位
std-logic-vector:标准逻辑矢量
std-logic定义了9种不同的值,增加了不定态“X”和高阻态“Z”
U--初始值; X--不定,未知; 0--0; 1--1; Z--高阻; W--弱信号不定,未知;
L--弱信号0; H--弱信号1; “ 一”--不可能状态
类型转换
类型转换函数表
函数名 |
功能 |
std_logic_1164程序包 |
to_std_logic_vector(a) |
由bit_vector转换为std_logic_vector |
to_bit_vector(a) |
由std_logic_vector转换为sbit_vector |
to_std_logic(a) |
由bit转换为std_logic |
to_bit(a) |
由std_logic转换位bit |
std_logic_arith程序包: |
conv_std_logic_vector(a) |
由integer、unsigned、signed转换为std_logic_vector |
conv_integer(a) |
由unsigned、signed转换为integer |
std_logic_unsigned程序包: |
conv_integer(a) |
由std_logic_vector转换为integer |
(以上内容是学习VHDL语言的一些网络笔记,以备后用)