Пример #1
0
    def __init__(self, lasmim):
        self.source = source = Source(EndpointDescription([("data", 16)], packetized=True))

        reader = dma_lasmi.Reader(lasmim)
        self.dma = spi.DMAReadController(reader, mode=spi.MODE_SINGLE_SHOT)

        pack_factor = lasmim.dw//16
        packed_dat = structuring.pack_layout(16, pack_factor)
        cast = structuring.Cast(lasmim.dw, packed_dat)
        unpack = structuring.Unpack(pack_factor, [("data", 16)], reverse=True)


        # Graph
        g = DataFlowGraph()
        g.add_pipeline(self.dma, cast, unpack)
        self.submodules += CompositeActor(g)
        self.comb += Record.connect(unpack.source, self.source)

        self.sync += [
          If(self.dma._busy.status == 0,
              source.sop.eq(1),
          ).Elif(source.stb & source.ack,
              source.sop.eq(0)
          )
        ]

        # Irq
        self.submodules.ev = EventManager()
        self.ev.done = EventSourceProcess()
        self.ev.finalize()
        self.comb += self.ev.done.trigger.eq(self.dma._busy.status)
Пример #2
0
def main():
	base_layout = [("value", 32)]
	packed_layout = structuring.pack_layout(base_layout, pack_factor)
	rawbits_layout = [("value", 32*pack_factor)]
	
	source = SimActor(source_gen(), ("source", Source, base_layout))
	sink = SimActor(sink_gen(), ("sink", Sink, base_layout))
	
	# A tortuous way of passing integer tokens.
	packer = structuring.Pack(base_layout, pack_factor)
	to_raw = structuring.Cast(packed_layout, rawbits_layout)
	from_raw = structuring.Cast(rawbits_layout, packed_layout)
	unpacker = structuring.Unpack(pack_factor, base_layout)
	
	g = DataFlowGraph()
	g.add_connection(source, packer)
	g.add_connection(packer, to_raw)
	g.add_connection(to_raw, from_raw)
	g.add_connection(from_raw, unpacker)
	g.add_connection(unpacker, sink)
	comp = CompositeActor(g)
	reporter = perftools.DFGReporter(g)
	
	fragment = comp.get_fragment() + reporter.get_fragment()
	sim = Simulator(fragment, Runner())
	sim.run(1000)
	
	g_layout = nx.spectral_layout(g)
	nx.draw(g, g_layout)
	nx.draw_networkx_edge_labels(g, g_layout, reporter.get_edge_labels())
	plt.show()
Пример #3
0
    def __init__(self, ctrl_pads, dacs):
        self.submodules.unescaper = Unescaper(bus_layout, 0xa5)
        self.sink = self.unescaper.sink
        self.submodules.pack = Pack(bus_layout, 2)
        self.submodules.cast = Cast(pack_layout(bus_layout, 2), mem_layout)
        self.submodules.memwriter = MemWriter(~ctrl_pads.adr, dacs) # adr active low
        self.submodules.ctrl = Ctrl(ctrl_pads, dacs)

        ###

        self.comb += [
                self.pack.sink.connect(self.unescaper.source_a),
                self.cast.sink.connect(self.pack.source),
                self.memwriter.sink.connect(self.cast.source),
                self.ctrl.sink.connect(self.unescaper.source_b),
        ]
Пример #4
0
    def __init__(self, ctrl_pads, dacs):
        self.submodules.unescaper = Unescaper(bus_layout, 0xa5)
        self.sink = self.unescaper.sink
        self.submodules.pack = Pack(bus_layout, 2)
        self.submodules.cast = Cast(pack_layout(bus_layout, 2), mem_layout)
        self.submodules.memwriter = MemWriter(~ctrl_pads.adr,
                                              dacs)  # adr active low
        self.submodules.ctrl = Ctrl(ctrl_pads, dacs)

        ###

        self.comb += [
            self.pack.sink.connect(self.unescaper.source_a),
            self.cast.sink.connect(self.pack.source),
            self.memwriter.sink.connect(self.cast.source),
            self.ctrl.sink.connect(self.unescaper.source_b),
        ]
Пример #5
0
    def __init__(self, lasmim, tag):
        self.source = source = Source(user_description(8))

        reader = dma_lasmi.Reader(lasmim)
        self.dma = spi.DMAReadController(reader, mode=spi.MODE_SINGLE_SHOT)

        pack_factor = lasmim.dw // 8
        packed_dat = structuring.pack_layout(8, pack_factor)
        cast = structuring.Cast(lasmim.dw, packed_dat)
        unpack = structuring.Unpack(pack_factor,
                                    phy_description(8),
                                    reverse=True)

        # Graph
        cnt = Signal(32)
        self.sync += \
            If(self.dma.generator._shoot.re,
                cnt.eq(0)
            ).Elif(source.stb & source.ack,
                cnt.eq(cnt + 1)
            )
        g = DataFlowGraph()
        g.add_pipeline(self.dma, cast, unpack)
        self.submodules += CompositeActor(g)
        self.comb += [
            source.stb.eq(unpack.source.stb),
            source.sop.eq(cnt == 0),
            source.eop.eq(cnt == (self.dma.length * pack_factor - 1)),
            source.length.eq(self.dma.length * pack_factor),
            source.data.eq(unpack.source.data),
            source.dst.eq(tag),
            unpack.source.ack.eq(source.ack)
        ]

        # IRQ
        self.submodules.ev = EventManager()
        self.ev.done = EventSourcePulse()
        self.ev.finalize()
        self.comb += self.ev.done.trigger.eq(source.stb & source.eop)
Пример #6
0
Файл: dma.py Проект: olofk/misoc
    def __init__(self, lasmim, tag):
        self.source = source = Source(user_description(8))

        reader = dma_lasmi.Reader(lasmim)
        self.dma = spi.DMAReadController(reader, mode=spi.MODE_SINGLE_SHOT)

        pack_factor = lasmim.dw//8
        packed_dat = structuring.pack_layout(8, pack_factor)
        cast = structuring.Cast(lasmim.dw, packed_dat)
        unpack = structuring.Unpack(pack_factor, phy_description(8), reverse=True)

        # Graph
        cnt = Signal(32)
        self.sync += \
            If(self.dma.generator._shoot.re,
                cnt.eq(0)
            ).Elif(source.stb & source.ack,
                cnt.eq(cnt + 1)
            )
        g = DataFlowGraph()
        g.add_pipeline(self.dma, cast, unpack)
        self.submodules += CompositeActor(g)
        self.comb += [
            source.stb.eq(unpack.source.stb),
            source.sop.eq(cnt == 0),
            source.eop.eq(cnt == (self.dma.length*pack_factor-1)),
            source.length.eq(self.dma.length*pack_factor),
            source.data.eq(unpack.source.data),
            source.dst.eq(tag),
            unpack.source.ack.eq(source.ack)
        ]

        # IRQ
        self.submodules.ev = EventManager()
        self.ev.done = EventSourcePulse()
        self.ev.finalize()
        self.comb += self.ev.done.trigger.eq(source.stb & source.eop)
Пример #7
0
from itertools import count

import networkx as nx
import matplotlib.pyplot as plt

from migen.flow.network import *
from migen.flow.transactions import *
from migen.actorlib import structuring
from migen.actorlib.sim import *
from migen.flow import perftools
from migen.sim.generic import run_simulation

pack_factor = 5
base_layout = [("value", 32)]
packed_layout = structuring.pack_layout(base_layout, pack_factor)
rawbits_layout = [("value", 32*pack_factor)]

def source_gen():
	for i in count(0):
		yield Token("source", {"value": i})

class SimSource(SimActor):
	def __init__(self):
		self.source = Source(base_layout)
		SimActor.__init__(self, source_gen())

def sink_gen():
	while True:
		t = Token("sink")
		yield t
		print(t.value["value"])