“简单”的开始结束块有什么意义?

问题描述 投票:0回答:3

我正在阅读一些第三方 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

看起来

begin
end
关键字在这里是多余的。他们是吗?它们有什么用?

verilog system-verilog
3个回答
10
投票

我不知道一般情况,但在这个特定情况下:

如果一个函数包含多个语句,这些语句必须是 包含在 begin-end 或 fork-join 块中。

来源:Verilog 黄金参考指南


7
投票

两个答案都是正确的。如果 Verilog 任务或函数有多个语句,则它们还需要有开始-结束语句。从 SystemVerilog-2005 开始,我们取消了将 begin-end 放在已经有 begin-end 的内容中的要求。委员会中的大多数人认为,在已经具有结束功能/结束任务的东西中要求开始结束是愚蠢的。我的意思是,来吧!您不认为编译器可以在收到 endtask/endfunction 语句时发现它已处于任务或函数的末尾吗?从任务和函数中删除开始和结束可以减少大量无用代码。为 SystemVerilog 多加一分!


1
投票

根据 SystemVerilog 扩展(IEEE 标准 1800-2009),

begin/end
关键字在
function
内是可选的。但是,您的工具集(模拟器等)必须能够理解此语法,该语法于 2005 年引入。

© www.soinside.com 2019 - 2024. All rights reserved.