Scala 如何在凿子中获得单位分割的结果

Scala 如何在凿子中获得单位分割的结果,scala,chisel,Scala,Chisel,正如标题所述,如何做到这一点 val a = 3.U val result = a / 2.U 结果将是1.U 然而,我想在部门申请ceil val result = ceil(a / 2.U ) 因此,我可以得到结果值的2.U。问题是表达式a/2.U确实是1.U:如果将ceil应用于1.U,您将得到1.U 回想一下,Ints也会发生这种情况,因为它们使用整数除法: scala> val result = Math.ceil(3 / 2) result: Double = 1.0

正如标题所述,如何做到这一点

val a = 3.U

val result = a / 2.U 
结果将是
1.U

然而,我想在部门申请ceil

val result = ceil(a / 2.U )

因此,我可以得到结果值的
2.U

问题是表达式
a/2.U
确实是
1.U
:如果将
ceil
应用于
1.U
,您将得到
1.U

回想一下,
Int
s也会发生这种情况,因为它们使用整数除法:

scala> val result = Math.ceil(3 / 2)
result: Double = 1.0
您应该做的是强制其中一个除法操作数为
Double
,同样:

scala> val result = Math.ceil(3 / (2: Double))
result: Double = 2.0

如果你知道
a
不是太大,当
a
除以
b
时,只需将其转换回
UInt

(也就是说,
a虽然在本例中可以使用双精度运算,但在一个或两个操作数都是线的更一般的情况下,将无法使用双精度运算。UInt没有MaxValue,尽管在某些情况下可以在编译时确定UInt的宽度,但在更一般的情况下,可以推断和确定UInt的宽度。)不可用。这可能会支持ceilUIntDiv的第二个定义
def ceilUIntDiv(a: UInt, b: UInt): UInt =
  (a + b - 1.U) / b
def ceilUIntDiv(a: UInt, b: UInt): UInt = {
  val c = a / b
  if (b * c == a) c else c + 1.U
}