litex/examples/memory_sim.py

40 lines
1006 B
Python

# Copyright (C) 2012 Vermeer Manufacturing Co.
# License: GPLv3 with additional permissions (see README).
from migen.fhdl.structure import *
from migen.sim.generic import Simulator
from migen.sim.icarus import Runner
class Mem:
def __init__(self):
self.a = Signal(BV(12))
self.d = Signal(BV(16))
p = MemoryPort(self.a, self.d)
# Initialize the beginning of the memory with integers
# from 0 to 19.
self.mem = Memory(16, 2**12, p, init=list(range(20)))
def do_simulation(self, s):
# Read the memory. Use the cycle counter as address.
value = s.rd(self.mem, s.cycle_counter)
# Print the result. Output is:
# 0
# 1
# 2
# ...
print(value)
# Demonstrate how to interrupt the simulator.
if value == 10:
s.interrupt = True
def get_fragment(self):
return Fragment(memories=[self.mem], sim=[self.do_simulation])
def main():
dut = Mem()
sim = Simulator(dut.get_fragment(), Runner())
# No need for a cycle limit here, we use sim.interrupt instead.
sim.run()
main()