bef43e28eaa729659758af0413e622d42c4edc9c
1 from itertools
import count
4 from collections
import OrderedDict
7 from litex
.gen
.fhdl
.namer
import build_namespace
11 codechars
= [chr(i
) for i
in range(33, 127)]
13 q
, r
= divmod(n
, len(codechars
))
16 q
, r
= divmod(q
, len(codechars
))
17 code
= codechars
[r
] + code
22 def __init__(self
, filename
):
23 self
.filename
= filename
24 self
.out_file
= open(self
.filename
, "w")
25 self
.codegen
= vcd_codes()
26 self
.codes
= OrderedDict()
27 self
.signal_values
= dict()
30 def _write_value(self
, f
, signal
, value
):
35 fmtstr
= "b{:0" + str(l
) + "b} {}\n"
38 code
= self
.codes
[signal
]
39 f
.write(fmtstr
.format(value
, code
))
41 def init(self
, signals
):
43 for signal
in signals
:
45 code
= self
.codes
[signal
]
47 code
= next(self
.codegen
)
48 self
.codes
[signal
] = code
52 ns
= build_namespace(self
.codes
.keys())
53 for signal
, code
in self
.codes
.items():
54 name
= ns
.get_name(signal
)
55 out
.write("$var wire {len} {code} {name} $end\n"
56 .format(name
=name
, code
=code
, len=len(signal
)))
57 out
.write("$dumpvars\n")
58 for signal
in self
.codes
.keys():
59 self
._write
_value
(out
, signal
, signal
.reset
.value
)
63 def set(self
, signal
, value
):
64 if (signal
not in self
.signal_values
65 or self
.signal_values
[signal
] != value
):
66 self
._write
_value
(self
.out_file
, signal
, value
)
67 self
.signal_values
[signal
] = value
69 def delay(self
, delay
):
71 self
.out_file
.write("#{}\n".format(self
.t
))
81 def set(self
, signal
, value
):
84 def delay(self
, delay
):