Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/misoc
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: c36029fa6152
Choose a base ref
...
head repository: m-labs/misoc
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b3d5d1628c1c
Choose a head ref
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on Sep 30, 2015

  1. Verified

    This commit was signed with the committer’s verified signature.
    headius Charles Oliver Nutter
    Copy the full SHA
    1b8f313 View commit details
  2. Copy the full SHA
    b3d5d16 View commit details
Showing with 29 additions and 30 deletions.
  1. +10 −4 misoc/cores/lasmicon/bankmachine.py
  2. +19 −26 misoc/interconnect/stream.py
14 changes: 10 additions & 4 deletions misoc/cores/lasmicon/bankmachine.py
Original file line number Diff line number Diff line change
@@ -35,18 +35,24 @@ def __init__(self, geom_settings, timing_settings, controller_settings, address_
###

# Request FIFO
self.submodules.req_fifo = SyncFIFO([("we", 1), ("adr", len(req.adr))],
layout = [("we", 1), ("adr", len(req.adr))]
req_in = Record(layout)
reqf = Record(layout)
self.submodules.req_fifo = SyncFIFO(layout_len(layout),
controller_settings.req_queue_size)
self.comb += [
self.req_fifo.din.we.eq(req.we),
self.req_fifo.din.adr.eq(req.adr),
self.req_fifo.din.eq(req_in.raw_bits()),
reqf.raw_bits().eq(self.req_fifo.dout)
]
self.comb += [
req_in.we.eq(req.we),
req_in.adr.eq(req.adr),
self.req_fifo.we.eq(req.stb),
req.req_ack.eq(self.req_fifo.writable),

self.req_fifo.re.eq(req.dat_w_ack | req.dat_r_ack),
req.lock.eq(self.req_fifo.readable)
]
reqf = self.req_fifo.dout

slicer = _AddressSlicer(geom_settings.colbits, address_align)

45 changes: 19 additions & 26 deletions misoc/interconnect/stream.py
Original file line number Diff line number Diff line change
@@ -14,24 +14,22 @@ def _make_m2s(layout):


class EndpointDescription:
def __init__(self, payload_layout, param_layout=[], packetized=False):
def __init__(self, payload_layout, packetized=False):
self.payload_layout = payload_layout
self.param_layout = param_layout
self.packetized = packetized

def get_full_layout(self):
reserved = {"stb", "ack", "payload", "param", "sop", "eop", "description"}
reserved = {"stb", "ack", "payload", "sop", "eop", "description"}
attributed = set()
for f in self.payload_layout + self.param_layout:
for f in self.payload_layout:
if f[0] in attributed:
raise ValueError(f[0] + " already attributed in payload or param layout")
raise ValueError(f[0] + " already attributed in payload layout")
if f[0] in reserved:
raise ValueError(f[0] + " cannot be used in endpoint layout")
attributed.add(f[0])

full_layout = [
("payload", _make_m2s(self.payload_layout)),
("param", _make_m2s(self.param_layout)),
("stb", 1, DIR_M_TO_S),
("ack", 1, DIR_S_TO_M)
]
@@ -52,10 +50,7 @@ def __init__(self, description_or_layout):
Record.__init__(self, self.description.get_full_layout())

def __getattr__(self, name):
try:
return getattr(object.__getattribute__(self, "payload"), name)
except:
return getattr(object.__getattribute__(self, "param"), name)
return getattr(object.__getattribute__(self, "payload"), name)


class Source(_Endpoint):
@@ -77,35 +72,33 @@ def __init__(self, fifo_class, layout, depth):
###

description = self.sink.description
fifo_layout = [
("payload", description.payload_layout),
# Note : Can be optimized by passing parameters
# in another fifo. We will only have one
# data per packet.
("param", description.param_layout)
]
fifo_layout = [("payload", description.payload_layout)]
if description.packetized:
fifo_layout += [("sop", 1), ("eop", 1)]

self.submodules.fifo = fifo_class(fifo_layout, depth)
self.submodules.fifo = fifo_class(layout_len(fifo_layout), depth)
fifo_in = Record(fifo_layout)
fifo_out = Record(fifo_layout)
self.comb += [
self.fifo.din.eq(fifo_in.raw_bits()),
fifo_out.raw_bits().eq(self.fifo.dout)
]

self.comb += [
self.sink.ack.eq(self.fifo.writable),
self.fifo.we.eq(self.sink.stb),
self.fifo.din.payload.eq(self.sink.payload),
self.fifo.din.param.eq(self.sink.param),
fifo_in.payload.eq(self.sink.payload),

self.source.stb.eq(self.fifo.readable),
self.source.payload.eq(self.fifo.dout.payload),
self.source.param.eq(self.fifo.dout.param),
self.source.payload.eq(fifo_out.payload),
self.fifo.re.eq(self.source.ack)
]
if description.packetized:
self.comb += [
self.fifo.din.sop.eq(self.sink.sop),
self.fifo.din.eop.eq(self.sink.eop),
self.source.sop.eq(self.fifo.dout.sop),
self.source.eop.eq(self.fifo.dout.eop)
fifo_in.sop.eq(self.sink.sop),
fifo_in.eop.eq(self.sink.eop),
self.source.sop.eq(fifo_out.sop),
self.source.eop.eq(fifo_out.eop)
]