All Downloads are FREE. Search and download functionalities are using the official Maven repository.

examples.leros.AluAccuChisel.scala Maven / Gradle / Ivy

package examples.leros

import chisel3._
import chisel3.util._

import examples.leros.Types._

object Types {
  val nop :: add :: sub :: and :: or :: xor :: ld :: shr :: Nil = Enum(8)
}

/**
  * Leros ALU including the accumulator register.
  *
  * @param size
  */
class AluAccuChisel(size: Int) extends AluAccu(size) {
  val accuReg = RegInit(0.U(size.W))

  val op = io.op
  val a = accuReg
  val b = io.din
  val res = WireDefault(a)

  switch(op) {
    is(nop) {
      res := a
    }
    is(add) {
      res := a + b
    }
    is(sub) {
      res := a - b
    }
    is(and) {
      res := a & b
    }
    is(or) {
      res := a | b
    }
    is(xor) {
      res := a ^ b
    }
    is (shr) {
      res := a >> 1
    }
    is(ld) {
      res := b
    }
  }

  when (io.ena) {
    accuReg := res
  }

  io.accu := accuReg
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy