VHDL

标记

  1. 标识符:有26个字母与数字以及下划线 _ 组成
    注:必须以字母打头;不能有两个连续的 _ ;最后一个字符不能是下划线;字母不区分大小写;最长32个字符
    如:
    正确: CLK NOT1_Q 错误 :3DA DB-A DB_
  2. 保留字:不能做标识符
    如:and in entity port process…
  3. 界符:语句以 ; 结束;注释用 - ;信号赋值用<= ; 变量赋值用 :=
  4. 注释符:-- 为便于理解和阅读程序而加的说明,以双减号开头,到行尾结束

数据类型

STANDARD库 标准库

  1. 整数(INTEGRATED)
  2. 实数(REAL)
  3. 位(BIT):“0”或“1”,可进行算术和逻辑运算;单引号
  4. 位向量(BIT_VECTOR):用“ ” ;位宽;排列顺序;双引号
    如:SIGNAL A :BIT_VECTOR(3 DOWN TO 0);A<=“1110”,A3=1,A2=1,A1=1,A0=0
  5. 布尔(BOOLEAN):TRUE和FALSE
  6. 字符(CHARACTOR):用 ’ ’ ,区分大小写
  7. 字符串(STRING):用“ ”
  8. 时间:fs,ns,ms,sec,min,hr 整数与单位之间至少留一空格位 2 ns

IEEE库

  1. STD_LOGIC:共九种值 ‘U’ , ‘X’ , ‘0’ , ‘1’ , ‘Z’ , ‘W’ , ‘L’ , ‘H’ , ‘-’
  2. STD_LOGIC_VECTOR:" " , 位宽 ,排列顺序
  3. 无符号(UNSIGNED):由STD_LOGIC数据类型构成的一维数组,数据可执行算术运算和逻辑运算
  4. 有符号(SIGNED):无逻辑运算;最高表示符号:0-正;1-负,补码表示
  5. 用户自定义
    TYPE 数据类型 名称 IS 数据类型 RANGE 数据范围 ;
    例:TYPE DATA IS INTEGER RANGE 0 TO 8
    TYPE 数据类型 名称 IS (取值1,取值2,…);
    例:TYPE STATE M IS (stat0,stat1 ,stat2,stat3);
  6. 数组:由多个相同类型的数据元素组成一个新的数据类型

运算符

  1. 逻辑运算符:AND与, OR或, NAND, NOR, XOR异或, NXOR同或,NOT
  2. 关系运算符:=,/=,<,>,<=,>=
  3. 移位运算符:SLL, SLA, SRL , SRA ,ROL, ROR
  4. 符号运算符:+,-
  5. 连接运算符:&
  6. 算术运算符:+,-,*,/,MOD,REN,**,ABS
    注:
    运算按位进行,要求操作数:类型相同、位宽相同、运算结果的数据类型与操作数的数据类型相同
    若同时有多个不同的运算符,要用括号对运算分组
    运算符有优先级排序:NOT优先级最高,依次:算术运算符(最高)>逻辑运算符(最低)

数据对象

常数

  1. 语句格式: CONSTANT 常数名称 : 数据类型 := 表达式
    如:CONSTANT A : INTEGER := 6 ;
  2. 赋值符为“ := ”;
    常数赋值后不能再改变;
    常数的使用范围和它在程序中的位置有关;
    实体/结构体/PROCESS语句
    常数所赋值的数据类型必须与定义的数据类型一致;

变量

  1. 语句格式: VARIABLE 变量名称: 数据类型 := 初值
    如: VARIABLE temp : INTEGER := 0 ;
  2. 变量–局部量,只能在进程子程序中定义和使用(在实体里定义的是全局量);
    变量的赋值语句是顺序执行语句(变量名称 := 表达式)(因为进程里是 顺序执行的);
    变量赋值没有时间延迟,实时变化,立即发生;
    变量不能放在进程的敏感信号表中;
    变量所赋值的数据类型必须与定义的数据类型一致;
    变量因先定义,后赋值,在定义时可赋初值;

信号

  1. 语句格式:
    信号名称 :数据类型 (在ENTITY实体PORT里的端口信号)
    SIGNAL 信号名称 :数据类型:=初值 (是一般在ARCHITECTURE结构体中的内部信号)SIGNAL 信号名称 :数据类型:=初值 (是一般在ARCHITECTURE结构体中的内部信号)(也是内部信号的定义格式)

  2. 信号分为,外部信号和内部信号,内部信号赋值(在PROCESS里)前需定义(在ARCHITECTURE结构体下),外部信号无需定义,直接使用;
    信号不能在进程中定义,但能在进程中赋值,也能在进程外赋值看;
    信号赋值语句: 信号名称 <= 表达式
    信号在进程外的赋值是并行的,但在PROCESS中的赋值是顺序的,只有进程被激活后(进程结束时),信号才被赋新值;
    信号 所赋值的数据类型必须与定义的数据类型一致;

在进程中,允许对同一个信号多次赋值,只有最后一次赋值是有效的;而变量则立即赋值
例1:
Process(a,b,c,d)
Begin
d<=a;
x<=b+d;
d<=c;
y<=b+d;
End Process;
执行结果:
x<=b+c;
y<=b+c;
例2:
Process(a,b,c,d)
Begin
d<=a;
x<=b+d;
d<=c;
y<=b+d;
End Process;
执行结果:
x<=b+a;
y<=b+c;
**信号与变量
信号与变量的区别

信号(SIGNAL) 变量(VARIABLE)
使用范围为实体,结构体,程序包 只能在进程或子程序中使用
可用于模块间交换数据 只能在进程或子程序中局部使用
有独立硬件对应物:连接线 无硬件对应物
可在进程的敏感信号表,以激活进程 不能写进进程的敏感信号表
信号赋值符 <= 变量赋值符 :=
信号赋值存在延迟 变量赋值立即生效
信号进程结束时起作用 在进程中,变量赋值立即生效

你可能感兴趣的:(EDA,EDA,VHDL)