From 18cf2aabc7f0bada4ae36788267feda8306d387f Mon Sep 17 00:00:00 2001 From: Dana Sorensen Date: Thu, 23 Oct 2025 20:37:27 -0600 Subject: [PATCH] don't emit write/read-buffer logic for external components --- .../read_buffering/implementation_generator.py | 2 +- src/peakrdl_regblock/read_buffering/storage_generator.py | 2 +- src/peakrdl_regblock/scan_design.py | 6 ++++-- .../write_buffering/implementation_generator.py | 2 +- src/peakrdl_regblock/write_buffering/storage_generator.py | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/peakrdl_regblock/read_buffering/implementation_generator.py b/src/peakrdl_regblock/read_buffering/implementation_generator.py index ea36d8b..355f4c9 100644 --- a/src/peakrdl_regblock/read_buffering/implementation_generator.py +++ b/src/peakrdl_regblock/read_buffering/implementation_generator.py @@ -22,7 +22,7 @@ class RBufLogicGenerator(RDLForLoopGenerator): super().enter_Reg(node) assert isinstance(node.inst, Reg) - if not node.get_property('buffer_reads'): + if not node.get_property('buffer_reads') or node.external: return context = { diff --git a/src/peakrdl_regblock/read_buffering/storage_generator.py b/src/peakrdl_regblock/read_buffering/storage_generator.py index c6a6d6d..e6eba18 100644 --- a/src/peakrdl_regblock/read_buffering/storage_generator.py +++ b/src/peakrdl_regblock/read_buffering/storage_generator.py @@ -11,7 +11,7 @@ class RBufStorageStructGenerator(RDLStructGenerator): def enter_Reg(self, node: RegNode) -> None: super().enter_Reg(node) - if not node.get_property('buffer_reads'): + if not node.get_property('buffer_reads') or node.external: return regwidth = node.get_property('regwidth') diff --git a/src/peakrdl_regblock/scan_design.py b/src/peakrdl_regblock/scan_design.py index c3bea91..961b5e7 100644 --- a/src/peakrdl_regblock/scan_design.py +++ b/src/peakrdl_regblock/scan_design.py @@ -95,8 +95,10 @@ class DesignScanner(RDLListener): accesswidth = node.get_property('accesswidth') self.ds.cpuif_data_width = max(self.ds.cpuif_data_width, accesswidth) - self.ds.has_buffered_write_regs = self.ds.has_buffered_write_regs or bool(node.get_property('buffer_writes')) - self.ds.has_buffered_read_regs = self.ds.has_buffered_read_regs or bool(node.get_property('buffer_reads')) + if node.get_property('buffer_writes') and not node.external: + self.ds.has_buffered_write_regs = True + if node.get_property('buffer_reads') and not node.external: + self.ds.has_buffered_read_regs = True def enter_Signal(self, node: 'SignalNode') -> None: if node.get_property('field_reset'): diff --git a/src/peakrdl_regblock/write_buffering/implementation_generator.py b/src/peakrdl_regblock/write_buffering/implementation_generator.py index c2dad95..ec2a640 100644 --- a/src/peakrdl_regblock/write_buffering/implementation_generator.py +++ b/src/peakrdl_regblock/write_buffering/implementation_generator.py @@ -23,7 +23,7 @@ class WBufLogicGenerator(RDLForLoopGenerator): super().enter_Reg(node) assert isinstance(node.inst, Reg) - if not node.get_property('buffer_writes'): + if not node.get_property('buffer_writes') or node.external: return regwidth = node.get_property('regwidth') diff --git a/src/peakrdl_regblock/write_buffering/storage_generator.py b/src/peakrdl_regblock/write_buffering/storage_generator.py index 6b48472..3cae471 100644 --- a/src/peakrdl_regblock/write_buffering/storage_generator.py +++ b/src/peakrdl_regblock/write_buffering/storage_generator.py @@ -19,7 +19,7 @@ class WBufStorageStructGenerator(RDLStructGenerator): def enter_Reg(self, node: RegNode) -> None: super().enter_Reg(node) - if not node.get_property('buffer_writes'): + if not node.get_property('buffer_writes') or node.external: return regwidth = node.get_property('regwidth')