1 # This is the proof for Regfile class from regfile/regfile.py
3 from nmigen
import (Module
, Signal
, Elaboratable
, Mux
, Cat
, Repl
,
5 from nmigen
.asserts
import (Assert
, AnyConst
, Assume
, Cover
, Initial
,
6 Rose
, Fell
, Stable
, Past
)
7 from nmigen
.test
.utils
import FHDLTestCase
8 from nmigen
.cli
import rtlil
11 from soc
.regfile
.regfile
import Register
14 class Driver(Elaboratable
):
18 def elaborate(self
, platform
):
21 m
.submodules
.dut
= dut
= Register(32)
24 writethru
= dut
.writethru
25 _rdports
= dut
._rdports
26 _wrports
= dut
._wrports
31 dut
.write_port(f
"{i}")
33 comb
+= reg
.eq(AnyConst(32))
35 for i
in range(0,len(_rdports
)):
36 with m
.If(_rdports
[i
].ren
& writethru
):
37 with m
.If(_wrports
[i
].wen
):
38 comb
+= Assert(rdports
[i
].data_o
== _wrports
[i
].data_i
)
40 comb
+= Assert(rdports
[i
].data_o
== reg
)
42 comb
+= Assert(_rdports
[i
].data_o
== reg
)
47 class TestCase(FHDLTestCase
):
48 def test_formal(self
):
50 self
.assertFormal(module
, mode
="bmc", depth
=2)
51 self
.assertFormal(module
, mode
="cover", depth
=2)
55 vl
= rtlil
.convert(dut
, ports
=[])
56 with
open("regfile.il", "w") as f
:
60 if __name__
== '__main__':