Source code for hwt.serializer.utils
from hwt.doc_markers import internal
from hwt.hdl.statements.assignmentContainer import HdlAssignmentContainer
from hwt.hdl.statements.codeBlockContainer import HdlStmCodeBlockContainer
from hwt.hdl.statements.statement import HdlStatement
from hwt.synthesizer.rtlLevel.mainBases import RtlSignalBase
[docs]@internal
def getMaxStmIdForStm(stm):
"""
Get maximum _instId from all assignments in statement,
used for sorting of processes in architecture
"""
maxId = 0
if isinstance(stm, HdlAssignmentContainer):
return stm._instId
else:
for _stm in stm._iter_stms():
maxId = max(maxId, getMaxStmIdForStm(_stm))
return maxId
[docs]def RtlSignal_sort_key(s: RtlSignalBase):
return (s.name, s._instId)
[docs]def HdlStatement_sort_key(stm: HdlStatement):
if isinstance(stm, HdlStmCodeBlockContainer) and stm.name is not None:
return (stm.name, getMaxStmIdForStm(stm))
else:
return ("", getMaxStmIdForStm(stm))