#!/usr/bin/python import sys import re import random import libxltypes def randomize_char(c): if random.random() < 0.5: return str.lower(c) else: return str.upper(c) def randomize_case(s): r = [randomize_char(c) for c in s] return "".join(r) if __name__ == '__main__': if len(sys.argv) < 3: print >>sys.stderr, "Usage: gentest.py " sys.exit(1) random.seed() idl = sys.argv[1] (_,types) = libxltypes.parse(idl) impl = sys.argv[2] f = open(impl, "w") f.write(""" #include #include \"libxl.h\" int main(int argc, char **argv) { """) for ty in [t for t in types if isinstance(t,libxltypes.Enumeration)]: f.write(" %s %s_val;\n" % (ty.typename, ty.typename)) f.write(" int rc;\n") f.write("\n") for ty in [t for t in types if isinstance(t,libxltypes.Enumeration)]: f.write(" printf(\"%s -- to string:\\n\");\n" % (ty.typename)) for v in ty.values: f.write(" printf(\"\\t%s = %%d = \\\"%%s\\\"\\n\", %s, %s_to_string(%s));\n" %\ (v.valuename, v.name, ty.typename, v.name)) f.write("\n") f.write(" printf(\"%s -- from string:\\n\");\n" % (ty.typename)) for v in [v.valuename for v in ty.values] + ["AN INVALID VALUE"]: n = randomize_case(v) f.write(" %s_val = -1;\n" % (ty.typename)) f.write(" rc = %s_from_string(\"%s\", &%s_val);\n" %\ (ty.typename, n, ty.typename)) f.write(" printf(\"\\t%s = \\\"%%s\\\" = %%d (rc %%d)\\n\", \"%s\", %s_val, rc);\n" %\ (v, n, ty.typename)) f.write("\n") f.write("""return 0; } """) pass.py'>stats
blob: d67cf4a23c524e0cd47e6ccbb84b47ec0ca91b37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/python3

from pyosys import libyosys as ys

import matplotlib.pyplot as plt
import numpy as np

class CellStatsPass(ys.Pass):

    def __init__(self):
        super().__init__("cell_stats", "Shows cell stats as plot")

    def py_help(self):
        ys.log("This pass uses the matplotlib library to display cell stats\n")

    def py_execute(self, args, design):
        ys.log_header(design, "Plotting cell stats\n")
        cell_stats = {}
        for module in design.selected_whole_modules_warn():
            for cell in module.selected_cells():
                if cell.type.str() in cell_stats:
                    cell_stats[cell.type.str()] += 1
                else:
                    cell_stats[cell.type.str()] = 1
        plt.bar(range(len(cell_stats)), height = list(cell_stats.values()),align='center')
        plt.xticks(range(len(cell_stats)), list(cell_stats.keys()))
        plt.show()

    def py_clear_flags(self):
        ys.log("Clear Flags - CellStatsPass\n")

p = CellStatsPass()