1.Verilog-2001的由来
Verilog HDL 虽然得到了广泛应用,但是人们在应用过程中也发现了Verilog的不少缺陷。在2001年,OVI(Open Verilog Initiative)向IEEE提交了一个改善了用户觉得原始的Verilog-95标准缺陷的新的标准。这一扩展版本成为了IEEE1364-2001标准,也就是Verilog 2001。Verilog 2001是1995的增补,现在几乎所有的工具都支持Verilog 2001。Verilog 2001也被称作Verilog 2.0。应该说,作为一个Verilog的使用者,懂Verilog的语法是必须的。对于大多数人来讲,在使用Verilog的过程中,总是不知觉的将Verilog 2001和1995混用。
2.Verilog-2001的模块定义
相比于Verilog-1995,Verilog-2001允许更加灵活的模块定义方式,语法如下:
module module_name
#(parameter_declaration, parameter_declaration,... )
(port_declaration port_name, port_name,..., port_declaration port_name, port_name,...);
module items
endmodule
而Verilog-1995的语法如下
module module_name (port_name, port_name, ... );
port_declaration port_name, port_name,...;
port_declaration port_name, port_name,...;
module items
endmodule
(port_declaration port_name, port_name)的一个实例如下:
parameter SIZE = 4096;
input [log2(SIZE)-1:0] addr;
Verilog-2001风格的模块示例如下:
module reg4 (output wire [3:0] q,input wire [3:0] d,clk);
input clk;
…
endmodule
用户可以继续使用Verilog-1995的风格,也可以采用Verilog-2001的风格。
3.Verilog-2001端口定义
Verilog-2001允许更加灵活的端口定义方式,允许数据类型和端口方向同时定义,语法如下:
port_direction data_type signed range port_name, port_name, ... ;
其中,signed是Verilog-2001的一个新增关键字,表示有符号数据类型,以2的补码方式表示。
端口定义的实例如下:
output signed [31:0] result;
input signed [15:0] a, b;
input [15:12] addr;
inout [0:15] data_bus;
4. Reg的定义
在Verilog-1995中定义和初始化reg需要两条语句,而在Verilog-2001中可以合成一条语句。
实例如下:
Verilog-1995:
reg clock;
initial
clk = 0;
Verilog-2001:
reg clock = 0;
5.Verilog-2001的缺省位扩展
在Verilog-1995中,在不指定基数的情况下为大于32位的变量赋高阻值,只能使其低32位为高阻值,其他高位会被设置为0,此时需要指定基数值才能将高位赋值为高阻。
6. Verilog-2001使用逗号隔开敏感信号
Verilog-2001中可以用逗号来代替or隔开敏感信号。
Verilog-1995:
always @(a or b or c or d or sel)
Verilog-2001:
always @(a, b, c, d, sel)
7.Verilog-2001组合逻辑敏感信号通配符
在组合逻辑设计中,需要在敏感信号列表中包含所有组合逻辑输入信号,以免产生锁存器。在大型的组合逻辑中比较容易遗忘一些敏感信号,因此在Verilog-2001中可以使用@*包含所有的输入信号作为敏感信号。
always @* //combinational logic sensitivity
if (sel)
y = a;
else
y = b;
这样做的好处是避免敏感表芯合不完整导致的latch。
8.Verilog-2001指数运算
Verilog-2001中增加了指数运算操作,操作符为**。
always @(posedge clock)
result = base ** exponent
9.Verilog-2001递归函数和任务
在Verilog-2001中增加了一个新的关键字:automatic。该关键字可以让任务或函数在运行中从新调用该任务和函数。 |