aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Magyar2021-03-01 09:46:25 -0800
committerAlbert Magyar2021-04-05 12:00:02 -0700
commit47cc4a8c57a7d50c9914ceeadbcd19f71f179187 (patch)
treeb03f2bcc2b6be40d5da24af3bad171101abd4bb1 /src
parent59f0d9d2dbcc74e9489f453106704e403c59df06 (diff)
Add tests for same-address readwrite inference
* Update test to include both 'old' and 'new' read-under-write values
Diffstat (limited to 'src')
-rw-r--r--src/test/scala/firrtlTests/InferReadWriteSpec.scala51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/InferReadWriteSpec.scala b/src/test/scala/firrtlTests/InferReadWriteSpec.scala
index 1fb24297..62969df5 100644
--- a/src/test/scala/firrtlTests/InferReadWriteSpec.scala
+++ b/src/test/scala/firrtlTests/InferReadWriteSpec.scala
@@ -177,4 +177,55 @@ circuit sram6t :
// Check correctness of firrtl
res should containLine(s"mem.rw.wmode <= wen")
}
+
+ def sameAddr(ruw: String): String = {
+ s"""
+ |circuit sram6t :
+ | module sram6t :
+ | input clock : Clock
+ | output io : { flip addr : UInt<11>, flip valid : UInt<1>, flip write : UInt<1>, flip dataIn : UInt<32>, dataOut : UInt<32>}
+ |
+ | mem mem:
+ | data-type => UInt<4>
+ | depth => 64
+ | reader => r
+ | writer => w
+ | read-latency => 1
+ | write-latency => 1
+ | read-under-write => ${ruw}
+ |
+ | mem.r.clk <= clock
+ | mem.r.addr <= io.addr
+ | mem.r.en <= io.valid
+ | io.dataOut <= mem.r.data
+ |
+ | node wen = and(io.valid, io.write)
+ | mem.w.clk <= clock
+ | mem.w.addr <= io.addr
+ | mem.w.en <= wen
+ | mem.w.mask <= UInt(1)
+ | mem.w.data <= io.dataIn""".stripMargin
+ }
+
+ "Infer ReadWrite Ports" should "infer readwrite ports from shared addresses with undefined readUnderWrite" in {
+ val input = sameAddr("undefined")
+ val annos = Seq(memlib.InferReadWriteAnnotation)
+ val res = compileAndEmit(CircuitState(parse(input), HighForm, annos))
+ // Check correctness of firrtl
+ res should containLine(s"mem.rw.wmode <= wen")
+ }
+
+ Seq("old", "new").foreach { ruw =>
+ "Infer ReadWrite Ports" should s"not infer readwrite ports from shared addresses with '${ruw}' readUnderWrite" in {
+ val input = sameAddr(ruw)
+ val annos = Seq(memlib.InferReadWriteAnnotation)
+ intercept[Exception] {
+ compileAndEmit(CircuitState(parse(input), ChirrtlForm, annos))
+ } match {
+ case CustomTransformException(_: InferReadWriteCheckException) => // success
+ case _ => fail()
+ }
+ }
+ }
+
}