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

下载本文档

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

文档简介

第二讲VerilogHDL语言基础,内容:语言基本词法主要数据类型参数常用系统任务和函数常用编译指令表达式与运算符模块与端口,语言基本词法,Verilog中的基本词法约定与C语言类似。包含注释、分隔符、数字、字符串、标识符和关键字。Verilog是自由格式,即语句可以在一行内编写,也可跨行编写,用分号分隔。由空格(b)、制表符(t)和换行符组成空白符,在文本中起一个分隔符的作用,在编译时被忽略。例:,initialbeginTop=3b001;#2Top=3b011;end和下面的程序一样:initialbegin/单行注释,与C语言一致Top=3b001;#2Top=3b011/*多行注释,与C语言一致*/end,标识符,标识符必须以英语字母(a-z,A-Z)起头,或者用下横线符(_)起头。其中可以包含数字、$符和下横线符。标识符最长可以达到1023个字符。模块名、端口名和实例名都是标识符。Verilog语言是大小写敏感的,因此sel和SEL是两个不同的标识符。,合法和非法标识符,合法的:shift_reg_a_indexbus263,非法的:34net/不能用数字开头a*b_net/不能含有非字母符号*n263/不能含有非字母符号,例:Count、COUNT、_R1_D2、R56_68、FIVE$,特别的标识符,特别标识符是用“”符开始,以空格符结束的标识符。它可以包含任何可打印的ASCII字符。“”符和空格并不算是标识符的一部分。特别标识符往往是在综合工具自动综合生成的网表中使用。例:#sel,bus+index,A,B,Top.1,/在层次模块中的标识名,四种基本逻辑值,0、低、伪、逻辑低、地、VSS、负插入,1、高、真、逻辑高、电源、VDD、正插入,X、不确定:逻辑冲突无法确定其逻辑值,HiZ、高阻抗、三态、无驱动源,常量,VerilogHDL中有三类常量:1)整型2)实数型3)字符串型下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有意义。它们能用来提高易读性。,整数和实常数,Verilog语言中常数可以是整数或实数:整数简单十进制格式表示为有符号数,如20、10。整数基数表示方法:位数基数值其中、位数:表明该数用二进制的几位来表示基数:可以是2(b、B),8(o、O),10(d、D)或16(h、H)进制。数值:可以是所选基数的任何合法的值,包括不定值(x、X)和高阻值(z、Z)。例:64hff01,8b1101_0001,h83a,4b1xxX,4d20等基数表示中未定义位数,长度由数值决定。数值超过位数,左边超出位截掉;数值不足位数,左边补0、x或Z。实常数可以用十进制表示也可以用科学浮点数表示,例:32e-4(表示0.0032),4.1E3(表示4100),10.567,-100.00等,字符串,字符串常常用于表示需要显示的信息。与C语言相似,用8位ASCII值表示的字符可看作是无符号整数。因此字符串是8位ASCII值的序列。字符串是双引号内的字符序列。字符串不能分成多行书写。例:“INTERNALERROR”,”REACHEDHERE”。在字符串中可以用各种格式控制符,例:n换行符t制表符字符本身字符206八进制数206对应的字符,主要数据类型,Verilog有二种主要的数据类型:线网(Net)类型表示器件之间的物理连接,称为线网类型信号。寄存器(Register)类型表示抽象的数据存储单元,称为寄存器类型信号或变量。注意寄存器类型并不一定是逻辑电路中的寄存器。,线网(Net)类型,由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例:右图上,selb的改变,会自动地立刻影响或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z,线网类型信号的主要种类,在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。类型功能wire,tri对应于标准的互连线(缺省)supply1,supply2对应于电源线或接地线wor,trior对应于有多个驱动源的线或逻辑连接wand,triand对应于有多个驱动源的线与逻辑连接trireg对应于有电容存在能暂时存储电平的连接tri1,tri0对应于需要上拉或下拉的连接线网类型说明语法为:net_kindmsb:lsbnet1,net2,.,netN;例:wirestart,do;/2个1位的连线信号wand2:0addr;/一个3位的线与信号,标量和向量线网,1位线网称标量线网,多位线网称向量线网。缺省说明为标量线网。如果多个驱动源驱动一个wire(或三态线网),线网的有效值由下表决定。在定义向量线网时可选用关键词scalared或vectored。例:wirevectored3:1Grb;/不允许位选择Grb2和部分选择Grb3:2worscalared4:0Best;/与wor4:0Best相同,允许位选择/Best2和部分选择Best3:1。,寄存器类型的主要种类,寄存器类型信号或变量共有四种数据类型:类型功能.regreg寄存器类型信号,可以选择不同的位宽。integer有符号整数变量,32位宽,算术运算可产生2的补码。real有符号的浮点数,双精度。time无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻),reg寄存器类型,reg类型使用保留字reg加以说明,主要用于描述信号,形式如下:regmsb:lsbreg1,reg2,.regN;例:reg3:0Sat;/Sat为4位寄存器类型信号。regCnt;/1位寄存器类型信号。reg1:32Kisp,Pisp,Lisp;/3个32位寄存器类型信号寄存器类型信号可以取任意长度,其值通常被解释为无符号数。存储器是一个寄存器数组。存储器使用如下方式说明:regmsb:1sbmem1upper1:lower1,mem2upper2:lower2,.;例:reg3:0MyMem63:0;/MyMem为64个4位寄存器的数组。regBog5:1;/Bog为5个1位寄存器的数组。存储器只能逐个赋值。如Bog1=1b1;Bog2=1b0;,integer寄存器类型,整数寄存器存储有符号整数值。整数寄存器可以作为普通寄存器使用,典型应用为高层次行为建模。使用整数型说明形式如下:integerinteger1,integer2,.intergerNmsb:1sb;例:integerA,B,C;/三个整数型变量。integerHist6:3;/整数型变量数组。整数不能作为位向量访问,如Hist4是非法的。一个整数最少容纳32位,但是具体实现由EDA系统决定位宽。,time寄存器类型,time类型的寄存器用于存储和处理时间。time类型的寄存器使用下述方式加以说明。timetime_id1,time_id2,.,time_idNmsb:1sb;例:timeEvents31:0;/时间值数组。timeCurrTime;/CurrTime存储一个时间值。时间寄存器类型变量存储一个至少64位的时间值,单位可由系统任务设定。时间寄存器类型变量只存储无符号数。,real寄存器类型,实数寄存器类型变量,使用如下方式说明:realreal_reg1,real_reg2,.,real_regN;例:realSwing,Top;/实数变量real说明的变量用于仿真延时、负载等物理参数,缺省值为0。当将值x和z赋予real类型寄存器时,这些值作0处理。,参数(parameters),常用参数来声明程序中的常数,如时延、信号宽度。例:modulemd1(out,in1,in2);.parametercycle=20,prop_del=3,setup=cycle/2-prop_del,p1=8,x_word=16bx,file=“/user1/jmdong/design/mem_file.dat”;wirep1:0w1;/用参数来说明wire的位宽.initialbegin$open(file);.#20000display(“%s”,file);$stopend.endmodule,参数值的改写方法1,使用修改参数说明defparam,例:modulemod(out,ina,inb);parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;endmodulemoduletest;modmk(out,ina,inb);/引用mod模块实例mkdefparammk.cycle=6;endmodule,mod模块中定义参数cycle8,修改在mk模块中cycle6,参数值的改写方法2,使用带参数模块引用,例:modulemod(out,ina,inb);parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;endmodulemoduletest;mod#(5,3.20,“./my_mem.dat”)mk(out,ina,inb);endmodule,常用系统任务和函数,$符号表示Verilog的系统任务和函数常用的系统任务和函数有下面几种:$time/找到当前的仿真时间$display,$monitor/显示和监视信号值的变化$stop/暂停仿真$finish/结束仿真-例:initial$monitor($time,”a=%b,b=%h”,a,b);/每当a或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号a和b的值,$display和$monitor,$display和$monitor语法如下:Task_name(format_specification1,argument_list1,format_specification1,argument_list2,.,format_specification1,argument_list1N);显示任务将特定信息输出到标准输出设备。监控任务连续监控指定的参数。format_specification:输出格式定义,与C语言类似。argument_list:输出变量列表,与C语言类似。例如:$display(Simulationtimeis%t,$time);$monitor(At%t,D=%d,Clk=%d),$time,D,Clk,andQis%b,Q);,输出格式:%h或%H:十六进制%d或%D:十进制%o或%O:八进制%b或%B:二进制%c或%C:ASCII字符%v或%V:线网信号长度%m或%M:层次名%s或%S:字符串%t或%T:当前时间格式,常用编译指令,编译指令用主键盘左上角小写键“”起头用于指导仿真编译器在编译时采取一些特殊处理编译指令一直保持有效,直到被取消或重写resetall编译指令把所有设置的编译指令恢复到缺省状态常用的编译指令有:defineincludetimescaleuselibresetall,define编译指令,使用define编译指令能提供简单的文本替代功能define在编译时会用宏文本来替代源代码中的宏名。注意与参数区别。合理地使用define可以提高程序的可读性举例说明:defineon1b1defineoff1b0defineand_delay#3,include编译指令,使用include编译指令,在编译时能把其指定的整个文件包括进来一起处理举例说明:include“global.v”include“parts/counter.v”include“././library/mux.v”合理地使用include可以使程序简洁、清晰、条理清楚、易于查错。,timescale编译指令,timescale用于说明程序中的时间单位和仿真精度举例说明:timescale1ns/100pstimescale语句必须放在模块边界前面举例说明:timescale1ns/100psmoduleMUX2_1(out,a,b,sel);not#1not1(nsel,sel);and#2and1(a1,a,nsel);endmodule尽可能地使精度与时间单位接近,只要满足设计的实际需要就行。举例说明:在上例中所有的延时时间单位都是1ns的整数倍。,uselib编译指令,用于定义仿真器到哪里去找库元件。如果该引导语句启动的话,它就一直有效,直到遇到另外一个uselib的定义或resetall语句。比其他配置库搜索路径的命令选项作用大例如:uselibdir=/lib/FAST_lib/uselibdir=/lib/TTL_lib/libext=.vfile=/libs/TTL_U/udp.lib,表达式与运算符,表达式由操作数和运算符组成。操作数可以是以下类型中的一种:1)常数:35,4b10_11,8h0A;2)参数:parameterLOAD=4d12;3)线网:wireclk;4)寄存器:reg3:0state;5)位选择;state2;6)部分选择:state2:1;7)存储器单元:reg7:0mem255:0;8)函数调用:$time;,运算符,运算符的优先级,算术运算符,+,-:一元或二元加、减。*:乘。/:整型数除法舍去小数部分。:取模运算,结果符号与第一运算符保持一致。例:103,结果为1103,结果为1运算符中有不定态,则一般结果也为不定。算术表达式结果的长度由最长的操作数决定。,位运算符,按位运算。二个操作数不等长时,运算结果按长操作数补0或x。:按位取反运算。b=4hf;c=3d4;a,b,c,3b10111b1_1111_100_101复制运算是重复信号的拼接方法,例:a,3b,2c,da,b,b,b,c,d,c,d,条件运算符,VerilogHDL中唯一的三目运算符。表达式:?:例:assigntri_bus=(drv_enble)?data:16hzzzz;若条件表达式为不定态,则结果为后两个表达式的按位操作结果。按位操作的值:0与0得0,1与1得1,其余情况为x。,模块和端口,模块和端口,modulemodule_name(port_list);/模块定义portdeclarations/端口说明datatypedeclarations/数据说明circuitfunctionality/电路功能描述timingspecifications/时序特性(仿真)endmodule,模块组成如下,module_name为模块名。,port_list为模块的端口列表,portdeclarations为端口说明。,端口列表与说明,端口是模块与外界交互的接口,由端口列表定义。若模块无输入和输出,可定义无端口模块。

温馨提示

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

评论

0/150

提交评论