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: 98cf103c65f2
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: f6624b34f03d
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on May 13, 2015

  1. Copy the full SHA
    76302d7 View commit details
  2. Copy the full SHA
    f6624b3 View commit details
Showing with 26 additions and 25 deletions.
  1. +7 −7 migen/actorlib/spi.py
  2. +13 −12 migen/sim/ipc.py
  3. +6 −6 vpi/ipc.c
14 changes: 7 additions & 7 deletions migen/actorlib/spi.py
Original file line number Diff line number Diff line change
@@ -66,7 +66,7 @@ def _create_csrs(self, layout, target, atomic, prefix=""):
regname = prefix + name
reg = CSRStorage(nbits + alignment, reset=reset, atomic_write=atomic,
alignment_bits=alignment, name=regname)
setattr(self, "r_"+regname, reg)
setattr(self, "_"+regname, reg)
self.sync += If(self.source.ack | ~self.source.stb,
getattr(target, name).eq(reg.storage))

@@ -120,15 +120,15 @@ def __init__(self, bus_accessor, bus_aw, bus_dw, mode, base_reset=0, length_rese
("base", bus_aw + self.alignment_bits, base_reset, self.alignment_bits)
]
self.generator = SingleGenerator(layout, mode)
self.r_busy = CSRStatus()
self._busy = CSRStatus()

self.length = self.generator.r_length.storage
self.base = self.generator.r_base.storage
self.length = self.generator._length.storage
self.base = self.generator._base.storage
if hasattr(self.generator, "trigger"):
self.trigger = self.generator.trigger

def get_csrs(self):
return self.generator.get_csrs() + [self.r_busy]
return self.generator.get_csrs() + [self._busy]


class DMAReadController(_DMAController):
@@ -148,7 +148,7 @@ def __init__(self, bus_accessor, *args, **kwargs):

self.data = comp_actor.q
self.busy = comp_actor.busy
self.comb += self.r_busy.status.eq(self.busy)
self.comb += self._busy.status.eq(self.busy)


class DMAWriteController(_DMAController):
@@ -181,4 +181,4 @@ def __init__(self, bus_accessor, *args, ack_when_inactive=False, **kwargs):
self.data = comp_actor.d

self.busy = comp_actor.busy
self.comb += self.r_busy.status.eq(self.busy)
self.comb += self._busy.status.eq(self.busy)
25 changes: 13 additions & 12 deletions migen/sim/ipc.py
Original file line number Diff line number Diff line change
@@ -190,21 +190,22 @@ def accept(self):
def send(self, message):
self.conn.send(_pack(message))

def recv(self):
maxlen = 2048
def recv_packet(self, maxlen):
if sys.platform == "win32":
def recv_packet():
while len(self.ipc_rxbuffer) < header_len:
self.ipc_rxbuffer += self.conn.recv(maxlen)
packet_len = struct.unpack("<H", self.ipc_rxbuffer[:header_len])[0]
while len(self.ipc_rxbuffer) < packet_len:
self.ipc_rxbuffer += self.conn.recv(maxlen)
packet = self.ipc_rxbuffer[header_len:packet_len]
self.ipc_rxbuffer = self.ipc_rxbuffer[packet_len:]
return packet
packet = recv_packet()
while len(self.ipc_rxbuffer) < header_len:
self.ipc_rxbuffer += self.conn.recv(maxlen)
packet_len = struct.unpack("<H", self.ipc_rxbuffer[:header_len])[0]
while len(self.ipc_rxbuffer) < packet_len:
self.ipc_rxbuffer += self.conn.recv(maxlen)
packet = self.ipc_rxbuffer[header_len:packet_len]
self.ipc_rxbuffer = self.ipc_rxbuffer[packet_len:]
else:
packet = self.conn.recv(maxlen)
return packet

def recv(self):
maxlen = 2048
packet = self.recv_packet(maxlen)
if len(packet) < 1:
return None
if len(packet) >= maxlen:
12 changes: 6 additions & 6 deletions vpi/ipc.c
Original file line number Diff line number Diff line change
@@ -132,17 +132,17 @@ static int ipc_receive_packet(struct ipc_softc *sc, unsigned char *buffer) {
int len;
int packet_len;
/* ensure we have packet header */
while (ipc_rxlen < WIN32_HEADER_LEN) {
while(ipc_rxlen < WIN32_HEADER_LEN) {
len = recv(sc->socket, (char *)&ipc_rxbuffer[ipc_rxlen], MAX_LEN, 0);
if (len)
if(len)
ipc_rxlen += len;
}

/* compute packet length and ensure we have the payload */
packet_len = ((ipc_rxbuffer[1] << 8) | (ipc_rxbuffer[0]));
while (ipc_rxlen < packet_len) {
len = recv(sc->socket, (char *) &ipc_rxbuffer[ipc_rxlen], MAX_LEN, 0);
if (len)
packet_len = (ipc_rxbuffer[1] << 8) | ipc_rxbuffer[0];
while(ipc_rxlen < packet_len) {
len = recv(sc->socket, (char *)&ipc_rxbuffer[ipc_rxlen], MAX_LEN, 0);
if(len)
ipc_rxlen += len;
}