Skip to content

Commit

Permalink
Fix missed elaboration of signal's 'external' property. #245
Browse files Browse the repository at this point in the history
  • Loading branch information
amykyta3 committed Jan 7, 2025
1 parent 056f33f commit 186236c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 11 deletions.
2 changes: 1 addition & 1 deletion src/systemrdl/__about__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.29.0"
__version__ = "1.29.1"
7 changes: 7 additions & 0 deletions src/systemrdl/core/elaborate.py
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,13 @@ def enter_Field(self, node: FieldNode) -> None:
assert node.parent is not None
node.inst.external = node.parent.inst.external

def enter_Signal(self, node: SignalNode) -> None:
if isinstance(node.parent, RootNode):
# In root scope. External is meaningless, so assign it to False
node.inst.external = False
else:
assert node.parent is not None
node.inst.external = node.parent.inst.external

def enter_Regfile(self, node: RegfileNode) -> None:
if self.coerce_external_to is not None:
Expand Down
3 changes: 2 additions & 1 deletion test/rdl_src/internal_external.rdl
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
signal {} test_signal;

addrmap extern_test {
reg rega_t {field {} x;} external reg1, reg2;
Expand Down Expand Up @@ -31,4 +32,4 @@ addrmap extern_test {
external rfile2_t rf2a;
internal rfile2_t rf2b;
rfile2_t rf2c;
};
};
22 changes: 13 additions & 9 deletions test/test_external.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,18 @@ def test_basic(self):
"reg12" : False,
}

for name,external in extern_map.items():
for name, external in extern_map.items():
with self.subTest(name):
reg = root.find_by_path("extern_test.%s" % name)
self.assertEqual(reg.external, external)
self.assertIs(reg.external, external)

with self.subTest("addrmap"):
addrmap = root.find_by_path("extern_test")
self.assertEqual(addrmap.external, True)
self.assertIs(addrmap.external, True)

with self.subTest("signal"):
signal = root.find_by_path("test_signal")
self.assertIs(signal.external, False)


def test_regfile(self):
Expand All @@ -55,10 +59,10 @@ def test_regfile(self):
"rf1c.regc" : False,
}

for name,external in extern_map.items():
for name, external in extern_map.items():
with self.subTest(name):
reg = root.find_by_path("extern_test.%s" % name)
self.assertEqual(reg.inst.external, external)
self.assertIs(reg.inst.external, external)

def test_nested_regfile(self):
root = self.compile(
Expand All @@ -81,15 +85,15 @@ def test_nested_regfile(self):
"rf1c.regc" : False,
}

for name,external in rf1_extern_map.items():
for name, external in rf1_extern_map.items():
with self.subTest("rf2a.%s" % name):
reg = root.find_by_path("extern_test.rf2a.%s" % name)
self.assertEqual(reg.inst.external, True)
self.assertIs(reg.inst.external, True)

with self.subTest("rf2b.%s" % name):
reg = root.find_by_path("extern_test.rf2b.%s" % name)
self.assertEqual(reg.inst.external, False)
self.assertIs(reg.inst.external, False)

with self.subTest("rf2c.%s" % name):
reg = root.find_by_path("extern_test.rf2c.%s" % name)
self.assertEqual(reg.inst.external, external)
self.assertIs(reg.inst.external, external)

0 comments on commit 186236c

Please sign in to comment.