您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第七章VHDL语言简介
第七章VHDL语言简介硬件描述语言:就是可以描述硬件电路的功能、信号的连接关系及定时关系语言。最常用的HDL是VHDL和VerilogHDL一、VHDL的发展史二、VHDL的基本语法三、VHDL程序的基本结构四、VHDL语言构造体的描述方式五、VHDL构造体的子结构描述方式六、VHDL的基本描述语句七、基本逻辑电路设计八、VHDL仿真与综合一、VHDL的发展史●VHSIC计划美国国防部在上个世纪70年代末和80年代初提出的VHSIC(VeryHighSpeedIntegratedCircuit)计划的产物。1981年提出了一种新的硬件描述语言,称为VHSICHardwareDescriptionLanguage。简称VHDL。●VHDL标准化1987年12月VHDL被接纳为IEEEstd-1076-1987标准,一般称为VHDL’87。1993年进一步修订,形成IEEEstd1076-1993标准,称为VHDL’93。●采用VHDL语言的硬件电路设计方法采用VHDL设计数字系统一般采用自上而下(TopDown)的分层设计方法,所谓自上而下的设计方法,就是从系统总体出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。1)第一层次行为描述:就是对整个系统的数学模型的描述。2)第二层次RTL方式描述,即寄存器传输描述,也称为数据流描述。采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。3)第三层次是逻辑综合。就是利用逻辑综合工具,将RTL方式描述的程序转换成用基本元件表示的文件(门级网表)。●采用VHDL语言设计硬件电路的优点1、计技术齐全、方法灵活、支持广泛。VHDL语言可以支持自上而下和基于库的设计方法,而且支持同步电路、异步电路、FPGA以及其它随机电路的设计。2、系统硬件描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。3、VHDL语言可以与工艺无关编程。当门级或门级以上的描述通过仿真验证后,再利用相应的工具将设计映射成不同的工艺(如MOS、CMOS等)。这样,在工艺更新时,就无须修改原设计程序,只要改变相应的映射工具就行了。4、VHDL语言标准、规范,易于共享和重复利用。二、VHDL的基本语法规则1、词法规则2、标识符3、保留字4、VHDL的数据类型5、VHDL的运算操作符2-1词法规则2-1-1注释•由两个短线“--”开始的一行文字,如:--thisisacounter2-1-2数字•十进制整数表示法:01212_345(=12345)•以基数表示:2#1110_1001#,16#AB0#E1•实数:必需带小数点。12.03.1440.05.54E-22-1-3字符和字符串•字符:用单引号引起来的ASCII字符,可以是数字,也可以是符号或字母。•字符串:是一维的字符数组,需放在双引号中。如:“FALSE”,B“100”2-2标识符•短标识符(VHDL’87)VHDL的短标识符必须遵守以下规则:1、必须以英文字母开头;2、英文字母、数字(0~9)和下划线都是有效的字符;3、短标识符不区分大小写;4、下划线(_)的前后都必须有英文字母或数字;如:A_15、不能和VHDL语言的保留字重名。•扩展标识符(VHDL’93)2-1-4下标名和段名下标名用于指示数组型变量或信号的某一元素。下标段名则表示数组型变量或信号的某一段元素。下标名的语句格式为:标识符(表达式)SIGNALa,b:STD_LOGIC_VECTOR(OTO3);SIGNALX,Y:STD_LOGIC;X=a(2);Y=b(3);2-3保留字•VHDL内部用的字符串,标识符不能与保留字重名如:ifelseelsifendwaitwhencaseentityarchitecturepackagecomponentxnorxor2-4VHDL的数据类型•客体:凡是可以赋予一个值的对象就称客体。常数:对某一常数赋予一个固定值。变量:在进程和子程序中使用,是一个局部量。信号:是电路内部硬件连接的抽象。常数常数说明格式为:CONSTANT常数名:数据类型:=表达式;如:CONSTANTVCC:REAL:=5.0;•常量是一个恒定不变的量,一旦被赋值就不能再改变。变量•变量只能在进程和子程序中使用,是一个局部量,不能将信息带出所定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何延迟。变量定义语句的格式为:VARIABLE变量名:数据类型约束条件:=初始值;例如:VARIABLEn:INTEGERRANGE0TO15:=2;信号•信号信号定义语句的格式为:SIGNAL信号名:数据类型约束条件:=表达式;例如:SIGNALdata:STD_LOGIC_VECTOR(7DOWNTO0);信号赋值语句的格式为:目标信号名=表达式;例如:y=‘0’;信号与变量的区别信号和变量是VHDL中的重要客体,它们之间的主要区别有:•信号赋值至少有δ延时;而变量赋值没有延时。•信号除当前值外有许多相关信息,如历史信息;而变量只有当前值。•进程对信号敏感而不对变量敏感。•信号可以是多个进程的全局信号。•数据类型1、标准数据类型2、用户自定义数据类型3、IEEE预定义标准标准数据类型(10种)•整数(INTERGER)•自然数(Natural)和正整数(Positive)•实数(REAL)•位(BIT)位数据类型也属于枚举型,取值只能是‘1’和‘0’•位矢量(BIT_VECTOR)位矢量使用双引号括起来的一组位数据,如“1011”。使用位矢量时必须注明位宽,即数组中元素个数和排列,如:SIGNALS1:BIT_VECTOR(15DOWNTO0);标准数据类型(10种)•布尔量:TRUE,FALSE•字符(CHARACTER)•字符串•时间:•错误等级在VHDL仿真器中,错误等级类型数据用来表征系统的状态,它共有4种:NOTE(注意),WARNING(警告),ERROR(出错),FAILLURE(失败)。用户自定义数据类型可以由用户定义的数据类型有:•枚举类型、整数类型、数组类型、存取类型•文件类型、时间类型、实数类型用户用TYPE语句定义自己的数据类型。TYPE语句的格式为:TYPE数据类型名IS数据类型定义OF基本数据类型;例如:TYPEwordISARRAY(0TO15)OFSTD_LOGIC;IEEE预定义标准•标准化数据类型IEEE’93增加了多值逻辑包STD_LOGIC_1164,使得“STD_LOGIC”数据具有9种不同的值。其定义如下:TYPESTD_LOGICIS(‘U’,--初始值‘X’,--不定‘0’,--0‘1’,--1‘Z’,--高阻‘W’,--弱信号不定‘L’,--弱信号0‘H’,--弱信号1‘-’--不可能情况);“STD_LOGIC”和“STD_LOGIC_VECTOR”是IEEE新制定的标准化数据类型,将它们归属到用户定义的数据类型中。•其他预定义标准数据类型无符号数据类型UNSIGNED、有符号数据类型SIGNED、小整形SMALL_INT。在包集合STD_LOGIC_ARITH中就定义了有符号数据类型和无符号数据类型。•数据类型转换在VHDL语言中不同数据类型的对象之间是不能进行运算和直接代入的。为了实现正确的代入操作,必须将要代入的数据进行类型转换。类型转换可用转换函数实现,转换函数通常由VHDL语言的包集合提供。例如,在STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_UNSIGNED包集合中就提供了数据类型转换函数。TO_STDLOGICVECTOR(A)--由BIT_VECTOR转换为STD_LOGIC_VECTOR2-5VHDL运算操作符•算术运算:+,-,*,/,MOD,REM,+(正),-(负),**,ABS。•逻辑运算:AND,OR,NAND,NOR,XOR,NOR和NOT。•关系运算:=,/=,,,=,=。•并置运算:用于位连接。(‘0’&A)•运算符优先级:NOT,ABS,**,乘法运算符,正负,加、减、并,关系,逻辑运算符。括号可改变运算次序下面以加法器为例说明并置运算符的用法:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadditionISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);Q1:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDaddition;ARCHITECTUREbehavOFadditionISBEGINPROCESS(A,B)BEGINQ1=(‘0’&A)+(‘0’&B);ENDPROCESS;ENDbehav;三、VHDL程序的基本结构一个完整的VHDL语言程序通常包含:实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)五部分。•实体(Entity):“symbol”•构造体(Architecture):•配置(Configuration):•包集合(Package):•库(Library):3-1实体•实体说明实体说明定义了一个给定的设计单元及该设计单元与周围的接口,它具有如下结构:ENTITY实体名IS[类属参数说明][端口说明]END实体名;类属参数说明与端口说明•类属参数说明[可选]GENERIC[CONSTANT]名字表:[IN]子类型标志[:=静态表达式],…];•端口说明PORT(端口名{,端口名}:方向数据类型;…端口名{,端口名}:方向数据类型);端口方向端口方向用来定义外部引脚的信号方向是输入还是输出。表示方向的说明符及含义如下表所示:方向定义含义IN输入OUT输出(构造体内部不能再使用)INOUT双向BUFFER输出(构造体内部可再使用)LINKAGE不指定方向,无论哪个方向都可连接实体举例1下面为一个异步复位的D触发器的实体说明entitydff_async_rstisport(D,CLK,RESET:inSTD_LOGIC;Q:outSTD_LOGIC);enddff_async_rst;实体举例2二选一电路的实体说明:entitymuxisport(a:instd_logic;b:instd_logic;s:instd_logic;f:outstd_logic)endmux;ABSF实体举例3带类属参数说明的实体:entityadderisgeneric(width:integer:=2);port(in_a:instd_logic_vector(width-1downto0);in_b:instd_logic_vector(width-1downto0);z:outstd_logic_vector(width-1downto0);carry:outstd_logic));endentityadder;3-2构造体构造体:确定基本设计单元输入输出关系,即它定义了设计单元的具体功能。•构造体说明•构造体的描述方式行为描述寄存器传输级描述(RTL描述)结构描述构造体的说明一定要跟在实体的后面,书写格式:可任意取,但一般用描述方式定义ARCHITECTURE构造体名OF实体名IS[定义语句]内部信号,常数,数据类型,函数等的定义(可选)BEGIN[并行处理语句]END构造体名;behevdataflowstructrual构造体举例1具有异步复位的D触发器的构造体:architecturebehavofdff_async_rstisbeginprocess(CLK,RESET)beginif(RESET=‘0’)thenQ=‘0’;elsif(CLK’EVENTANDCLK=’1’)thenQ=D;endif;endprocess;endb
本文标题:第七章VHDL语言简介
链接地址:https://www.777doc.com/doc-3309292 .html