VHDL入门学习

一、VHDL优点:

覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言;

 VHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们
所理解;
 VHDL语言可以与工艺无关编程;

 VHDL语言已做为一种IEEE的工业标准,便于使用、交流和推广。

VHDL的不足之处:

设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。

二、VHDL语言基础

1、标识符

 首字符必须是字母
 末字符不能为下划线
 不允许出现两个连续的下划线
 不区分大小写
 VHDL定义的保留字(关键字),不能用作标识符

 标识符字符最长可以是32个字符。

需要避免关键字:ABS, ACCESS,AFTER,ALL,AND,ARCHITECTURE,
ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE ,
COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,
ELSIF,END,ENTITY,EXIT,FILE,FOR,FUNCTION,GENERIC,
GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,
LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR ,NOT,
NULL,OF,ON,OPEN ,OR ,OTHERS,OUT,PACKAGE,POUT,
PROCEDURE ,PROCESS,PURE,RANGE ,RECODE,REM,
REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,
SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO,TYPE ,
UNAFFECTED,UNITS,UNTIL,USE,VARIABLE,WAIT,WHEN,

WHILE,WITH,XOR ,XNOR 

2、数据对象

数据对象包括常量、变量、信号文件四种类型。

2.1常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。

Constant 常数名:数据类型:=表

常量所赋的值应和定义的数据类型一致;
常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。

2.2变量Variable
变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直接的,非预设的,分配给变量的值立即成为当前值,

变量不能表达“连线”或存储元件,不能设置传输延迟量。

变量定义语句:

Variable count: integer 0 to 255:=20 ; -- 定义count整数变量,变化 
 范围0~255,初始值为20。

Variable 变量名:数据类型 :=初始值变量定义语

变量赋值语句:

 目标变量名 := 表达式;

x:=10.0; -- 实数变量赋值为10.0
Y:=1.5+x; -- 运算表达式赋值,注意表达式必须与目标变量的数据类型相同

A(3 to 6):=(“1101”); --位矢量赋值

2.3信号Signal
信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在构造体、程序包和实体中说明。

信号定义语句:

Signal 信号名: 数据类型 :=初始值信号定义语

Signal count:BIT_VECTOR(3 DOWNTO 0); --定义count为4位位矢量
信号赋值语句:
目标信号名 <= 表达式;
x<=9;

Z<=x after 5 ns; -- 在5ns后将x的值赋予z

3、数据类型

VHDL的预定义数据类型
在VHDL标准程序包STANDARD中定义好,实际使用过程中,已自动包含进VHDL源文件中,不需要通过USE语句显式调用。

 布尔:(Boolean)

TYPE BOOLEAN IS (FALSE, TRUE); 

-- 取值为FALSE和TRUE,不是数值,不能运算,一般用于关系运算符

 位: ( Bit )
TYPE BIT IS (‘0’,’1’); --取值为0和1,用于逻辑运算 
 位矢量: ( Bit_Vector )
TYPE BIT_VECTOR IS ARRAY (Natural range<>) OF BIT; -- 基于Bit类型的数
 组,用于逻辑运算
SIGNAL a:Bit_Vector(0 TO 7); SIGNAL a:Bit_Vector ( 7 DOWNTO 0) 
 整数:(Integer)
 可用32位有符号的二进制数表示
 variable a:integer range -63 to 63
 在实际应用中,VHDL仿真器将Integer做为有符号数处理,而VHDL综合器将Integer做为无符号数处理;
 要求用RANGE子句为所定义的数限定范围,以便根据范围来决定表示此信号或变量的二进制数的位数。 
 字符:(Character)
TYPE CHARACTER IS (NUL, SOH,STX, …, ‘ ’, ‘!’,…); --通常用‘’引起 
 来,区分大小写;
 字符串:(String)
VARIABLE string_var: STRING (1 TO 7);
string_var:=“A B C D” ; -- 通常用“”引起来,区分大小写;
 实数:(Real)
 取值范围 -1.0E38 ~+1.0E38,仅用于仿真不可综合
 1.0 --十进制浮点数
 8#43.6#e+4 --八进制浮点数
 43.6E-4 --十进制浮点数
 时间:(Time)
 物理量数据,完整的包括整数和单位两个部分,用至少一个空格隔
开,仅用于仿真不可综合;
 fs,ps,ns,us,ms,sec,min,hr
 错误等级(Severity Level) :
 表示系统状态,仅用于仿真不可综合;
TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE);

你可能感兴趣的:(读书笔记,VHDL,数据类型)