【问题标题】:Scala Chisel Ripple Carry Adder SyntaxScala Chisel Ripple 进位加法器语法
【发布时间】:2021-05-14 13:12:26
【问题描述】:

我正在尝试设计以下由 Fulladers 制成的 Ripple Carry Adder。到目前为止我尝试了很多,但我正在努力使用凿子语法。有人可以帮助我并指出我做错了什么吗?这是我的代码:

class RcaAdder(val n:Int) extends Module {
  val io = IO(new Bundle {
   val a    = Input(UInt(n.W))
   val b    = Input(UInt(n.W))
   val cin  = Input(UInt(1.W))
   val sum  = Output(UInt(n.W))
   val cout = Output(UInt(1.W))
  })


  //For loop
  for(i <- 0 to n){

   val fulladder = Module(new FullAdder())
   fulladder.io.a := io.a(i)
   fulladder.io.b := io.b(i)

   if(i == 0){
     fulladder.io.cin := io.cin    
   }else{
     fulladder.io.cin := io.cout
   }

   io.cout := fulladder.io.cout
   io.sum(i) := fulladder.io.sum
  }
}

这让我得到以下错误:

Exception in thread "main" chisel3.internal.ChiselException: Cannot reassign to read-only Bool(OpResult in RcaAdder)

我认为它与“ io.sum(i) := .. ”有关

请帮帮我!非常感谢!

【问题讨论】:

    标签: scala syntax chisel


    【解决方案1】:

    你已经非常接近让它工作了。您遇到的一个问题是您无法分配给:= 左侧的位子集。解决此问题的一种方法是创建UInt(1.W)Vec,然后将其用作RHS 作为单个分配。我认为您的 ifs 有问题,我建议您使用 foldLeft 而不是 for,因为它提供了访问先前元素的机制。把这些放在一起,我想你想要的是这样的。

    class RcaAdder(n: Int) extends Module {
      val io = IO(new Bundle {
        val a    = Input(UInt(n.W))
        val b    = Input(UInt(n.W))
        val cin  = Input(UInt(1.W))
        val sum  = Output(UInt(n.W))
        val cout = Output(UInt(1.W))
      })
    
      val outBits = Wire(Vec(n, UInt(1.W)))
    
      io.cout := (0 until n).foldLeft(io.cin) { case (carry, index) =>
        val fullAdder = Module(new FullAdder)
        fullAdder.io.a := io.a(index)
        fullAdder.io.b := io.b(index)
        fullAdder.io.cin := carry
        outBits(index) := fullAdder.io.sum
        fullAdder.io.cout.    // This will be passed as carry to the next interation
      }
      io.sum := outBits.asUInt()
    }
    

    我添加了一个工作测试示例here on scastie。 祝你好运,欢迎来到 Chisel

    【讨论】:

    • 谢谢小鸡马克利!我确实从 foldLeft 学到了一些新东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多