From f68bcae2dfd8eb77e09fb414b86fc97baffccfa0 Mon Sep 17 00:00:00 2001 From: Jean THOMAS Date: Tue, 4 Aug 2020 17:16:07 +0200 Subject: [PATCH 1/3] nmigen.sim._pyrtl: Add early support for Assert in pysim --- nmigen/sim/_pyrtl.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nmigen/sim/_pyrtl.py b/nmigen/sim/_pyrtl.py index 9c7225a76..db8978873 100644 --- a/nmigen/sim/_pyrtl.py +++ b/nmigen/sim/_pyrtl.py @@ -354,7 +354,11 @@ def on_Switch(self, stmt): self(stmts) def on_Assert(self, stmt): - raise NotImplementedError # :nocov: + gen_test = self.emitter.def_var("test", + f"{self.rhs(stmt.test)} & {(1 << len(stmt.test)) - 1}") + self.emitter.append(f"if not {gen_test}:") + with self.emitter.indent(): + self.emitter.append(f"raise AssertionError(\"Assertion failed at {stmt.src_loc[0]}:{stmt.src_loc[1]}\")") def on_Assume(self, stmt): raise NotImplementedError # :nocov: From 1dc6caa9ddb2d77e05b76f9bed7179a22a934aa0 Mon Sep 17 00:00:00 2001 From: Jean THOMAS Date: Tue, 4 Aug 2020 18:09:41 +0200 Subject: [PATCH 2/3] nmigen.sim._pyrtl: Treat Assume like Assert --- nmigen/sim/_pyrtl.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nmigen/sim/_pyrtl.py b/nmigen/sim/_pyrtl.py index db8978873..07dd4c3ce 100644 --- a/nmigen/sim/_pyrtl.py +++ b/nmigen/sim/_pyrtl.py @@ -360,8 +360,7 @@ def on_Assert(self, stmt): with self.emitter.indent(): self.emitter.append(f"raise AssertionError(\"Assertion failed at {stmt.src_loc[0]}:{stmt.src_loc[1]}\")") - def on_Assume(self, stmt): - raise NotImplementedError # :nocov: + on_Assume = on_Assert def on_Cover(self, stmt): raise NotImplementedError # :nocov: From e889e863a34e9c97361591bb27b758b4549770f7 Mon Sep 17 00:00:00 2001 From: Jean THOMAS Date: Tue, 4 Aug 2020 18:11:02 +0200 Subject: [PATCH 3/3] nmigen.sim._pyrtl: Use a specific error message for assumptions --- nmigen/sim/_pyrtl.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nmigen/sim/_pyrtl.py b/nmigen/sim/_pyrtl.py index 07dd4c3ce..14279acc3 100644 --- a/nmigen/sim/_pyrtl.py +++ b/nmigen/sim/_pyrtl.py @@ -360,7 +360,12 @@ def on_Assert(self, stmt): with self.emitter.indent(): self.emitter.append(f"raise AssertionError(\"Assertion failed at {stmt.src_loc[0]}:{stmt.src_loc[1]}\")") - on_Assume = on_Assert + def on_Assume(self, stmt): + gen_test = self.emitter.def_var("test", + f"{self.rhs(stmt.test)} & {(1 << len(stmt.test)) - 1}") + self.emitter.append(f"if not {gen_test}:") + with self.emitter.indent(): + self.emitter.append(f"raise AssertionError(\"Assumption failed at {stmt.src_loc[0]}:{stmt.src_loc[1]}\")") def on_Cover(self, stmt): raise NotImplementedError # :nocov: