diff --git a/spydrnet_physical/util/rrgraph_uncompress.py b/spydrnet_physical/util/rrgraph_uncompress.py index 63f13ac1..3ed945b5 100755 --- a/spydrnet_physical/util/rrgraph_uncompress.py +++ b/spydrnet_physical/util/rrgraph_uncompress.py @@ -142,3 +142,36 @@ def _block_types_bin2xml(block_types, xml_root=None): block_types_root.append(pin_class) xml_root.append(block_types_root) return xml_root + + @staticmethod + def _nodes_bin2xml(nodes, xml_root=None): + if xml_root is None: + xml_root = XML("") + + for node_ux in nodes: + node = update_attr( + Element("node"), + node_ux.to_dict(), + ("loc", "timing", "segment"), + upper_case_fields=("type"), + ) + if node.attrib.get("direction", None): + node.attrib["direction"] = node.attrib["direction"].upper().replace("DIR","_DIR") + loc = update_attr( + Element("loc"), + node_ux.loc.to_dict(), + attrib_map, + upper_case_fields=("side"), + ) + node.append(loc) + node.append( + update_attr(Element("timing"), node_ux.timing.to_dict(), attrib_map) + ) + if str(node_ux.type).startswith("chan"): + node.append( + update_attr( + Element("segment"), node_ux.segment.to_dict(), attrib_map + ) + ) + xml_root.append(node) + return xml_root diff --git a/spydrnet_physical/util/rrgraph_utils.py b/spydrnet_physical/util/rrgraph_utils.py index d0eaa996..8a3fea71 100644 --- a/spydrnet_physical/util/rrgraph_utils.py +++ b/spydrnet_physical/util/rrgraph_utils.py @@ -253,16 +253,17 @@ def _gen_rrgraph_xml( segments = self._segments_bin2xml(self.segments) block_types = self._block_types_bin2xml(self.rrgraph_bin.blockTypes.blockTypes) grids = self._grid_bin2xml(self.rrgraph_bin.grid.gridLocs) - # rrgraph_segments_bin2xml(self.rrgraph_bin.channels, etree.Element("channels")) - # rrgraph_block_types_bin2xml(self.rrgraph_bin.channels, etree.Element("channels")) - # rrgraph_grid_bin2xml(self.rrgraph_bin.channels, etree.Element("channels")) - # rrgraph_rr_nodes_bin2xml(self.rrgraph_bin.channels, etree.Element("channels")) - # rrgraph_rr_edges_bin2xml(self.rrgraph_bin.channels, etree.Element("channels")) + + # Add nodes datastructure + self.rrgraph_bin.rrNodes.nodes = [n for col in self.node_lookup for row in col for n in row] + rr_nodes = self._nodes_bin2xml(self.rrgraph_bin.rrNodes.nodes) + root.append(channels) root.append(switches) root.append(segments) root.append(block_types) root.append(grids) + root.append(rr_nodes) return root def write_rrgraph_xml(