0

当我尝试在函数定义中使用 $display 时,Bluespec 会抱怨。

它只允许在规则定义中。

有没有办法可以在函数中显示变量名?

我认为它可能正在使用 ActionValue# 但我无法正确使用语法。我也无法在网上找到示例。

谢谢

4

3 回答 3

3

一种正确的语法是 -

function ActionValue#(rtype) func(...)
= actionvalue
    do something;
    $display(...);
    return val;
endactionvalue;
于 2013-07-07T22:10:38.017 回答
1

默认情况下,Bluespec 函数是纯函数。如果你想调试它,把它分成几部分,把函数结果保存在一个字段中,然后用一个方法把它提取到你的测试台上。

查看Bluespec by Example一书。

$display 是一个有副作用的函数,所以它必须在“action”块中调用。

于 2013-06-27T21:33:53.280 回答
1

$displayBluespec 函数是在编译时静态详细说明的,因此通常在其中使用语句是没有意义的。但是,如果函数返回一个Actionor 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.

于 2013-08-21T13:32:44.200 回答