Advertisement
Guest User

Untitled

a guest
Aug 13th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1. from migen import *
  2. from misoc.interconnect import stream
  3.  
  4. _SD_CMD_WAIT = [
  5.         ("ticks" , 8)
  6.     ]
  7.  
  8. class sd_cmd_wait(Module):
  9.     def __init__(self, pads):
  10.         self.sd_clk = Signal()
  11.         started = Signal()
  12.         cnt = Signal(8)
  13.  
  14.         self.sink = stream.Endpoint(_SD_CMD_WAIT)
  15.  
  16.         self.comb += [
  17.             If(started,
  18.                self.sd_clk.eq(~self.sd_clk #ClockSignal()
  19.                )).Else(
  20.                    self.sd_clk.eq(0)
  21.                ),
  22.         ]
  23.  
  24.         self.sync += [
  25.             self.sink.ack.eq(0),
  26.  
  27.             If(self.sink.stb & ~started & ~self.sink.ack,
  28.                started.eq(1),
  29.                cnt.eq(self.sink.ticks),
  30.  
  31.             ),
  32.  
  33.             If(started,
  34.                If(cnt==0,
  35.                    self.sink.ack.eq(1),
  36.                    cnt.eq(0),
  37.                    started.eq(0)
  38.                ).Else(
  39.                    cnt.eq(cnt - 1)
  40.                )
  41.             )
  42.  
  43.         ]
  44.  
  45.  
  46.  
  47. class _TestPads:
  48.     def __init__(self):
  49.         self.sd_clk = Signal()
  50.         self.cmd_oe = Signal()
  51.         self.cmd_o = Signal()
  52.         self.cmd_i = Signal()
  53.         self.dat_oe = Signal()
  54.         self.dat_o = Signal(4)
  55.         self.dat_i = Signal(4)
  56.  
  57.  
  58. class use_sd_cmd_wait(Module):
  59.     def __init__(self):
  60.         self.pads = pads = _TestPads()
  61.         self.submodules.cmd_wait = sd_cmd_wait(pads)
  62.         self.comb += pads.sd_clk.eq(self.cmd_wait.sd_clk)
  63.  
  64.         self.source = stream.Endpoint(_SD_CMD_WAIT)
  65.         self.comb += self.source.connect(self.cmd_wait.sink)
  66.         self.comb += self.source.ticks.eq(74)
  67.  
  68.         self.sync += self.source.stb.eq(1)
  69.         self.sync += self.source.ack.eq(0)
  70.  
  71. def _test_gen(dut):
  72.     for i in range(200):
  73.         print( (yield dut.pads.sd_clk))
  74.         yield
  75.  
  76.  
  77.  
  78.  
  79. if __name__ == "__main__":
  80.  
  81.     dut = use_sd_cmd_wait()
  82.     run_simulation(dut, _test_gen(dut), vcd_name="sd_cmd_wait.vcd")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement