【www.myl5520.com--教学设计】
VHDL总结
篇一:vhdl,排序
第1部分 EDA技术概述
一、EDA技术的含义:
EDA是Electronic Design Automation (电子设计自动化)的缩写 为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程器件的开发软件及实验开发系统为设计工具,自动完成用软件方式描述的电子系统到硬件的逻辑编译、逻辑简化、逻辑分割、逻辑综合及优化、布局布线、逻辑仿真、直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门多学科融合的新技术。
二、EDA技术的实现目标及实现途径:
1、实现目标
完成专用集成电路ASIC或印制电路板PCB的设计和实现。
2、实现途径
⑴. 超大规模可编程逻辑器件 ⑵. 半定制或全定制ASIC ⑶. 混合ASIC
三、EDA技术的设计方法:(P8)
传统的电路设计方法:自底向上的设计方法。即首先确定可用的元器件,然后根据这些器件进行逻辑设计,完成各模块后进行连接,最后形成系统 。
基于EDA技术的电路设计方法:自顶向下的设计方法。
自顶向下是指将数字系统的整体逐步分解为各个子系统和模块,若子系统的规模较大,则还需将子系统进一步分解为小的子系统和模块,层层分解,直至整个系统中各个子系统的关系合理,并便于工作于逻辑电路的设计和实现为止。
传统电路设计方法与采用EDA技术的电路设计方法的区别:
1、设计方法不同:传统是自下而上的方法(Down-Top),EDA是自上而下的设计方法(Top-Down)。
2、传统设计基于电路板;EDA技术是基于芯片的设计方法。
3、描述方式不同:传统采用电路图为主,EDA以硬件描述语言为主。
4、设计手段不同:传统以手工设计为主,EDA设计为自动设计。
结论:EDA技术极大地降低硬件电路的设计难度,提高设计效率,是电子系统设计方法的质的飞跃!
四、EDA技术的设计流程(P12)
1、设计输入(原理图/HDL文本编辑)
2、综合(自然语言综合/逻辑综合/行为综合/ 版图综合或结构综合)
3、适配4、时序仿真和功能仿真(P14)5、编程下载6、硬件测试
第2部分 VHDL程序结构
VHDL程序由实体(Entity)、结构体(Architecture)、库(Library)、程序包(Package)和配置(Configuration)5个部分组成。实体、结构体和库共同构成VHDL程序的基本组成部分,程序包和配置则可根据需要选用。库语句是用来定义程序中要用到的元件库。程序包用来定义使用哪些自定义元件库。配置用来选择实体的多个结构体的哪一个被使用。
库(LIBRARY)
存放已经编译的包集合、实体、结构体和配置等。其好处在于使设计者可共享已经编译过的设计结果
1、库的种类:
库大致可归纳为5种:IEEE库、STD库、ASIC矢量库(VITAL库)、WORK库和用户定义库。
2、库的用法:
库语句的格式为:
LIBRARY 库名; --说明使用什么库
USE 包集合名; --说明使用库中哪一个包集合及包集
合中的项目(如过程名、函数名等)
USE语句有两种常用的格式:
USE 库名.程序包名.项目名;
USE 库名.程序包名.ALL;
库说明语句的作用范围从一个实体说明开始到它所属的结构体、配置为止,当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个设计实体说明语句前重复书写。
程序包(PACKAGE)
声明在实体中将用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。
1、程序包的一般语句结构:
定义程序包的一般语句结构如下:
PACKAGE 程序包名 IS -- 程序包首
程序包首说明部分
END 程序包名;
注意:一个完整的程序包中,程序包首名与程序包体名是同一名字。
PACKAGE BODY 程序包名 IS -- 程序包体
程序包体说明部分以及包体
END 程序包名;
2、几种常用预定义程序包:
? STD_LOGIC_1164程序包
? STD_LOGIC_ARITH程序包
? STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包
? STANDARD和TEXTIO程序包
实体(ENTITY)P64(实体语句结构/类属(GENERIC)说明语句/端口(PORT)说明语句) 对设计实体输入/输出的定义和说明,是可视部分
1.类属(GENERIC)说明语句
类属说明是实体说明中的可选项,必须放在端口说明之前。
GENERIC([常数名;数据类型[:设定值]
{;常数名:数据类型[:设定值 ]});
2. 端口(PORT)说明语句
PORT(端口名:端口模式 数据类型;
{端口名:端口模式 数据类型});
端口名是设计者为实体的每一个对外通道(系统引脚)所取的名字,一般用几个英文字母组 成;
端口模式(P65)(IN OUT INOUT BUFFER)(端口方向)是指这些通道上的数据流动方式,即定义引脚是输入还是输出; 数据类型是指端口上流动的数据的表达格式或取值类型
结构体(ARCHITECTURE)(P65)
描述电路内部的结构和行为,建立输入和输出之间的关系,是不可视部分。
结构体说明语句(结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句)
功能描述语句
(1)并行语句:并行语句总是在进程语句(PROCESS)的外部,该语句的执行与书写顺序无关,总是同时被执行。
(2)顺序语句:顺序语句总是在进程语句(PROCESS)的内部,从仿真的角度,该语句是顺序执行的。
5种语句结构分别为:BLOCK(块)语句、PROCESS(进程)语句、SUBPROGRAM(子程序)调用语句、信号赋值语句及元件例化语句。
进程(PROCESS)(P161-164)
PROCESS内部各语句之间是顺序关系 。在系统仿真时, PROCESS语句是按书写顺序一条一条向下执行的。而不象BLOCK中的语句可以并行执行。
若结构体中有多个进程存在,各进程之间的关系是并行关系vhdl,排序。
子程序(SUBPROGRAM)
子程序有两种类型:过程(PROCEDURE)函数(FUNCTION)
函数(FUNCTION)
在进程或结构体中不必定义函数首,而在程序包中必须定义函数首。
函数语句的调用格式:
函数名(实际参数表);
过程(PROCEDURE
过程也由两部分组成,即由过程首和过程体构成
过程语句的调用格式:
过程名(实际参数表);
配置(CONFIGURATION)
主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体,以决定哪一个结构体被使用。
第3部分 VHDL语言要素
VHDL的语言要素是硬件描述语言的基本结构元素,主要有文字规则;数据对象(Data Object,简称Object)、;数据类型(Data Type,简称Type);各类操作数(Operands)及运算操作符(Operator)。
数据对象包括变量(VARIABLE)、信号(SIGNAL)和常数(CONSTANT)3种。
一、VHDL文字规则
VHDL的文字(Literal)主要包括数值和标识符。数值型文字主要有数字型、字符串型、位串型。
1、数字
(1)整数文字:整数文字都是十进制的数
5,678,0,156E2(=15600),45_234_287(=45234287)vhdl,排序。
数字间的下划线仅仅是为了提高文字的可读性,相当于一个空的间隔符,而没有其他的意义,因而不影响文字本身的数值。
(2)实数文字:实数文字也都是十进制的数,但必须带有小数点
(3) 以数制基数表示的文字:用这种方式表示的数由5个部分组成。第1部分,用十进制数标明数制进位的基数;第2部分,数制隔离符号“#”;第3部分,表达的文字;第4部分,指数隔离符号“#”;第5部分,用十进制表示的指数部分,这一部分的数如果是0可以省去不写
10#170# --(十进制数表示,等于170)
2#1111_1110# --(二进制数表示,等于254)
16#E#E1 --(十六进制数表示,等于vhdl,排序。
2#11100000#,等于224)
16#F.01#E+2 --(十六进制数表示,等于3841.00)
2、字符及字符串表示:
字符放在单引号中;?A?,?*?,?Z?
文字字符串放在双引号中。ERROR”,“X”
数位字符串,位矢量。
基数符以“B”、 “O”和“X”表示,放在字符串的前面,分别表示二、八、十六进制基数符号例如:B“1_1101_1110” --二进制数数组,位矢数组长度是9
3、标识符:
? (1)VHDL基本标识符的书写规则:有效的字符:英文字母包括26个大小写字母
a~z,A~Z; 数字包括0 ~ 9以及下划线“_”。
? 任何标识符必须以英文字母开头。
? 必须是单一下划线“_”, 且其前后都必须有英文字母或数字。即:最后一个字符不
能是下划线;不允许连续两个下划线。
? 标识符中的英语字母不分大小写。
? VHDL中的注释文字一律为2个连续的连接线“--”,可以出现在任一语句后面,也可
以出现在独立行。
? VHDL的保留字(关键字)不能用于标识符;
(2)判断标识符是否合法?
Select --关键字(保留字)不能用于标识符
rx_clk_--最后字符不能是下划线
4、下标名:
下标名用于指示数组型变量或信号的某一元素。
其语句格式如下:
标识符 (表达式);
标识符必须是数组类型信号名或变量名,表达式所代表的值必须是数组下标范围中的一个值,这个值将对应数组中的一个元素。
二、数据类型
VHDL是一种强类型语言。VHDL不允许不同类型的数值相互赋值或使用类型不允许的运算符进行运算。
1、数据类型分类:
VHDL中的数据类型可以分成四大类:标量型(实数,整数,枚举,时间),复合类型(数组型,记录型),存取类型和文件类型。
2、IEEE预定义标准逻辑位与矢量:在IEEE库的程序包STD_LOGIC_1164中,定义了两个非常重要的数据类型,即标准逻辑位STD_LOGIC 和标准逻辑矢量STD_LOGIC_VECTOR
1、标准逻辑位STD_LOGIC数据类型九种取值
?U?:初始值(未初始化的)
?X?:不定态(强未知的)
?0?: 强0
?1?: 强1
?Z?: 高阻态
?W?:弱信号不定态
?L?:弱信号0
?H?:弱信号1
?_?:不可能情况(可忽略值)
在程序中使用此数据类型前,需加入下面的语句:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL
STD_LOGIC型逻辑运算符AND、NAND、OR、NOR、XOR、NOT的重载函数及两个转换函数,用于BIT和STD_LOGIC的相互转换。
2、标准逻辑矢量(STD_LOGIC_VECTOR)数据类型
字符放在单引号中;
3、数组类型:限定性数组和非限定性数组
数组可以是一维(每个元素只有一个下标)数组或多维数组(每个元素有多个下标)
限定性数组定义语句格式如下:
TYPE 数组名 IS ARRAY (数组范围) OF数据类型;
例如:TYPE data_bus IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
非限制性数组的定义语句格式如下:
TYPE 数组名 IS ARRAY (数组下标名 RANGE<>) OF 数据类型;
【例】
TYPE BIT_VECTOR IS ARRAY(NATURAL RANGE<>) OF BIT;
VARABLE VA:BIT_VECTOR(1 TO 6); --将数组取值范围定在1~6
注意:数组范围中的排序方式。
三、操作符
操作符则规定运算的方式
一般有四类操作符,即逻辑操作符(Logical Operator)、关系操作符(Relational Operator)、算术操作符(Arithmetic Operator)和符号操作符(Sign Operator),前三类操作符是完成逻辑和算术运算的最基本的操作符的单元
此外还有重载操作符(Overloading Operator),它是对基本操作符作了重新定义的函数型操作符。
1、逻辑操作符:
七种:AND,OR,NAND,NOR,XOR,XNOR,NOT。
2、关系运算符