From 425bc49784437131fa909be571c8414d315f482b Mon Sep 17 00:00:00 2001
From: Donald Sebastian Leung
Date: Fri, 18 Sep 2020 15:59:59 +0800
Subject: [PATCH] Parallelize all verification tasks for Minerva
---
README.md | 2 --
rvfi/cores/minerva/verify.py | 59 ++++++++++++++++++++++++------------
2 files changed, 40 insertions(+), 21 deletions(-)
diff --git a/README.md b/README.md
index 8a8ebd9..f3f5af5 100644
--- a/README.md
+++ b/README.md
@@ -27,8 +27,6 @@ This should run the tests (cache, multiplier, divider) provided by Minerva itsel
$ python -m rvfi.cores.minerva.verify
```
-This should complete within 2 hours.
-
## Scope
The RV32I, RV32M, RV64I and RV64M ISAs are currently implemented but only RV32IM are being tested by integrating with the Minerva core.
diff --git a/rvfi/cores/minerva/verify.py b/rvfi/cores/minerva/verify.py
index 5248325..acc7916 100644
--- a/rvfi/cores/minerva/verify.py
+++ b/rvfi/cores/minerva/verify.py
@@ -230,8 +230,9 @@ class PcFwdSpec(Elaboratable):
class PcFwdTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(PcFwdSpec(), mode="cover", depth=20)
- self.assertFormal(PcFwdSpec(), mode="bmc", depth=20)
+ self.assertFormal(PcFwdSpec(), mode="cover", depth=20, spec_name="verify_pc_fwd")
+ self.assertFormal(PcFwdSpec(), mode="bmc", depth=20, spec_name="verify_pc_fwd")
+ print("verify_pc_fwd PASS")
class PcBwdSpec(Elaboratable):
def elaborate(self, platform):
@@ -279,8 +280,9 @@ class PcBwdSpec(Elaboratable):
class PcBwdTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(PcBwdSpec(), mode="cover", depth=20)
- self.assertFormal(PcBwdSpec(), mode="bmc", depth=20)
+ self.assertFormal(PcBwdSpec(), mode="cover", depth=20, spec_name="verify_pc_bwd")
+ self.assertFormal(PcBwdSpec(), mode="bmc", depth=20, spec_name="verify_pc_bwd")
+ print("verify_pc_bwd PASS")
class RegSpec(Elaboratable):
def elaborate(self, platform):
@@ -330,8 +332,9 @@ class RegSpec(Elaboratable):
class RegTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(RegSpec(), mode="cover", depth=10)
- self.assertFormal(RegSpec(), mode="bmc", depth=10)
+ self.assertFormal(RegSpec(), mode="cover", depth=10, spec_name="verify_reg")
+ self.assertFormal(RegSpec(), mode="bmc", depth=10, spec_name="verify_reg")
+ print("verify_reg PASS")
class CausalSpec(Elaboratable):
def elaborate(self, platform):
@@ -378,8 +381,9 @@ class CausalSpec(Elaboratable):
class CausalTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(CausalSpec(), mode="cover", depth=20)
- self.assertFormal(CausalSpec(), mode="bmc", depth=20)
+ self.assertFormal(CausalSpec(), mode="cover", depth=20, spec_name="verify_causal")
+ self.assertFormal(CausalSpec(), mode="bmc", depth=20, spec_name="verify_causal")
+ print("verify_causal PASS")
class LivenessSpec(Elaboratable):
def elaborate(self, platform):
@@ -444,8 +448,9 @@ class LivenessSpec(Elaboratable):
class LivenessTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(LivenessSpec(), mode="cover", depth=40)
- self.assertFormal(LivenessSpec(), mode="bmc", depth=40)
+ self.assertFormal(LivenessSpec(), mode="cover", depth=40, spec_name="verify_liveness")
+ self.assertFormal(LivenessSpec(), mode="bmc", depth=40, spec_name="verify_liveness")
+ print("verify_liveness PASS")
class UniqueSpec(Elaboratable):
def elaborate(self, platform):
@@ -493,8 +498,9 @@ class UniqueSpec(Elaboratable):
class UniqueTestCase(FHDLTestCase):
def verify(self):
- self.assertFormal(UniqueSpec(), mode="cover", depth=25)
- self.assertFormal(UniqueSpec(), mode="bmc", depth=25)
+ self.assertFormal(UniqueSpec(), mode="cover", depth=25, spec_name="verify_uniqueness")
+ self.assertFormal(UniqueSpec(), mode="bmc", depth=25, spec_name="verify_uniqueness")
+ print("verify_uniqueness PASS")
print('*' * 80)
print('*' + ' ' * 78 + '*')
@@ -503,25 +509,40 @@ print('*' + ' ' * 78 + '*')
print('*' * 80)
print("Verifying RV32M instructions ...")
-InsnTestCase().verify()
+p_insn = Process(target=InsnTestCase().verify)
+p_insn.start()
print("Verifying PC forward checks ...")
-PcFwdTestCase().verify()
+p_pc_fwd = Process(target=PcFwdTestCase().verify)
+p_pc_fwd.start()
print("Verifying PC backward checks ...")
-PcBwdTestCase().verify()
+p_pc_bwd = Process(target=PcBwdTestCase().verify)
+p_pc_bwd.start()
print("Verifying register checks ...")
-RegTestCase().verify()
+p_reg = Process(target=RegTestCase().verify)
+p_reg.start()
print("Verifying causal checks ...")
-CausalTestCase().verify()
+p_causal = Process(target=CausalTestCase().verify)
+p_causal.start()
print("Verifying liveness checks ...")
-LivenessTestCase().verify()
+p_liveness = Process(target=LivenessTestCase().verify)
+p_liveness.start()
print("Verifying uniqueness checks ...")
-UniqueTestCase().verify()
+p_uniqueness = Process(target=UniqueTestCase().verify)
+p_uniqueness.start()
+
+p_insn.join()
+p_pc_fwd.join()
+p_pc_bwd.join()
+p_reg.join()
+p_causal.join()
+p_liveness.join()
+p_uniqueness.join()
print('*' * 80)
print('*' + ' ' * 78 + '*')