Friday, March 24, 2017

Register a bundle in Chisel

I have been playing with more with Chisel lately.  An area I find lacking in the documentation is how to register a bundle (i.e. struct).  Most examples I have seen use simple registers with type UInt.

It took some trial and error, but here is an example that elaborates and synthesizes properly.

class DDR3Command extends Bundle {
  val casN = UInt(1.W)
  val rasN = UInt(1.W)
  val ba = UInt(3.W)

  // user function to specify defaults (sync reset)
  def defaults() = {
    casN := 1.U
    rasN := 1.U
    ba := 0.U
  }
}

class MemoryController extends Module {
  val io = IO(new Bundle {
    val ddr3 = Output(new DDR3Command())
  })

  // create a wire of the bundle and set it's default values (sync reset)
  val resetDDR3Cmd = Wire(new DDR3Command())
  resetDDR3Cmd.defaults()

  val nextDDR3Cmd = Reg(new DDR3Command(), init=resetDDR3Cmd)

  // for example purposes, only update select fields
  when (true.B) {
    nextDDR3Cmd.ba := 3.U
    nextDDR3Cmd.casN := 0.U
    //nextDDR3Cmd.rasN := 1.U
  }

  io.ddr3 := nextDDR3Cmd
}

Friday, March 10, 2017

REX to Intel and proud of the team


I left REX Computing about 1 year ago for reasons I choose not to disclose publically.  What I will say is that I am proud of the team to have brought the design through final tapeout, board development and now bring up.  I'm looking forward to the final power & performance numbers and, hopefully, an announcement about the software stack.  Here's Thomas (smart guy, 2013 Thiel fellow) presenting the hardware at Standford.  It's not the best quality and they were hit by Murphy's Law during the demo.  I'll switch up the video when a better presentation becomes available.



I am at Intel now (have been for 1 year).  The team develops verification testbench collateral to support the functional verification of their Xeon-line of server CPUs (Xeon, Xeon PHI, Xeon-D, etc.).  In a nutshell, my role is to manage a portion of a distributed "software" team (and virtual team) within a large organization that works on scrum-like sprints.  I am being challenged in different ways than previous - thus I am growing and grateful.

No official comment yet on the previous post.