当我尝试在函数定义中使用 $display 时,Bluespec 会抱怨。
它只允许在规则定义中。
有没有办法可以在函数中显示变量名?
我认为它可能正在使用 ActionValue# 但我无法正确使用语法。我也无法在网上找到示例。
谢谢
一种正确的语法是 -
function ActionValue#(rtype) func(...)
= actionvalue
do something;
$display(...);
return val;
endactionvalue;
默认情况下,Bluespec 函数是纯函数。如果你想调试它,把它分成几部分,把函数结果保存在一个字段中,然后用一个方法把它提取到你的测试台上。
查看Bluespec by Example一书。
$display 是一个有副作用的函数,所以它必须在“action”块中调用。
$display
Bluespec 函数是在编译时静态详细说明的,因此通常在其中使用语句是没有意义的。但是,如果函数返回一个Action
or ActionValue
,它返回的动作可以包含一个$display
语句,然后将在调用它的任何规则或方法中详细说明。
创建一个的语法ActionValue
是:
actionvalue
//Anything that can go in a rule body can go here.
$display(...);
return value;
endactionvalue
普通的语法Action
是类似的,但有action
/endaction
和没有return
语句。
然后可以在函数定义中使用,如下所示:
function ActionValue#(Type) funcName(Type arg);
...
return actionvalue
...
endactionvalue;
endfunction
如果只需要 return 语句,还可以使用替代语法:
function ActionValue#(Type1) funcName(Type2 arg) =
actionvalue
...
endactionvalue;
One final point, if you actually want to generate output from functions at compile time, you can use the message
function. However, note that this only takes a simple String
argument, rather than handling formatting like $display
does.