2012-04-02 19 views
5

我读了一些第三方Verilog和发现这一点:“普通”开始块的重点是什么?

function [31:0] factorial; 
    input [3:0] operand; 
    reg [3:0] index; 

    begin 
     factorial = operand ? 1 : 0; 
     for(index = 2; index <= operand; index = index + 1) 
     factorial = index * factorial; 
    end 
endfunction 

看来,beginend关键字是多余的位置。他们?他们的用途是什么?

回答

8

我不知道,一般情况下,但在这种特殊情况下:

If a function contains more than one statement, the statements must be 
enclosed in a begin-end or fork-join block. 

来源:Verilog Golden Reference Guide

+0

'开始/ end'不再需要用于'function'或'task'与SystemVerilog的多个语句。查看其他答案。 – 2015-02-24 00:01:36

1

按照SystemVerilog的扩展(IEEE标准1800年至2009年),开始/结束在function内是可选的。但是,您的工具集(模拟器等)必须能够理解2005年推出的这种语法。

6

两种答案都是正确的。如果Verilog任务或函数有多个语句,则它们也需要有开始语句。从SystemVerilog-2005开始,我们删除了将开始 - 结束放在已经有开始结尾的东西里面的要求。委员会中的大多数人认为,要求在已经具有结束功能/结束任务的事物中开始结束是很愚蠢的。我的意思是,来吧!难道你不认为当一个编译器得到endtask/endfunction语句时,它是在任务或函数的末尾?从任务和函数中删除开始的结尾,可以删除大量无用的代码。为SystemVerilog赢得另一分!

问候 - 克里夫卡明斯 - 的Verilog & SystemVerilog的大师

相关问题