首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

verilog2001新加入的语法

verilog2001新加入的语法

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。该关键字可以让任务或函数在运行中从新调用该任务和函数。
继承事业,薪火相传
返回列表