null第三部分 硬件描述语言VHDL第三部分 硬件描述语言VHDLnull什么是VHDL? Very high speed integrated Circuit Hardware Description Language (VHDL)
是IEEE、工业国际
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
硬件描述语言
用语言的方式而非图形等方式描述硬件
电路
模拟电路李宁答案12数字电路仿真实验电路与电子学第1章单片机复位电路图组合逻辑电路课后答案
容易修改
容易保存
VHDL支持行为级、寄存器传输级(RTL)和门级三个不同层次的设计
VHDL语言特点VHDL语言特点支持多种设计方法和技术
与工艺技术独立
多层次描述能力
VHDL语言标准化、规范化,易于共享和复用nullVHDL的功能和标准 VHDL 描述
输入端口
输出端口
电路的行为和功能
VHDL有过两个标准:
IEEE Std 1076-1987 (called VHDL 1987)
IEEE Std 1076-1993 (called VHDL 1993)
nullVHDL综合综合:将电路的高级语言(如行为描述)转化成低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序
设计过程中的每一步都可称为一个综合环节。
(1) 从自然语言转换到VHDL语言算法表示,即自然语言综合;
(2)从算法表示转换到寄存器传输级(Register Transport Level,RTL),即从行为域到结构域的综合,即行为综合;
nullVHDL综合(3) RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合;
(4) 从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。有了版图信息就可以把芯片生产出来了。有了对应的配置文件,就可以使对应的FPGA变成具有专门功能的电路器件。
第一章 VHDL基础知识第一章 VHDL基础知识一个VHDL程序组成:
实体(Entity)、结构体(Architecture)、配置(Configuration)、包集合(Package)、库(Library)5个部分
一个VHDL程序是对设计单元(设计实体)的描述数字电子系统数字单元或芯片一个简单门电路VHDL语言把设计单元作为一个设计实体处理;
一个设计实体只能唯一地对应一个设计单元null实体 描述设计系统的外部接口信号
是VHDL程序的基本单元
实体说明
结构体一个VHDL程序包括null结构体
描述系统的行为、系统数据的流程或系统组织结构形式
配置
从库中选取所需单元来组成系统设计的不同规格的不同版本,使被设计系统的功能发生变化
包集合
存放各设计模块能共享的数据类型、常数、子程序
null库
存放已编译的实体、结构体、包集合、配置。
用户自行生成的IP库。是专业EDA公司的重 要任务
PLD、ASIC芯片制造商提供的库。如RAM,ROM控制器,Counter计数器等标准模块1.1 VHDL程序基本结构1.1 VHDL程序基本结构null【例1】
ENTITY mux21a IS
PORT( a, b : IN BIT ;
s : IN BIT;
y : OUT BIT ) ;
END ENTITY mux21a ;
ARCHITECTURE one OF mux21a IS
BEGIN
y <= a WHEN s = '0' ELSE
b ;
END ARCHITECTURE one ;实体结构体多路选择器VHDL描述图5-1 mux21a实体图5-2 mux21a结构体 2选1多路选择器的VHDL描述nullVHDL程序由实体说明和结构体两部分组成设计实体
结构体描述
实体说明描述功能定义
行为描述
数据流程
系统结构VHDL程序实体和结构体关系示意图null一个电路系统的程序设计有一个实体说明,可以对应多个结构体,但要求一个独立的VHDL文件只能由一个实体说明和一个结构体组成,统称实体—结构体对
实体提供该设计的公共信息
结构体定义了各个模块内的操作特征null1. 实体组织的一般格式1.1.1 实体组织和设计方法
由实体名、类属表、端口表、实体说明部分和实体语句部分组成
ENTITY e_name IS
[GENERIC(类属表);]
[PORT ( 端口表);]
实体说明部分;
[BEGIN
实体语句部分;]
END [ENTITY] e_name;
null2、实体说明
实体说明:描述一些参数的属性
参数的属性说明必须放在端口说明之前
实体说明部分是实体接口中的公共信息,应放在端口说明之后
在层次化系统设计中,顶层的实体说明可以是整个系统模块或整个单元模块的输入、输出(I/O)描述;
在一个器件级的设计中(底层),实体说明可以是一个元件或芯片的输入、输出(I/O)描述;
实体说明在VHDL程序设计中描述一个元件或一个模块与设计系统的其余部分(其余元件、模块)之间的连接关系,可以看作是一个电路符号。3、类属说明3、类属说明格式
GENERIC [CONSTANT] 端口名:[IN]子类型标识符[:=初始值],…]
例:GENERIC(m: TIME:=3ns)
属性说明和端口说明用于设计实体和外部环境通信的对象、通信格式约定和通信通道的大小4. 端口说明4. 端口说明该功能对应于电路图符号的一个引脚
实体说明中的每一个I/O信号被称作一个端口,一个端口就是一个数据对象
端口说明的组织结构必须有一个名字、一个通信模式和一个数据类型
端口模式:说明数据、信号通过该端口的方向nullINOUTINOUTBUFFER IN 定义的通道为单向只读模式,
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
数据只能通过该端口被读入实体中
OUT 规定数据只能通过该端口从实体向外流出,或者说可以将实体中的数据向此端口赋值null
INOUT 输入输出双向端口。从端口内部看,可以对此端口进行赋值,也可以通过此端口读入外部的数据信息;而从端口的外部看,信号既可以从此端口流出,也可以向此端口输入信号,如RAM的数据端口。
BUFFER 功能与INOUT类似,区别:当需要输入数据时,只允许内部回读输出信号,即允许反馈。如计数器设计,可将计数器输出的计数信号回读,以作为下一计数值的初值。
该回读信号不是由外部输入,而是由内部产生,向外输出的信号null出入端口的数据或信号的数据类型(TYPES)
标准逻辑类型:布尔型、位型、位矢量型、整数型
这些标准必须从实体的库中或USE语句中调用5、实体说明部分5、实体说明部分实体说明部分定义的项目是实体接口中的公共信息
例ENEITY ram IS
PORT(addr: IN bit_Vector(15 DOWNTO 0);
Date: OUT bit _Vector(31 DOWNTO 0);
Sel: IN bit);
TYPE instruction IS ARRAY (1 TO 5) OF Natural;
TYPE PROGRAM is array (Natural RANGE<>) OF IN instruction;
USE Work.timing_pkg;
PROCEDURE initialization (SIGNAL content:bit_vector(31 DOWNTO 0)) IS
BEGIN
CONTENT<=(OTHERS=>’1’) AFTER some_delay;
END PROCEDURE initialization;
END ramnull1.1.2. 结构体
结构体具体指明了该设计实体的行为,定义了该设计实体的功能,规定了该实体的数据流程,指派了实体中内部元件的连接关系
若把设计实体抽象为一个功能方块图,结构体则描述这个功能方块图的内部实现细节
描述结构体功能的方法:
行为描述法
数据流描述法
结构描述法格式格式ARCHITECTURE 结构体名 OF 实体名 IS
[定义语句]
BEGIN
[并行处理语句]
END
结构体命名
定义语句
对结构体内部使用的信号、常数、数据类型、文件和函数等进行定义null并性处理语句
表达结构体内部元件的互连关系
语句是并发进行的
1.1.3 库
用于存放经编译后的设计单元
通过其目录可查询和调用
VHDL语言中存在的库大体分:IEEE库、STD库、面向ASIC库、WORK库和用户自定义库
库和库之间是独立的,不能相互嵌套
库说明子句格式: LIBRARY 库名null预定义库设计库STD库STANDARD(隐含说明)
TEXTIO(用USE说明)WORK库
资源库
(用LIBRARY 打开)IEEE库其他库STD_LOGIC_1164
NUMERIC_STD
NUMERIC_BIT
MATH
VITAL_TIMING
VITAL_PRIMITIVEVHDL库和程序包1.1.4 程序包1.1.4 程序包为何要定义程序包
信号定义、常数定义、数据类型、COMPONENT语句以及子程序等可以在实体说明部分或结构体说明部分加以说明,而且一个实体说明部分对上述的信号、数据类型以及元件等的定义在相应的结构体内是可见的,或者说可以在结构体描述中使用。但是,对其他的实体说明和结构体描述,上述的定义是不可见的,或者说是不可以引用的。为了使一组信号定义、一组数据类型说明或子程序说明等对多个设计实体及相应的结构体都成为可见,VHDL提供了程序包结构null将常用的相关说明(类型说明、常量说明、子程序说明、元件说明、属性说明等)搜集在一起,一旦编译后存入库中
通过USE语句调用
组成:
程序包说明:为程序包定义接口,说明包中的类型、元件、函数和子程序
程序包体:规定集合包的实际功能,存放说明中的函数和子程序
一个程序包说明只能有惟一的一个程序包体与之对应,二者有相同的名字null格式
PACKAGE 程序包名 IS
[说明语句]
END [PACKAGE] [程序包名]
PACKAGE BODY 程序包名 IS
[说明语句]
END [PACKAGE BODY] [程序包名]程序包说明程序包体程序包体并非总是必须,但在程序包中包含有子程序说明,则必须有。子程序说明及子程序体不能出现在程序包的说明中,必须放在程序包体内null例1
LIREARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE upac IS
CONSTANT k: INTEGER :=4;
TYPE instruction IS (add,sub,adc,inc,srf,slf,mov);
SUBTYPE cpu_bus IS STD_LOGIC_VECTOR(k-1 DOWNTO 0);
END upac;null例2:程序包的VHDL程序书写举例
PACKAGE example IS
CONSTANT pi:REAL:=3.1415926;
CONSTANT defer:INTEGER;
FUNCTION mean(a,b,c:REAL) RETURN REAL;
COMPONENENT and IS
GENERIC (tpd1,tpd2:TIME:=3ns);
PORT (in1,in2 :IN BIT;
y:OUT BIT);
END COMPONENENT and;
END example;nullPACKAGE BODY example IS
CONSTANT defer : INTEGER :=5;
FUNCTION mean(a,b,c :REAL) RETURN REAL IS
BEGIN
RETURN (a+b+c)/3.0;
END FUNCTION mean;
END PACKAGE BODY example
要想例2程序包example中的全部
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
,包括程序包体的内容全部在自己的设计中可见,利用USE子句访问
形式:USE example.all1.1.5 配置1.1.5 配置描述层与层之间的连接关系和实体与结构之间的连接关系
在实体与结构体之间连接关系的配置中,设计者可以利用配置语句为实体选择不同的结构体,通过仿真进行性能对比,从而获得最佳的设计目标。格式格式CONFIGURATION 标识符 OF 实体名 IS
配置说明
配置指定
END
配置说明的格式配置说明的格式FOR 结构体名
FOR 例化标号:元件名
USE ENTITY 实体名[结构体_标识符]
END FOR;
END FOR;null例
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY full-sub IS
PORT(x,y,cy_in:IN STD_LOGIC;
diff,cy_out: OUT STD_LOGIC);
END full_sub;
ARCHITECTURE structure OF full_sub IS
COMPONENT half_sub
PORT (in1,in2:IN STD_LOGIC;
diff,b_out: OUT STD-LOGIC);
END COMPONENT;null COMPONENT or_gate
PORT(in1,in2:IN STD_LOGIC:
out1: OUT STD_LOGIC);
END COMPONENT;
SIGNAL a,b,c:STD_LOGIC;
BEGIN
u1:half_sub PORT MAP(x,y,a,b);
u2:half_sub PORT MAP(a, cy_in, diff, c );
u3:or_gate PORT MAP(b,c,cy_out);
END structure;
nullCONGIGURATION model OF full_sub IS
FOR structure
FOR u1,u2:half_sub
USE ENTITY work.half_sub(rtl);
END FOR;
FOR u3:or_gate
USE ENTITY work.or_gate(rtl);
END FOR;
END model;1.2 VHDL常用资源库中的程序包1.2 VHDL常用资源库中的程序包STD程序包
STANDARD程序包预先在STD库中编译,该程序包定义了若干类型、子类型和函数,在设计时自动打开
TEXTIO程序包
文件输入/输出程序包,是一个通用程序包1.3 VHDL的词法单元1.3 VHDL的词法单元VHDL保留字大写,其它字母则小写
VHDL基本词法单元
注释 “--”符号开始
标识符 信号名、进程名等
字符 单括号引起来的ASCII字符 ‘-’、‘#’
字符串 双括号引起来的字符序列 “A String”
位串 双括号引起来的数字序列
数字
十进制表示法1.4 数据对象和类型1.4 数据对象和类型对象
凡是可以被赋予值的客体
分四类:常量(CONSTANT)
信号(SIGNAL)
变量(VARIABLE)
文件(FILE)null对象说明的格式
对象类别 标识符表:子类型标识[:=初值];
例 SIGNAL reset,clk:STD_LOGIC;
VARIABLE x:BIT :=‘0’;常量常量设计者给实体某一个常量名赋予的固定值
格式
CONSTANT 常量名:数据类型:=表达式;
常量名一经赋值,在程序运行中不变
注意范围变量变量局部量
只用于进程、函数进程和子程序过程
格式
VARIABLE 变量名:数据类型 约束条件:=表达式
例
VARIABLE x:STD_LOGIC:=‘0’;
VARIABLE count:INTEGER RANGE 0 TO 255:=10信号信号HDL所特有的一种客体
电子电路内部硬件实体相互连接的抽象表示
可以看成是实体内部(设计器件内部)的端口
全局名
使用和定义范围是实体结构体和程序包
在进程和子程序的顺序语句中不允许定义变量
在进程中只能将信号列入敏感表,而不能将变量列入
格式
SIGNAL 信号名:数据类型 约束条件:=表达式文件文件传输大量数据的客体
包含一些专门数据类型的数值
仿真测试是,测试的输入激励和仿真结果都要用文件来进行VHDL语言的数据类型VHDL语言的数据类型VHDL语音程序,不同的数据类型不能直接代入,相同的类型,位长不同也不能代入
EDA工具在编译、综合时回报告类型出错
标准数据类型
整型(INTEGER) -(231-1)至(231-1)
实型(REAL) -1.0E+38 至+1.0E+38
位(BIT) 通常表示一个信号的值
如:TYPE BIT IS (‘0’,‘1’);
null位矢量(BIT_VECTOR)
布尔量(BOOLEAN)
字符(CHARACTER)
VHDL语言中编程时用单括号引起来的 ‘a’、‘A’
时间类型(TIME)(又称物理类型)
范围同整型从 -(231-1)至(231-1)
一般用于仿真,而不用于逻辑综合
null错误等级(SEVERITY LEVEL)
常用于表示电子系统的工作状态
分NOTE,WARAING,ERROR,FAILURE
即注意、警告、错误、失败
常用来在仿真时给开发者提供电子系统的工作情况
自然数(NATURAL)、正整数(POSTIVE)
字符串(STRING)
数位字符串 X“BFC”
文字字符串 “STRING”
一般用于程序的提示、结果的说明等场合null用户自定义的数据类型是用类型定义语句TYPE和子类型定义语句SUBTYPE实现的
格式:TYPE 数据类型名 数据类型定义;
或 TYPE 数据类型名 IS 数据类型定义OF 基本数据类型
枚举类型(ENUMERATED):用文字符号来表示每一组实际的二进制数
综合器在编码过程中将自动将每一枚举元素变成位矢量,位矢量的长度根据实际情况决定
例 TYPE instruction IS (add,sub,adc,inc,srf,slf);用户自定义的数据类型null整型(INTEGER)
实型(REAL)
在VHDL语言标准中已定义,而用户再定义是因为出自设计者的特殊用途
格式
TYPE 数据类型名 IS 数据类型定义范围 约束范围
数组(ARRAY)
将相同类型的数据集合在一起所形成的一个新的数据类型null格式
TYPE IS 数据类型名 ARRAY (INTEGER 0 TO 9 )OF STD_LOGIC;
存取类型(ACCESS)
为在客体之间建立联系,或者给新对象分配或释放存储空间
仅有变量才可定义为存取类型
TYPE line IS ACCESS string; --类型为LINE 的变量,它的值是指向字符串值的指针
null文件类型(FILE)
在系统环境中定为代表文件义一类客体
文件的值是系统文件中值的序列
格式 TYPE 文件类型名 IS FILE 限制;
例 TYPE text IS FILE OF string;
TYPE input_type IS FILE OF character;
null记录类型(RECORD)
由同一类型的数据组织在一起而形成的新的数据类型叫数组,而由不类型的数据组织在一起而形成的新的数据类型叫记录
记录适用于仿真
格式 TYPE 数据类型 IS RECORD
元素名:数据类型名;
元素名:数据类型名;
…...
END RECORD
null时间类型(TIME)
VHDL语言标准中已定义,而用户再定义是因为出自设计者的特殊用途,定义特殊的时间量用户定义的子类型用户定义的子类型用户对已定义的数据类型,作一些范围限制而形成一种新的数据类型
满足原数据类型的所有约束条件,原数据类型称基本数据类型
用户定义的数据类型和子类型,数据对象间的赋值可以直接进行,不必进行数据格式的转换
格式 SUBTYPE 子类型名 IS 数据类型名[范围] 数据类型的转换数据类型的转换对某一数据类型的变量、信号、常量、文件赋值时,类型一定要一致。
三种数据转换方法
类型标记法、函数转换法和常数转换法类型标记法类型标记法类型标记就是类型的名称
适合于关系密切的标量类型之间的类型转换,即整数和实数的类型转换
例
若 VARIABLE i: INTEGER;
VARIABLE r: REAL;
则有: i:=integer(r)
r:=real(i)函数转换法函数转换法例
SIGNAL a:BIT_VECTOR(11 DOWNTO 0);
SIGNAL b:STD_LOGIC_VECTOR(11 DOWNTO 0);
A<=X”A8”;
B<=to_std_logic_vector(X”AFC”);
B<= to_std_logic_vector(B”1010-0000-1111”);
常数转换法常数转换法例
CONSTANT typeconv_con: typeconv_type:=(‘0’ l ‘L’=>’0’,’1’ l ’H’=>’1’,others=>’0’);
……
SIGNAL b:BIT;
SIGNAL s:STD_LOGIC;
BEGIN
b<=TYPECONV_CON(s);
END;IEEE标准数据类型“STD_LOGIC”和“STD_LOGIC_VECTOR”IEEE标准数据类型“STD_LOGIC”和“STD_LOGIC_VECTOR”标准逻辑位数据类型STD_LOGICBIT数据类型定义: TYPE BIT IS('0','1');STD_LOGIC数据类型定义:
TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-');STD_LOGIC所定义的9种数据的含义是:
‘U’表示未初始化的; ‘X’表示强未知的; ‘0’表示强逻辑0; ‘1’表示强逻辑1; ‘Z’表示高阻态; ‘W’ 表示弱未知的; ‘L’表示弱逻辑0; ‘H’表示弱逻辑1; ‘-’表示忽略。null“BIT_VECTOR”和“STD_LOGIC_VECTOR”都是位矢量
“STD_LOGIC_VECTOR”只能表示二进制数
“BIT_VECTOR”的值可以是二进制八进制和十六进制,可以用“_”来分隔数据位1.5 表达式与运算符1.5 表达式与运算符表达式由基本元素通过运算符的连接
基本元素:对象、文字、函数调用、括号
运算符:逻辑运算符、关系运算符、算术运算符、并置运算符
并置运算符
位的联接形成位矢量
null例
Data_c<=D0&D1&D2&D3;--并置符联接
若有一位矢量
SIGNAL A STD_LOGIC_VECTOR(0 TO 3)
则Data_E<=A&Data_c为一个八位的位矢量
nullVHDL的运算符及优先级优先级顺序 从高到低NOT、 ABS、 **、 REM(取余)、 MOD、/、*、+(正)、-(负)、&、+、-、>=、<=、>、<、/=(不等于)、=、XOR、NOR、NAND、OR、AND