summaryrefslogtreecommitdiff
path: root/src/main/scala/Chisel/internal/firrtl/IR.scala
diff options
context:
space:
mode:
authorAndrew Waterman2016-01-17 17:20:49 -0800
committerAndrew Waterman2016-01-23 21:14:19 -0800
commit34a1abcd81bd3b2d7d264468345572009edfad27 (patch)
tree0dbaa05d8142d370d4df35d6999416325e1c0c99 /src/main/scala/Chisel/internal/firrtl/IR.scala
parent86a6c6bcdc349f40dcc31bce1931dc7c427da674 (diff)
Implement first draft of new FIRRTL changes
Diffstat (limited to 'src/main/scala/Chisel/internal/firrtl/IR.scala')
-rw-r--r--src/main/scala/Chisel/internal/firrtl/IR.scala22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/main/scala/Chisel/internal/firrtl/IR.scala b/src/main/scala/Chisel/internal/firrtl/IR.scala
index be61d67b..5612f1af 100644
--- a/src/main/scala/Chisel/internal/firrtl/IR.scala
+++ b/src/main/scala/Chisel/internal/firrtl/IR.scala
@@ -90,9 +90,9 @@ case class Slot(imm: Node, name: String) extends Arg {
override def fullName(ctx: Component): String =
if (imm.fullName(ctx).isEmpty) name else s"${imm.fullName(ctx)}.${name}"
}
-case class Index(imm: Arg, value: Int) extends Arg {
+case class Index(imm: Arg, value: Arg) extends Arg {
def name: String = s"[$value]"
- override def fullName(ctx: Component): String = s"${imm.fullName(ctx)}[$value]"
+ override def fullName(ctx: Component): String = s"${imm.fullName(ctx)}[${value.fullName(ctx)}]"
}
object Width {
@@ -132,6 +132,16 @@ sealed case class KnownWidth(value: Int) extends Width {
override def toString: String = value.toString
}
+sealed abstract class MemPortDirection(name: String) {
+ override def toString: String = name
+}
+object MemPortDirection {
+ object READ extends MemPortDirection("read")
+ object WRITE extends MemPortDirection("write")
+ object RDWR extends MemPortDirection("rdwr")
+ object INFER extends MemPortDirection("infer")
+}
+
abstract class Command
abstract class Definition extends Command {
def id: HasId
@@ -139,10 +149,10 @@ abstract class Definition extends Command {
}
case class DefPrim[T <: Data](id: T, op: PrimOp, args: Arg*) extends Definition
case class DefWire(id: Data) extends Definition
-case class DefRegister(id: Data, clock: Arg, reset: Arg) extends Definition
-case class DefMemory(id: HasId, t: Data, size: Int, clock: Arg) extends Definition
-case class DefSeqMemory(id: HasId, t: Data, size: Int, clock: Arg) extends Definition
-case class DefAccessor[T <: Data](id: T, source: Node, direction: Direction, index: Arg) extends Definition
+case class DefRegister(id: Data, clock: Arg, reset: Arg, init: Arg) extends Definition
+case class DefMemory(id: HasId, t: Data, size: Int) extends Definition
+case class DefSeqMemory(id: HasId, t: Data, size: Int) extends Definition
+case class DefMemPort[T <: Data](id: T, source: Node, dir: MemPortDirection, index: Arg, clock: Arg) extends Definition
case class DefInstance(id: Module, ports: Seq[Port]) extends Definition
case class DefPoison[T <: Data](id: T) extends Definition
case class WhenBegin(pred: Arg) extends Command