litex/milkymist/norflash/__init__.py

33 lines
967 B
Python
Raw Normal View History

2011-12-16 10:02:49 -05:00
from functools import partial
2011-12-16 15:30:22 -05:00
from migen.fhdl.structure import *
2011-12-13 11:33:12 -05:00
from migen.bus import wishbone
from migen.corelogic import timeline
class Inst:
def __init__(self, adr_width, rd_timing):
self.bus = wishbone.Slave("norflash")
2011-12-16 15:30:22 -05:00
d = partial(declare_signal, self)
d("adr", BV(adr_width-1))
d("d", BV(16))
2011-12-13 11:33:12 -05:00
d("oe_n")
d("we_n")
d("ce_n")
d("rst_n")
self.timeline = timeline.Inst(self.bus.cyc_i & self.bus.stb_i,
2011-12-16 15:30:22 -05:00
[(0, [self.adr.eq(Cat(0, self.bus.adr_i[2:adr_width]))]),
2011-12-13 11:33:12 -05:00
(rd_timing, [
2011-12-16 15:30:22 -05:00
self.bus.dat_o[16:].eq(self.d),
self.adr.eq(Cat(1, self.bus.adr_i[2:adr_width]))]),
2011-12-13 11:33:12 -05:00
(2*rd_timing, [
2011-12-16 15:30:22 -05:00
self.bus.dat_o[:16].eq(self.d),
self.bus.ack_o.eq(1)]),
2011-12-13 11:33:12 -05:00
(2*rd_timing+1, [
2011-12-16 15:30:22 -05:00
self.bus.ack_o.eq(0)])])
2011-12-13 11:33:12 -05:00
2011-12-16 10:02:49 -05:00
def get_fragment(self):
2011-12-16 15:30:22 -05:00
comb = [self.oe_n.eq(0), self.we_n.eq(1),
self.ce_n.eq(0), self.rst_n.eq(1)]
return Fragment(comb, pads={self.adr, self.d, self.oe_n, self.we_n, self.ce_n, self.rst_n}) \
2011-12-16 10:02:49 -05:00
+ self.timeline.get_fragment()