VLSI电路设计课设VHDL语言基础胡小玲主要内容z硬件描述语言简介zVHDL基本结构zVHDL数据和表达式zVHDL描述语句z系统仿真z综合硬件描述语言HDLzHardwareDescriptionLanguage广义地说,描述电子实体的语言:逻辑图,电路图。硬件描述语言能在高层设计阶段描述硬件。z起源:大规模电路的出现,使得逻辑图、布尔方程不太适用,需要在更高层次上描述系统;出现多种HDL语言,为便于信息交换和维护,出现工业标准。•分类:VHDL、VerilogHDL等。硬件描述语言HDLzHDL语言的特点–用HDL语言设计电路能够获得非常抽象的描述–用HDL描述电路设计,在设计的前期就可以完成电路功能级的验证–用HDL设计电路类似于计算机编程。带有注解的文字描述更有利于电路的开发与调试z能提供HDL模拟器的公司:Cadence、Altera、MentorGraphics、Synopsys等大型EDA公司和专门公司学习HDL的几点重要提示了解HDL的可综合性问题HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现)。不可综合的HDL语句在软件综合时将被忽略或者报错。我们应当牢记一点:“所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。”用硬件电路设计思想来编写HDL学好HDL的关键是充分理解HDL语句和硬件电路的关系。编写HDL,就是在描述一个电路,我们写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言。要做到这一点,需要我们多实践,多思考,多总结。语法掌握贵在精,不在多30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用的多。VHDLvs.VerilogHDL●VHDL和VerilogHDL都是用于逻辑设计的硬件描述语言并且都已成为IEEE标准。VHDL是在1987年成为IEEE标准,VerilogHDL则在1995年才正式成为IEEE标准。●VHDL和VerilogHDL共同的特点:◆能形式化地抽象表示电路的行为和结构◆支持逻辑设计中层次与范围的描述,可借用高级语言的精巧结构来简化电路行为的描述◆具有电路仿真与验证机制以保证设计的正确性◆支持电路描述由高层次到低层次的综合转换◆硬件描述与实现工艺无关,有关工艺参数可通过语言提供的属性包括进去便于文档管理,易于理解和设计重用。VHDLvs.VerilogHDLVerilogHDL和VHDL又各有其自己的特点:◆VerilogHDL拥有更广泛的设计群体,成熟的资源也远比VHDL丰富◆VerilogHDL是一种非常容易掌握的硬件描述语言(类C语言),而掌握VHDL设计技术就相对比较困难(语法要求严格)◆一般认为VerilogHDL在系统级抽象方面比VHDL略差一些而在门级开关电路描述方面比VHDL强得多◆大学、研究机构更多使用VHDL,而工业界更多使用VerilogHDLVHDLvs.VerilogHDL■目前,设计者使用Verilog和VHDL的情况●美国:Verilog:60%,VHDL:40%●台湾:Verilog:50%,VHDL:50%■两者的区别●VHDL侧重于系统级描述,从而更多的为系统级设计人员所采用●Verilog侧重于电路级描述,从而更多的为电路级设计人员所采用VHDLvs.VerilogHDLVHDL简介z1980由美国国防部(DOD)推动作为VHSIC计划的一部分;z1983IBM、Ti和Intermetrics公司的工程师开发一种新的基于语言的设计方法的规范;z1985VHDL的第一个公开Version7.2;z1987VHDL成为标准,IEEE1076-1987;VHDL标准程序包,IEEE1164;美国国防部要求所有的电子设计使用VHDL描述,并决定在F-22战斗机项目中使用VHDL。z1994发布VHDL增强标准,IEEE1076-1993;z1996完全符合IEEE1076’93的VHDL商业仿真器和综合器发布;用于综合工具的程序包IEEE1076.3;IEEE1076.4(VITAL),用于ASIC和FPGA建库;z1997VHDL-AMS(IEEE1076.1)发布可以在一种语言下对数字、模拟和混合信号系统进行描述和仿真;VHSIC(VeryHighSpeedIntegratedCircuit)计划zVHDL是美国国防部在70年代末和80年代初提出的VHSIC(VeryHighSpeedIntegratedCircuit)计划的产物。zVHSIC计划的目标当时是为下一代集成电路的生产,推出在IC设计与制造应达到的工艺极限(1µMcmos、1万门和40MHz)。z工艺方面的目标实现以后,但当时的工具很难完成10万门级的设计。由于工具差不多是建立在门级基础之上,完成10万门级设计,必须制订一项新的HDL的描述方法。zVHSIC计划和同期的ARPAR(先进的计算机体系结构)计划,成为了后来信息高速公路计划的基础。VHDL基本结构z实体-Entityz结构体-Architecturez配置-Configurationz包集合—Package/PackageBody:z库—Library:VHDL语言五大要素VHDL基本结构示意--eqcomp4isafourbitequalitycomparatorLIBIARYIEEE;USEIEEE.std_logic_1164.all;ENTITYeqcomp4ISPORT(a,b:instd_logic_vector(3downto0);equal:outstd_logic);ENDeqcomp4;ARCHITECTUREdataflowOFeqcomp4ISBEGINequal=‘1’whena=belse‘0’;ENDdataflow;VHDL大小写不敏感eqcomp4.vhd包实体结构体文件名和实体名一致每行;结尾关键字BEGIN关键字END后跟实体名关键字END后跟结构体名库--表示说明语句VHDL基本结构—实体描述实体描述:实体在电路中主要是说明该电路的输入、输出关系,更具体地说就是用来定义实体与外部的连接关系以及需传送给实体的参数。实体描述的一般格式为ENTITY实体名IS[GENERIC(类属表说明);][PORT(端口表说明);][实体说明部分;]END[ENTITY][实体名];注意:[]中的部分为可缺省内容VHDL不区分大小写例:2输入与非门的实体说明ENTITYand2ISGENERIC(tpd_hl,tpd_lh:time:=2ns);PORT(input:INBit_vector(1TO0);output:OUTBit);ENDand2;类属表说明实体名端口说明注:类属表和端口说明用于说明实体和其外部环境通信的对象。类属为实体和其外部环境通信的静态信息提供通道;昀常用的信息是器件的上升沿到下降沿的延迟时间、负载电容和电阻、驱动能力以及功耗等。端口说明是对实体与外部接口的描述。例:全加器的实体说明ENTITYfull_adderISPORT(X,Y,Cin:INBit;Sum,Cout:OUTBit);ENDfull_adder;一位全加器XYCinCoutSum一位全加器框图端口模式zVHDL提供了四种端口模式z输入(IN):允许数据流入实体,而不允许数据流出实体。z输出(OUT):允许数据流出实体,而不允许数据流入实体。z双向(INOUT):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口。z缓冲(BUFFER):与OUT类似,只是缓冲模式允许内部引用该端口的信号。端口模式说明:zIN不可以出现在=或:=的左边zOUT不可以出现在=或:=的右边zBUFFER可以出现在=或:=的两边zIN信号只能被引用,不能被赋值zOUT信号只能被赋值,不能被引用zBUFFER信号可以被引用,也可以被赋值端口模式Out与Buffer的区别Entitytest1isport(a:instd_logic;b,c:outstd_logic);endtest1;architectureaoftest1isbeginb=not(a);c=b;enda;Entitytest2isport(a:instd_logic;b:bufferstd_logic;c:outstd_logic);endtest2;architectureaoftest2isbeginb=not(a);c=b;enda;ErrorVHDL基本结构—结构体描述结构体描述:结构体具体地描述了设计实体的逻辑功能或内部电路结构关系,从而建立设计实体输入与输出之间的关系。结构体功能可以用三种方式进行描述,即行为描述、数据流描述、结构描述,另外,还可以采用混合描述。z结构体的格式为ARCHITECTURE结构体名OF实体名IS[定义语句](内部信号,常数,数据类型,函数等的定义;)BEGIN[并行处理语句];END[ARCHITECTURE][结构体名];VHDL基本结构—结构体描述说明:(1)结构体名称的命令。结构体的名称是对本结构的命名,它是该结构体的唯一名称。“OF”后面紧跟的实体名表明了该实体所对应的是哪一个实体。用“IS”来结束结构体的命名。(2)定义语句。位于“ARCHITECTURE”和“BEGIN”之间。用于对结构体内部所使用的信号常数、数据类型和函数等进行定义。(3)并行处理语句。处于“BEGIN”和“END”之间。具体描述了结构体的行为及其连接关系。结构体有三种描述方式–行为描述(behavioral)–数据流描述(dataflow)–结构化描述(structural)结构体的行为描述结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来描述,不包含电子实体内部的任何结构信息。行为描述在EDA工程中称为高层次描述或高级描述。结构体的行为描述Architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=‘1’;elseequal=‘0’;endif;endprocesscomp;endbehavioral;高层次的功能描述,不必考虑在电路中到底是怎样实现的。结构体的数据流描述它反映了从输入数据到输出数据之间所发生的逻辑变换,或者说描述了数据流程的运动路径、运动方向和运动结果。结构体的数据流描述Architecturedataflow1ofeqcomp4isbeginequal=‘1’whena=belse‘0’;enddataflow1;Architecturedataflow2ofeqcomp4isbeginequal=not(a(0)xorb(0))andnot(a(1)xorb(1))andnot(a(2)xorb(2))andnot(a(3)xorb(3));enddataflow2;当a和b的宽度发生变化时,需要修改设计,当宽度过大时,设计非常繁琐结构体的结构化描述结构化描述就是把一个复杂的电子实体按其不同硬件电路功能划分成若干部分,然后对各部件进行具体的描述。结构体的结构化描述architecturestructofeqcomp4isbeginU0:xnor2portmap(a(0),b(0),x(0));U1:xnor2portmap(a(1),b(1),x(1));U2:xnor2portmap(a(2),b(2),x(2));U3:xnor2portmap(a(3),b(3),x(3));U4:and4portmap(x(0),