第7章+硬件描述语言简介.ppt_第1页
第7章+硬件描述语言简介.ppt_第2页
第7章+硬件描述语言简介.ppt_第3页
第7章+硬件描述语言简介.ppt_第4页
第7章+硬件描述语言简介.ppt_第5页
已阅读5页,还剩268页未读 继续免费阅读

下载本文档

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

文档简介

第七章硬件描述语言简介,7.1VHDL语言简介7.2VerilogHDL语言简介,7.1VHDL语言简介,7.1.1VHDL概述1.VHDL的发展史VHDL是美国国防部在20世纪70年代末80年代初提出的VHSIC(VeryHighSpeedIntegratedCircuit)计划的产物,1981年提出了一种新的硬件描述语言,称为VHSICHardwareDescriptionLanguage也就是我们熟知的VHDL。,2.采用VHDL语言的硬件电路设计方法VHDL设计数字系统一般采用自上而下(TopDown)的分层设计方法。所谓自上而下的设计方法,就是从系统总体出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。,(1)第一层行为描述,就是对整个系统的数学模型进行描述。(2)第二层RTL方式描述,即寄存器传输描述,也称为数据流描述。(3)第三层逻辑综合,就是利用逻辑综合工具,将RTL方式描述的程序转换成用基本元件表示的文件(门级网表)。,3.采用VHDL语言设计硬件电路的优点与其它HDL语言相比,VHDL语言具有以下优点:(1)设计技术齐全,方法灵活,支持广泛。(2)系统硬件描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。(3)VHDL语言编程可以与工艺无关。(4)VHDL语言标准、规范,易于共享和重复利用。,4.VHDL语言的词法规则、标识符及保留字在编写VHDL语言程序时,必须遵循VHDL语言的词法规则。VHDL语言中有一些保留字,这些保留字不能用作信号名或实体名。1)词法规则(1)注释。为了提高VHDL语言源程序的可读性,在VHDL中可以写入注释。,(2)数字。数字型文字可以有多种表示方式:可以是十进制数,也可以表示为以二进制、八进制或十六进制等为基的数;可以是整数,也可以是含有小数点的浮点数。(3)字符和字符串。字符是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母,如0,E,A等。(4)下标名和段名。下标名用于指示数组型变量或信号的某一元素。下标段名则表示数组型变量或信号的某一段元素。,2)标识符标识符是最常用的操作符,可以是常数、变量、信号、子程序或参数的名字。VHDL93对VHDL87版本的标识符语法规则进行了扩展,通常称VHDL87版本标识符为短标识符,VHDL93版本标识符为扩展标识符。(1)短标识符。(2)扩展标识符。(3)VHDL语言的保留字。,7.1.2VHDL语言程序的基本结构一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)五部分。,1.VHDL语言设计的基本单元及其构成VHDL语言设计的基本设计单元(DesignEntity)是VHDL中最基本的硬件抽象概念(abstraction),它表示一个具有确定的输入输出并完成确定功能的硬件设计部分。,1)实体说明实体说明定义了一个给定的设计单元及该设计单元与周围的接口,它具有如下结构:ENTITY实体名IS类属参数说明端口说明END实体名;,(1)类属参数说明。类属参数说明是实体说明中的可选项,必须放在端口说明之前,用于指定参数。其书写格式为GENERICCONSTANT名字表:IN子类型标志:=静态表达式,;,(2)端口说明。端口说明是对基本设计实体与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入输出方向的描述,其一般书写格式为PORT(端口名,端口名:方向数据类型;端口名,端口名:方向数据类型);,端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母或者用英文字母加数字来命名,如D0,CLK;端口方向用来定义外部引脚的信号方向是输入还是输出,表示方向的说明符及含义如表7-1所示;在VHDL中有许多数据类型,但逻辑电路设计中最常用的数据类型为STD-LOGIC和STD-LOGIC-VECTOR。,表7-1端口方向说明,2)构造体构造体是一个基本设计单元的实体,它确定基本设计单元的输入输出关系,即它定义了设计单元的具体功能。构造体可用3种方式来描述基本设计单元的输入输出关系,即行为描述、寄存器传输描述和结构描述。,由于构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。一个构造体的书写格式如下:ARCHITECTURE构造体名OF实体名IS定义语句内部信号,常数,数据类型,函数等的定义BEGIN并行处理语句END构造体名;,(1)构造体名称的命名。构造体的名称可以由设计者自由命名。(2)定义语句。定义语句是构造体的说明部分,位于ARCHITECTURE和BEGIN之间,用于对构造体内所用的信号、常数、数据类型和函数进行定义。(3)并行处理语句。并行处理语句是构造体的语句部分,位于BEGIN和END之间,这些语句具体描述构造体的行为及连接关系。,下面仍以异步复位的D触发器为例来说明构造体的描述方法:ARCHITECTUREbehavOFdff-async-rstISBENINPROCESS(CLK,RESET)BEGINIF(RESET=0)thenQ=0;ELSIF(CLKEVENTANDCLK=1)THEN,QBB2,Y=BB3);下面以4bit伪随机序列产生器为例来说明结构描述的使用。其电路如图7-1所示。,图7-14bit伪随机序列产生器,该伪随机序列产生器的VHDL语言结构描述如下:LIBRARYA40MX;USEA40MX.ALL;LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;USEIEEE.STD-LOGIC-ARITH.ALL;ENTITYTESTISPROT(QOUT:OUTSTD-LOGIC;CLKIN,CLRIN:INSTD-LOGIC);ENDTEST;,ARCHITECTURESTRUCTUALOFTESTISCOMPONENTDFCIBPORT(D:INSTD-LOGIC;CLK:INSTD-LOGIC;CLR:INSTD-LOGIC;Q:OUTSTD-LOGIC);ENDCOMPONENT;COMPONENTXNOR2PRORT(A:INSTD-LOGIC;B:INSTD-LOGIC;Y:OUTSTD-LOGIC);ENDCOMPONENT;,SIGNALQ1:STD-LOGIC;SIGNALQ2:STD-LOGIC;SIGNALQ3:STD-LOGIC;SIGNALQ4:STD-LOGIC;SIGNALY1:STD-LOGIC;BENIGQOUT=Q4;,U1:DFC1BPORTMAP(Y1,CLKIN,CLRIN,Q1);U2:DFC1BPORTMAP(Q1,CLKIN,CLRIN,Q2);U3:DFC1BPORTMAP(Q2,CLKIN,CLRIN,Q3);U4:DFC1BPORTMAP(Q3,CLKIN,CLRIN,Q4);U5:XNOR2PORTMAP(Q3,Q4,Y1);ENDSTRUCTURE;,7.1.5VHDL语言的主要描述语句在VHDL语言中,按描述语句的执行顺序对其分类,可将VHDL语句分为顺序执行语句和并发语句。并发语句在结构体中的执行顺序是同时并发执行的,其执行顺序与书写次序无关,而顺序执行语句的执行顺序是按照语句的书写次序执行的。,1.顺序(Sequential)描述语句顺序语句是指完全按照程序书写的顺序执行的语句,并且在结构层次中前面语句的执行结果会直接影响后面各语句的执行结果。VHDL顺序语句主要包括WAIT语句、信号代入语句、变量赋值语句、IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句、RETURN语句、过程调用语句、断言语句以及NULL语句。,空(NULL)语句表示只占位置的一种空处理操作。它的惟一功能就是使程序执行下一个语句。NULL常用于CASE语句中,利用NULL来表示所余的不用条件下的操作行为,以满足CASE语句对条件值全部列举的要求。,1)WAIT语句WAIT语句在进程中起到与敏感信号一样重要的作用,敏感信号触发进程的执行,WAIT语句同步进程的执行,同步条件由WAIT语句指明。进程在仿真运行中处于执行或挂起两种状态之一。当进程执行到WAIT语句时,就将被挂起并设置好再次执行的条件。WAIT语句可以设置4种不同的条件:无限等待,时间到,条件满足以及敏感信号变化。它们的书写格式如下:,WAIT无限等待;WAITON敏感信号量变化;WAITUNTIL条件满足;WAITFOR时间到。通常只有WAITUNTIL格式的等待语句可以被VHDL综合器综合。WAITUNTIL语句的书写格式为WAITUNTIL表达式;,WAITUNTIL语句后面跟的是布尔表达式,在布尔表达式中隐式地建立一个敏感信号量表,当表中的任何一个信号量发生变化时,就立即对表达式进行一次评测,如果表达式结果为真,则进程脱离挂起状态,继续执行下面语句。,WAITUNTIL语句有以下三种表达方式:WAITUNTIL信号=VALUE;WAITUNTIL信号EVENTAND信号=VALUE;WAITUNTILNOT信号STABLEAND信号=VALUE;,进程中使用WAIT语句应满足以下两个条件:(1)进程中不能既有敏感量表又有WAIT语句。(2)WAIT语句要么是进程的第一个语句,要么是进程的最后一个语句。,下面以D触发器为例来说明WAIT语句的用法:ENTITYdffISPORT(D,CLK,RESET:INSTD-LOGIC;Q:OUTSTD-LOGIC);ENDdff;ARCHITECTUREwait-statementOFdffIS,BEGINPROCESS注意进程无敏感量表BEGIN进程在此等待直至条件满足WAITUNTILrising-edge(CLK);Q=D;ENDPROCESS;ENDwait-statement;,2)信号代入语句信号代入语句的书写格式为目的信号量=信号表达式;注意:=两边的信号量的类型和位长度应该一致。,3)变量赋值语句变量赋值语句的书写格式为目的变量:=表达式;该语句表明,目的变量的值将由表达式的新值替代,但两者的类型必须相同。,书写变量赋值语句应注意以下几点:(1)VHDL中变量赋值限定在进程、函数和过程等顺序区域内。(2)变量赋值无时间特性。(3)变量具有局部性。,4)IF语句IF语句根据指定的条件来确定执行哪些语句,按其书写格式,通常可分为三种类型。(1)门闩控制语句。门闩控制语句的书写格式为IF条件THEN顺序处理语句;ENDIF;其中,条件为布尔量,即“真”或“假”。当条件为“真”时,执行顺序处理语句;否则,执行IF的后继语句。,(2)二选择控制语句。当IF语句用作二选择控制时的书写格式为IF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;,(3)多选择控制的IF语句。多选择控制的IF语句又称为IF语句的嵌套,其书写格式为IF条件THEN顺序处理语句;ELSIF条件THEN顺序处理语句;ELSIF条件THEN顺序处理语句;,ELSE顺序处理语句;ENDIF;,下面以4bit计数器为例说明IF语句的用法:LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;USEIEEE.STD-LOGIC-UNSIGNED.ALL;ENTITYcounter4ISPORT(CLK,RESETN,LOAD,ENABLE:INSTD-LOGIC;CNT-IN:INSTD-LOGIC-VECTOR(3DOWNTO0);,COUNT:OUTSTD-LOGIC-VECTOR(3DOWNTO0);ENDcounter4;ARCHITECTURErtlOFcounter4ISSIGNALTEMP-COUNT:STD-LOGIC-VECTOR(3DOWNTO0);BEGINCOUN-PROC:PROCESS(CLK,RESETN),BEGINIF(ZK(RESETN=0)THENTEMP-COUNT0);ELSIFRISING-EDGE(CLK)THENIF(LOAD=1)THENTEMP-COUNT=CNT-IN;ELSIF(ENABLE=1)THENTEMP-CONT顺序处理语句;-某个值WHEN值|值|值|值=顺序处理语句-多个值“或”WHEN值TO值=顺序处理语句;-取值范围WHENOTHERS=顺序处理语句;-其它所有值,当CASE和IS之间的表达式的值满足指定的条件表达式的值时,程序将执行由符号=所指的顺序处理语句。下面以4选1多路选择器为例说明CASE语句的用法。,4:1MultiplexorUsingACaseStatementLIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;ENTITYmuxISPORT(C,D,E,F:INSTD-LOGIC;S:INSTD-LOGIC-VECTOR(1DOWNTO0);MUXOUT:OUTSTD-LOGIC);ENDmux;,ARCHITECTUREmy-muxOFmuxISBGEGINPROCESS(S,C,D,E,F)BEGINCASESISWHEN00=MUXOUTMUXOUTMUXOUTMUXOUT=F;ENDCASE;ENDPROCESS;ENDmy-mux;,6)LOOP语句LOOP语句就是循环语句,它可以使包含的一组顺序语句被循环执行,其执行次数受迭代算法控制。(1)单个LOOP语句。单个LOOP语句的书写格式为标号:LOOP顺序语句ENDLOOP标号;,(2)FORLOOP语句。FORLOOP语句的书写格式为标号:FOR循环变量IN离散范围LOOP顺序语句ENDLOOP标号;FOR后面的循环变量是一个属于LOOP语句的局部的临时变量,无须事先定义,即它由LOOP语句自动定义,只能作为赋值源,不能被赋值。因此,在LOOP语句范围内不能使用其它与此循环变量同名的标识符。,下面以8bit奇偶校验电路为例说明FORLOOP语句的用法:LIBRARYIEEE;USEIEEE.std-logic-1164.ALL;ENTITYparity-checkISPORT(a:instd-logic-vector(7DOWNTO0);y:outstd-logic);ENDparity-check;,ARCHITECTUREWHILE-LOOPOFparity-checkISBEGINPROCESS(a)variabletmp:std-logic;BEGINtmp:=0;forIin0to7looptmp:=tmpXORa(i);ENDLOOP;y=tmp;ENDPROCESS;ENDrtl;,(3)WHILELOOP语句。WHILELOOP语句的书写格式为标号:WHILE条件LOOP顺序处理语句ENDLOOP标号;,在该LOOP语句中,没有给出循环次数的范围,而是给出了循环执行顺序语句的条件;没有自动递增循环变量的功能,所以必须在顺序处理语句中增加一条循环次数计算语句,用于循环控制。循环控制条件为布尔表达式,当条件为“真”时,则进行循环;如果条件为“假”,则结束循环。8bit奇偶校验电路也可采用WHILELOOP语句实现:,ARCHITECTURErtlOFparity-checkISBEGINPROCESS(a)variabletmp:std-logic;BEGINtmp:=0;i:=0;WHILE(i8)LOOPtmp:=tmpXORa(i);i=i+1;,ENDLOOP;y=tmp;ENDPROCESS;ENDrtl;,2.并发(Concurrent)描述语句并发语句最能体现VHDL作为硬件描述语言的特色。VHDL语言中并发语句有:,PROCESS进程语句CONCURRENTSIGNALASSIGNMENT并发信号代入语句CONDITIONALSIGNALASSIGNMENT条件信号代入语句SELECTIVESIGNALASSIGNMENT选择信号代入语句CONCURRENTPROCEDURECALL并发过程调用语句BLOCK块语句,1)进程语句进程语句是最主要的并发语句,也是最能体现硬件描述语言特点的一条语句。在一个构造体中,多个进程语句可同时并发运行。进程语句归纳起来主要有以下几个要点:(1)它可以与其它进程并发运行,并可存取实体或构造体中定义的信号。(2)进程语句是并发语句,而进程结构中的语句是顺序语句,是按顺序一条一条执行的。,(3)进程的启动可用敏感量或在进程中包含WAIT语句。(4)进程之间的通信是通过信号传递来实现的。2)并发信号代入语句信号代入语句用在并发执行场合就是并发信号代入语句。,3)条件信号代入语句条件代入语句可根据不同条件将不同的表达式代入信号量,其书写格式为目的信号量=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE表达式n;,下面以比较相等的比较器为例来说明条件信号代入语句的用法:LIBRARYIEEE;USEIEEE.std-logic-1164.ALL;ENTITYequalityISPORT(A:inSTD-LOGIC-VECTOR(3downto0);B:inSTD-LOGIC-VECTOR(3downto0);Q1:outSTD-LOGIC;Q2:outSTD-LOGIC);,ENDequality;ARCHITECTUREequality-archOFequalityISBEGINQ1=1WHENA=BELSE0;equalityQ2=1WHENA/=BELSE0;inequalityENDequality-arch;,4)选择信号代入语句选择信号代入语句类似于CASE语句,它对表达式进行测试,当表达式取值不同时,将使不同的值代入目的信号量。选择信号代入语句的书写格式为WITH表达式SELECT目的信号量=表达式1WHEN条件1表达式2WHEN条件2表达式nWHEN条件n,下面以2选1电路为例说明该语句的用法:LIBRARYIEEE;USEIEEE.std-logic-1164.all;ENTITYmuxISPORT(output-signal:outstd-logic;a,b,sel:instd-logic);ENDmux;,ARCHITECTUREwith-select-whenOFmuxISBEGINwithselselectoutput-signalYoutYoutYoutYoutYoutYoutYoutYoutYout=00000000;,ENDCASE;ENDIF;ENDPROCESS;ENDdecode-arch;,2.时序逻辑电路的设计时序逻辑电路就是具有记忆(或内部状态)的电路,即时序逻辑电路的输出不但与当前的输入状态有关,而且与以前的输入状态有关。时序电路的内部状态元件可以由边沿敏感的触发器或由电平敏感的锁存器实现,但大多数时序电路采用触发器来实现。,时序电路又可分为同步时序电路和异步时序电路两种,大部分时序电路为同步时序电路,所以下面就介绍同步时序电路的设计。1)时钟信号的描述用VHDL语言设计计数器电路时,必须确定计数器是在时钟信号的哪个边沿计数的,因此必须对时钟信号的边沿进行描述。描述时钟信号边沿有两种方法,即用信号的属性函数signalEVENT或者标准逻辑包提供的rising-edge和falling-edge函数来描述,如时钟信号ACLK的上升沿可用下面两种方法来描述:,ACLKEVENTANDACLK=1或rising-edge(ACLK)时钟的下降沿可用下面两种方法来描述:ACLKEVENTANDACLK=0或falling-edge(ACLK),2)复位信号的描述时序电路的初始状态由复位信号来设置,根据复位操作是否与时钟信号有关可把复位信号分为同步复位和异步复位两种。在VHDL中描述异步复位信号可通过以下方式来实现:首先在进程的敏感量中加入复位信号;然后利用IF语句描述复位条件。描述同步复位操作是通过在以时钟信号作为敏感信号的进程中,利用IF语句描述复位信号来实现的。下面以同步复位的D触发器来说明同步复位的实现方法:,LIBRARYIEEE;USEIEEE.std-logic-1164.ALL;ENTITYdff-sync-rstISPORT(data,clk,reset:instd-logic;q:outstd-logic);ENDdff-sync-rst;ARCHITECTUREbehavOFdff-sync-rstIS,BEGINPROCESS(clk)BEGINIF(clkeventandclk=1)THENIF(reset=0)THENq=0;ELSEq=data;ENDIF;ENDIF;ENDPROCESS;ENDbehav;,3)同步计数器的设计同步计数器是在时钟脉冲控制下各触发器同时发生变化的计数器,在时序电路设计中应用最为广泛。下面以异步复位、同步预置的Nbit同步计数器为例说明同步计数器的设计方法:,LIBRARYIEEE;USEIEEE.std-logic-1164.ALL;USEIEEE.std-logic-unsigned.ALL;USEIEEE.std-logic-arith.ALL;ENTITYcounterISGENERIC(width:integer:=n);PORT(data:instd-logic-vector(width-1downto0);,load,en,clk,rst:instd-logic;q:outstd-logic-vector(width-1downto0);ENDcounter;ARCHITECTUREbehaveOFcounterISSIGNALcount:std-logic-vector(width-1downto0);,BEGINPROCESS(clk,rst)BEGINIFrst=1THENcount0);ELSIF(clkeventandclk=1)T,HENIFload=1THENcount=data;ELSIFen=1THENcount=count+1;ENDIF;ENDIF;ENDPROCESS;q=count;ENDbehave;,3.VHDL的仿真VHDL语言是一种硬件描述语言,我们设计的VHDL程序就是对数字系统的描述。为了验证所设计的模块是否正确,还必须对这些模块进行仿真。仿真采用VHDL仿真器(Simulator)进行。通过仿真器,设计者可对各设计层次的设计模块进行仿真,以确定这些设计模块的功能、逻辑关系及定时关系是否满足设计要求。,仿真可分为功能仿真和定时仿真。功能仿真用于验证设计模块的逻辑功能,定时仿真用来验证设计模块的时序关系。无论哪种仿真,都需要在输入端加输入信号,即激励信号,然后运行仿真器,仿真器根据电路模型产生所设计电路对激励信号的响应,设计者通过对响应信号的分析(如观察波形)来确定所设计电路是否正确。,4.逻辑综合所谓综合(Synthesis),就是将高抽象层次的描述自动地转换到较低抽象层次的一种方法。通常综合可分为三个层次,即高层次综合(High-LevelSynthesis)、逻辑综合(LogicSynthesis)和版图综合(LayoutSynthesis)。一般逻辑综合的过程如图7-2所示。,图7-2一般的逻辑综合过程,1)约束条件在逻辑综合过程中,优化输出和工艺映射要求有相应的约束条件。对于同样的系统,采用不同的约束条件(面积、延迟、功耗、可测性等),其实现结构是不同的。(1)面积约束条件。在将设计转换成门级电路时,通常要加面积约束条件。,(2)延迟约束条件。时间延迟约束条件最常用的描述方法是指定输入/输出的最大延迟时间。2)属性描述用属性描述来界定设计的环境,例如由属性来规定所设计电路的负载数、驱动能力和输入信号定时等。,3)工艺库根据约束条件进行逻辑综合时,工艺库将持有综合工具所必需的全部信息,即工艺库不仅仅含有ASIC单元的逻辑功能,而且还有该单元的面积、输入到输出的定时关系、输出的扇出限制和对单元的定时检查。,4)逻辑综合的基本步骤应用逻辑综合工具将RTL描述转换为门级描述,可分为下面3个步骤。第一步,将RTL描述转换成未优化的门级布尔描述(如与门、或门、触发器等)。第二步,执行优化算法,产生优化的布尔描述。第三步,按半导体工艺要求,采用相应的工艺库,把优化的布尔描述映射成实际的逻辑电路。,7.2VerilogHDL语言简介,7.2.1VerilogHDL概述1.VerilogHDL发展史VerilogHDL是在C语言基础上发展起来的一种硬件描述语言,它是由GDA(GatewayDesignAutomation)公司的PhilMoorby于1983年创建的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。,2.VerilogHDL与VHDL的比较VerilogHDL与VHDL是目前两种最常用的硬件描述语言,同时也都是IEEE标准化的硬件描述语言,它们主要有以下几点不同:(1)从推出过程来看,VHDL偏重于标准化方面的考虑,而VerilogHDL与EDA工具的结合更为紧密。,(2)与VHDL相比,VerilogHDL的编程风格更加简洁明了,高效便捷。如果从描述结构上考察,两者的代码比为31。(3)目前市场上的EDA工具都同时支持这两种语言,而在ASIC设计领域,VerilogHDL占有优势。,3.VerilogHDL语言的词法规则、标识符及保留字1)间隔符VerilogHDL的间隔符包括空格符(b)、tab(t)、换行符(n)及换页符。如果间隔符并非出现在字符串中,则该间隔符被忽略。,2)注释符VerilogHDL支持两种形式的注释符:/*-*/和/。其中,/*-*/为多行注释符,用于写多行注释;/为单行注释,/后面直到行尾为注释文字。,3)逻辑值VerilogHDL的逻辑值可取以下4类值:0:逻辑0或假状态;1:逻辑1或真状态;z:高阻态;x:未知状态。,4)标识符VerilogHDL标识符应满足以下规则:(1)必须以英文字母或下划线(-)开头。(2)标识符可以由英文字母、数字、下划线(-)或$符号组成。(3)VerilogHDL标识符是区分大小写的。5)保留字保留字是VerilogHDL语言内部的专用词,所有的关键字都采用小写形式。如表7-3所示。,表7-3VerilogHDL语言的保留字,7.2.2VerilogHDL中的模块及描述方式VerilogHDL是以模块集合的形式来描述数字系统的,模块是该语言的基本单元,根据抽象层次的不同,可用两种不同的描述方式来描述一个模块。1.模块的概念与结构模块是VerilogHDL的基本单元,它用于描述某个设计的功能或结构及其与其它模块的外部接口。模块可以代表从简单门元件到复杂系统的任何一个硬件电路。,模块的基本语法如下:module模块名(端口列表);端口说明(input,out,inout)参数定义可选数据类型定义连续赋值语句(assign)过程块(initial和always)行为描述语句低层模块实例任务和函数延时说明块endmodule,调用模块实例的一般格式为模块名参数列表实例名(端口列表);VerilogHDL程序是由模块组成的,每个模块的内容都包含在“module”和“endmodule”两个语句之间。每个模块要进行端口定义,说明输入、输出端口。VerilogHDL程序的书写格式与C语言类似,一行可以写多条语句,也可以一条语句分成多行写,每条语句以分号结束,但endmodule语句后面不必写分号。,2.模块的描述方式VerilogHDL模块代表硬件上的逻辑实体,其范围可以从简单的门到整个电路系统。模块可以根据所采用的不同描述方式而分成行为描述和结构描述两类,也可采用两种方式的组合。下面分别介绍这几种描述方式。,1)行为描述方式行为描述是一种对模块行为功能的抽象描述,是通过行为语句来实现的,行为功能可使用下述过程语句描述:(1)initial语句:此语句只执行一次。(2)always语句:此语句循环执行。,只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原来值不变。所有的initial语句和always语句在0时刻并发执行。下面给出用行为描述实现1位全加器的例子:,moduleadder(a-in,b-in,c-in,s-out,c-out);inputa-in,b-in;inputc-in;outputc-out,s-out;assignc-out,s-out=a-in+b-in+c-in;endmodule,2)结构描述方式结构描述是对模块内部的硬件组成结构所进行的具体描述,是通过实例进行描述的方法。它将VerilogHDL中预定义的基本元件实例嵌入到语言中,监控实例的输入,一旦其中任何一个发生变化,便重新运算并输出。在VerilogHDL中可使用的结构描述部件有:用户自定义的模块,用户自定义元件(UDP),内置门级元件和内置开关级元件。下面给出用结构描述实现1位全加器的例子(1位全加器电路结构如图7-3所示):,图7-31位全加器,modulefull-adder(c-out,s-out,a-in,b-in,c-in);outputc-out,s-out;inputa-in,b-in,c-in;wirew1,w2,w3;parameterAND-DELAY=2;parameterOR-DELAY=2;parameterXOR-DELAY=4;,andAND-DELAYA1(w1,a-in,b-in);andAND-DELAYA2(w2,b-in,c-in);andAND-DELAYA3(w3,c-in,a-in);orOR-DELAYO1(c-out,w1,w2,w3);xorXOR-DELAYX1(s-out,a-in,b-in,c-in);endmodule,3)混合描述方式在模块中,用户可以混合使用结构描述和行为描述方式,即模块中可以包含门的实例、模块实例语句、连续赋值语句、always语句和initial语句以及它们的混合语句,并且它们之间可以相互包含。,7.2.3VerilogHDL的数据类型及运算符1.数据类型VerilogHDL不仅支持如整型、实型等抽象的数据类型,同时也支持物理数据类型来表示真实的硬件。1)物理数据类型连线型和寄存器型是VerilogHDL中最主要的两种数据类型,这两种类型的变量在定义时均要设置位宽,当缺省状态时,位宽默认为1位。变量的每一位可以取0、1、x或z中的任意值。,(1)连线型数据。连线型数据对应于硬件电路中的物理信号连线,没有电荷保持作用(trireg除外)。连线型数据必须有驱动源驱动。有两种方式可对它进行驱动:一种是在结构描述中把它连接到一个门或模块的输出端;另一种是用连续赋值语句always对其赋值。当没有驱动源对其驱动时,它将保持高阻态。,为了能够精确地反映硬件电路中各种可能的物理信号连接特性,VerilogHDL提供了多种连线型数据。表7-4给出了VerilogHDL中的连线型数据及其功能描述。连线型数据类型的声明格式为连线型数据的类型范围延迟时间变量列表;如:wiresignal1,signal2;/两个连线型数据tri7:0bus;/8位三态总线,表7-4VerilogHDL中的连线型数据,(2)寄存器型数据。寄存器型数据对应于具有状态保持作用的硬件电路元件,如触发器、锁存器等。若寄存器型数据未初始化,它将为未知状态x。寄存器型数据的关键字为reg,省缺时为1位数。寄存器型数据与连线型数据的区别在于:寄存器型数据保持最后一次的赋值,而连线型数据需要有持续的驱动。寄存器型数据的驱动可以通过过程赋值语句实现,过程赋值语句只能出现在过程语句后面的过程块中。,寄存器型数据的声明格式为reg范围变量列表;如:regd1;/1位寄存器reg3:0state;/4位寄存器,2)抽象数据类型除了与具体的硬件电路对应的物理数据类型外,VerilogHDL还提供了以下4种抽象数据类型。抽象型数据类型只是纯数学的抽象描述,不与任何实际的物理硬件相对应。(1)整型(integer)。整型数据常用于对循环变量进行说明,在算术运算中被视为二进制补码形式的有符号数。,除了寄存器型数据被当作无符号数处理之外,整型数据与32位寄存器型数据在实际意义上相同。整型数据的声明格式为integer寄存器型变量列表;整型数据可以是二进制(b或B)、十进制(D或d)、十六进制(h或H)与八进制(O或o)。整型数可以有下面三种书写形

温馨提示

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

评论

0/150

提交评论