如何在Chisel3中指定平方两个无符号数的差值?

时间:2017-03-08 18:31:43

标签: chisel

这是一种看似难看的方式。

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?

2 个答案:

答案 0 :(得分:1)

由于没有一点,这里有一点点改进。 我们应该向UInt添加零扩展方法以使其更好吗? 那里已经有一个吗?

for len(s) > 0 {
    var x int
    x, s = s[0], s[1:]
    fmt.Println(x)
}

答案 1 :(得分:1)

这里有一个有用的函数: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
}