这是一种看似难看的方式.
class DiffSquared extends Module {
val inputWidth = 8
val width = 16
val io = IO(new Bundle {
val X = Input(UInt(inputWidth.W))
val M = Input(UInt(inputWidth.W))
val Out = Output(UInt(width.W))
})
val x = Wire(UInt((inputWidth+1).W))
val m = Wire(UInt((inputWidth+1).W))
x := io.X
m := io.M
val diff = Wire(SInt((inputWidth+1).W))
diff := x.asSInt - m.asSInt
io.Out := (diff*diff).asUInt
}
什么是将UInt归零到9位SInt的更好方法,做差异,将其平方,并将结果表示为16位UInt?
最佳答案 这里有一个有用的功能:
zext零将UInt扩展为UInt宽度1的SInt.因此,您可以将代码编写为:
class DiffSquared extends Module {
val inputWidth = 8
val width = 16
val io = IO(new Bundle {
val X = Input(UInt(inputWidth.W))
val M = Input(UInt(inputWidth.W))
val Out = Output(UInt(width.W))
})
val diff = io.X.zext() - io.M.zext()
io.Out := (diff*diff).asUInt
}