aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala
diff options
context:
space:
mode:
authorAlbert Magyar2021-04-05 14:26:34 -0700
committerGitHub2021-04-05 14:26:34 -0700
commited5e03f960d89c8b5c999e030b2ae4586fa4a976 (patch)
treee67a43a77c4c0fe4b729705d2c725c9e0c11943f /src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala
parentca8b670eac0b0def66249738e52ef8137d30a8b5 (diff)
parent1afa3b40f78d781ca1f242b49ca3a56d6cbc57e4 (diff)
Merge pull request #2111 from chipsalliance/fpga-backend
Add -fpga flag to enable FPGA-oriented compilation strategies (currently for memories)
Diffstat (limited to 'src/test/scala/firrtlTests/SeparateWriteClocksSpec.scala')
-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")
+ }
+}