在我的 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);
如何定义一个返回字符串的函数?
PS:“类似问题”的结果完全没用。
这是一个可运行的示例:
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
?