diff --git a/src/peakrdl_regblock/udps/rw_buffering.py b/src/peakrdl_regblock/udps/rw_buffering.py index 428fd08..37ba6ce 100644 --- a/src/peakrdl_regblock/udps/rw_buffering.py +++ b/src/peakrdl_regblock/udps/rw_buffering.py @@ -4,7 +4,7 @@ from systemrdl.udp import UDPDefinition from systemrdl.component import Reg from systemrdl.rdltypes.references import RefType, PropertyReference from systemrdl.rdltypes import NoValue -from systemrdl.node import Node, RegNode, VectorNode, SignalNode +from systemrdl.node import Node, RegNode, VectorNode, SignalNode, FieldNode class xBufferTrigger(UDPDefinition): @@ -91,6 +91,16 @@ class WBufferTrigger(xBufferTrigger): return node return None + def validate(self, node: Node, value: Any) -> None: + super().validate(node, value) + + if isinstance(value, FieldNode): + if value.parent == node: + self.msg.error( + "Trigger for a write-buffered register cannot be a field " + "within the same register since the buffering makes it impossible to trigger." + ) + class BufferReads(UDPDefinition): name = "buffer_reads"