超出范围的常数(Out of Range Constant)

简介

SpinalHDL会检查,当一个值和一个常量对比时,该值是否具有更宽的位数。

示例

例如下面的代码:

val value = in UInt(2 bits)
val result = out(value < 42)

会导致如下错误:

OUT OF RANGE CONSTANT. Operator UInt < UInt
- Left  operand : (toplevel/value : in UInt[2 bits])
- Right operand : (U"101010" 6 bits)
 is checking a value against a out of range constant

特殊情况

在某些情况下,由于设计参数化,将值与更大的常量进行比较并获得静态已知的 True/False 结果是有意义的。

您可以选择将与超出范围的常量进行比较的一个实例列入专门的白名单。

val value = in UInt(2 bits)
val result = out((value < 42).allowOutOfRangeLiterals)

或者,您可以允许整个设计对超出范围的常量进行比较。

SpinalConfig(allowOutOfRangeLiterals = true)