create dump class and specific export functions, add python dictionnary export

This commit is contained in:
Florent Kermarrec 2014-06-19 13:01:18 +02:00
parent a737358919
commit 074a12b444
2 changed files with 58 additions and 60 deletions

View File

@ -1,7 +1,7 @@
import csv
import time
import sys
from miscope.host.export import *
from miscope.host.dump import *
from miscope.host.truthtable import *
class MiIoDriver():
@ -126,13 +126,13 @@ class MiLaDriver():
def export(self, export_fn=None):
self.show_state("EXPORT")
dump = Dump()
dump.add_from_layout(self.layout, self.dat)
if ".vcd" in export_fn:
vcd = VCD()
vcd.add_from_layout(self.layout, self.dat)
vcd.write(export_fn)
VCDExport(dump).write(export_fn)
elif ".csv" in export_fn:
csv = CSV()
csv.add_from_layout(self.layout, self.dat)
csv.write(export_fn)
CSVExport(dump).write(export_fn)
elif ".py" in export_fn:
PYExport(dump).write(export_fn)
else:
raise NotImplementedError

View File

@ -98,13 +98,10 @@ class Var:
return r
return r
class VCD:
def __init__(self, timescale="1ps", comment=""):
self.timescale = timescale
self.comment = comment
class Dump:
def __init__(self):
self.vars = []
self.vcd_id = "!"
self.cnt = -1
def add(self, var):
var.set_vcd_id(self.vcd_id)
@ -123,10 +120,17 @@ class VCD:
l = max(len(var),l)
return l
class VCDExport():
def __init__(self, dump, timescale="1ps", comment=""):
self.dump = dump
self.timescale = timescale
self.comment = comment
self.cnt = -1
def change(self):
r = ""
c = ""
for var in self.vars:
for var in self.dump.vars:
c += var.change(self.cnt)
if c != "":
r += "#"
@ -170,7 +174,7 @@ class VCD:
def p_vars(self):
r = ""
for var in self.vars:
for var in self.dump.vars:
r += "$var "
r += var.type
r += " "
@ -194,7 +198,7 @@ class VCD:
def p_dumpvars(self):
r = "$dumpvars\n"
for var in self.vars:
for var in self.dump.vars:
r += "b"
r += dec2bin(var.val, var.width)
r += " "
@ -205,7 +209,7 @@ class VCD:
def p_valuechange(self):
r = ""
for i in range(len(self)):
for i in range(len(self.dump)):
r += self.change()
self.cnt += 1
return r
@ -229,33 +233,17 @@ class VCD:
f.write(str(self))
f.close()
class CSV:
def __init__(self):
self.vars = []
self.cnt = -1
def add(self, var):
self.vars.append(var)
def add_from_layout(self, layout, var):
i=0
for s, n in layout:
self.add(Var(s, n, var[i:i+n]))
i += n
def __len__(self):
l = 0
for var in self.vars:
l = max(len(var),l)
return l
class CSVExport():
def __init__(self, dump):
self.dump = dump
def p_vars(self):
r = ""
for var in self.vars:
for var in self.dump.vars:
r += var.name
r += ","
r += "\n"
for var in self.vars:
for var in self.dump.vars:
r += str(var.width)
r += ","
r += "\n"
@ -263,8 +251,8 @@ class CSV:
def p_dumpvars(self):
r = ""
for i in range(len(self)):
for var in self.vars:
for i in range(len(self.dump)):
for var in self.dump.vars:
try:
var.val = var.values[i]
except:
@ -288,25 +276,35 @@ class CSV:
f.write(str(self))
f.close()
class PYExport():
def __init__(self, dump):
self.dump = dump
def __repr__(self):
r = "dump = {\n"
for var in self.dump.vars:
r += "\"" + var.name + "\""
r += " : "
r += str(var.values)
r += ",\n"
r += "}"
return r
def write(self, filename):
f = open(filename, "w")
f.write(str(self))
f.close()
def main():
myvcd = VCD()
myvcd.add(Var("foo1", 1, [0,1,0,1,0,1]))
myvcd.add(Var("foo2", 2, [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]))
myvcd.add(Var("foo3", 3))
myvcd.add(Var("foo4", 4))
dump = Dump()
dump.add(Var("foo1", 1, [0,1,0,1,0,1]))
dump.add(Var("foo2", 2, [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]))
ramp = [i%128 for i in range(1024)]
myvcd.add(Var("ramp", 16, ramp))
print(myvcd)
mycsv = CSV()
mycsv.add(Var("foo1", 1, [0,1,0,1,0,1]))
mycsv.add(Var("foo2", 2, [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]))
mycsv.add(Var("foo3", 3))
mycsv.add(Var("foo4", 4))
ramp = [i%128 for i in range(1024)]
mycsv.add(Var("ramp", 16, ramp))
print(mycsv)
dump.add(Var("ramp", 16, ramp))
VCDExport(dump).write("mydump.vcd")
CSVExport(dump).write("mydump.csv")
PYExport(dump).write("mydump.py")
if __name__ == '__main__':
main()