aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Magyar2021-03-24 13:32:18 -0700
committerAlbert Magyar2021-04-05 12:00:02 -0700
commit78dc3d01c53f81e65ca58a166b395f26f91bc2e0 (patch)
tree406c6d5b50735116abd0cde674f0f872831e9097 /src
parent595d37213c57b3455a1c39b1cf93e37d01f41b3f (diff)
Add test for SeparateWriteClocks
Diffstat (limited to 'src')
-rw-r--r--src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala b/src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala
new file mode 100644
index 00000000..476a3ae2
--- /dev/null
+++ b/src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package firrtlTests
+
+import firrtl._
+import firrtl.ir._
+import firrtl.passes.memlib.SeparateWriteClocks
+import firrtl.testutils._
+import firrtl.testutils.FirrtlCheckers._
+
+class SeparateWriteClocksSpec extends FirrtlFlatSpec {
+ def transform(input: String): CircuitState = {
+ val csx = (new SeparateWriteClocks).execute(CircuitState(parse(input), MidForm))
+ val emittedCirc = EmittedFirrtlCircuit("top", csx.circuit.serialize, ".fir")
+ csx.copy(annotations = Seq(EmittedFirrtlCircuitAnnotation(emittedCirc)))
+ }
+
+ behavior.of("SeparateWriteClocks")
+
+ it should "add intermediate wires to clocks of multi-write sync-read memories" in {
+ val result = transform(s"""
+ |circuit top:
+ | module top:
+ | input clk: Clock
+ | input raddr: UInt<10>
+ | output rdata: UInt<8>[4]
+ | input waddr_a: UInt<10>
+ | input we_a: UInt<1>
+ | input wdata_a: UInt<8>[4]
+ | input waddr_a: UInt<10>
+ | input we_a: UInt<1>
+ | input wdata_a: UInt<8>[4]
+ |
+ | mem m:
+ | data-type => UInt<8>
+ | depth => 1024
+ | reader => r
+ | writer => w_a
+ | writer => w_b
+ | read-latency => 1
+ | write-latency => 1
+ | read-under-write => undefined
+ |
+ | m.r.clk <= clk
+ | m.r.addr <= raddr
+ | m.r.en <= UInt(1)
+ | rdata <= m.r.data
+ |
+ | m.w_a.clk <= clk
+ | m.w_a.addr <= waddr_a
+ | m.w_a.en <= we_a
+ | m.w_a.mask <= UInt(1)
+ | m.w_a.data <= wdata_a
+ |
+ | m.w_b.clk <= clk
+ | m.w_b.addr <= waddr_b
+ | m.w_b.en <= we_b
+ | m.w_b.mask <= UInt(1)
+ | m.w_b.data <= wdata_b""".stripMargin)
+
+ println(result.circuit.serialize)
+ result should containLine("m.r.clk <= clk")
+ result should containLine("m.w_a.clk <= m_w_a_clk")
+ result should containLine("m.w_b.clk <= m_w_b_clk")
+ result shouldNot containLine("m.w_a.clk <= clk")
+ result shouldNot containLine("m.w_b.clk <= clk")
+ }
+}