VerilogHDL基础语法.ppt_第1页
VerilogHDL基础语法.ppt_第2页
VerilogHDL基础语法.ppt_第3页
VerilogHDL基础语法.ppt_第4页
VerilogHDL基础语法.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

VerilogHDL基础语法,本章主要内容,VerilogHDL语言的特点VerilogHDL语言的描述方式模块与端口注释常量,变量与逻辑值操作符操作数参数编译指令系统任务和函数程序实例,3.1VerilogHDL的特点,并行性:所谓的并行性就是说可以同时做几件事情。Verilog语言不会顾及代码顺序问题,几个代码块可以同时执行;而软件语言必须按顺序执行,上一句执行不成功,就不能执行下一句。时序性:Verilog语言可以用来描述过去的时间和相应发生的事件;而软件语言则做不到。互连:互连是硬件系统中的一个基本概念,Verilog语言中的wire变量可以很好地表达这样的功能;而软件语言并没有这样的描述。,3.2VerilogHDL的描述方式,VerilogHDL采用三种描述方式来进行设计:数据流描述:采用assign语句,连续赋值,数据实时变化,赋值对象一般定义为wire型。行为级描述:使用always或者initial语句,过程赋值,赋值对象一般定义为reg型,不一定会形成寄存器。结构化模型:通过实例化已有的功能模块来建模。在一个设计中我们往往会混合使用这三种描述方式。VerilogHDL是对大小写敏感的语言,同样的词汇,大写和小写是不同的符号。,图31典型的Verilog设计描述示意图,3.3模块和端口,模块是Verilog的基本描述单元,可大可小,大到一个复杂的系统,小到一些基本的逻辑门单元,主要用来描述某个设计的功能或结构及其与其他功能模块通信的外部端口。对于模块而言,需要有一个模块名称来标示模块,在端口列表的括号后面一定要以“;”结束。模块一般都有端口列表,端口与端口之间用“,”隔开。但是仿真语言没有端口列表,因为仿真是一个封闭的系统,端口已经实例化在内部。端口声明部分需要声明端口的方向和位宽。,module模块名称(端口列表);/端口定义声明;input,output,inout/内部变量及参数声明wire,reg,functioion,task,parameter,define,etc/模块功能实现数据流描述:assign行为级描述:initial,always结构化描述:module例化其他用户原语endmodule,例31端口声明/PortDeclarationinput4:0a;/信号名为a的5输入信号inoutb;/双向信号boutput6:0c;/信号名为c的7输出总线信号,有些设计会把端口的声明部分和端口列表写在一起,在端口中可以对每个信号进行注释。例32VerilogHDL2001端口声明modulecounter(inputclk,/全局时钟信号inputreset_l,/全局复位信号output7:0cnt/八位数据总线);,模块内部变量声明中,wire型的线网是不具备数据存取功能的,一般而言,input的缺省定义就是wire型,output信号可以是wire型,也可以reg型。定义为wire型的线网是不能够在always语句中被赋值的,只能被连续赋值。而reg型的则可以存取最后一次赋给它的值,定义为reg型的线网只能在always和initial语句中被赋值,不能被连续赋值。注意:所有的关键字都必须小写。定义为reg型的线网不一定会生成寄存器。,尽管信号和内部变量定义声明只要出现在被调用的语句之前就行,可是代码风格一般要求在执行语句之前就定义好,这样可以提高代码的可读性。在声明后,便是功能执行语句,功能执行语句包括always语句、initial语句、assign语句、task、function、模块例化等等。可以混合描述,没有先后顺序,但是要注意的是initial语句只能用于仿真程序中,不能生成实际的电路。任何一个模块都要以“endmodule”结束。,3.4注释,VerilogHDL提供了两种注释的方式:一种以“/”开始,注释的是一行中的余下部分。例33以“/”开始的注释assigna=b?c:d;/输出为a的两输入的选择器,例34以/*/表示的注释assigna=b?c:d;/注释下面的功能语句/*always(*)beginif(b)a=c;elsea=d;end*/,3.5常量、变量与逻辑值,常量就是不变的数值,比如说4d8,表示的是一个4位宽的十进制整数8。在Verilog中,有三种不同类型的常量:整数型、实数型以及字符串型。整数型常量可以直接使用十进制的数字表示。基数表示法的格式如下:长度+数制简写+数字当设定的位宽比实际数字的位宽少,则自动截去左边超出的位数,反之则在左边不够的位置补足0。如果长度不显示,那么数字的位宽则取决于本身的长度。如果遇到的是x或者z时,如4hx,位宽大于实际数字的位宽,这个时候在左边不是补0,而是补x,变量分为线网型和寄存器型两种。线网型表示电路之间的互连,没有存取功能。它有许多子类型:wire、tri、tri0、tri1、wor、wand、trireg、supply1、supply0等等。wire可用于可综合的逻辑设计中,而其他的一般用于仿真程序中。另外除了trireg型的变量在未初始化的状态为x态,其它时候都是z态。寄存器型表示数据的存取,在仿真器中会占据一个内存空间。寄存器型也有许多子类型,包括reg、integer、time、real、realtime等等。用reg可以表示一位或者多位的寄存器,也可以表示存取器。,例35采用reg表示的寄存器和存取器rega;/1位寄存器areg4:0b;/5位寄存器breg7:0c10:1;/10*8的存取器寄存器可以按位来存取,可是存取器必须按地址来存取。一般采用for语句来给存取器来赋值。定义为reg型的变量可以生成寄存器,也可以生成MUX,所以需要视具体的功能执行而定。x状态是一种未定的状态,描述信号未被初始化的情形,在casex和casez语句中表示不关心。z状态表示高阻状况,用来表示三态建模。在真实的电子世界中以及在综合软件中,都不会出现x状态,只有亚稳态的状况。,Verilog的四种逻辑值,0、低、伪、逻辑低、地、VSS、负插入,1、高、真、逻辑高、电源、VDD、正插入,X、不确定:逻辑冲突无法确定其逻辑值,HiZ、高阻抗、三态、无驱动源,3.6操作符,按位操作符是对操作数中的每一位分别进行操作,得出一个新的操作数,其具体的操作符如下所示。表31按位操作符,例36按位操作符示例A=4b1011B=4b1101C=4b10 x1A=4b0100A/参数AB=0;/参数BC=2b0 x;/参数CD=2b10;/参数DA/参数AB=2b10;/参数BA,B=4b00102A,3B=10b00_0010_1010,不同操作符之间的地位不一样,数值运算必须遵循优先级由高到低的顺序,为了避免这样的混淆和错误,增加代码的可读性,最好用“()”来区分表35优先级别表,例310简单的操作符运算a=4b1000b=4b0111(1)!(ab)=!(TRUE)=FALSE(ab)|(a=b)=TRUE|FALSE=TRUE(2)a|b=(1|0|0|0)|(0|1|1|1)=TRUE|TRUE=TRUE(3)a,3.9编译指令,Verilog语言采用了一些编译指令来实现某些特定的编译。它们主要有:定义宏(define、undef)、条件编译指令(ifdef、else、endif)、文件包含(include)、时间单位和精度定义(timescale)等等。在每个模块前面加一个timescale编译指令,可以确保在仿真时候延时信息按照timescale所制定的时间单位和精度进行编译,直到遇到下一个timescale或者resetall指令为止。timescale的格式:timescale1ns/100ps表示时延单位为1ns,精度为100ps。,define表示定义宏。是一个全局变量,可以被多个文件采用,直到运到undef为止。例312采用define定义一个总线宽度为8的总线,条件编译指令的格式一般如下:ifdefNORMALparameterA=B;elseparameterA=C;endif如果宏NORMAL事先已经被定义好,则编译器会执行parameterA=B;语句,否则执行parameterA=C;语句。,3.10系统任务和系统函数,显示任务(displaytask)显示任务用于信息的显示和输出,它将特定信息输出到标准输出设备,其基本语法结构如下:task_name(format_specification,argument_list1);表36显示任务编译指令基本信息表,$display用来显示变量值、字符串等信息,常用于VerilogHDL断言,其基本格式如下:$display(“Attime=%t,SystemisOK/n”,$time);当系统运行到这个语句时,会显示当时的实时时间如下(假设为50.002ns):Attime=50.002ns,SystemisOK,文件输入/输出任务(FileI/Otask)文件的输入输出任务主要分为三部分:文件的打开和关闭,文件的数据读取以及文件的输出。文件的打开和关闭常采用$fopen和$fclose两个关键字来表示。$fopen和$fclose是一起配合使用的,表示打开一个文件和关闭一个文件,其基本格式如下:/打开一个文件integerfile_point=$fopen(file_name);/关闭一个文件$fclose(file_point);,打开一个文件,就需要对文件进行操作,一般有两种方式:一种是把监视探测到的信息写入文件,另外一种是从文件中读取数据,数据一般从文本文件中读取并将数据保存到存取器中。第一种方式与显示任务相似,它也分为显示、写入、探测和监控系统任务,只是这些任务最终会把数据显示到文件中去,因此需要一个文件指针表37文件输入指令基本信息表,$readmemb和$readmemh用来从文件中读取数据。文本文件包含空白空间、注释和二进制或十六进制数字。数字与数字之间用空白空间隔离。开始地址对应于存取器最左边的索引。例313文件的输入输出任务操作示例integerData_OUT;Data_OUT=$fopen(“Data_OUT.txt”);$fdisplay(Data_OUT,”Attime%t,Systemisoff/n”,$time);$fclose(Data_out);,时间标度任务(timescaletask)时间标度任务$printtimescale用来给出指定模块的时间单位和时间精度,基本格式如下。$printtimescale(模块路径);$printtimescale(模块路径);时间标度任务$timeformat则用来指明%t格式定义如何报告时间信息,其基本格式如下。$timeformat(unit_number,perision,suffix,numeric_field_width);,模拟控制任务(simulationcontroltask)模拟控制任务主要有两个系统任务:$finish和$stop。它们之间主要的不同在于$finish是强迫模拟器退出,并将控制权返回给操作系统,而$stop仅仅是模拟被挂起,模拟器不会被强迫退出,交互命令可以被送往模拟器。,时序验证任务(timingchecktask)时序验证任务主要用来检测并报告信号的各种时序是否满足系统要求,包括建立时间、保持时间、时钟周期等。表38时序验证任务基本信息表,实数变换函数(conversionfunctionsforreal)表39实数变换函数基本信息表,概率分布函数(probabilisticdistributionfunction)概率分布函数一般用来产生一系列随机数来验证系统的功能是否正确。概率分布函数一般采用$random(seed)。根据种子变量seed的取值按32位的有符号整数形式返回一个随机数。,3.11实例:数据选择器,数据选择器的功能是:根据选择信号,决定哪路输入信号送到输出信号.输出信号不仅与输入信号有关,还与选择信号有关,数据选择器的VerilogHDL语言代码如下:moduledataselector(/模块的开始a,/输入b,/输入c,/输入d,/输入,sel,/输入en,/输入y/输出);inputa;inputb;inputc;inputd;input1:0sel;/两位的数据选择信号,总共有四个状态inputen;/选择器使能信号,outputy;/输出结果信号,regy;/输出信号寄存器,always(aorborcordorseloren)/always过程块begin/begin-end为顺序块,语句是顺序执行的if(1b1=en)/if-else条件分支语句begincase(sel)/case分支控制语句2b00:y=a;/=为赋值语句,这里是把a赋给y2b01:y=b;2b10:y=c;,2b11:y=d;default:y=1bz;endcaseendelsey=1bz;endendmodule/整个模块结束,3.12数据分配器,moduledatadistributor(datain,sel,en,a,b,c,d);inputdatain;input1:0sel;inputen;outputa;outputb;outputc;outputd;rega,b,c,d;,always(datainoreno

温馨提示

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

最新文档

评论

0/150

提交评论