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(Register
):
18 def elaborate(self
, platform
):
19 m
= super().elaborate(platform
)
23 writethru
= self
.writethru
24 _rdports
= self
._rdports
25 _wrports
= self
._wrports
29 self
.read_port(f
"{i}")
30 self
.write_port(f
"{i}")
32 comb
+= reg
.eq(AnyConst(8))
34 for i
in range(0,len(_rdports
)):
35 with m
.If(_rdports
[i
].ren
& writethru
):
36 with m
.If(_wrports
[i
].wen
):
37 comb
+= Assert(_rdports
[i
].data_o
== _wrports
[i
].data_i
)
39 comb
+= Assert(_rdports
[i
].data_o
== reg
)
41 comb
+= Assert(_rdports
[i
].data_o
== reg
)
46 class TestCase(FHDLTestCase
):
47 def test_formal(self
):
49 self
.assertFormal(module
, mode
="bmc", depth
=2)
50 self
.assertFormal(module
, mode
="cover", depth
=2)
54 vl
= rtlil
.convert(dut
, ports
=[])
55 with
open("regfile.il", "w") as f
:
59 if __name__
== '__main__':