diff options
| author | Jack Koenig | 2019-04-23 16:24:19 -0700 |
|---|---|---|
| committer | GitHub | 2019-04-23 16:24:19 -0700 |
| commit | 9bef2461e55c724354f20bce0d32c7f5e6ac45ff (patch) | |
| tree | c0db6362db710d8069d5b7e147d6b65486d632ea /src/test | |
| parent | 32acdcf63ab74e7d47d7600f2211a72dd19280c3 (diff) | |
Change size of memories from Int to BigInt (#1076)
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/scala/chiselTests/Mem.scala | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/Mem.scala b/src/test/scala/chiselTests/Mem.scala index 60835d49..176ea5e7 100644 --- a/src/test/scala/chiselTests/Mem.scala +++ b/src/test/scala/chiselTests/Mem.scala @@ -44,6 +44,34 @@ class SyncReadMemWithZeroWidthTester extends BasicTester { } } +// TODO this can't actually simulate with FIRRTL behavioral mems +class HugeSMemTester(size: BigInt) extends BasicTester { + val (cnt, _) = Counter(true.B, 5) + val mem = SyncReadMem(size, UInt(8.W)) + val rdata = mem.read(cnt - 1.U, cnt =/= 0.U) + + switch (cnt) { + is (0.U) { mem.write(cnt, 3.U) } + is (1.U) { mem.write(cnt, 2.U) } + is (2.U) { assert(rdata === 3.U) } + is (3.U) { assert(rdata === 2.U) } + is (4.U) { stop() } + } +} +class HugeCMemTester(size: BigInt) extends BasicTester { + val (cnt, _) = Counter(true.B, 5) + val mem = Mem(size, UInt(8.W)) + val rdata = mem.read(cnt) + + switch (cnt) { + is (0.U) { mem.write(cnt, 3.U) } + is (1.U) { mem.write(cnt, 2.U) } + is (2.U) { assert(rdata === 3.U) } + is (3.U) { assert(rdata === 2.U) } + is (4.U) { stop() } + } +} + class MemorySpec extends ChiselPropSpec { property("Mem of Vec should work") { assertTesterPasses { new MemVecTester } @@ -56,4 +84,13 @@ class MemorySpec extends ChiselPropSpec { property("SyncReadMem should work with zero width entry") { assertTesterPasses { new SyncReadMemWithZeroWidthTester } } + + property("Massive memories should be emitted in Verilog") { + val addrWidth = 65 + val size = BigInt(1) << addrWidth + val smem = compile(new HugeSMemTester(size)) + smem should include (s"reg /* sparse */ [7:0] mem [0:$addrWidth'd${size-1}];") + val cmem = compile(new HugeCMemTester(size)) + cmem should include (s"reg /* sparse */ [7:0] mem [0:$addrWidth'd${size-1}];") + } } |
