2001年3月IEEE正式批准了Verilog‐2001标准(IEEE1364‐2001),与Verilog‐1995相比主要有如下提升。
(1) Verilog‐2001容许将端口声明和数据类型声明放在同一条语句中,例子以下:
(2)Verilog‐2001中增长了ANSIC风格的输入输出端口声明,能够用于module,task和function。例子以下:
(3)对于含有parameter的module,例子以下:
Verilog‐2001中容许在声明变量的同时对其进行初始化赋值,他是在initial语句中的0时刻开始执行。例子以下:
(1)逗号分开敏感列表
在敏感表中的变量能够用逗号“,”分开,固然,固然or也是能够的。例子以下:
always@(posedge clk,negedge rst)也是能够的。
(2)组合逻辑的电平敏感@* //@(*) is also ok
“*”表明了逻辑块中每一个被赋值的变量,例子以下:
(1)net型和reg型能够声明为带符号的变量
(2)函数的返回值能够是有符号数
(3)Literal integer numbers能够定义为有符号的
(4)增长算数右移左移(>>>,<<<)
操做符“>>>”和“<<<”。对于有符号数,执行算术移位操做时,将符号位填补移出的位。例子以下:
(5)增长系统函数$signed,$unsigned
用于在无符号和有符号数之间的转换
[<starting_bit>+”:width]从起始位开始递增,位宽为width
[<starting_bit>‐”:width]从起始位开始递减,位宽为width
其中,起始位能够是变量,但位宽必须是整数。所以能够用可变域选择,用循环语句选取一个很长的向量全部位。
Verilog‐1995中只容许对reg,integer和time创建一维的数组,经常使用于RAM,ROM的建模。Verilog‐2001中能够对net和variable创建多维数组。
Verilog‐1995不容许直接访问矩阵字的某一位或某几位,必须将整个矩阵字复制到另外一个暂存变量中,从暂存中访问。
Verilog‐2001能够直接访问矩阵的某一维或某几位。
增长乘方运算(power operate),运算符是**,若是其中有一个操做数是real类型的,返回值将是real类型。两个操做数都是integer类型,返回才是integer类型。
(1)可重入任务
任务本质上是静态的,同时并发执行的多个任务共享存储区。当某个任务在模块中的多个地方被同时调用,则这两个任务对同一块地址空间进行操做,结果多是错误的。Verilog‐2001中增长了关键字automatic,内存空间是动态分配的,使任务成为可重入的。
(2)递归函数
Verilog‐1995中对于不指定位数的位宽超过32为的总线赋高阻时,只会对低32位赋值为高阻,高位将为0。
Verilog‐2001将高阻或不定态赋值给未指定位宽的信号时,能够自动扩展到整个位宽范围。
Verilog语法规定必须使用数值或常数表达式来定义向量的位宽和阵列的规模。
Verilog‐1995中要求上述表达式必须为算数操做。
Verilog‐2001中可使用函数,成为常数函数。他的数值在编译或详细描述中被肯定。
Verilog‐1995中在文件的输入/输出操做方面功能很是有限,文件操做常常借助于Verilog PLI(编程语言接口),经过与C语言的文件输入/输出库的访问来处理。而且规定同时打开的I/O文件数不能多于31个。
Verilog‐2001增长了新的系统任务和函数,而且规定同时打开的文件数目为230个。
Verilog‐1995中参数重载有两种方法。一种是defparam语句显式的从新定义。第二种是在模块实体调用时使用#符号隐式的从新定义参数。
Verilog‐2001中增长了一种新的方法,成为显式参数重载。
Verilog‐2001新增了语句“generate”,经过generate循环,能够产生一个对象(好比一个元件或一个模块等)的多个例化,为可变尺度的设计提供了方便。
generate语句通常在循环和条件语句中使用。Verilog‐2001增长了四个关键字generate、endgenerate、genvar和localparam,其中genvar是一个新的数据类型,用在generate循环中的标尺变量必须定义为genvar型数据。
自1998年的Verilog一来,register一直用来描述一种变量的类型,这经常给初学者带来困扰,误认为register和硬件中的寄存器一致。在Verilog‐2001参考手册中将register变为variable。
Verilog‐1995中支持`ifdef、`else、`endif、`undef进行条件编译,Verilog‐2001中增长了`ifndef和`elseif
Verilog须要不断的跟踪源代码的行号和文件名,可编程语言接口(PLII)能够取得并利用行号和源文件的信息,以标记运行是的错误。但若是Verilog代码通过其余工具的处理,源码的行号和文件名可能丢失。故在Verilog‐2001中增长了`line,用来标定源码的行号和文件名。
随着仿真器以外的其余工具把Verilog做为设计输入,这些工具须要Verilog语言可以加入跟指定工具备关的信息和命令。
Verilog没有定义标准的属性,属性的名字和数值由工具厂商或其余标准来定义。目前尚无指定的标准。
Verilog‐1995标准将设计管理工做交给软件来承担,但各仿真工具的设计管理方法各不相同,不利于设计的共享。为了更好地在设计人员之间共享Verilog设计,而且提升某个特定仿真的可重用性,Verilog‐‐2001标准增长了对设计内容的配置这部份内容。
增长关键字config、endconfig、design、instance、cell、use和liblist。
配置块位于模块定义以外,能够指定每个Verilog模块的版本及其源代码的位置。Verilog程序设计从顶层模块开始执行,找到在顶层模块中实例化的模块,进而肯定其源代码的位置,照此顺序,直到肯定整个设计的源程序。
configcfg4 ///给配置块命名
designrtlLib.top ///指定从哪里找到顶层模块
defaultliblistrtlLibgateLib; ///设置查找实例模块的默认顺序
instancetest.dut.a2liblistggateLib; //明确指定模块实例使用哪个库
endconfig
Verilog‐2001增长了17个文件输入/输出任务:$fgetc、$ungetc、$fflush、$ferror、$fgets、$rewind、$swrite、$swriteb、$swriteo、$swriteh、$sformat、$sdf_annotate、$ffscanf、$sscanf、$fread、$ftell、$fseek。
增长了两个转换函数:$signed和$unsigned。
增长了命令行输入任务:$test$plusargs和$value$plusargs。
VCD文件用于存储选定的变量数值变化的信息,信息的记录由VCD系统任务来完成。
在Verilog‐1995标准中只有一种类型的VCD文件,即四状态类型,这种类型的VCD文件只记录变量在0、1、x和z状态之间的变化,并且不记录信号强度信息。而在Verilog‐2001标准中增长了一种扩展类型的VCD文件,可以记录变量在全部状态之间的转换,同时记录信号强度信息。
扩展型VCD系统任务$dumpports、$dumpportsoff、$dumpportson、$dumpportsall、$dumpportslimit、$dumpportsflush、$vcdclose
(1)提升了ASIC/FPGA应用的正确性
①检测脉冲的传播错误
②负脉冲检测
③新的时序约束检查
④负时序约束
⑤提升了对SDF(标准延时文件)的支持
(2)编程语言接口PLI方面有所改进