litex/examples/sim/basic2.py

37 lines
1018 B
Python
Raw Normal View History

from migen.fhdl.std import *
2014-01-26 16:19:43 -05:00
from migen.sim.generic import run_simulation
2012-03-10 13:38:39 -05:00
2014-01-26 16:19:43 -05:00
# A slightly more elaborate counter.
2012-03-10 13:38:39 -05:00
# Has a clock enable (CE) signal, counts on more bits
# and resets with a negative number.
class Counter(Module):
2012-03-10 13:38:39 -05:00
def __init__(self):
self.ce = Signal()
# Demonstrate negative numbers and signals larger than 32 bits.
self.count = Signal((37, True), reset=-5)
self.sync += If(self.ce, self.count.eq(self.count + 1))
2014-10-17 05:08:37 -04:00
2014-01-26 16:19:43 -05:00
def do_simulation(self, selfp):
2012-03-10 13:38:39 -05:00
# Only assert CE every second cycle.
# => each counter value is held for two cycles.
2014-01-26 16:19:43 -05:00
if selfp.simulator.cycle_counter % 2:
selfp.ce = 0 # This is how you write to a signal.
2012-03-10 13:38:39 -05:00
else:
2014-01-26 16:19:43 -05:00
selfp.ce = 1
print("Cycle: " + str(selfp.simulator.cycle_counter) + " Count: " + \
str(selfp.count))
2014-10-17 05:08:37 -04:00
2014-01-26 16:19:43 -05:00
# Output is:
# Cycle: 0 Count: -5
# Cycle: 1 Count: -5
# Cycle: 2 Count: -4
# Cycle: 3 Count: -4
# Cycle: 4 Count: -3
# ...
2012-03-10 13:38:39 -05:00
2014-01-26 16:19:43 -05:00
if __name__ == "__main__":
2012-03-10 13:38:39 -05:00
dut = Counter()
2014-01-26 16:19:43 -05:00
# Demonstrate VCD output
run_simulation(dut, vcd_name="my.vcd", ncycles=20)