Skip to content

Commit

Permalink
memtest/MemtestWriter: fix 'busy status stuck' bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastien Bourdeauducq committed Jul 13, 2013
1 parent 3d899f0 commit 9ab22fe
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions milkymist/memtest/__init__.py
Expand Up @@ -2,7 +2,7 @@
from migen.genlib.misc import optree
from migen.bank.description import *
from migen.actorlib import dma_lasmi
from migen.actorlib.spi import MODE_SINGLE_SHOT, DMAReadController, DMAWriteController
from migen.actorlib.spi import *

class LFSR(Module):
def __init__(self, n_out, n_state=31, taps=[27, 30]):
Expand Down Expand Up @@ -53,7 +53,8 @@ class MemtestWriter(Module):
def __init__(self, lasmim):
self._r_magic = CSRStatus(16)
self._r_reset = CSR()
self.submodules._dma = DMAWriteController(dma_lasmi.Writer(lasmim), MODE_SINGLE_SHOT)
self._r_shoot = CSR()
self.submodules._dma = DMAWriteController(dma_lasmi.Writer(lasmim), MODE_EXTERNAL)

###

Expand All @@ -63,14 +64,26 @@ def __init__(self, lasmim):
self.submodules += lfsr
self.comb += lfsr.reset.eq(self._r_reset.re)

en = Signal()
en_counter = Signal(lasmim.aw)
self.comb += en.eq(en_counter != 0)
self.sync += [
If(self._r_shoot.re,
en_counter.eq(self._dma.length)
).Elif(lfsr.ce,
en_counter.eq(en_counter - 1)
)
]

self.comb += [
self._dma.data.stb.eq(1),
lfsr.ce.eq(self._dma.data.ack),
self._dma.trigger.eq(self._r_shoot.re),
self._dma.data.stb.eq(en),
lfsr.ce.eq(en & self._dma.data.ack),
self._dma.data.payload.d.eq(lfsr.o)
]

def get_csrs(self):
return [self._r_magic, self._r_reset] + self._dma.get_csrs()
return [self._r_magic, self._r_reset, self._r_shoot] + self._dma.get_csrs()

class MemtestReader(Module):
def __init__(self, lasmim):
Expand Down

0 comments on commit 9ab22fe

Please sign in to comment.