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

下载本文档

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

文档简介

VerilogHDL语法的基础,本章的主要内容,VerilogHDL语言的特征VerilogHDL语言的描述方式模块和端口注释常数,变量和逻辑值操作符的操作数参数编译指令系统任务和函数程序示例,3.1VerilogHDL的特征,并行性Verilog语言不考虑代码顺序问题,可以同时执行多个代码块。软件语言必须按顺序执行,如果上一个语句执行不成功,则下一个语句不能执行。 时间序列: Verilog语言可用于描述过去的时间及其相应事件。软件语言不可用。 互连:互连是硬件系统的基本概念,Verilog语言的wire变量在能够很好地表达这些功能的软件语言中没有这样的描述。 3.2VerilogHDL的记述方式,VerilogHDL采用3种记述方式设计:流记述:采用assign语句,连续分配,数据实时变化,分配目的地一般定义为wire型。 行为级别说明:使用always或initial语句进行过程赋值,赋值对象通常定义为reg类型,不一定形成寄存器。 结构化模型:实例化和建模现有的功能模块。 一种设计通常将这三种描述方法结合使用。 VerilogHDL是一种对大小写敏感的语言,同一个词,大小写是不同的符号。 图3-1示出了一个典型的Verilog设计视图,3.3模块和端口,模块是Verilog的基本描述单元,它是小的、大的、复杂的系统,小的和一些基本的逻辑门单元,描述了主要的设计功能和结构以及与其它功能模块通信的外部端口。 模块必须具有指示模块的模块名称。 在端口列表的括号后面加上“; 中所述情节,对概念设计中的量体体积进行分析。 模块通常包含端口列表,端口和端口之间用“、”分隔。 然而,模拟语言没有端口列表。 模拟是一个封闭系统,端口已在其内部实例化。 端口声明部分要求声明端口的方向和位宽。 模块名称(端口列表)/端口定义声明input,output,inout/内部变量和参数声明wire,reg,functio,task,parameter,define, etc/模块功能实现数据流描述:assign动作级别描述:initial,always结构化描述:module实例化其他用户原语endmodule,例31端口声明/portdeclarationinput /信号名称a的5输入信号inoutb; /双向信号boutput6:0c; /信号名称c的7输出总线信号具有可以将端口的宣言部分和端口列表一起写入并向端口注释各信号的设计。 例3-2VerilogHDL2001端口宣言module counter (输入clk,/全局时钟信号inputreset_l, /全局复位信号output7:0cnt/比特数据总线)、模块内部变量宣言中,wire型的线栅不具有数据访问功能,但一般来说input的默认定义是wire型,output信号既可以是wire型,也可以是reg型定义为wire类型的线网格不能在always语句中指定,只能连续指定。 reg类型可以访问最后分配的值,定义为reg类型的网只能在always和initial语句中分配,不能连续分配。 注意:所有关键字必须是小写的。 被定义为reg型的线网不一定生成寄存器。 此外,虽然信号和内部变量的定义声明只要在调用语句之前即可,但代码样式通常需要在执行语句之前定义,这可以提高代码的可读性。 声明后面跟着always语句、initial语句、assign语句、task、function和模块实例化等功能执行语句。 请注意,描述可以混合使用,没有优先级,但initial语句只能用于模拟器,不能生成实际的电路。 所有模块都以“结束模块”结束。 3.4注释,VerilogHDL提供了两种注释方式。 一个以/开头,注释是一行的其馀部分。示例3-3以/开头的注释assigna=b? c:d; /输出为a的双输入选择器,例3-4/*/表示的注释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表示1位或多位寄存器,也可以表示存取器。 以例35reg表示的寄存器与存取器rega /1位寄存器areg4:0b; /5位寄存器breg7:0c10:1; /10*8的存取寄存器可通过位进行存取,但存取器必须通过地址进行存取。 通常使用for语句为访问器分配值。 因为被定义为reg型的变量能够生成寄存器和MUX,所以根据具体的功能执行而不同。 x的状态是未确定的状态,记述着信号没有被初始化,表示在casex和casez文件中不在意。 z状态表示高电阻状态,用于表示三态建模。 无论是现实的电子世界还是综合软件,都不会出现x状态,只有准稳定的状况。 Verilog的4种逻辑值,0,低,假,逻辑低,地,VSS,负插入,1,高,真,逻辑高,电源,VDD,正插入,x,不确定:逻辑冲突不能确定其逻辑值,HiZ,高阻抗,三态,没有驱动源,3.6运算符,VerilogHDL语言和c语言相似,丰富的运算符与算术运算符、位运算符、约束运算符、逻辑运算符、等效运算符、关系运算符、逻辑移位运算符、条件运算符有连接的大多数运算符的使用方法与c语言相同,是VerilogHDL语言的规范,例如, IEEE-sasstanddarddsboardieesttandddddrelireloghardwordersdrectionionlanguage 17 match 2001,位操作员分别操作操作数的各位,得到新的操作数表3-1位操作器,例3-6位操作器例a=4b 1011 b=4b 1101 c=4b 10x1 a=4b 0100 a/参数AB=0; /参数BC=2b0 x; /参数CD=2b10; /参数DA/参数AB=2b10; /参数BA,b=4b0010a,3b在运算符之间的地位不同,数值运算必须按照优先级从高到低的顺序进行。 为了避免这样的混淆和错误,为了提高代码的可读性,优选用“()”区分表3-5优先级表,例3-10简单的运算符运算符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 (3) a,3.9编译指令,其中Verilog语言实现了特定的编译指令主要包括定义宏( define、 undef )、条件编译指令( ifdef、 else、 endif )、文件包含( include )、时间单位和精度定义( timescale )等。如果在每个模块之前添加“timescale”编译指令,则可以确保在模拟期间按timescale指定的时间单位和精度编译延迟信息,直到找到下一个“timescale”或“resetall”指令。 timescale格式: timescale1ns/100ps表示延迟单位为1ns,精度为100ps。 define表示定义宏。 是全局变量,直到undef都可以用于多个文件。 示例3-12如果使用define定义总线宽度为8的总线,则条件编译指令的格式通常如下所示: ifdefNORMALparameterA=B; elseparameterA=C; 如果预定义了 endif宏NORMAL,则编译器将使用参数a=b; 句子。 否则,请执行parameterA=C。 3.10系统任务、系统函数和“显示任务”(displaytask )显示任务用于显示和输出信息,并将特定信息输出到标准输出设备。 基本语法结构为task_name(format_specification,argument_list1); 表3-6中任务编译指令的基本信息表、$display用于显示变量值、字符串等信息,常用于VerilogHDL断言。 基本格式为: $display(“Attime=%t,SystemisOK/n,$time ); 系统执行此语句时,当时的实时时间显示如下(假设为50.002ns):Attime=50.002ns、SystemisOK、文件输入输出任务(FileI/Otask )文件的输入输出任务主要是打开和关闭文件文件的打开和关闭通常由关键字$fopen和$fclose表示。 $fopen和$fclose意味着打开文件和关闭文件。 基本形式如下: integer file _ point=$ fopen (file _ name ); /关闭文件$fclose(file_point ),打开一个文件后,必须处理该文件。 一般来说,将监视检测到的信息写入文件、从文件读取数据、数据通常从文本文件读取,数据保存在访问设备中。 第一种方法与显示任务类似,系统任务也分为显示、写入、检测、监视,但由于这些任务最终将数据显示在文件中,因此文件指针表37文件输入命令基本信息表、$readmemb和$readmemh从文件中输入数据文本文件包含空格、注释、二进制文件或十六进制文件。 数字和数字之间用空格分隔。 起始地址对应于访问器左端的索引。 示例3-13文件的输入/输出任务操作示例integer data _ out data _ out=$ fopen (“data _ out.txt”) $fredisplay(data_out)$time; $fclose(Data_out )、时间比例任务$printtimescale用于提供指定模块的时间单位和时间精度。 基本形式如下: $printtimescale (模块路径) $printtimescale (模块路径)时间比例任务$timeformat用于定义%t格式报告时间信息的方式。 基本格式如下: $timeformat(unit_number,perision,suffix,numeric_field_width ),模拟控制任务(simulatedcontroltask )模拟控制任务主要有两个系统任务: suffix 主要区别在于,$finish强制终止模拟器并将控制权重返回到操作系统,但是,$stop不会强制终止模拟器,而是向模拟器发送交互命令。 时序验证任务主要用于检测和报告信号的每个时序是否满足系统要求。 表3-8时间序列验证任务基本信息表、实数转换函数(conversionfunctionsforreal )表3-9实数转换函数基本信息表、概率分布函数(probabilisticdistributionfunction )概率分布函数一般来说,系统功能是否正确概率分布函数一般采用$random(seed )。 根据种子变量seed的可能值,将随机数返回为32位有符号整数。3.11例:数据选择器、数据选择器的功能由:基于选择信号来决定发送哪个输入信号到输出信号。 输出信号不仅与输入信号有关,还与选择信号有关,数据选择器的VerilogHDL语言代码是:moduledataselector(/模块的开始a,/输入b,/输入c,/输入d,/输入,sel,/输入en,/输入y/输出); inputa; 输入b; inputc; 输入; input1:0sel; /2位数据选择信号共有4个状态inputen选择器使能信号,outputy; /输出结果信号,regy; /输出信号寄存器,always (aorborcordorsseloren )/always程序块begin/begin-end是顺序块,文件是顺序执行的if(1b1=en)/if-else条件分支文件begin case (sel /=是赋值语句,其中a赋予y2b01:y=b,2b10:y=c; 2b11:y=d; defa

温馨提示

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

评论

0/150

提交评论