X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=nmigen%2Ftest%2Ftest_hdl_ir.py;h=f72b4e9184c256c88f4617be371a5dfc4724a6a3;hb=68dae9f50e82d57254fe230b49d05974fb98d1ca;hp=0df49ab59588e8def4c3aad7b957b375c961daa0;hpb=fd89d2fc9d37680e710023d2606bc3a910c44386;p=nmigen.git diff --git a/nmigen/test/test_hdl_ir.py b/nmigen/test/test_hdl_ir.py index 0df49ab..f72b4e9 100644 --- a/nmigen/test/test_hdl_ir.py +++ b/nmigen/test/test_hdl_ir.py @@ -3,6 +3,7 @@ from collections import OrderedDict from ..hdl.ast import * from ..hdl.cd import * from ..hdl.ir import * +from ..hdl.mem import * from .tools import * @@ -321,7 +322,7 @@ class FragmentDomainsTestCase(FHDLTestCase): self.assertEqual(f1.domains["sync"], f2.domains["sync"]) -class FragmentDriverConflictTestCase(FHDLTestCase): +class FragmentHierarchyConflictTestCase(FHDLTestCase): def setUp_self_sub(self): self.s1 = Signal() self.c1 = Signal() @@ -350,7 +351,7 @@ class FragmentDriverConflictTestCase(FHDLTestCase): def test_conflict_self_sub(self): self.setUp_self_sub() - self.f1._resolve_driver_conflicts(mode="silent") + self.f1._resolve_hierarchy_conflicts(mode="silent") self.assertEqual(self.f1.subfragments, [ (self.f1a, "f1a"), (self.f1b, "f1b"), @@ -372,7 +373,7 @@ class FragmentDriverConflictTestCase(FHDLTestCase): with self.assertRaises(DriverConflict, msg="Signal '(sig s1)' is driven from multiple fragments: top, top."): - self.f1._resolve_driver_conflicts(mode="error") + self.f1._resolve_hierarchy_conflicts(mode="error") def test_conflict_self_sub_warning(self): self.setUp_self_sub() @@ -380,7 +381,7 @@ class FragmentDriverConflictTestCase(FHDLTestCase): with self.assertWarns(DriverConflict, msg="Signal '(sig s1)' is driven from multiple fragments: top, top.; " "hierarchy will be flattened"): - self.f1._resolve_driver_conflicts(mode="warn") + self.f1._resolve_hierarchy_conflicts(mode="warn") def setUp_sub_sub(self): self.s1 = Signal() @@ -402,7 +403,7 @@ class FragmentDriverConflictTestCase(FHDLTestCase): def test_conflict_sub_sub(self): self.setUp_sub_sub() - self.f1._resolve_driver_conflicts(mode="silent") + self.f1._resolve_hierarchy_conflicts(mode="silent") self.assertEqual(self.f1.subfragments, []) self.assertRepr(self.f1.statements, """ ( @@ -431,7 +432,7 @@ class FragmentDriverConflictTestCase(FHDLTestCase): def test_conflict_self_subsub(self): self.setUp_self_subsub() - self.f1._resolve_driver_conflicts(mode="silent") + self.f1._resolve_hierarchy_conflicts(mode="silent") self.assertEqual(self.f1.subfragments, []) self.assertRepr(self.f1.statements, """ ( @@ -440,6 +441,43 @@ class FragmentDriverConflictTestCase(FHDLTestCase): ) """) + def setUp_memory(self): + self.m = Memory(width=8, depth=4) + self.fr = self.m.read_port().get_fragment(platform=None) + self.fw = self.m.write_port().get_fragment(platform=None) + self.f1 = Fragment() + self.f2 = Fragment() + self.f2.add_subfragment(self.fr) + self.f1.add_subfragment(self.f2) + self.f3 = Fragment() + self.f3.add_subfragment(self.fw) + self.f1.add_subfragment(self.f3) + + def test_conflict_memory(self): + self.setUp_memory() + + self.f1._resolve_hierarchy_conflicts(mode="silent") + self.assertEqual(self.f1.subfragments, [ + (self.fr, None), + (self.fw, None), + ]) + + def test_conflict_memory_error(self): + self.setUp_memory() + + with self.assertRaises(DriverConflict, + msg="Memory 'm' is accessed from multiple fragments: top., " + "top."): + self.f1._resolve_hierarchy_conflicts(mode="error") + + def test_conflict_memory_warning(self): + self.setUp_memory() + + with self.assertWarns(DriverConflict, + msg="Memory 'm' is accessed from multiple fragments: top., " + "top.; hierarchy will be flattened"): + self.f1._resolve_hierarchy_conflicts(mode="warn") + class InstanceTestCase(FHDLTestCase): def setUp_cpu(self):