我正在阅读一些第三方 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 任务或函数有多个语句,则它们还需要有开始-结束语句。从 SystemVerilog-2005 开始,我们取消了将 begin-end 放在已经有 begin-end 的内容中的要求。委员会中的大多数人认为,在已经具有结束功能/结束任务的东西中要求开始结束是愚蠢的。我的意思是,来吧!您不认为编译器可以在收到 endtask/endfunction 语句时发现它已处于任务或函数的末尾吗?从任务和函数中删除开始和结束可以减少大量无用代码。为 SystemVerilog 多加一分!
根据 SystemVerilog 扩展(IEEE 标准 1800-2009),
begin/end
关键字在 function
内是可选的。但是,您的工具集(模拟器等)必须能够理解此语法,该语法于 2005 年引入。