aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests/MemSpec.scala
diff options
context:
space:
mode:
authorJack Koenig2019-04-22 13:46:37 -0700
committerGitHub2019-04-22 13:46:37 -0700
commit99ae1d6649f1731c5dec2098b10733735232b72c (patch)
tree04e7b0f4515fc9f79aa5f0d80aff2bb5805637c9 /src/test/scala/firrtlTests/MemSpec.scala
parentbf66997b1a2438a322cd619ca2b6aeb0f0ac0ba0 (diff)
Change Memory Depth to a BigInt (#1075)
Diffstat (limited to 'src/test/scala/firrtlTests/MemSpec.scala')
-rw-r--r--src/test/scala/firrtlTests/MemSpec.scala68
1 files changed, 67 insertions, 1 deletions
diff --git a/src/test/scala/firrtlTests/MemSpec.scala b/src/test/scala/firrtlTests/MemSpec.scala
index 67b7e74d..612a952d 100644
--- a/src/test/scala/firrtlTests/MemSpec.scala
+++ b/src/test/scala/firrtlTests/MemSpec.scala
@@ -2,7 +2,10 @@
package firrtlTests
-class MemSpec extends FirrtlPropSpec {
+import firrtl._
+import FirrtlCheckers._
+
+class MemSpec extends FirrtlPropSpec with FirrtlMatchers {
property("Zero-ported mems should be supported!") {
runFirrtlTest("ZeroPortMem", "/features")
@@ -11,5 +14,68 @@ class MemSpec extends FirrtlPropSpec {
property("Mems with zero-width elements should be supported!") {
runFirrtlTest("ZeroWidthMem", "/features")
}
+
+ property("Very large memories should be supported") {
+ val addrWidth = 65
+ val memSize = BigInt(1) << addrWidth
+ val input =
+ s"""
+ |circuit Test :
+ | module Test :
+ | input clock : Clock
+ | input raddr : UInt<$addrWidth>
+ | output rdata : UInt<8>
+ | input wdata : UInt<8>
+ | input waddr : UInt<$addrWidth>
+ | input wen : UInt<1>
+ |
+ | mem m :
+ | data-type => UInt<8>
+ | depth => $memSize
+ | reader => r
+ | writer => w
+ | read-latency => 1
+ | write-latency => 1
+ | read-under-write => undefined
+ | rdata <= m.r.data
+ | m.r.addr <= raddr
+ | m.r.en <= UInt(1)
+ | m.r.clk <= clock
+ | m.w.addr <= waddr
+ | m.w.data <= wdata
+ | m.w.en <= wen
+ | m.w.clk <= clock
+ | m.w.mask <= UInt(1)
+ """.stripMargin
+ val result = (new VerilogCompiler).compileAndEmit(CircuitState(parse(input), ChirrtlForm, List.empty))
+ // TODO Not great that it includes the sparse comment for VCS
+ result should containLine (s"reg /* sparse */ [7:0] m [0:$addrWidth'd${memSize-1}];")
+ }
+
+ property("Very large CHIRRTL memories should be supported") {
+ val addrWidth = 65
+ val memSize = BigInt(1) << addrWidth
+ val input =
+ s"""
+ |circuit Test :
+ | module Test :
+ | input clock : Clock
+ | input raddr : UInt<$addrWidth>
+ | output rdata : UInt<8>
+ | input wdata : UInt<8>
+ | input waddr : UInt<$addrWidth>
+ | input wen : UInt<1>
+ |
+ | cmem m : UInt<8>[$memSize]
+ | read mport r = m[raddr], clock
+ | rdata <= r
+ | write mport w = m[waddr], clock
+ | when wen :
+ | w <= wdata
+ """.stripMargin
+ val result = (new VerilogCompiler).compileAndEmit(CircuitState(parse(input), ChirrtlForm, List.empty))
+ // TODO Not great that it includes the sparse comment for VCS
+ result should containLine (s"reg /* sparse */ [7:0] m [0:$addrWidth'd${memSize-1}];")
+ }
}