1

我们如何判断$cast的调用是函数还是任务。每个人的召唤有何不同?我理解的一件事是,通过函数调用,我将能够使用assert()。但除此之外,还有什么告诉我们调用是$cast函数还是$cast任务?在任何一种情况下,我们都会做类似$cast(pkt, pkt1); 的事情。

LRM 给出$cast函数的语法为

function int $cast( singular dest_var, singular source_exp );

$cast任务为

task $cast( singular dest_var, singular source_exp );

并继续解释

使用 $cast 作为任务或函数决定了如何处理无效分配。

当作为任务调用时,$cast 尝试将源表达式分配给目标变量。如果赋值无效,则会发生运行时错误,并且目标变量保持不变。

当作为函数调用时,$cast 尝试将源表达式分配给目标变量,如果强制转换是合法的,则返回 1。如果强制转换失败,函数不进行赋值并返回 0。当作为函数调用时,不会发生运行时错误,并且目标变量保持不变。

请解释。

4

1 回答 1

1

您的评论是正确的:如果 $cast 用作表达式的一部分,则将其视为函数。当函数只能在表达式中使用并且永远不能像任务调用那样作为简单语句存在时,该措辞源自 Verilog 术语。但是一旦 SystemVerilog 添加了具有 void 返回类型的函数,这种措辞就不再适用了。

于 2017-08-11T13:46:25.840 回答