第4章 VerilogHDL语言基础

上传人:小*** 文档编号:243431044 上传时间:2024-09-23 格式:PPT 页数:68 大小:1.79MB
返回 下载 相关 举报
第4章 VerilogHDL语言基础_第1页
第1页 / 共68页
第4章 VerilogHDL语言基础_第2页
第2页 / 共68页
第4章 VerilogHDL语言基础_第3页
第3页 / 共68页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,第四章,Verilog HDL,语言基础,2,4.1,什么是,Verilog HDL,?,Verilog HDL,是目前应用最为广泛的硬件描述语言。,Verilog HDL,可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。,Verilog HDL,适合算法级,寄存器级,逻辑级,开关级、系统级和版图级等各个层次的设计和描述。,Verilog HDL,进行设计最大的优点是其工艺无关性。这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路。,3,Verilog HDL,模块化设计理念,Verilog HDL,支持以模块集合的形式构造数字系统。利用层次化、结构化的设计方法,一个完整的硬件设计任务可以划分成若干个模块,每一个模块又可以划分成若干个子模块,子模块还可以进一步划分。,各个模块可以是自主开发的模块,也可以是从商业渠道购买的具有知识产权的,IP,核。,4,4,2 VerilogHDL,基础知识,Verilog HDL,的运算符与,C,语言的运算符几乎完全相同,但数据类型是,Verilog HDL,特有的。,在实际应用中,要认真体会、深入理解硬件描述语言与软件编程语言的本质区别。,4,2,1 VerilogHDL,模块结构,模块是,Verilog HDL,的基本单元,,用于描述某个设计的功能或结构以及与其他模块通信的外部端口,。,模块的实际意义是代表硬件电路上的逻辑实体,每个模块都实现特定的功能。,5,模块的基本结构,6,Verilog HDL,语言描述,模块结构举例,VerilogHDL,模块结构完全嵌在,module,和,endmodule,关键字之间,包括四部分,即模块声明、端口定义、信号类型说明和逻辑功能定义。,7,1,模块声明,模块声明包括模块名和模块的端口列表。其格式如下:,Module,模块名,(,端口名,1,端口名,2,端口名,n),;,模块的其他部分,endmodule,模块结束关键字,模块端口列表中端口名的排列顺序是任意的。,8,2,端口,(Port),定义,端口是模块与外界或其他模块进行连接、通信的信号线。因此,对端口列表中哪些端口是输入端口、哪些端口是输出端口要进行明确说明。,在,Verilog HDL,中有,3,种端口类型;输入端口、输出端口、双向端口,(,既可用作输入也可用作输出,),。,9,)用,input,定义输入端口,格式如下:,input ,位宽,端口名,1,,端口名,2,,,,端口名,n,;,)用,output,定义输出端口,格式如下:,output ,位宽,端口名,1,,端口名,2,,,,端口名,n,;,)用,inout,定义双向端口,格式如下:,inout ,位宽,端口名,1,,端口名,2,,,,端口名,n,;,使用上述,3,种定义格式时应注意:,位宽的说明应遵循,n:1,或,n-1:0,的规则;,不同位宽的端口应分别定义;,位宽说明省略时,默认值为,1,。,10,3,数据,(,信号,),类型说明,在模块中用到的所有信号,(,包括端口信号、节点信号、中间变量等,),都必须进行数据类型的定义。,VerilogHDL,中提供了各种信号类型,最常用的是,连线型,(wire),、寄存器型,(reg),和参数型,(parameter),。,数据类型定义的实例:,reg 4,:,1 cout,;,定义信号,cout,的数据类型为,4,位寄存器,(reg),型,wire a,,,b,,,c,;,定义信号,a,,,b,,,c,为,1,位连线,(wire),型,注意:,输入端口,和,双向端口,不能说明为寄存器型;端口信号的数据类型说明缺省时,,EDA,的综合器将其默认为,wire,型。,11,4,逻辑功能定义,模块中的核心部分是逻辑功能的定义。,Verilog HDL,提供了多种逻辑功能的定义方式,其中,调用逻辑门元件,(,元件例化,),、持续赋值语句,(assign),、过程块,(always),3,种定义方式比较常用。,相对应在模块设计中的,3,种描述方法:,门级描述方式、数据流描述方式、行为描述方式,以及以上混合描述方式,。,12,1,)通过调用逻辑门元件,(,元件例化,),定义,通过调用,Verilog HDL,提供的内置逻辑门元件,按照元件模型,进行它们之间的信号连接,完成逻辑电路的结构描述。,采用这种方法可以将传统的电路原理图转换成,Verilog HDL,文本形式。,例,1,:,and myand3(out,,,a,,,b),例,2,:,and u3(f,,,a,,,b,,,c),;,13,2,)用持续赋值语句,(assign),定义,assign,语句一般用在数据流描述方式中,常用来描述组合逻辑电路的功能,称为持续赋值方式。,这种描述方式比较简单,只需将传统逻辑表达式转换成符合,VerilogHDL,规范的表达式放在关键字,assign,后面即可。,例如:,assign F,(A&B)|(C&D),;,3,)用过程块,(always),定义,行为描述方式中采用,always,定义逻辑功能时,可不关心电路结构,只描述电路的行为,即在某种输入情况下产生相应的输出。,硬件描述语言支持与逻辑电路结构无关的行为描述。行为描述转化为具体电路结构的工作由,EDA,工具完成。,14,例、用,always,过程块描述一个,4,位计数器。,module counter(out,,,reset,,,clk),;,output 4,:,1 out,;,input reset,,,clk,;,reg 4,:,1 out,;,always (posedge clk),begin,if(reset) out=0,;,else out=out+1,;,end,endmodule,15,16,4.2.2,词法表示,17,18,19,20,4,2,3,数据类型,数据类型,(DataType),也称为变量类型。在,Verilog HDL,中,数据类型用来表示数字电路中的物理连线、数据存储和数据传送等物理量。,VerilogHDL,中共有,19,种数据类型,分成,连线型,(Net Type),和,寄存器型,(Register Type),两类。,其中最常用的是,wire,型、,reg,型和,parameter,型。,21,1,连线型数据,用来描述电路中的各种物理连接,没有状态保持能力,输出随着输入变化而变化。必须对网络型数据进行连续的驱动。,有两种驱动连线型数据的方式,,一是在结构描述中将其连接到逻辑门的输出端或其他模块的输出端;另一种是用,assign,语句进行赋值,。当没有获得驱动时,它的取值为,z,。,Verilog HDL,中的连线型数据包括,wire,型、,tri,型、,wor,型、,trior,型、,wand,型、,triand,型、,tril,型、,trio,型、,trireg,型、,vectored,型、,large,型、,medium,型、,scalared,型、,small,型。其中,在可综合模块中最常用的是,wire,型。,22,wire,型数据,用来表示用,assign,语句赋值的组合逻辑信号。,Verilog HDL,模块输入输出端口信号类型说明缺省时,自动定义为,wire,型。,wire,型变量可以用作任何表达时的输入,也可用作,assign,语句、元件调用语句和模块调用语句的输出。,wire,型变量的取值可为,0,、,1,、,X,、,Z,。,wire,型数据的定义格式如下:,wire ,数据名,1,,数据名,2,,,,数据名,n,;,位宽遵循,n,:,1,或,n-1,:,0,规则进行说明,可定义多位的,wire,型向量;位宽说明缺省时,默认定义,1,位的,wire,型变量,(,标量,),。不同位宽的,wire,型数据必须分别定义。,23,24,2,寄存器型数据,是物理电路中数据存储单元的抽象,对应数字电路中具有状态保持作用的元件,如触发器、寄存器等。其特点是:,具有记忆功能,必须明确赋值才能改变其状态,否则一直保持上一次的赋值状态。,设计中,,寄存器型变量只能在过程块,(,例如,always),中,通过过程赋值语句进行赋值,。换言之,,在过程块,(,如,always),内被赋值的每一个信号,都必须在数据类型说明时定义成寄存器型,。,在,Verilog HDL,中有,5,种寄存器型数据,它们是,reg,型、,integer,型、,parameter,型、,real,型和,time,型。可综合模块中使用的是,integer,型、,reg,型和,parameter,型。,25,常用寄存器型数据介绍,integer,型数据是一种纯数学的抽象描述,能定义带符号的,32,位整型数据,不对应任何具体的硬件电路。用作,for,循环语句中的循环变量。格式:,integer,变量名,1,,变量名,2,,,,变量名,n,;,reg,型数据通常用作在,always,过程块中被赋值的信号,也可用于表达式的输入。格式:,reg ,,数据名,1,,数据名,2,,,,数据名,n,;,可定义多位的,reg,型向量;位宽说明缺省时,默认定义,1,位的,reg,型变量,(,标量,),。不同位宽的,reg,型数据必须分别定义。,在使用,reg,型数据时,可以域选或全选。,26,类型定义和使用举例,27,28,4,2,4 Verilog HDL,的运算符,Verilog HDL,提供了丰富的运算符,(Operators),,按功能分成,9,大类,包括算术运算符、逻辑运算符、位运算符、关系运算符、等式运算符、归约运算符、移位运算符、条件运算符以及拼接运算符。,按运算符所带操作数的个数来区分,可分为,3,类:,单目运算符,(unaryoperator),:带一个操作数。,o-,双目运算符,(binaryoperator),:带两个操作数。,三目运算符,(ternaryoperator),:带三个操作数。,29,30,31,32,33,34,35,36,37,38,39,40,41,4,3 VerilogHDL,模块的,3,种建模方式,从,VerilogHDL,的描述风格看,分为结构描述、数据流描述、行为描述以及混合描述。,通过一个例子认识,Verilog HDL,的,3,种建模方式,图中电路实现的功能是,当,sel=0,时,,out,a,;当,sel,1,时,,out=b,。,42,43,44,45,4,3,1,模块的结构描述方式,1,结构描述的概念,Verilog HDL,结构描述是通过调用逻辑元件,描述它们之间的连接,建立逻辑电路的模型。,逻辑元件,包括,Verilog HDL,内置门级元件、内置开关级元件、自主开发的已有模块或商业,IP,模块。结构描述的核心是逻辑元件的模型及其调用方法。,与传统的具有固定输入输出数量的逻辑门器件不同,,Verilog HDL,中的内置门级元件是一种动态模型,可以根据用户调用时的输入输出列表动态生成相应的电路结构。,46,、内置,逻辑元件,47,多输入,多输出,48,49,50,51,52,4,3,2,模块的数据流描述方式,1,数据流描述的概念,根据信号,(,变量,),之间的逻辑关系,采用持续赋值语句描述逻辑电路的方式,称为数据流描述。即将传统意义上的,“,逻辑表达式,”,,运用运算符,变成持续赋值语句中的表达式。,格式:,assign,连线型变量名,=,赋值表达式;,持续赋值语句是并发执行的,每条持续赋值语句对应着独立的逻辑电路,它们的执行顺序与其在描述中的顺序无关。,53,54,55,56,4,3,模块的行为描述方式,1,行为描述的概念,逻辑电路的行为描述关注逻辑电路输入输出的因果关系,(,行为特性,),,即在何种输入条件下,产生何种输出,(,操作,),,并不关心电路的内部结构。,EDA,的综合工具能自动将行为描述转换成电路结构,形成网表文件。,当电路的规模较大或时序关系较复杂时,通常采用行为描述方式进行设计。支持电路的行为描述,是硬件描述语言的最大优势。设计人员可以摆脱传统的逻辑器件的限制,设计出各式各样的、具有特色和个性的功能模块,进而构成系统。,57,2,行为描述模型,所谓行为描述,就是在,always,过程块中采用各种行为语句描述逻辑功能。,注意:,在,always,过程块中被赋值的所有信号,(,变量,),,都必须在数据类型说明时定义为寄存器型,(,通常为,reg,型或,integer,型,),。,58,一般情况下,,always,进程带有触发条件,这些触发条件列在敏感信号表达式中,只有当触发条件满足时,,begin-end,块语句才被执行。,在一个模块中可以有多个,always,进程,它们是并发执行的。,59,always,过程块的功能是:监视敏感信号表达式,当该表达式中任意一个信号,(,变量,),的值改变时,就会执行一遍块内语句。因此,应将所有影响块内取值的信号,(,变量,),列入。,当有多个敏感信号时,用,or,连接。敏感信号表达式又称敏感事件列表。,例如:, ( a ) /,当信号,a,的值发生改变时, (a or b) /,当信号,a,或信号,b,的值发生改变时,a,和,b,称为电平敏感型信号,代表的触发事件是信号除了保持稳定状态以外的任意一种变化过程。,这种电平敏感型信号列表常用在组合逻辑的描述中,以体现输入随时影响输出的组合逻辑特性。,60,例如:,(posedge clock),/,当,clock,的上升沿到来时,(negedge clock),/,当,clock,的下降沿到来时,(posedge clock or negedge reset),/,当,clock,的上升沿到来或当,reset,的下降沿到来,clock,和,reset,信号称为边沿敏感型信号,,posedge,描述对信号的上升沿敏感;,negedge,描述对信号的下降沿敏感。,这种边沿敏感型信号列表适合描述同步时序电路,以体现同步时序电路的特点,在统一时钟作用下改变电路的状态。,61,62,3,)用,always,过程块描述组合逻辑功能,always,过程块既可以描述组合逻辑,也可以描述时序逻辑,但描述规则有区别。,用,always,过程块描述组合逻辑时应遵循以下规则:,敏感事件表达式中不应包含,posedge,和,negedge,关键词,因为组合电路的输出是由输入电平决定。,组合逻辑的所有输入信号,(,变量,),都要列入敏感事件列表,因为组合电路的输入输出关系在每个时刻都是严格成立。,always,过程块中被赋值的所有信号都必须在数据类型说明时定义成,reg,型。,在,always,过程块一律采用阻塞赋值语句对变量赋值。,63,64,65,3,Verilog HDL,行为语句,过程赋值语句,VerilogHDL,的过程赋值语句必须放在,always,过程块中,用来对寄存器型变量赋值,分为阻塞,(blocking),型赋值语句和非阻塞,(non_blocking),型赋值语句,其基本格式为:,;,被赋值变量通常是,reg,型或,integer,型变量,可以是变量的某一位或某几位,也可以是用拼接符,拼接起来的寄存器向量。,若赋值操作符采用,则称为阻塞赋值;若赋值操作符采用,,则称为非阻塞赋值。赋值表达式指符合,Verilog HDL,规范的任意表达式。,66,67,68,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!