2 from nmigen
.hdl
.ast
import Past
3 from nmigen
.asserts
import Assert
, Assume
5 from gram
.core
.refresher
import RefreshExecuter
, RefreshSequencer
, RefreshTimer
, RefreshPostponer
, Refresher
6 from gram
.compat
import *
9 class RefreshExecuterTestCase(FHDLTestCase
):
10 def test_executer(self
):
11 def generic_test(abits
, babits
, trp
, trfc
):
13 m
.submodules
.dut
= dut
= RefreshExecuter(abits
=abits
, babits
=babits
, trp
=trp
, trfc
=trfc
)
19 self
.assertEqual((yield dut
.a
), 2**10)
22 self
.assertEqual((yield dut
.a
), 0)
24 runSimulation(m
, process
, "test_refreshexecuter.vcd")
26 generic_test(20, 20, 5, 5)
27 generic_test(20, 20, 100, 5)
29 class RefreshSequencerTestCase(FHDLTestCase
):
30 def test_formal(self
):
32 dut
= RefreshSequencer(abits
=14, babits
=3, trp
=trp
, trfc
=trfc
, postponing
=1)
33 self
.assertFormal(dut
, mode
="bmc", depth
=trp
+trfc
+1)
35 class RefreshTimerTestCase(FHDLTestCase
):
36 def test_formal(self
):
37 def generic_test(tREFI
):
38 dut
= RefreshTimer(tREFI
)
39 self
.assertFormal(dut
, mode
="bmc", depth
=tREFI
+1)
40 [generic_test(_
) for _
in [2, 5, 10]]
42 class RefreshPostponerTestCase(FHDLTestCase
):
45 m
.submodules
.dut
= dut
= RefreshPostponer(1)
48 self
.assertFalse((yield dut
.req_o
))
50 runSimulation(m
, process
, "test_refreshpostponer.vcd")
53 def generic_test(delay
):
55 m
.submodules
.dut
= dut
= RefreshPostponer(delay
)
61 for i
in range(delay
):
62 self
.assertFalse((yield dut
.req_o
))
65 self
.assertTrue((yield dut
.req_o
))
67 runSimulation(m
, process
, "test_refreshpostponer.vcd")
69 [generic_test(_
) for _
in [1, 5, 10]]
71 def test_req_not_stuck(self
):
72 def generic_test(delay
):
74 m
.submodules
.dut
= dut
= RefreshPostponer(delay
)
80 for i
in range(delay
):
87 self
.assertFalse((yield dut
.req_o
))
89 runSimulation(m
, process
, "test_refreshpostponer.vcd")
91 [generic_test(_
) for _
in [1, 5, 10]]
93 class RefresherTestCase(FHDLTestCase
):
98 settings
.with_refresh
= True
99 settings
.refresh_zqcs_freq
= 1e0
100 settings
.timing
= Obj()
101 settings
.timing
.tREFI
= 64
102 settings
.timing
.tRP
= 1
103 settings
.timing
.tRFC
= 2
104 settings
.timing
.tZQCS
= 64
105 settings
.geom
= Obj()
106 settings
.geom
.addressbits
= 16
107 settings
.geom
.bankbits
= 3
109 settings
.phy
.nranks
= 1
112 def generic_test(postponing
):
114 m
.submodules
.dut
= dut
= Refresher(self
.settings
, 100e6
, postponing
)
117 self
.assertFalse((yield dut
.cmd
.valid
))
119 runSimulation(m
, process
, "test_refresher.vcd")
121 [generic_test(_
) for _
in [1, 2, 4, 8]]