1 from migen
.fhdl
.structure
import *
2 from migen
.bus
import dfi
5 def __init__(self
, a
, ba
, d
):
15 "clk4x_wr_strb_right",
19 "clk4x_rd_strb_right",
23 setattr(self
, name
, s
)
28 for name
, width
, l
in [
29 ("sd_clk_out_p", 1, outs
),
30 ("sd_clk_out_n", 1, outs
),
35 ("sd_ras_n", 1, outs
),
36 ("sd_cas_n", 1, outs
),
38 ("sd_dq", sd_d
, inouts
),
39 ("sd_dm", sd_d
//8, outs
),
40 ("sd_dqs", sd_d
//8, inouts
)
43 s
= Signal(BV(width
), name
=name
)
44 setattr(self
, name
, s
)
46 self
._sd
_pins
.append(s
)
48 self
.dfi
= dfi
.Interface(a
, ba
, d
)
49 ins
+= self
.dfi
.get_standard_names(True, False)
50 outs
+= self
.dfi
.get_standard_names(False, True)
56 ("cfg_regdimm", BV(1)),
62 ("diag_dq_recal", BV(1)),
63 ("diag_io_sel", BV(9)),
64 ("diag_disable_cal_on_startup", BV(1)),
65 ("diag_cal_bits", BV(2)),
66 ("diag_short_cal", BV(1))
69 ("phy_cal_done", BV(1)),
77 self
._inst
= Instance("spartan6_soft_phy",
86 ("DQ_IO_LOC", Constant(2**32-1, BV(32))),
87 ("DM_IO_LOC", Constant(2**4-1, BV(4)))
91 def get_fragment(self
):
93 self
._inst
.ins
["cfg_al"].eq(0),
94 self
._inst
.ins
["cfg_cl"].eq(3),
95 self
._inst
.ins
["cfg_bl"].eq(1),
96 self
._inst
.ins
["cfg_regdimm"].eq(0),
98 self
._inst
.ins
["diag_dq_recal"].eq(0),
99 self
._inst
.ins
["diag_io_sel"].eq(0),
100 self
._inst
.ins
["diag_disable_cal_on_startup"].eq(0),
101 self
._inst
.ins
["diag_cal_bits"].eq(0),
102 self
._inst
.ins
["diag_short_cal"].eq(0)
104 return Fragment(comb
, instances
=[self
._inst
], pads
=set(self
._sd
_pins
))