Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @DecorateModule(InsertReset)
- @DecorateModule(InsertCE)
- class LFSR(Module):
- def __init__(self, n_out, n_state=31, taps=[27, 30]):
- self.o = Signal(n_out)
- ###
- state = Signal(n_state)
- curval = [state[i] for i in range(n_state)]
- curval += [0]*(n_out - n_state)
- for i in range(n_out):
- nv = ~optree("^", [curval[tap] for tap in taps])
- curval.insert(0, nv)
- curval.pop()
- self.sync += [
- state.eq(Cat(*curval[:n_state])),
- self.o.eq(Cat(*curval))
- ]
- class NandDmaWriter(Module):
- def __init__(self, lasmim, data):
- self._magic = CSRStatus(16)
- self._reset = CSR()
- self._shoot = CSR()
- self.submodules._dma = DMAWriteController(
- dma_lasmi.Writer(lasmim),
- MODE_EXTERNAL)
- ###
- self.comb += self._magic.status.eq(nandread_magic)
- lfsr = LFSR(lasmim.dw)
- self.submodules += lfsr
- self.comb += lfsr.reset.eq(self._reset.re)
- self.data = data
- en = Signal()
- en_counter = Signal(lasmim.aw)
- self.comb += en.eq(en_counter != 0)
- self.sync += [
- If(self._shoot.re,
- en_counter.eq(self._dma.length)
- ).Elif(lfsr.ce,
- en_counter.eq(en_counter - 1)
- )
- ]
- self.comb += [
- self._dma.trigger.eq(self._shoot.re),
- self._dma.data.stb.eq(en),
- lfsr.ce.eq(en & self._dma.data.ack),
- # self._dma.data.d.eq(lfsr.o)
- self._dma.data.d.eq(self.data)
- ]
- def get_csrs(self):
- return [self._magic, self._reset, self._shoot] + self._dma.get_csrs()
- class NandDmaReader(Module):
- def __init__(self, lasmim, data):
- self._magic = CSRStatus(16)
- self._reset = CSR()
- self._error_count = CSRStatus(lasmim.aw)
- self.submodules._dma = DMAReadController(
- dma_lasmi.Reader(lasmim),
- MODE_SINGLE_SHOT)
- self.data = data
- ###
- self.comb += self._magic.status.eq(nandread_magic)
- lfsr = LFSR(lasmim.dw)
- self.lfsr = lfsr
- self.submodules += lfsr
- self.comb += lfsr.reset.eq(self._reset.re)
- self.comb += [
- lfsr.ce.eq(self._dma.data.stb),
- self._dma.data.ack.eq(1)
- ]
- err_cnt = self._error_count.status
- self.sync += [
- If(self._reset.re,
- err_cnt.eq(0)
- ).Elif(self._dma.data.stb,
- If(self._dma.data.d != self.data, err_cnt.eq(err_cnt + 1))
- ),
- self._dma.data.d[0].eq(1)
- ]
- def get_csrs(self):
- return [
- self._magic,
- self._reset,
- self._error_count] + self._dma.get_csrs()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement