第3章VHDL编程基础第3章VHDL编程基础第3章VHDL编程基础3.1概述3.1.1什么是VHDL?VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage第3章VHDL编程基础3.1概述3.1.2VHDL的历史80年代初由美国国防部在实施超高速集成电路(VHSIC)项目时开发的。1987年由IEEE协会批准为IEEE工业标准,称为IEEE1076-1987。各EDA公司相继推出支持VHDL的设计环境。1993年被更新为93标准,即IEEE1076-1993。进一步提高抽象描述层次,扩展系统描述能力。第3章VHDL编程基础3.1概述3.1.3VHDL的作用1)VHDL打破软、硬件的界限,传统的数字系统设计分为:硬件设计(硬件设计人员)软件设计(软件设计人员)是电子系统设计者和EDA工具之间的界面第3章VHDL编程基础3.1概述EDA工具及HDL的流行,使电子系统向集成化、大规模和高速度等方向发展。美国硅谷约有80%的ASIC和FPGA/CPLD已采用HDL进行设计。2)VHDL与CC++的比较CC++代替汇编等语言VHDL代替原理图、逻辑状态图等第3章VHDL编程基础3.1概述3)VHDL与电路原理图描述的比较VHDL具有较强的抽象描述能力,可进行系统行为级别的描述。描述更简洁,效率更高。VHDL描述与实现工艺无关电路原理图描述必须给出完整的,具体的电路结构图,不能进行抽象描述。描述繁杂,效率低。电路原理图描述与实现工艺有关。第3章VHDL编程基础3.1概述3.1.4VHDL语言特点1)VHDL具有强大的语言结构、系统硬件描述能力强、设计效率高,具有较高的抽象描述能力。如:一个可置数的16位计数器的电路原理图第3章VHDL编程基础3.1概述用VHDL语言描述的可置数的16位计数器第3章VHDL编程基础3.1概述3.1.4VHDL语言特点2)VHDL语言可读性强,易于修改和发现错误3)VHDL语言具有丰富的仿真语句和库函数,可对VHDL源代码进行早期功能仿真,有利于大系统的设计与验证。4)VHDL设计与硬件电路关系不大。5)VHDL设计不依赖于器件,与工艺无关。6)移植性好。可以封装成库用到其他项目中。7)VHDL体系符合TOP-DOWN和CE(并行工程)设计思想8)上市时间快,成本低。9)易于ASIC实现第3章VHDL编程基础3.1概述3.1.5VHDL与其他硬件描述语言的比较VHDL:具有较强的系统级抽象描述能力,适合行为级和RTL级的描述,设计者可不必了解电路细节,所以工作比较少,效率高。但对综合器的要求高,不易控制底层电路的生成。IEEEE标准,支持广泛。RTL:RegisterTranslateLevel(寄存器传输级)第3章VHDL编程基础3.1概述3.1.5VHDL与其他硬件描述语言的比较VerilogVHDL:系统级抽象描述能力比VHDL稍差,门级开关电路描述方面比VHDL强。适合RTL级和门级电路级的描述,设计者需要了解电路细节,所以工作比较多。IEEEE标准,支持广泛。ABELPALASMAHDL(AlteraHDL):系统级抽象描述能力差,一般作门级电路描述。要求设计者对电路细节有详细的了解,对综合器的性能要求低,易于控制电路资源。支持者少第3章VHDL编程基础3.1概述3.1.6VHDL设计简述VHDL主要用于描述数字系统的结构、行为、功能和接口。VHDL将一个设计(元件、电路、系统)分为:外部(可视部分、端口)内部(不可视部分、内部功能、算法)第3章VHDL编程基础3.1概述第3章VHDL编程基础2选1选择器的VHDL描述3.1概述第3章VHDL编程基础3.1概述VHDL语言的一些基本特点:1、VHDL语言由保留关键字组成2、一般,VHDL语言对字母大小写不敏感例外:‘’、“”所括的字符、字符串3、每条VHDL语句由一个分号(;)结束4、VHDL语言对空格不敏感,增加可读性;5、在“--”之后的是VHDL的注释语句6、VHDL有以下描述风格:1)行为描述2)数据流(寄存器传输RTL)描述3)结构化描述第3章VHDL编程基础3.2VHDL程序基本结构基本结构包括:实体(Entity)结构体(Architecture)配置(Configuration)库(Library)程序包(Package)第3章VHDL编程基础3.2VHDL程序基本结构3.2.1实体(说明)实体(说明):定义系统的输入输出端口语法:第3章VHDL编程基础3.2VHDL程序基本结构1、类属说明类属说明:确定实体或者组件中定义的局部常数,模块化设计时多用于不同层次模块之间信息的传递。可从外部改变内部电路结构和规模。必须放在端口说明之前。语法:第3章VHDL编程基础3.2VHDL程序基本结构类属常用于定义:实体端口的大小设计实体的物理特性:时钟信号上升沿、脉冲宽度等等定义总线宽度元件例化的数量等:元件拷贝的过程第3章VHDL编程基础3.2VHDL程序基本结构第3章VHDL编程基础3.2VHDL程序基本结构2、端口声明:端口声明:确定输入输出端口的数目和类型port(端口名称{,端口名称}:端口模式数据类型;………);端口模式:in:输入型,此端口为只读型out:输出型,此端口只能在实体内部对其赋值inout:输入输出型,既可以读也可以写buffer:缓冲型,与out相似,但可读。第3章VHDL编程基础3.2VHDL程序基本结构Out和buffer的区别第3章VHDL编程基础3.2VHDL程序基本结构数据类型:指端口上流动的数据的表达格式。为预先定义好的数据类型如:bitbit-vector、integer、std-logic、std-logic-vector例:entitynand2isport(a,b:inbit;z:outbit;)第3章VHDL编程基础3.2VHDL程序基本结构3.2.2结构体:作用:定义系统(或模块)的行为、元件和内部的连接关系,即描述其逻辑功能。两个组成部分:对数据类型、常数、信号、子程序、元件等元素的说明部分以各种不同的描述风格描述的系统的逻辑功能部分。常用的描述风格有:行为描述、数据流描述、结构化描述。第3章VHDL编程基础3.2VHDL程序基本结构一个实体可以有多个结构体第3章VHDL编程基础结构体的语法:architecture结构体名称of实体名称is[说明语句]内部信号、常数、数据类型、子程序(函数、过程)、元件等的说明begin[并行处理(功能描述)语句];end[architecture]结构体名称;注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名第3章VHDL编程基础例:结构体中错误的信号声明第3章VHDL编程基础例:一个完整描述(3bit计数器)第3章VHDL编程基础3bit计数器的等效描述(out与buffer的区别)第3章VHDL编程基础3.2.3配置一个设计实体的多种实现方式,也就是一个实体可以有多个结构体来实现,也就是不同的实现方案。3.2VHDL程序基本结构配置:从某个实体的多种接头体描述方式中选择特定的一个。第3章VHDL编程基础简单配置的语法:configuration配置明of实体名isfor选配置结构体名endfor;end配置名;3.2VHDL程序基本结构例如:一个与非门不同实现方式的配置如下:第3章VHDL编程基础3.2VHDL程序基本结构第3章VHDL编程基础配置如下:第3章VHDL编程基础一个对计数器实现多种形式的配置如下(八位)第3章VHDL编程基础一个对计数器实现多种形式的配置如下(16位)第3章VHDL编程基础一个对计数器实现多种形式的配置如下:第3章VHDL编程基础3.2.4程序包、库程序包:已定义好的常数、数据类型、元件调用说明、子程序的一个集合。目的:方便公共信息、资源的访问和共享库:多个程序包构成库第3章VHDL编程基础程序包说明的内容:常量说明:VHDL数据类型说明;元件说明;子程序说明;程序包得结构包括:程序包说明(包首)程序包主题(包体)第3章VHDL编程基础1、程序包说明(包首):语法:package程序包名is{包说明项}end程序包名;包声明项可由以下语句组成:use语句(用来包括其他程序包);类型说明;子类型说明;常量说明;信号说明;子程序说明;元件说明。第3章VHDL编程基础例:程序包说明:第3章VHDL编程基础2、程序包包体程序包的内容:子程序的实现算法包体的语法:packagebody程序包名is{包体说明项}end程序包名;包体声明项可由以下语句组成:use语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。第3章VHDL编程基础程序包首和程序包体的关系:程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。程序包首可以独立定义和实用,如下:packagesevenissubtypesegmentsisbit-vector(0to6);typebcdisrange0to9;endseven;因为没有用到子程序,没必要写包体了第3章VHDL编程基础Librarywork;usework.seven.all;entitydecoderisport(input:inbcd;drive:outsegments);enddecoder;第3章VHDL编程基础Architectureartofdecoderisbeginwithinputselectdrive=B”1111110”when0,drive=B”0110000”when1,drive=B”1101101”when2,drive=B”1111001”when3,drive=B”1111110”when4,drive=B”0110000”when5,drive=B”1101101”when6,drive=B”1111001”when7,,drive=B”0110000”when8,drive=B”1101101”when9,Endarchitectureart;第3章VHDL编程基础3、库的种类VHDL库可以分为5种:(1)IEEEE定义了四个常用的程序包:std_logic_1164(std_logictype&relatedfunctions)std_logic_arith(arithmeticfunctions)std_logic_signed(signedarithmeticfunctions)std_logic_unsigned(unsignedarithmeticfunctions)第3章VHDL编程基础TypeSTD_LOGIC:9logicvaluesystem(‘U’,‘X’,’0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)‘U’:没有初始化的值‘W’,‘L’,‘H’,weakvalues(NotsupportedbySynthesis)‘X’(not‘x’)usedforunknown‘Z’(not‘z’)usedfortri_state‘-’Don’tCare第3章VHDL编程基础(2)STD库(默认库)库中程序包为:standard定义最基本的数据类型:Bit,bit_vector,boolean,integer,Real,andTime注:TypeBit2logicvaluesystem(‘0’,‘1’)(3)面向ASIC的库(4)WORK库(默认库)(5)用户自定义库第3章VHDL编程基础4、库和程序包的使用库及程序包的说明总是放在实体单元的前面,默认库及程序包可以不做说明,用关键字library说明要使用的库,用关键字use说明要使用的库中的程序包。库及程序包的作用范围:仅限于所说明的设计实体。每一个设计实体都必须有自己完整的库及程序包的说明语句。第3章VHDL编程基础库的使用语法:library库名:程序包得使用有两种使用方式:use库名.程序包名.项目名use库名.程序包名.A