Skip to content

Commit

Permalink
examples/sim: add LASMI demo
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastien Bourdeauducq committed Jun 9, 2013
1 parent f2e2397 commit 9f560cb
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions examples/sim/abstract_transactions_lasmi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from migen.fhdl.std import *
from migen.bus.transactions import *
from migen.bus import lasmibus
from migen.sim.generic import Simulator

def my_generator(n):
for x in range(4):
t = TWrite(4*n+x, 0x100+x)
yield t
print("Wrote in {0} cycle(s)".format(t.latency))

for x in range(4):
t = TRead(4*n+x)
yield t
print("Read {0:x} in {1:x} cycle(s)".format(t.data, t.latency))

class MyModel(lasmibus.TargetModel):
def read(self, bank, address):
#print("read from bank {0} address {1}".format(bank, address))
return 0x1000*bank + 0x200+address

def write(self, bank, address, data, we):
print("write to bank {0} address {1:x} data {2:x}".format(bank, address, data))

class TB(Module):
def __init__(self):
self.submodules.controller = lasmibus.Target(MyModel(), aw=4, dw=32, nbanks=4, read_latency=4, write_latency=1)
self.submodules.xbar = lasmibus.Crossbar([self.controller.bus], 4, 2)
self.initiators = [lasmibus.Initiator(my_generator(n), bus) for n, bus in enumerate(self.xbar.masters)]
self.submodules += self.initiators

def do_simulation(self, s):
s.interrupt = all(m.done for m in self.initiators)

def main():
tb = TB()
sim = Simulator(tb)
sim.run()

main()

0 comments on commit 9f560cb

Please sign in to comment.