verilog95标准和标准的比较.docx
- 文档编号:28798576
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:12
- 大小:254.97KB
verilog95标准和标准的比较.docx
《verilog95标准和标准的比较.docx》由会员分享,可在线阅读,更多相关《verilog95标准和标准的比较.docx(12页珍藏版)》请在冰豆网上搜索。
verilog95标准和标准的比较
Verilog_1995和Verilog_2001的比较
版本记录表
作者
版本号
日期
修改内容
王长友
V1.00.a
2015.5.24
第一次创建
作为一门如今世界最流行的硬件描述语言之一,VerilogHDL拥有自己的独有的特点和优势。
当然同时作为一门不断完善和发展的硬件描述语言,他同样也具有他的不足之处。
VerilogHDL是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,它是由GDA(GatewayDesignAutomation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出它的第三个商用仿真器verilog-XL,获得了巨大的成功,从而使得VerilogHDL迅速得到推广应用。
1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。
1990年CADENCE公司公开发表了VerilogHDL,并成立LVI组织以促进VerilogHDL成为IEEE标准,即IEEEStandard1364-1995。
VerilogHDL虽然得到了广泛的应用,但是然们在应用过程中也发同大多数新兴的编程语言一样,有很多的不完善、缺陷。
在2001年,OVI(OpenVerilogInitiative)向IEEE提交了一个改善了用户觉得原始的Verilog-1995标准缺陷的新的标准。
这一扩展版本成为了IEEE1364-2001标准,也就是Verilog2001。
Verilog2001是1995的增补,现在几乎所有的工具都支持Verilog2001。
Verilog2001也被称作Verilog2.0。
作为一个verilog的初学者,基础是最重要的。
现在将我在学习中了解到的verilog的IEEE1364-95标准和最新的IEEE1364-2001标准做一个简单的比较和分析,希望可以在加深我的学习和理解的同时可以方便大家的探讨、学习和补充。
我从以几个方面来比较verilogHDL的IEEE1364-1995标准和IEEE1364-2001的变化:
1、模块声明的扩展
1)、Verilog-2001允许将端口声明和数据类型声明放在同一条语句中,例如:
Verilog-1995:
Modulemux8(y,a,b,en);
output[7:
0]y;
input[7:
0]a,b;
inputen;
reg[7:
0]y;
wire[7:
0]a,b;
wireen;
……
Verilog-2001:
Modulemux8(y,a,b,en);
outputreg[7:
0]y;
inputwire[7:
0]a,b;
inputwireen;
……
2)、Verilog-2001中增加了ANSIC风格的输入输出端口说明,可以用于module、task和function。
例如:
Verilog-1995:
Modulemux8(y,a,b,en);
output[7:
0]y;
input[7:
0]a,b;
inputen;
reg[7:
0]y;
wire[7:
0]a,b;
wireen;
……
Verilog-2001:
Modulemux8(
outputreg[7:
0]y;
inputwire[7:
0]a,b;
inputwireen);
……
3)、对于含有parameter的module,例如:
Verilog-1995:
Moduleadder(sum,co,a,b,ci);
parameterMSB=31,
LSB=0;
output[MSB:
LSB]sum;
outputco;
input[MSB:
LSB]a,b;
inputci;
reg[MSB:
LSB]sum;
regco;
wire[MSB:
LSB]a,b;
wireci;
…….
Verilog-2001:
Moduleadder
#(parameterMSB=31,LSB=0)
(outputreg[MSB:
LSB]sum,
outputregco,
inputwire[MSB:
LSB]a,b,
inputwireci;
);
……….
2、带有初始化的寄存器类型变量声明
在Verilog-1995中定义和初始化reg需要两条语句,而在Verilog-2001中可以合成一条语句。
实例如下:
Verilog-1995:
regclock;
initial
clk=0;
Verilog-2001:
regclock=0;
3、敏感表的改进
1)、Verilog-2001使用逗号隔开敏感信号
Verilog-2001中可以用逗号来代替or隔开敏感信号(or也可以)
Verilog-1995:
always@(aorborcordorsel)
Verilog-2001:
always@(a,b,c,d,sel)
2)、Verilog-2001组合逻辑敏感信号通配符
在组合逻辑设计中,需要在敏感信号列表中包含所有组合逻辑输入信号,以免产生锁存器。
在大型的组合逻辑中比较容易遗忘一些敏感信号,因此在Verilog-2001中可以使用@*包含所有的输入信号作为敏感信号。
Verilog-1995:
always@(seloraorb)
if(sel)
y=a;
else
y=b;
Verilog-2001
always@*//combinationallogicsensitivity
if(sel)
y=a;
else
y=b;
这样做的好处是避免敏感表切合不完整导致的latch。
4、带有符号算数运算的扩展
1)、net型和reg型可以声明为带符号的变量,如:
Regsigned[63:
0]data;
Wiresigned[11:
0]address;
2)、函数的返回值可以是有符号的数,例如:
Functionsigned[128:
0]alu;
3)、literalintegernumber可以定义为有符号的,如:
16’hc501//anunsigned16-bithexvalue
16’shc501//asingned16-bithexvalue
4)、增加了算数的左移和右移(>>>,<<<)
操作符“<<<”和“>>>”。
对于符号数,执行算数移位操作时,将符号填补移出的位。
例如:
D=8’b10100011;
D>>3;//逻辑右移的结果为:
8’b00010100
D>>>3;//算数右移的结果是:
8’
5)、增加了系统函数$signed,$unsigned。
用于在有符号和无符号数之间的转换。
如:
Reg[63:
0]a;//unsigneddatatype
always@(a)
begin
result1=a/2;//unsfnedarithmetic
result2=$signed(a)/2;//signedariithmetic
end
5、可变向量域的选择
[
[
Reg[63:
0]vector1;//little-endian
Reg[0:
63]ventor2;//big-endian
Byte=vector1[31-:
8];//selectsvector1[31:
24]
Byte=vector1[24+:
8];//selectsvector1[31:
24]
Byte=vector2[31-:
8];//selectsvector1[24:
31]
Byte=vector2[24+:
8];//selectsvector1[24:
31]
其中,起始位可以是变量,但是位宽必须是整数。
因此可以用变量域选择,用循环语句选取一个很长的向量所有位。
for(j=0;j<=31;j=j+1)
byte=data1[(j*8)+:
8];
//用于初始化向量的一个域
data1[(byteNum*8)+:
8]=8’b0;
6、多维数组的建立
Verilog-1995中只允许对reg,integer和time建立一维数组,常用于RAM,ROM的建模。
Verilog-2001中可以对net和variable建立多维数组。
//-dimensionalarrayof8-bitregvaribales
//(allowednverilog-1995andverilog-2001)
Reg[7:
0]array1[0:
255];
Wire[7:
0]out1=array1[address];
//3-dimensionalarrayof8-bitwirenets
//(newforverilog-2001)
Wire[7:
0]array2[0:
255][0:
255][0:
15];
Wire[7:
0]out2=array2[addr1][addr2][addr3];
7、多维数组的赋值
Verilog-1995不允许直接访问矩阵的某一位或者某几位,必须将整个矩阵字复制到另一个暂存变量中,从暂存中访问。
Verilog-2001可以直接访问矩阵的某一维或者某一位
如:
Verilog-1995:
Reg[31:
0]ram[0:
255];
Reg[7:
0]high_btye;
Reg[31:
0]temp;
temp=ram[5];
high_btye=temp[31:
24];
verilog-2001
reg[31:
0]ram[0:
255];
reg[7:
0]high_btye;
high_btye=ram[5][31:
24];
//selectthehigh_orderbyteofonewordina2-dimensionalarrayof32-bitregvariables
Reg[31:
0]array2[0:
255][0:
15];
Wire[7:
0]out=array2[100][7][31:
24];
8、乘方运算符
增加乘方运算(poweroperate),运算符是“**”,如果其中有一个操作数是real类型的,返回值讲师real类型的。
两个操作数都是integer类型的,返回值才是integer类型的。
9、自动(可重入)任务和自动(递归)函数
1)、可重入任务
任务本质上是静态的,同时并发的多个任务共享存储区。
当某个任务在多个模块中被调用,则这些任务对同一块存储空间进行操作,结果可能是错误的。
Verilog-2001增加了关键之automatic,内存空间是动态分配的,是任务变为可重入的。
2)、递归函数:
例如:
Functionautomatic[63:
0]factorial;
Input[31:
0]n;
If(n==1)
factorial=1;
else
factoral=n*factorial(n-1);
endfunction
10、自动宽位扩展
Verilog-1995中对不指定位数的位宽超过32位的总线赋高阻是:
只对低32位赋值为高阻,高位将为0。
Verilog-2001将高阻或者不定态赋值给未指定位宽的信号时,可以自动扩展到整个位宽范围。
11、常数函数
Verilog语法规定必须使用数值或者常数表达式来定义向量的位宽和阵列的规模。
如:
parameterwidth=8;
Wire[width-1:
0]data;
Verilog-1995中要求上述表达式必须为算数操作。
Verilog-2001中可以使用函数,成为常数函数,它的数值在编译或者详细描述中被确定。
如:
Parameterram_size=1024;
Input[clogb(ram_size)-1:
0]address_bus;
….
Functionintegerclogb;
Input[31:
0]depth;
Begin
For(clogb=0;depth>0;clogb=clogb+1)
Depth=depth>>1;
End
endfunction
12、增加了文件输入输出操作
Verilog-1995中在文件的输入、输出操作方面功能非常有限,文件操作疆场借助于verilogPLI(接口编程语言),通常与c语言的文件输入、输出库的访问来处理。
并且规定同时打开的I/O文件不能超过31个。
Verilog-2001增加了新的系统任务和函数,并且规定同时打开的文件数目为230个。
13、显示参数重载
Verilog-1995中参数的重载有两种方法:
一种是defparam语句显式重新定义。
第二种是在模块实体调用时使用#符号隐式的重新定义参数。
Verilog-2001中增加了一种新的方法,成为显式重载。
14、Generate语句
Verilog-2001新增了语句“generate”,通过generate循环,可以产生一个对象(比如一个元件或者一个模块等)的多个例化,为可变尺度的设计提供了方便。
Generate语句一般在循环和条件语句中使用。
Verilog-2001增加了四个关键字generate、endgenerate、genvar和localparam,其中个genvar是一个新的数据类型,用在generate循环中的标尺变量必须定义为genvar类型数据。
15、Redister变成了variable
由于自1998年的verilog一来,regiser一直用来描述一种变量的类型,常常让人误以为register和硬件的寄存器一致,在verilog-2001参考手册中将register变成了variable。
16、对条件编译的改进
Verilog-1995中支持’ifdef、’else、’endif、’undef进行条件编译,verilog-2001中增加了’ifndef和’elseif
17、文件和行编译显示
Verilog需要不断的跟踪元代码的行号和文件名,可编程语言接口(PLI)可以取得并利用行号和源文件的信息,以标记运行是错误的。
但是如果verilog代码经过其他工具的处理,源代码的行号和文件名可能丢失。
故在verilog-2001中增加了’line,用来标定元代码的行号和文件名。
18、属性
随着仿真器之外的工具把verilog作为设计输入,这些工具需要verilog语言能够加入指定工具有关的信息和命令。
Verilog么有定义标准的属性,属性名和数值由工具厂商或者其他标准来定义。
目前尚未指定的标准。
19、系统任务和系统函数的扩展
Verilog-2001增加了17个文件输入、输出任务:
$fgetc、$ungetc、$fflush、$ferror、$fgets、$rewind、$swrite、$swrited、$swriteh、$sformat、$sdf_annotate、$fscanf、$sscanf、$fread、$fttell、$fseek.
增加了两个转换函数:
$signed和$unsingned。
增加了命令行输入任务:
$test$plusargs和$value$plusargs
20、VCD文件的扩展
VCD文件用于存储选定的变量数值变化的信息,信息的记录由VCD系统任务来完成。
在verilog-1995标准中只有一种类型的VCD文件,即四状态类型,这种类型的VCD文件只记录变量在0、1、x和z状态之间的变化,而且不记录信号强度信息。
而在verilog-2001标准中增加了一种扩展类型的VCD文件,能够记录变量在状态之间的转换,同时记录信号的强度。
扩展名VCD系统任务$dumpports、$dumpportsoff、$dumpportson、$dumpportsall、$dumpportslimit、$dumpportsfulsh、$vcdclose。
21、其他
除上面讲的内容外,Verilog-2001还增加了其他一些有用特性如增加了verilog的设计内容的配置功能、增强的SDF(StandardDelayFile)支持、PLI增强改进等,感兴趣的读者可以Verilog-2001的标准文献。
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog95 标准 比较