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/migen
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: c8810a016f41
Choose a base ref
...
head repository: m-labs/migen
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 8ffa273719af
Choose a head ref
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on May 1, 2013

  1. actorlib/dma_asmi: drive dat_wm

    Sebastien Bourdeauducq committed May 1, 2013
    Copy the full SHA
    471393d View commit details
  2. flow/network: better determination of plumbing layout

    Sebastien Bourdeauducq committed May 1, 2013
    Copy the full SHA
    8ffa273 View commit details
Showing with 16 additions and 10 deletions.
  1. +6 −2 migen/actorlib/dma_asmi.py
  2. +10 −8 migen/flow/network.py
8 changes: 6 additions & 2 deletions migen/actorlib/dma_asmi.py
Original file line number Diff line number Diff line change
@@ -89,7 +89,8 @@ def __init__(self, port):
port.adr.eq(self.address_data.payload.a),
port.we.eq(1),
port.stb.eq(self.address_data.stb),
self.address_data.ack.eq(port.ack)
self.address_data.ack.eq(port.ack),
port.dat_wm.eq(0)
]
self.sync += [
port.dat_w.eq(0),
@@ -112,7 +113,10 @@ def __init__(self, port, n):

drive_data = Signal()
data_reg = Signal(port.hub.dw)
self.comb += If(drive_data, port.dat_w.eq(data_reg))
self.comb += [
If(drive_data, port.dat_w.eq(data_reg)),
port.dat_wm.eq(0)
]

self.sync += [
If(port.stb & port.ack & (port.tag_issue == (port.base + n)),
18 changes: 10 additions & 8 deletions migen/flow/network.py
Original file line number Diff line number Diff line change
@@ -151,24 +151,26 @@ def _infer_plumbing_layout(self):
if not ap:
break
for a in ap:
if a.actor_class in plumbing.layout_sink:
edges = self.in_edges(a, data=True)
assert(len(edges) == 1)
other, me, data = edges[0]
in_edges = self.in_edges(a, data=True)
out_edges = self.out_edges(a, data=True)
if a.actor_class in plumbing.layout_sink and len(in_edges) == 1:
other, me, data = in_edges[0]
if isinstance(other, AbstractActor):
continue
other_ep = data["source"]
if other_ep is None:
other_ep = get_single_ep(other, Source)[1]
elif a.actor_class in plumbing.layout_source:
edges = self.out_edges(a, data=True)
assert(len(edges) == 1)
me, other, data = edges[0]
else:
other_ep = getattr(other, other_ep)
elif a.actor_class in plumbing.layout_source and len(out_edges) == 1:
me, other, data = out_edges[0]
if isinstance(other, AbstractActor):
continue
other_ep = data["sink"]
if other_ep is None:
other_ep = get_single_ep(other, Sink)[1]
else:
other_ep = getattr(other, other_ep)
else:
raise AssertionError
layout = other_ep.payload.layout