Skip to content

Commit

Permalink
remove DefRegInit, change DefReg API with option defination.
Browse files Browse the repository at this point in the history
  • Loading branch information
sequencer committed May 28, 2021
1 parent cc6d925 commit 62d5220
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 12 deletions.
4 changes: 2 additions & 2 deletions core/src/main/scala/chisel3/Reg.scala
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ object Reg {
val clock = Node(Builder.forcedClock)

reg.bind(RegBinding(Builder.forcedUserModule, Builder.currentWhen()))
pushCommand(DefReg(sourceInfo, reg, clock))
pushCommand(DefReg(sourceInfo, reg, clock, None, None))
reg
}

Expand Down Expand Up @@ -176,7 +176,7 @@ object RegInit {

reg.bind(RegBinding(Builder.forcedUserModule, Builder.currentWhen()))
requireIsHardware(init, "reg initializer")
pushCommand(DefRegInit(sourceInfo, reg, clock.ref, reset.ref, init.ref))
pushCommand(DefReg(sourceInfo, reg, clock.ref, Some(reset.ref), Some(init.ref)))
reg
}

Expand Down
8 changes: 3 additions & 5 deletions core/src/main/scala/chisel3/internal/firrtl/Converter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,10 @@ private[chisel3] object Converter {
Some(fir.DefNode(convert(e.sourceInfo), e.name, expr))
case e @ DefWire(info, id) =>
Some(fir.DefWire(convert(info), e.name, extractType(id, info)))
case e @ DefReg(info, id, clock) =>
case e @ DefReg(info, id, clock, reset, init) =>
Some(fir.DefRegister(convert(info), e.name, extractType(id, info), convert(clock, ctx, info),
firrtl.Utils.zero, convert(getRef(id, info), ctx, info)))
case e @ DefRegInit(info, id, clock, reset, init) =>
Some(fir.DefRegister(convert(info), e.name, extractType(id, info), convert(clock, ctx, info),
convert(reset, ctx, info), convert(init, ctx, info)))
reset.map(r => convert(r, ctx, info)).getOrElse(firrtl.Utils.zero),
init.map(i => convert(i, ctx, info)).getOrElse(convert(getRef(id, info), ctx, info))))
case e @ DefMemory(info, id, t, size) =>
Some(firrtl.CDefMemory(convert(info), e.name, extractType(t, info), size, false))
case e @ DefSeqMemory(info, id, t, size, ruw) =>
Expand Down
6 changes: 4 additions & 2 deletions core/src/main/scala/chisel3/internal/firrtl/IR.scala
Original file line number Diff line number Diff line change
Expand Up @@ -743,8 +743,10 @@ abstract class Definition extends Command {
case class DefPrim[T <: Data](sourceInfo: SourceInfo, id: T, op: PrimOp, args: Arg*) extends Definition
case class DefInvalid(sourceInfo: SourceInfo, arg: Arg) extends Command
case class DefWire(sourceInfo: SourceInfo, id: Data) extends Definition
case class DefReg(sourceInfo: SourceInfo, id: Data, clock: Arg) extends Definition
case class DefRegInit(sourceInfo: SourceInfo, id: Data, clock: Arg, reset: Arg, init: Arg) extends Definition
case class DefReg(sourceInfo: SourceInfo, id: Data, clock: Arg, reset: Option[Arg], init: Option[Arg]) extends Definition {
assert((reset.isDefined && init.isDefined) || (reset.isEmpty && init.isEmpty))
val hasInit: Boolean = reset.isDefined
}
case class DefMemory(sourceInfo: SourceInfo, id: HasId, t: Data, size: BigInt) extends Definition
case class DefSeqMemory(sourceInfo: SourceInfo, id: HasId, t: Data, size: BigInt, readUnderWrite: fir.ReadUnderWrite.Value) extends Definition
case class DefMemPort[T <: Data](sourceInfo: SourceInfo, id: T, source: Node, dir: MemPortDirection, index: Arg, clock: Arg) extends Definition
Expand Down
1 change: 0 additions & 1 deletion src/main/scala/chisel3/aop/Select.scala
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ object Select {
check(module)
module._component.get.asInstanceOf[DefModule].commands.collect {
case r: DefReg => r.id
case r: DefRegInit => r.id
}
}

Expand Down
3 changes: 1 addition & 2 deletions src/main/scala/chisel3/internal/firrtl/Emitter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ private class Emitter(circuit: Circuit) {
val firrtlLine = e match {
case e: DefPrim[_] => s"node ${e.name} = ${e.op.name}(${e.args.map(_.fullName(ctx)).mkString(", ")})"
case e: DefWire => s"wire ${e.name} : ${emitType(e.id)}"
case e: DefReg => s"reg ${e.name} : ${emitType(e.id)}, ${e.clock.fullName(ctx)}"
case e: DefRegInit => s"reg ${e.name} : ${emitType(e.id)}, ${e.clock.fullName(ctx)} with : (reset => (${e.reset.fullName(ctx)}, ${e.init.fullName(ctx)}))"
case e: DefReg => s"reg ${e.name} : ${emitType(e.id)}, ${e.clock.fullName(ctx)}${ if (e.hasInit) "with : (reset => (${e.reset.fullName(ctx)}, ${e.init.fullName(ctx)}))" else ""}"
case e: DefMemory => s"cmem ${e.name} : ${emitType(e.t)}[${e.size}]"
case e: DefSeqMemory => s"smem ${e.name} : ${emitType(e.t)}[${e.size}], ${e.readUnderWrite}"
case e: DefMemPort[_] => s"${e.dir} mport ${e.name} = ${e.source.fullName(ctx)}[${e.index.fullName(ctx)}], ${e.clock.fullName(ctx)}"
Expand Down

0 comments on commit 62d5220

Please sign in to comment.