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
):
31 dut
= RefreshSequencer(abits
=14, babits
=3, trp
=5, trfc
=5, postponing
=1)
32 self
.assertFormal(dut
, mode
="bmc", depth
=4)
34 class RefreshTimerTestCase(FHDLTestCase
):
35 def test_formal(self
):
36 def generic_test(tREFI
):
37 dut
= RefreshTimer(tREFI
)
38 self
.assertFormal(dut
, mode
="bmc", depth
=4)
39 [generic_test(_
) for _
in [2, 5, 10]]
41 class RefreshPostponerTestCase(FHDLTestCase
):
44 m
.submodules
.dut
= dut
= RefreshPostponer(1)
47 self
.assertFalse((yield dut
.req_o
))
49 runSimulation(m
, process
, "test_refreshpostponer.vcd")
52 def generic_test(delay
):
54 m
.submodules
.dut
= dut
= RefreshPostponer(delay
)
60 for i
in range(delay
):
61 self
.assertFalse((yield dut
.req_o
))
64 self
.assertTrue((yield dut
.req_o
))
66 runSimulation(m
, process
, "test_refreshpostponer.vcd")
68 [generic_test(_
) for _
in [1, 5, 10]]
70 def test_req_not_stuck(self
):
71 def generic_test(delay
):
73 m
.submodules
.dut
= dut
= RefreshPostponer(delay
)
79 for i
in range(delay
):
86 self
.assertFalse((yield dut
.req_o
))
88 runSimulation(m
, process
, "test_refreshpostponer.vcd")
90 [generic_test(_
) for _
in [1, 5, 10]]
92 class RefresherTestCase(FHDLTestCase
):
97 settings
.with_refresh
= True
98 settings
.refresh_zqcs_freq
= 1e0
99 settings
.timing
= Obj()
100 settings
.timing
.tREFI
= 64
101 settings
.timing
.tRP
= 1
102 settings
.timing
.tRFC
= 2
103 settings
.timing
.tZQCS
= 64
104 settings
.geom
= Obj()
105 settings
.geom
.addressbits
= 16
106 settings
.geom
.bankbits
= 3
108 settings
.phy
.nranks
= 1
111 def generic_test(postponing
):
113 m
.submodules
.dut
= dut
= Refresher(self
.settings
, 100e6
, postponing
)
116 self
.assertFalse((yield dut
.cmd
.valid
))
118 runSimulation(m
, process
, "test_refresher.vcd")
120 [generic_test(_
) for _
in [1, 2, 4, 8]]