第三章VHDL基础.ppt_第1页
第三章VHDL基础.ppt_第2页
第三章VHDL基础.ppt_第3页
第三章VHDL基础.ppt_第4页
第三章VHDL基础.ppt_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通过一些简单典型的VHDL设计示例来引出相关的VHDL语言现象和语句规则,并加以说明,从而简化VHDL语法学习难度。从一些简单电路设计示例及相应的VHDL表述,对表述进行详细解释从而掌握VHDL程序设计基本结构和设计特点。首先我们组合逻辑电路中简单的多路选择器件的VHDL描述来引出VHDL语法特点。,2选1多路选择器,是一个典型的组合逻辑电路,下图3-1为电路模型或元件图,3-2图为内部逻辑电路结构。,注意:电路功能可以是唯一的,但是电路的结构形式不是唯一的,它取决于综合器的基本元件库的来源优化方向和约束的选择,可目标器件的结构特点。a和b为输入数据端口,s为通道选择信号,y为输出端mux21a为设计取的名称。,ENTITY引导到ENDENTITY结尾的语句部分称为实体,描述电路器件外部情况及各个信号端口基本性质比如流向及数据类型,ARCHITECTUREone引导到ENDARCHITECTUREone结尾的语句部分称作结构体,它负责描述电路器件内部逻辑功能和电路结构。一般分为顺序语句和并行语句,顺序语句的执行方式按照语句前后逐条顺序执行,并行语句则是并行执行的,无论多少条都同时执行无先后次序。WHEN-ELSE结构并行语句,当满足条件s=0即低电平则a的信号送到y否则高电平b的信号送到y。当然也可以用其他形式来描述相同的逻辑,例3-2也是用了并行语句用布尔方程的表达式来描述,AND,OR,NOT是与或非的逻辑操作符号。,2选1多路选择器的另一种VHDL描述,2选1多路选择器的再一种VHDL描述,例3-3则是用了顺序语句IF-THEN-ELSE表达其功能的描述,这个2选1的多路选择器,我们用了3种不同的表达方式描述了相同的逻辑功能,上图为时序波形,向a和b输入两个不同频率信号,当s高电平y输入fb;s低电平时输出fa。从而证实VHDL设计的正确性。上图为在EDA软件下的仿真结果。,VHDL完整的可综合的程序结构必须能完整地表达一片专用集成电路ASIC的端口结构和电路功能,无论是简单还是复杂的数字电路都必须包含实体和结构体两个最基本的语言结构,包含完整实体和结构体的VHDL表述称作设计实体。,实体描述的是电路器件的端口构成和信号属性,上图为基本最简表示,ENTITY,IS,PORT,ENDENTITY是描述实体的关键字必须包含编译时不区分大小写。,实体名是个标识符,由设计者自定一般是要设计的器件的名,不能用纯数字和中文来定义实体名,数字不能起头,不应该与EDA软件库里面的元件名做实体名。,描述电路端口及其信号必须用端口语句PORT()来引导语句结尾用;号。P_name:是端口信号名,比如a,b,s,y,用来定义端口上数据的流动方向和方式,输入,输出,双向I/O,缓冲端口(允许内部回读输出的信号),VHDL中任一数据对象的应用都必须严格限定其取值范围和数值类型。BIT类型:信号规定的取值范围是逻辑为1和0逻辑的1和0必须加单引号,可以参加逻辑运算或算术运算结果还是位的数据类型,VHDL综合器用一个二进制位表示BIT。INTEGER类型;BOOLEAN类型;STD_LOGIC类型,结构体的一般表述:,ARCHITECTURE,OF,IS,BEGIN,ENDARCHITECTURE都是描述结构体的关键词必须包含。说明语句:用来说明和定义数据对象,数据类型,元件的调用声明。它并非必须。功能描述语句:是必须的,给出电路功能描述语句可以是并行语句或顺序语句。一个可综合完整的VHDL程序有固定的结构。设计实体中首先出现的是各类库及程序包的使用申明包括WORK库的使用申明,然后是实体描述,最后是结构体描述,结构体中可以包括不同逻辑表达式语句结构。其中程序代码称作VHDL的RTL描述。,结构体名,标符号,元器件名,“=”是VHDL的赋值符号,要求两边的信号数据类型一致,y=a标示a端口的数据向y端口传输,在仿真中赋值操作并非立即发生,而是要经历一个模拟器的最小分辨时间后才赋值,可以看作是一个时延。WHEN-ELSE条件判断语句,通过测试条件确定由那个端口向y赋值,表达式s=0等于号没有赋值的含义,只是一种数据比较符号,结果为BOOLEAN型取值为TRUE和FALSE,VHDL综合和仿真中用10分别标示真伪布尔数据不是数值只用于逻辑操作和条件判断。条件语句的判断表达式可以是一个值也可以是一个复杂逻辑或运算表达式。,VHDL有7种基本逻辑操作符,信号在这些操作符的作用下可构成组合逻辑。逻辑操作符要求的操作数(操作对象)的数据类型有3种。VHDL直接用英文文字表达逻辑操作符号,显示了VHDL是硬件行为描述语言的特征。,IF-THEN-ELSE是表达VHDL顺序语句的方式先判断条件后执行语句,顺序语句也能描述并行运行的组合电路。需ENDIF结束,一种并行赋值语句,在执行条件信号赋值语句时,每一个赋值条件是按照书写的先后关系逐项测定,一旦发现赋值条件为TRUE立即将表达式赋值给赋值目标。语句中的顺序同时也是赋值优先级。,P1p2都等于1赋值给z的是a信号,PROCESS(a,b,s)括号中的是进行敏感信号表,一般要求进程中所有输入信号放在敏感信号表中,由于PROCESS语句的执行依赖于敏感信号的变化(发生事件),当某一敏感信号发生变化1到0,0到1的跳变就将启动此进程语句,这样PROCESS语句被执行一遍然后返回进程的起始端进入等待状态,等待下一次敏感信号的变化。在一个结构体中可以包含任意个进程语句结构,所有进程语句都是并行的语句,由PROCESS引导的语句包含其中的语句结构属于顺序语句。,顺序语句,都必须放在进程语句中。,引导的为进程语句,文件名如:,用QuartusII软件提供的VHDL文本编辑器编辑VHDL代码文件,保存文件时需要一个正确的文件名,文件的扩展名必须为.vhd文件名不区分大写但一般用小写,文件名一般与程序的实体名一致一般为器件名。,时序电路的描述上,VHDL语言有独特之处,VHDL主要通过对时序器件功能和逻辑行为的描述,而非结构上的描述使计算机综合出符号要求的时序电路。本节主要从一个典型时序元件D触发器器的VHDL描述进行详细分析,从而得出时序电路描述的一般规律和方法。3.2.1D触发器D触发器是数字系统设计中最基本的底层时序单元,它的描述包含了VHDL对时序电路的最基本和典型的表达方式,也包含VHDL最具特色的语言现象。下一页中的D触发器的VHDL描述中,比前面2选1多路选择器的描述多出了几个部分:1)由LIBRARY引导的库说明;2)使用了STD_LOGIC数据类型;3)定义了一个内部节点信号SIGNAL;4)使用了一种新的条件判断表达式:CLKEVENTANDCLK=1,STD_LOGIC数据类型比BIT类型包含的内容丰富和完整,它使得CLK,D,Q具有更宽的取值范围。,U:未初始化;X:强未知;01:强逻辑01;Z:高阻态;W:弱未知;LH:弱逻辑01;-:表示忽略。这种数据类型完整的概括了数字系统所有可能的数据表现形式,其描述与实际的电路有更好的适应性。在仿真与综合中,可以使设计者精确地模拟一些未知的和具有高阻态的线路情况。,许多数据类型的说明及类似函数是预先放在VHDL综合器附带的设计库和程序包中的。比如BIT的数据类型的定义是包含在VHDL标准程序包STANDARD中的,而STANDARD程序包是包含在标准库STD中的,为了使用BIT数据类型就应该在程序上面加上3句:,LIBRARY,USE,ALL是关键字,表示允许使用STD库中的STANDARD程序包中的所有内容,如类型定义,函数,过程,常量等。LIBRARYWORK默认的工作库,使用该语句VHDL工具才能调用WORK路径中的相关元件和程序包。VHDL标准中规定标准库和工作库WORK都是默认打开的,因此可以不必将上述库和程序包的使用语句显式表达在VHDL程序中,除非要用到一些特殊的程序包:,STD_LOGIC数据类型定义在STD_LOGIC_1164的程序包中,这个包由IEEE定义的,IEEE库不属于VHDL的标准库。,语句“SIGNALQ1:STD_LOGIC;”表示在描述的器件DFF1内部定义标识符Q1的数据对象为信号SIGNAL,数据类型为STD_LOGIC,Q1定义为内部节点信号,不必定义其端口模式,定义Q1的目的是为了在设计更大的电路时使用由此引入的信号,是一种常用的时序电路设计方式。语句中SIGNAL是定义某标识符为信号的关键字。VHDL中数据对象类似于一种容器,它接受不同数据类型的赋值。数据对象有3类,即信号(SIGNAL)、变量(VARIABLE)和常量(CONSTANT)。被定义的标识符必须确定为某类数据对象(规定行为方式和功能特点),同时必须被定义为某种数据类型(限定取值范围)。Q1作为信号,它可以如同一根导线在结构体中传递信息,也可以根据程序的功能描述构成一个时序元件,当然传递和存储的数据类型只能包含在设定的数据类型范围之内。Q1的功能定位还需由结构体中的语句描述来具体确定。,4.上升沿检测表达式和信号属性函数EVENT,条件语句判断表达式CLKEVENTANDCLK=1检测到时钟信号CLK的上升沿,此表达式将输出TRUE。EVENT是信号属性函数,用来获取信号行为信息的函数信号名EVENT标识符信号在一个极小的时间段内发生事件的情况进行检查。所谓发生事件,就是标识符信号其数据类型在取值范围内发生变化从一个取值到另一个取值,CLK定义为STD_LOGIC其数值在9个中任一个变化到另一个都认为发生了一个事件。CLK事件发生再与ANDCLK=1则表示在小时间段内测得CLK有一个跳变之后又测得CLK为高电平,两者相与返回TRUE。由当前的CLK为高电平,推断时间段前CLK为低电平,所以表达式CLKEVENTANDCLK=1为边沿沿检测语句。,5.不完整条件语句与时序电路,分析D触发器功能描述:首先考察时钟信号CLK上升沿出现的情况,即满足IF语句条件的情况。CLK发生变化时,PROCESS语句启动,IF语句将检测条件表达式CLKEVENTANDCLK=1是否满足条件,如果CLK确实出现了上升沿,则满足条件表达式,于是执行语句Q1=D,D的数据向内部信号Q1赋值,更新Q1,并结束IF语句。最后将Q1的值向端口信号Q输出。是否可以认为该上升沿测定语句就成为综合器构建时序电路的必要条件呢?再考察如果CLK没有发生变化,即CLK没有出现上升沿方式的跳变时IF语句的行为。这时由于IF语句不满足条件,即条件表达式给出FALSE,于是跳过赋值表达式Q1=D。而此IF语句没有利用通常的ELSE语句来明确指出当IF语句不满足条件时作何操作,显然这是一种不完整的条件语句(条件语句中,没有给出所有可能发生地条件给出相应的处理方式)。对于这种语言现象VHDL综合器理解为,对于不满足条件跳过赋值语句Q1。OTHER是个关键字,只能出现一次,NULL也是关键字,表示不做任何操作。3)CASE语句中的选择值只能出现一次,不能出现相同选择值的条件语句。4)CASE语句执行中必须选中,且只能选中条件语句中的一条。上述例子中表达式abc由输入信号a和b分别获得1或0时选择条件语句中一条输出。,STD_LOGIC_VECTOR标准逻辑矢量数据类型,与STD_LOGIC一样定义在STD_LOGIC_1164程序包中,STD_LOGIC_VECTOR被定义为标准一维数组,数组中每一个元素的数据类型都是标准逻辑位STD_LOGIC,它可以用来表达电路中并列的多通道端口或节点,或者总线BUS,使用时必须注明数组宽度,即位宽。例如:,标识符B的数据类型定义为一个具有8位位宽的矢量或总线端口型号最高位B(7)DOWNTO关键字B(0)。根据两式的定义,AB的复制可以:,二进制数(矢量位)必须加双引号,单一个二进制数则用单引号。,语句“SIGNALA:STD_LOGIC_VECTOR(1to4)”中A的数据类型定义为4位位宽总线,数据对象是信号SIGNAL,其最左位是A(1)到最右位A(4)。与之对应BIT_VECTOR位矢量数据类型,其每一个元素的数据类型都是逻辑位BIT,和STD_LOGIC_VECTOR的使用方法是相同的。例如:,data2=c;它们属于并行语句,但是除非a与b和c同时发生一个事件,它们的值才会同时发生变化。并行赋值与顺序赋值都会有一个延时,第一句当a或者b发生一个事件,立即执行逻辑运算(运算仿真时间为0),同时启动延时为的模拟定时器,当时间结束时data1才被更新。,这个例子中有两个赋值语句,赋值目标分别为select和x,给select赋值的条件是s0,s1发生事件;给x赋值条件是abcd发生事件。设某一稳定条件s0s1abcd都为0,这时x为a。假设发生了一个事件a变成了1,上面的select赋值语句并不执行,它对a不敏感,只会执行第二个赋值语句将a的值1赋值给x。如果发生的事件是s0由0变成1,将会导致select赋值更新,select的更新又会导致第二个赋值语句发生事件从而执行赋值更新操作。,三态门在许多的数字电路中都有应用,用STD_LOGIC数据类型的Z对一个变量赋值,即会引入三态门,在控制下可使其输出高阻态。,这是一个8位三态控制门电路的描述,当使能控制信号为1时,8位数据输出,为零时输出高阻,将高阻态“ZZZZZZZZ“向端口输出。,将某信号定义为STD_LOGIC数据类型,将该数据类型中的元素Z赋值给这个信号来获得三态控制门电路,一个Z表示一个逻辑位,但是要注意:z在综合的时候是一个不确定的值,不同综合器可能给出不同的结果,因此VHDL综合前行为仿真和综合后功能仿真结果可能会有所不同,还要注意VHDL对关键字不区分大小写,但是把表示高阻态的Z值赋值给一个数据类型为STD_LOGIC的变量或者信号时,Z必须是大写。在以原理图为顶层设计的电路中使用三态门比较简单,只需直接调用三态门元件即可。,用INOUT模式设计双向端口也必须考虑三态的使用,需要考虑端口的三态控制。双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态,否则,待输入的外部数据势必会与端口处原有电平发生”线与“,导致无法将外部数据正确读入。比较例3-36和例3-37两个双向端口的VHDL设计实例。,两个例子q都定义为双向端口,x定义为三态控制输出口。,例3-36利用q的输入功能将q端数据读入并传给X,没有将q端口设置成高阻态输出,即执行语句X0),就不一个样了,综合必定无法通过。,延时是VHDL仿真需要的重要的特性设置,为设计建立精确的延时模型可使VHDL仿真器得到接近实际的精确结果。FPGA/CPLD设计中,源文件无需建立延时模型,因为EDA软件可以使用适配所得的时序仿真文件进行精确仿真。VHDL有两类延时模型用于行为仿真建模:固有延时和传输延时。3.11.1固有延时也称作惯性延时,任何电子器件都存在的一种延时特性,主要物理机制是分布电容效应。当输入器件的信号脉冲宽度小于器件输入端分布电容对应的时间常数或者说小于器件的惯性延时宽度时,即使有足够高的电平,也无法突破数字器件的阀值电平实现信号传输的目的。为了使器件对输入信号的变化产生响应,就必须使信号维持的时间足够长,即信号的脉冲宽度必须大于器件的固有延时。,在VHDL仿真与综合器中,有一个默认的固有延时量,数学上它是个无穷小值,称作延时,也叫做仿真,它仅仅是为了仿真,是VHDL仿真器最小的分辨时间,它不能完全代表器件实际的惯性延时情况,VHDL语句中没有指明延时类型与延时量,那就是采用默认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论