定义字符串结果的辅助函数?

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

在我的Verilog代码中,我有这样的语句

$display("    %s r%h, r%h",
         instrH == ALU8_ADD ? "add" :
         instrH == ALU8_ADC ? "adc" :
         instrH == ALU8_SUB ? "sub" :
         instrH == ALU8_SBC ? "sbc" :
         instrH == ALU8_OR  ? "or" :
         instrH == ALU8_AND ? "and" :
         instrH == ALU8_TCM ? "tcm" :
         instrH == ALU8_TM  ? "tm" :
         instrH == ALU8_CP  ? "cp" :
         instrH == ALU8_XOR ? "xor" : "?",
         secondH, secondL);

这对于测试台调试日志记录很有帮助。我想提取这部分

         instrH == ALU8_ADD ? "add" :
         instrH == ALU8_ADC ? "adc" :
         instrH == ALU8_SUB ? "sub" :
         instrH == ALU8_SBC ? "sbc" :
         instrH == ALU8_OR  ? "or" :
         instrH == ALU8_AND ? "and" :
         instrH == ALU8_TCM ? "tcm" :
         instrH == ALU8_TM  ? "tm" :
         instrH == ALU8_CP  ? "cp" :
         instrH == ALU8_XOR ? "xor" : "?",

进入某种“函数”,所以这只是在一个位置定义并稍后使用它,类似于:

$display("    %s r%h, r%h",
         alu8OpName(instrH),
         secondH, secondL);

如何定义一个返回字符串的函数?

verilog
1个回答
0
投票

您可以声明一个返回

function
类型的
string
。请参阅 IEEE Std 1800-2017,第 13.4 节功能。这需要您在模拟器中启用 SystemVerilog 功能。

这是一个可运行的示例:

module tb;

function string alu8OpName (int instrH);
    case (instrH)
        0       : return "add" ;
        1       : return "adc" ;
        2       : return "sub" ;
        3       : return "sbc" ;
        4       : return "or"  ;
        5       : return "and" ;
        6       : return "tcm" ;
        7       : return "tm"  ;
        8       : return "cp"  ;
        9       : return "xor" ;
        default : return "?"   ;
    endcase
endfunction

initial begin
    $display("    %s", alu8OpName(5));
    $display("    %s", alu8OpName(8));
    $display("    %s", alu8OpName(33));
end
endmodule

输出:

and
cp
?

您可以使用代码所示的条件运算符,或使用

case
语句代替。

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