aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/ir
diff options
context:
space:
mode:
authorAlbert Magyar2019-09-11 18:16:20 -0700
committerAlbert Magyar2019-09-30 16:22:01 -0700
commita10084fbba0ba88a1f0517b826ef8de44d8760d1 (patch)
tree8a1ac0098409dbb95a45d3b7107a4f6d59d8e166 /src/main/scala/firrtl/ir
parent4ca2b859473e0a88723463eac2821cfbd3249c43 (diff)
Improve read-under-write parameter support
* Make the read-under-write (RUW) parameter typesafe * Add RUW support to the FIRRTL proto and CHIRRTL grammar
Diffstat (limited to 'src/main/scala/firrtl/ir')
-rw-r--r--src/main/scala/firrtl/ir/IR.scala11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/ir/IR.scala b/src/main/scala/firrtl/ir/IR.scala
index 9268865b..b4631473 100644
--- a/src/main/scala/firrtl/ir/IR.scala
+++ b/src/main/scala/firrtl/ir/IR.scala
@@ -285,6 +285,13 @@ case class DefInstance(info: Info, name: String, module: String) extends Stateme
def foreachString(f: String => Unit): Unit = f(name)
def foreachInfo(f: Info => Unit): Unit = f(info)
}
+
+object ReadUnderWrite extends Enumeration {
+ val Undefined = Value("undefined")
+ val Old = Value("old")
+ val New = Value("new")
+}
+
case class DefMemory(
info: Info,
name: String,
@@ -296,7 +303,7 @@ case class DefMemory(
writers: Seq[String],
readwriters: Seq[String],
// TODO: handle read-under-write
- readUnderWrite: Option[String] = None) extends Statement with IsDeclaration {
+ readUnderWrite: ReadUnderWrite.Value = ReadUnderWrite.Undefined) extends Statement with IsDeclaration {
def serialize: String =
s"mem $name :" + info.serialize +
indent(
@@ -307,7 +314,7 @@ case class DefMemory(
(readers map ("reader => " + _)) ++
(writers map ("writer => " + _)) ++
(readwriters map ("readwriter => " + _)) ++
- Seq("read-under-write => undefined")) mkString "\n")
+ Seq(s"read-under-write => ${readUnderWrite}")) mkString "\n")
def mapStmt(f: Statement => Statement): Statement = this
def mapExpr(f: Expression => Expression): Statement = this
def mapType(f: Type => Type): Statement = this.copy(dataType = f(dataType))