ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:27.02KB ,
资源ID:6695600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6695600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VHDL语言学习.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VHDL语言学习.docx

1、VHDL语言学习VHDL学习(本学习以MAXPLUS10为工具软件)第一章、 VHDL程序的组成一个完整的VHDL程序是以下五部分组成的:库(LIBRARY):储存预先已经写好的程序和数据的集合程序包(PACKAGE):声明在设计中将用到的常数、数据类型、元件及子程序实体(ENTITY):声明到其他实体或其他设计的接口,即定义本定义的输入输出端口构造体(ARCHITECTUR):定义实体的实现,电路的具体描述配置(CONFIGURATION):一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体1.1库库用于存放预先编译好的程序包(PACKAGE)和数据集合体,可以用USE语句调用

2、库中不同的程序包,以便不同的VHDL设计使用。库调用的格式:LIRARY 库名USE 库名.所要调用的程序包名.ALL可以这样理解,库在硬盘上的存在形式是一个文件夹,比如库IEEE,就是一个IEEE的文件夹,可以打开MAX PLUSR安装源文件夹,进入VHDL93的文件夹,就可以看到一个IEEE的文件夹,这就是IEEE库,而里面的文件就是一个个对程序包或是数据的描述文件,可以用文本打开来查看文件的内容。例如在VHDL程序里面经常可以看到“USE IEEE.STD_LOGIC_1164”,可以这样解释这句话,本序里要用到IEEE文件夹下程序包STD_LOGIC_1164,而STD_LOGIC_1

3、164是可以在IEEE文件夹的STD1164.vhd文件里面看到的,用文本打开STD1164.vhd,可以看到有一名为“IEEE.STD_LOGIC_1164”PAKAGE定义。简单的来说,库相当于文件夹,而程序包和数据就相当于文件夹里面的文件的内容(注意:不是相当于文件,因为程序包和数据都是在文件里面定义的,而文件名是和实体名相同的,可以说实体相当于文件)。到了这里就可以考虑一个问题,“在安装MAX PLUS时有多少个库已经存在的呢”,要得到这个问题的答案,可以打开安装目录下的“VHDL93”文件夹,就可以看到里面有五个文件夹,分别是ATERA、IEEE、LPM、STD、VITAL,也就是说

4、你看到了五个库,分别是ATERA功能库:增强型功能部件,即IP核,包括数字信号处理、通信、PCI和其他总线接口、处理器和外设及外设的功能。IEEE库:由IEEE(美国电子电机工程师学会)制定的标准库LPM库:参数可调模块库STD库:符合VHDL标准的库VITAL库:vhdl上对asic提供高精确度及高效率的仿真模型库调用库的表达有两种,一是显式表式,就是用LIBRARY和USE来调用库里面的程序包或数据,适用于那些不符合VHDL标准的库调用,比如IEEE库;另一种是隐式表式,就是不用说明就自动调用的,适合于符合VHDL标准的库调用,比如STD库,不用写明调用就已经自动调用出来了。除了上面所介绍

5、的库外,还有用户自定义库及WORK库,WORK库是用户的VHDL现行工作库,从上面的理解可知,WORK库就是用户当前编辑文件所在的文件夹,文件夹里面的其他文件里面所描述包或数据的集合就是WORK库里面的包和数据的集合。由于WORK库自动满足VHDL标准,因此在就应用中不必以显式预先说明(比如 LIBRARY WORK这样的定义是多余的)。1.2程序包在VHDL中,常量、数据类型与子程序可以在实体说明部分和结构体部分加以说明,且实体说明部分所定义的常量、数据类型与子程序在相应的结构体中是可见的(可以被使用的),但在一个实体的说明部分与结构体的部分对于其他实体的说明部分与结构部分是不可见的(注:实

6、体相当于一个文件),程序包(PACKAGE)就是为了使一组常量说明、数据说明、子程序说明和元件说明等内容对于多个设计实体都成为可见的而提供的一种结构,可以这样理解一个实体(文件)里的PACKAGE对常量等的定义在其于的实体(文件)里是可以被使用的。程序包由包头和包体构成,包头格式:PACKAGE 程序包名 IS 说明语句;END 程序包名;说明语句部分可为:USE语句、类型定义、子程序声明(定义在包体)、常量定义、信号声明、元件声明等。包体格式:PACKAGE BODY 程序包名 IS说明语句;END 程序包名说明部分用于子程序的定义,注:在包中对子程序的说明分为两部分,子程序声明放在包头,子

7、程序的定义在包体。实体对于程序包不是自动可见(即不是自动就设为使用)的,为了使用程序包说明的内容就必须在实体的开始加上USE语句(即是要用USE来调用程序包里面所说明的东西),即使实体和程序包是在同一个文件里也要这样调用。1.3实体实体(ENTITY)是VHDL设计中最其本的组成部分之一(另一个是结构体),VHDL表达的所有设计均与实体有关。实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。实体格式如下:ENTITY 实体名 ISGENERIC(常数名:数据类型:设定值) 类属说明 PORT 端口说明 (端口信号名1: 模式 类型;端口信号名2: 模

8、式 类型;端口信号名3: 模式 类型;端口信号名4: 模式 类型);TYPE语句或常量定义 实体申明并行语句 实体语句 END 实体名;实体名:MAXPLUSII要求实体名必须与VHDL文件名相同,否则编译会出错。类属参量:用于为设计实体和其外部环境通信的静态信息提供通道,可以定义端口的大小、实体中元件数目及实体的定时特性等等;带有GENERIC的实体所定义的元件叫做参数化元件,即元件的规模或特性由GENERIC的常数决定,在GENERIC所定义的常数是可以在引用过程中修改的,因此利用GENERIC可以设计更加通用的元件,弹性地适应不同的应用。端口信号名:端口信号名在实体之中必须是唯一的,信号

9、名应是合法的标识符端口模式:分别有IN、OUT、INOUT、BUFFER和LINKAGE,这五种类型在后面的章节将介绍到。端口类型:常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待后面章节介绍。实体申明:实体申明部分应放在端口说明的下面,实体申明部分用于定义实体接口中的公共信息,例如可以用来定义新的数据类型和常量定义等。实体语句:是每一设计实体接口的公共部分,实体语句只能由并行断言语句、并行过程调用语句和被动进程语句,注意,这些实体语句部分应该是被动语句,即在语句中不含有信号赋值语句。1.4结构体所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即

10、结构体描述实体的结构或行为,一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。结构体格式:ARCHITECTURE 结构体名 OF 实体名 IS定义语句(元件例化);BEGIN并行处理语句;END 结构体名;结构体名是对本结构体的命名,它是该结构体的惟一名称,虽然可以由设计人员自由命名,但一般都将命名和对实体的描述结合起来,结构体对实体描述有三种方式(括号中为命名):1) 行为描述(BEHAVE):反映一个设计的功能和算法,一般使用进程PROCESS,用顺序语句表达;2) 结构描述(STRUCT):反映一个设计硬件方面的特征,表达了内部元件间连接关系,使用元件例化来描述;3

11、) 数据流描述(DATAFLOW):反映一个设计中数据从输入到输出的流向,使用并行语句描述。1.5配置一个实体可以用多个结构体描述,具体综合时,选择哪一个结构体来综合,由配置来确定,仿真时用配置语句进行配置能节省大量时间。配置格式:CONFIGURATION 配置名 OF 实体名ISFOR 选配结构体名;END FOR; END CONFIGURATION; 第二章、 数据类型、算符、数据对象、属性2.1 标识符VHDL标识符由大小写字母、数字和下划线构成,不区分大小写2.2 数据对象在逻辑综合中,VHDL常用的数据对象有信号、变量及常量。1) 信号SIGNAL,为全局变量,在程序包说明、实体

12、说明、结构体描述中使用,用于声明内部信号,而非外部信号(外部信号为IN、OUT、INOUT、BUFFER),其在元件之间起互联作用,可以赋值给外部信号。定义格式:SIGNAL 信号名: 数据类型:=初始值;赋值格式:目标信号名=表达式常在结构体中用赋值语句完成对信号赋初值的任务,因为综合器往往忽略信号声名时所赋的值。2) 变量(VARIABLE),只在给定的进程中用于声明局部值或用于子程序中,变量的赋值符号为“:=”,和信号不同,信号是实际的,是内部的一个存储元件(SIGNAL)或者是外部输入(IN、OUT、INOUT、BUFFER),而变量是虚的,仅是为了书写方便而引入的一个名称,常用在实现

13、某种算法的赋值语句当中。定义格式:VARIABLE 变量名: 数据类型:=初始值3) 常量,全局变量,在结构体描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明中使用,在设计中描述某一规定类型的特定值不变,如利用它可设计不同模值的计数器,模值存于一常量中,对不同的设计,改变模值仅需改变此常量即可,就如上一章所说的参数化元件。定义格式:CONSTANT 常数名:数据类型:=表达式;4) 信号和变量最大的不同在于,如果在一个进程中多次为一个信号赋值,只有最后一个值会起作用,而当为变量赋值时,变量的值改变是立即发生的。2.3 数据类型 VHDL是一种强类型语言,对于每一个常数、变量、信号、

14、函数及设定的各种参量的数据类型(DATA TYPES)都有严格要求,相同数据类型的变量才能互相传递和作用,标准定义的数据类型都在VHDL标准程序表STD中定义,实际使用中,不需要用USE语句以显式调用。 VHDL常用的数据类型有三种:标准定义的数据类型、IEEE预定义标准逻辑位与矢量及用户自定义的数据类型。1) 标准定义的数据类型Boolean布尔量:取值为FALSE和TRUECHARACTER字符:字符在编程时用单引号括起来,如ASTRING字符串:双引号括起来,如“ADFBD”INTEGER整数:整数范围从-(231-1)到(231-1);REAL实数:实数类型仅能在VHDL仿真器中使用,

15、综合器不支持BIT位:取值为0或1;TIME时间:范围从-(231-1)到(231-1),表达方法包含数字、(空格)单位两部分,如(10 PS);BIT_VECTOR位矢量:其于BIT数据的数组,使用矢量必须注明宽度,即数组中的元素个数和排列,如SIGNAL A: BIT_VECTOR(7 DOWNTO 0)NATUREAL自然数:整数的一个POSITIVE正整数:SEVRITY LEVEL错误等级:在VHDL仿真器中,错误等级用来设计系统的工作状态,共有四种可能的状态值:NOTE,WARNING,ERROR和FAILURE2) IEEE预定义的标准逻辑位与矢量STD_LOGIC::工业标准的

16、逻辑类型,取值为0、1、Z、X(强未知)、W(弱未知)、L(弱0)、H(弱1)、(忽略)、U(未初始化),只有前四种具有实际物理意义,其他的是为了与模拟环境相容才保留的。STD_LOGIC_VECTOR:工业标准的逻辑类型集,STD_LOGIC的组合。3) 用户自定义的数据类型有四种,分别是枚举类型、整数类型和实数类型、数组类型、记录类型枚举类型: TYPE 数据类型名 IS (枚举文字,枚举文字,. . . .)整数类型与实数类型是标准包中预定义的整数类型的子集,由于综合器无法综合未限定范围的整数类型的信号或变量,故一定要用RANGE子句为所定义整数范围限定范围以使综合器能决定信号或变量的二

17、进制的位数。格式: TYPE 数据类型名 IS RANGE 约束范围; (如-10到+10)数组类型:TYPE 数据类型名 IS ARRAY(下限 TO 上限) OF 类型名称记录类型:TYPE 记录类型名 IS RECODE元素名: 数据类型名;元素名: 数据类型名;。END RECODE2.4 运算符VHDL为构造计算数值的表达式提供了许多预定义运算符,可分为四种类型:算术运算符,关系运算符,逻辑运算符与连接运算符。算术运算符:+、-、*、/、*、MOD、REM、ABS关系运算符:=、/=、=逻辑运算符:AND、OR、NOT、NAND、NOR、XOR、NOR连接运算符:&,将多个对象或矢量

18、连接成维数更大的矢量2.5 VHDL属性属性是关于实体、结构体、类型及信号的一些特征,有些属性对于综合非常有用,其一般形式均为: 对象属性。1) 数值类属性 用于返回数组、块或一般数据的有关值一般数据的数值属性:LEFT,RIGHT,LOW,HIGH数组的数值属性:LENGH块的数值属性:BEHAVIOR,不含有元件COMPONENT例化信息时返回TRUE;STRUCTURE含有元件实例化或有被动进程时,则返回TURE。(注:被动进程定义是在进程定义中没有代入语句)2) 函数类属性 以函数的形式,使设计人员得到有关数据类型、数组、信号的某些信息。数据类型属性函数:POS(X)得到输入X值的位置

19、序号、VAL(x)得到输入位置序号的X值,SUSS(x),PRED(x),LEFTOF(x),RIGHTOF(x)数组属性函数:LEFT(n),RIGHT(n),HIGH(n),LOW(n)3) 数据类型属性,这类属性类函数仅一个,即BASE4) 数据区间类的属性,RANGE(N)和REVERS_RANGE(N)用户自定义的属性,格式 ATTRIBUTE 属性名 OF 目标名:目标集合 IS表达式以函数的形式,使设计人员得到有关数据类型、第三章、 顺序语句与并行语句顺序语句和并行语句是程序设计中两大基本描述语句系列。.1顺序语句顺序语句的特点从仿真的角度来看是每一条语句的执行按书写顺序进行,顺

20、序语句只能出现在块语句、进程和子程序内部,顺序控制方式有两种,一是条件控制(IF和CASE语句),一是迭代控制(LOOP语句和ASSERT语句),有10种基本类型) 赋值语句赋值语句分为变量赋值和信号赋值,它们的赋值是有区别的。首先在格式上,变量赋值格式为“变量名:=表达式”,而信号的赋值格式为“信号名=表达式”;其次体现在所用的地方,变量说明和使用都只能在顺序语句中(进程、函数、过程和块模块),而信号的说明只能在同步语句中,但可以在顺序语句和同步语句中使用;再次体现在赋值过程,变量的赋值是立即的,而信号的赋值的执行和信号值的更新至少要延时DELTA延时,只有延时后信号才能得到新值,否则将保持

21、原值,在进程中,信号赋值在结束时起作用。) WAIT语句WAIT语句属于敏感信号激励信号,一个进程语句含有敏感信号时,进程中不能出现WAIT等待语句;当进程语句不含有敏感信号时,进程语句必须含有其他形态的敏感信号激励。WAIT语句有五种形式:WAIT 无限等待;WAIT ON (敏感信号1,敏感信号2,敏感信号N) 敏感信号变化,表中的信号产生变化时才往下运行;WAIT UNTIL 布尔表达式 为TRUE时,进程启动,为FARLSE是等待WAIT FOR 时间表达式 到时进程才会启动WAIT UNTIL 布尔表达式 ON (敏感信号1,敏感信号2,敏感信号N) FOR 时间表达式 多条件等待语

22、句,注意在多条件等待语句的表达式中,至少应有一个信号量,因为处于等待进程中的变量是不可改变的。) IF语句这种语句在其他编程语言也有,不用多讲,其完整的书写格式IF标号: IF THEN;ELSIF THEN;.ELSE;END IF IF标号) CASE语句CASE语句是另一种形式的流程控制语句,可读性比IF的强,格式如下CASE 条件表达式 ISWHEN 条件取值 =顺序处理语句;WHEN 条件取值 =顺序处理语句;WHEN 条件取值 =顺序处理语句;WHEN OTHERS =顺序处理语句;END CASE;上面的条件取值有三种格式可选条件表达式取值条件表达式取值|条件表达式取值|条件表达

23、式取值|条件表达式取值 TO 条件表达式取值) LOOP循环语句LOOP语句与其他高级编程语言中的循环语句一样,可以使程序进行有规律的循环,循环的次数受迭代算法的控制,一个LOOP语句可包含要重复执行的一组顺序语句,它可以执行多次或是零次。LOOP格式LOOP 标号: 重复模式LOOP顺序处理语句;END LOOP LOOP标号;重复模式有两种,FOR模式和WHILE模式。FOR模式的LOOP语句格式:LOOP标号: FOR 循环变量 IN 离散范围 LOOP顺序处理语句;END LOOP LOOP标号;WHILE模式的LOOP语句格式:LOOP标号: WHILE条件LOOP顺序处理语句;EN

24、D LOOPLOOP标号;) NEXT和EXIT语句这两种语句都是用于跳出LOOP循环的,NEXT语句是用来跳出本次循环的,而EXIT语句是用于跳出全部循环的。格式NEXT或EXIT LOOP标号 WHEN条件) NULL空操作语句,书写格式为“NULL;”,唯一的作用是使程序流程运行到下一个语句,常用于CASE语句当中) RETURN语句用在一段子程序结束后,用来返回到主程序的控制语句,一般情况之下,有两种书写格式,分别是RETURN; 只能用于进程返回RETURN 表达式;只能用于函数返回在实际的应用中,一般的VHDL综合工具要求函数中只能包含一个RETURN,并规定这条RETURN语句只

25、能写在函数末尾,但一些VHDL综合工具允许函数中出现多个RETURN语句。) ASSERT断言语句主要用于程序仿真、调试中的人机对话,它可以给出一个文字串作为警告和错误信息,基本书写格式如下:ASSERT条件REPORT输出信号 字符串SEVERITY错误级别;有四种NOTE、WARNING、ERROR和FAILURE如果程序在仿真或调试过程中出现问题,断方语句就会给出一个文字串作为提示信息,当程序执行到断言语句时,就会对ASSERT条件表达式进行判断,如果返回值为TRUE则断言语句不做任何操作,程序向下执行,如果返回值为FALSE,则输出指定的提示信息和出错级别。断言语句可以分为顺序断言语句

26、和并行断言语句。) REPORT语句报告语句是93版VHDL标准提供的一种新的顺序语句,该语句没有增加任何功能,只是提供了某些形式的顺序断言语句的短格式,也算是ASSERT语句的一个精简,格式如下:REPORT 输出信息SEVERITY出错级别.2并行语句并行语句在结构体中的执行都是同时进行的,即它们的执行顺序与语句的书写无关,这种并行性是由硬件本身并行性决定的,即一旦电路接通电路,它的各部分就会按照事先设计好的方案同时工作,VHDL有六种并行语句) 并行信号赋值语句信号赋值语句相当于一个进程(用于单个信号赋值)的简化形式,用在结构体中并行执行,信号赋值语句提供了三种赋值方式,用来代替进程可令

27、程序代码大大简化。注:这里要注意,信号赋值语句在顺序语句里面也有,顺序语句里可以给信号赋值也可以给变量赋值,而顺序语句里只能对变量说明,不能对信号说明;并行语句刚好相反。思考:什么变量不能在并行语句里面说明呢?为什么信号不能在顺序语句里面说明呢?因为信号是全局的,变量是局部的,用来保存中间变量的赋值方式一并发信号赋值语句,格式“信号名=表达式”,等效于进程语句,表达式中的信号就是进程语句中的敏感激励信号(注:进程必须含有敏感激励信号,请看下面章节介绍)赋值方式二条件信号赋值语句,格式如下目标信号=表达式1 WHEN 条件1 ELSE表达式2 WHEN 条件2 ELSE表达式3 WHEN 条件3

28、 ELSE表达式4注:条件赋值语句与IF语句不同之处1、 以上条件赋值语句不能进行嵌套,而IF是可以的2、 由于条件信号赋值语句是并行语句,必须用在结构体中的进程之外(进程是用顺序语句来编写的),而IF是顺序语句3、 条件信号赋值语句ELSE是必须有的,而IF可没有4、 条件信号赋值语句与实际的硬件电路十分接近,因此使用该语句要求设计人员具有硬件电路知识,而IF一般用来进行硬件电路的高级描述,它不要求太多的硬件电路知识。5、 一般情况下很少用条件赋值语句,只有当用进程语句、IF语句和CASE语句难以对路进行描述时才用赋值方式三选择信号赋值语句,格式如下WITH 选择条件表达式 SELECT目标

29、信号=信号表达式1 WITH 选择条件1信号表达式2 WITH 选择条件2信号表达式3 WITH 选择条件3信号表达式4 WITH OTHERS注:选择信号赋值语句是一种并行语句,不能在结构体中的进程内部使用) 块语句在VHDL语言设计中,块语句常常用来对比较复杂的结构体作结构化描述,格式如下块标号: BLOCK 卫式表达式类属子句;端口子句;块说明部分;BEGINEND BLOCK块标号;卫式表达式:是一个布尔条件表达式,只有当这个表达式为TURE时,BLOCK语句才被执行;类属子句:块的属性说明块说明部分:用于定义USE、子程序、数据类型、子类型、常量、信号和元件块语句说明部分:用于描述块的具体功能,可以包含结构块中的任何并行语句结构。注:块语句的作用就是将一个大的结构划成一块一块小的结构。) 进程语句进程语句是一种应用广泛的并行语句,一个结构体中可以包括一个或者多个进程语句,结构体中的进程语句是并发关系,即各个进程是同时处理的、并行执行的;但在第一个进程语句结构中,组成进程的各个语句都是顺序执行,在进程语句中是不能用并行语句的。格式进程标号:PROCESS 敏感信号表 IS进程语句说明部分;BEGINEND PROCESS进程标号;注:1、 敏感信号表列出了进程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1