diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2005-01-27 16:01:32 -0500 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2005-01-27 16:01:32 -0500 |
commit | 2aae3636ee2a7c1e5de3000543cace1694d97953 (patch) | |
tree | e5b31973d4b09fb0cd273a65ea53fb2032d6ed8e /sim | |
parent | 12ce227f0b41f3852319d6f9013b3b3069ba22b5 (diff) | |
parent | 7ec713edc8f0a50e05e84b7f6db907eaca7aa345 (diff) | |
download | gem5-2aae3636ee2a7c1e5de3000543cace1694d97953.tar.xz |
Merge zizzer:/bk/m5 into zeep.eecs.umich.edu:/z/saidi/work/m5
--HG--
extra : convert_revision : ed089f6062639ae5be930fbaea3dd7f7622653cc
Diffstat (limited to 'sim')
-rw-r--r-- | sim/pyconfig/m5config.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sim/pyconfig/m5config.py b/sim/pyconfig/m5config.py index a17732052..4c5fc3bf9 100644 --- a/sim/pyconfig/m5config.py +++ b/sim/pyconfig/m5config.py @@ -26,6 +26,11 @@ from __future__ import generators import os, re, sys, types +noDot = False +try: + import pydot +except: + noDot = True env = {} env.update(os.environ) @@ -715,6 +720,48 @@ class Node(object): for c in self.children: c.display() + # print type and parameter values to .ini file + def outputDot(self, dot): + + + label = "{%s|" % self.path + if isSimObject(self.realtype): + label += '%s|' % self.type + + if self.children: + # instantiate children in same order they were added for + # backward compatibility (else we can end up with cpu1 + # before cpu0). + for c in self.children: + dot.add_edge(pydot.Edge(self.path,c.path, style="bold")) + + simobjs = [] + for param in self.params: + try: + if param.value is None: + raise AttributeError, 'Parameter with no value' + + value = param.convert(param.value) + string = param.string(value) + except: + print 'exception in %s:%s' % (self.name, param.name) + raise + ptype = eval(param.ptype) + if isConfigNode(ptype) and string != "Null": + simobjs.append(string) + else: + label += '%s = %s\\n' % (param.name, string) + + for so in simobjs: + label += "|<%s> %s" % (so, so) + dot.add_edge(pydot.Edge("%s:%s" % (self.path, so), so, tailport="w")) + label += '}' + dot.add_node(pydot.Node(self.path,shape="Mrecord",label=label)) + + # recursively dump out children + for c in self.children: + c.outputDot(dot) + def _string(cls, value): if not isinstance(value, Node): raise AttributeError, 'expecting %s got %s' % (Node, value) @@ -1251,6 +1298,15 @@ def instantiate(root): instance = root.instantiate('root') instance.fixup() instance.display() + if not noDot: + dot = pydot.Dot() + instance.outputDot(dot) + dot.orientation = "portrait" + dot.size = "8.5,11" + dot.ranksep="equally" + dot.rank="samerank" + dot.write("config.dot") + dot.write_ps("config.ps") from objects import * |