Basic support for new clock domain and instance API
[litex.git] / milkymist / s6ddrphy / __init__.py
index 4129f089390fc99e884ada4b309a8d551755cba8..60b9a74768e7e9877a179af417a814f1c2f303d0 100644 (file)
@@ -3,56 +3,44 @@ from migen.bus import dfi
 
 class S6DDRPHY:
        def __init__(self, a, ba, d):
-               ins = []
-               outs = []
-               inouts = []
-               
-               for name in [
-                       "clk2x_90",
-                       "clk4x_wr",
-                       "clk4x_wr_strb",
-                       "clk4x_rd",
-                       "clk4x_rd_strb"
-               ]:
-                       s = Signal(name=name)
-                       setattr(self, name, s)
-                       ins.append((name, s))
-               
-               self._sd_pins = []
-               for name, width, l in [
-                       ("sd_clk_out_p", 1, outs),
-                       ("sd_clk_out_n", 1, outs),
-                       ("sd_a", a, outs),
-                       ("sd_ba", ba, outs),
-                       ("sd_cs_n", 1, outs),
-                       ("sd_cke", 1, outs),
-                       ("sd_ras_n", 1, outs),
-                       ("sd_cas_n", 1, outs),
-                       ("sd_we_n", 1, outs),
-                       ("sd_dq", d//2, inouts),
-                       ("sd_dm", d//16, outs),
-                       ("sd_dqs", d//16, inouts)
+               inst_items = [
+                       Instance.Parameter("NUM_AD", a),
+                       Instance.Parameter("NUM_BA", ba),
+                       Instance.Parameter("NUM_D", d),
+                       Instance.ClockPort("sys_clk")
+               ]
+               for name, width, cl in [
+                       ("clk2x_270", 1, Instance.Input),
+                       ("clk4x_wr", 1, Instance.Input),
+                       ("clk4x_wr_strb", 1, Instance.Input),
+                       ("clk4x_rd", 1, Instance.Input),
+                       ("clk4x_rd_strb", 1, Instance.Input),
+                       
+                       ("sd_clk_out_p", 1, Instance.Output),
+                       ("sd_clk_out_n", 1, Instance.Output),
+                       ("sd_a", a, Instance.Output),
+                       ("sd_ba", ba, Instance.Output),
+                       ("sd_cs_n", 1, Instance.Output),
+                       ("sd_cke", 1, Instance.Output),
+                       ("sd_ras_n", 1, Instance.Output),
+                       ("sd_cas_n", 1, Instance.Output),
+                       ("sd_we_n", 1, Instance.Output),
+                       ("sd_dq", d//2, Instance.InOut),
+                       ("sd_dm", d//16, Instance.Output),
+                       ("sd_dqs", d//16, Instance.InOut)
                        
                ]:
                        s = Signal(BV(width), name=name)
                        setattr(self, name, s)
-                       l.append((name, s))
-                       self._sd_pins.append(s)
+                       inst_items.append(cl(name, s))
                
                self.dfi = dfi.Interface(a, ba, d, 2)
-               ins += self.dfi.get_standard_names(True, False)
-               outs += self.dfi.get_standard_names(False, True)
+               inst_items += [Instance.Input(name, signal) 
+                       for name, signal in self.dfi.get_standard_names(True, False)]
+               inst_items += [Instance.Output(name, signal)
+                       for name, signal in self.dfi.get_standard_names(False, True)]
                
-               self._inst = Instance("s6ddrphy",
-                       outs,
-                       ins,
-                       inouts,
-                       [
-                               ("NUM_AD", a),
-                               ("NUM_BA", ba),
-                               ("NUM_D", d)
-                       ],
-                       clkport="sys_clk")
+               self._inst = Instance("s6ddrphy", *inst_items)
 
        def get_fragment(self):
-               return Fragment(instances=[self._inst], pads=set(self._sd_pins))
+               return Fragment(instances=[self._inst])