如何在SystemVerilog的case inside语句中使用实数范围?
SystemVerilog中case inside语句使用实数匹配失败的解决方法
在SystemVerilog的case inside语句中使用实数范围匹配时,若所有分支都不命中、始终执行default分支,核心问题在于范围的起始值大于结束值。
你的示例代码中存在两处范围顺序错误:
case (value_in) inside [-97:-20]: return 4'hA; // 正确:-97 < -20 [-10.25:-1]: return 4'hB; // 正确:-10.25 < -1 [13.78:12.25]: return 4'h4; // 错误:13.78 > 12.25 [29:13]: return 4'h5; // 错误:29 > 13 default: `info("no match"); endcase
解决方案
将所有范围的起始值调整为较小的数值,结束值调整为较大的数值,确保范围是左小右大的顺序:
case (value_in) inside [-97:-20]: return 4'hA; [-10.25:-1]: return 4'hB; [12.25:13.78]: return 4'h4; // 修正顺序 [13:29]: return 4'h5; // 修正顺序 default: `info("no match"); endcase
这种修改完全符合SystemVerilog语法规范,不存在工具依赖性,也无需使用realtobits转换,仅需调整范围的数值顺序即可解决匹配失败问题。
内容的提问来源于stack exchange,提问作者Magor Keszthelyi
相关产品推荐
相关产品推荐

