33 lines
941 B
Python
33 lines
941 B
Python
from typing import TYPE_CHECKING
|
|
|
|
from systemrdl.node import FieldNode, RegNode
|
|
|
|
from ..struct_generator import RDLStructGenerator
|
|
|
|
if TYPE_CHECKING:
|
|
from . import WriteBuffering
|
|
|
|
class WBufStorageStructGenerator(RDLStructGenerator):
|
|
def __init__(self, wbuf: 'WriteBuffering') -> None:
|
|
super().__init__()
|
|
self.wbuf = wbuf
|
|
|
|
def enter_Field(self, node: FieldNode) -> None:
|
|
# suppress parent class's field behavior
|
|
pass
|
|
|
|
def enter_Reg(self, node: RegNode) -> None:
|
|
super().enter_Reg(node)
|
|
|
|
if not node.get_property('buffer_writes'):
|
|
return
|
|
|
|
regwidth = node.get_property('regwidth')
|
|
self.add_member("data", regwidth)
|
|
self.add_member("biten", regwidth)
|
|
self.add_member("pending")
|
|
|
|
trigger = node.get_property('wbuffer_trigger')
|
|
if isinstance(trigger, RegNode) and trigger == node:
|
|
self.add_member("trigger_q")
|