资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/10/3,#,Verilog,语法手册,1/30,Verilog,基本设计单元是“模块”。一个模块由两部分组成,一部分描述接口,另一部分描述逻辑功效。,Verilog,结构位于,module,和,endmodule,申明语句之间,每个,Verilog,程序包含,4,个主要部分:端口定义、,I/O,说明、内部信号申明和功效定义。,一、模块结构,2/30,模块端口申明了模块输入输出口。其格式以下:,module module_name(port_list);,在引用模块时其端口能够用两种方法连接:,(,1,)在引用时,严格按照模块定义端口次序来连接,不用标明原模块定义时要求端口名:,模块名(连接端口,1,信号名,连接端口,2,信号名,,,),(,2,)在引用时用“,.”,符号,标明原模块是定义时要求端口名,,模块名(,.,端口,1,名(连接信号,1,名),端口,2,名(连接信号,2,名),,,),1,、模块端口定义,3/30,(,1,)输入口:,input,信号位宽,-1,:,0,端口名,i,(,2,)输出口:,output,信号位宽,-1,:,0,端口名,i,(,3,)输入输出口:,inout,信号位宽,-1,:,0,端口名,i,2,、,I/O,说明格式,4/30,在模块内用到和端口相关,wire,和,reg,类型变量申明:,regwidth-1:0 R,变量,1,,,R,变量,2,,,wirewidth-1:0 W,变量,1,,,W,变量,2,,,3,、内部信号说明,5/30,(1),用“,assign”,申明语句,只需写一个“,assign”,,后面再加一个方程式即可,如:,assign a=b&c,(2),用实例元件,此方法像在电路图输入方式下调入库元件一样,键入元件名字和相连引脚即可,如,and#2 u1(q,a,b),,表示用一个跟与门,(and),一样名为,u1,门,其输入端为,a,b,,输出为,q,,输出延迟为,2,个单位时间,(3),用“,always”,块:,always,时序控制 执行语句,如:,always areg=areg,上述三个功效定义在,verilog,结构中是同时执行,在同一模块文件中,它们次序不会影响实现功效,4,、功效定义,6/30,1,、常量,1.1,数字,(1),整数:,4,种表示方式:二进制(,b,或,B,);十进制(,d,或,D,);十六进制(,h,或,H,);八进制(,o,或,O,),数字表示方式以下:,,其中位宽能够缺省,默认值依据不一样机器有所不一样,常为,32,位;进制也能够缺省,默认值为十进制。,如:,8b10101100,,表示位宽为,8,,二进制,值为,10101100,二、数据类型及其常量及变量,7/30,(,2,),x,和,z,值,,x,代表不定值,,z,代表高阻值。,X,能够用来定义十六进制,4,位二进制数状态,八进制,3,位,二进制,1,位,,z,表示方式同,x,,,z,还能够表示为“?”,如,12dz=12d?,(,3,)负数,只要在数字定义式最前面加上一个负号即可表示,(,4,)下划线:下划线能够用来分隔数表示以提升程序可读性,但不可用于位宽和进制处,如,16b1010_1100_1001_0011,(正当),8b_1010_1100,(非法),8/30,用,parameter,来定义一个标识符代表一个常量,成为符号常量,即标识符形式常量,采取标识符代表一个常量可提升程序可读性和可维护性。其说明格式以下:,Parameter,参数名,1=,表示式,参数名,2=,表示式,,.,例:,parameter msh=7;,定义参数,msh,为常数,7,Parameter e=25,f=29;,定义两个常数参数,1.2,、参数(,parameter,)型,9/30,2.1 wire,型,Wire,型数据惯用来表示以,assign,关键字制订组合逻辑信号。,Verilog,程序模块中输入、输出信号类型默认时自动定义为,wire,型。,Wire,型信号能够用作任何方程式输入,也能够用作“,assign”,语句或实例元件输出。其定义格式为:,wiren-1:0,数据名,1,,数据名,2,,,.,2,、变量,10/30,reg,型数据惯用来表示“,always”,模块内指定信号,常代表触发器。通常,在设计中要在,always,模块经过使用行为描述语句来表示逻辑关系,在,always,块内被赋值每一个信号都必须定义为,reg,型。,Reg,型数据格式以下:,regn-1:0,数据名,1,,数据名,2,,,.,2.2 reg,型,11/30,Verilog,经过对,reg,型变量建立数组来对存放器建模,能够描述,RAM,型存放器、,ROM,型存放器和,reg,文件。,Memory,型数据是经过扩展,reg,型数据地址范围来生成。其格式为:,regn-1:0,存放器名,m-1:0,regn-1:0,定义了存放器中每一个存放单元大小,即该存放器单元是一个,n,位存放器;存放器名后,m-1:0,则定义了该存放器中有多少个这么存放器。,例,reg7:0 mema255:0;,定义了一个名为,mema,存放器,该存放器有,256,个,8,位存放器。,2.3 memory,型,12/30,1,、算术操作符,+,(加),-,(减),*(乘),/,(除),%,(取模或求余),三、运算符及表示式,13/30,2,、,按位操作符,(按位非),&,(按位与),|,(按位或),(按位异或),(按位异或非,同或),14/30,3,、逻辑操作符,&(,逻辑与,),|(,逻辑或,),!,(,逻辑非,),15/30,4,、关系操作符,(大于),=,(大于),=,(小于,),16/30,5,、相等关系操作符,:,=,(逻辑相等),!=,(逻辑不等),=,(全等),!=,(非全等),17/30,6,、移位操作符,(,右移,),其使用方法以下:,an ;a,代表要移位操作数,,n,代表要移,n,位,18/30,7,、,verilog,语言中有一个特殊运算符,位拼接运算符,用这个运算符能够把两个或多个信号一些为拼接起来来进行运算操作。其方法以下:信号,1,某几位,信号,2,某几位,,其中不允许存在没有指明位数信号。,a,b3:0,w,3101,还能够用重复法来简化表示,如,4,w,19/30,8,、缩减运算符,是对单个操作数进行或、与、非递推运算,最终运算结果是,1,位二进制数,比如:,reg3:0 B;reg C;,C=&B,相当于,C=B0&B1&B2&B3,20/30,1,、赋值语句,(,1,)非阻塞赋值方式(如,b=a,),特点:块结束后才完成赋值操作;,b,值并不是马上改变。,注意:此例中,=,并非小于等于符号,而是赋值符号,其功效同,=,,只是非阻塞方式。,(,2,)阻塞赋值方式(如,b=a,),特点:赋值语句执行完后,块才结束;,b,值在赋值语句执行完后立刻就改变。,四、赋值语句与块结构,21/30,(,1,)次序块,特点:块内语句是按次序执行;,每条语句延迟时间是相对于前一条语句仿真时间而言;,直到最终一条语句执行完,程序流程控制才跳出该语句块,其格式为:,begin,语句,1,;语句,2,;,end,2,、块结构,22/30,(2),并行块,特点:块内语句是同时执行;,块内每条语句延迟时间是相对于程序流程控制进入到块内仿真时间;,延迟时间是用来给赋值语句提供执行时序;,当按时间时序排序在最终语句执行完成后,跳出块。,其格式为:,fork,语句,1,;语句,2,;,join,23/30,1,、条件语句:,(,1,),if,(表示式,1,)语句,1,;,else if,(表示式,2,)语句,2,;,else,语句,n;,五、条件语句与循环语句,24/30,(2)case,语句,case,(表示式),endcase,casez,(表示式),endcase,用来处理不考虑高阻值比较过程;,casex,(表示式),endcase,用来处理将高阻值,z,和不定值,x,都视为不关心情况,25/30,(,1,),forever,语句 连续执行语句,(,2,),repeat,(表示式)语句 连续执行一条语句,n,次,,n,为表示式中值,(,3,),while,(表示式)语句 执行一条语句知道表示式中条件不能满足,2,、循环语句,26/30,(,4,),for,(表示式,1,;表示式,2,;表示式,3,)语句,它执行过程为:,第一步:先求解表示式,1,;,第二步:再求解表示式,2,,若其值为真(非,0,),则执行,for,语句中指定内嵌语句,然后执行下面第三步;若为假(,0,),则结束循环,转到第五步;,第三步:若表示式,2,为真,在执行指定语句后,求解表示式,3,;,第四步:转回第二步继续执行;,第五步:执行,for,语句下面语句。,27/30,例:,begin:init_mem,reg7:0 tempi;,for(tempi=0;tempimemsize;tempi=tempi+1),memorytempi=0;,end,用来初始化,memory,28/30,module decoder_38(out,in);,output7:0 out;,input2:0 in;,reg7:0 out;,always(in),begin,case(in),3d0:out=8b11111110;,3d1:out=8b11111101;,3d2:out=8b11111011;,3d3:out=8b11110111;,3d4:out=8b11101111;,3d5:out=8b11011111;,3d6:out=8b10111111;,3d7:out=8b01111111;,endcase,end,endmodule,例:三八译码器,29/30,参考数目:,Verilog,数字系统设计教程,夏宇闻编著,北京航空航天大学出版社,30/30,
展开阅读全文