enjoy-digital/pcie_screamer

Lattice equivalent for Xilinx's ODDR primitive

kamejoko80 opened this issue · 1 comments

Hello enjoy-digital,

I'd like to build ft601.py with Lattice's LFE5UM5G-85F device, but I could not find the equivalent ODDR primitive.
There are some Xilinx dependencies in the source code:

for i in range(dw):
            self.specials += [
                Instance("ODDR",
                         p_DDR_CLK_EDGE="SAME_EDGE",
                         i_C=ClockSignal("usb"), i_CE=1, i_S=0, i_R=0,
                         i_D1=_data_w[i], i_D2=data_w[i], o_Q=tdata_w[i]
                )
            ]
        self.specials += [
            Instance("ODDR",
                     p_DDR_CLK_EDGE="SAME_EDGE",
                     i_C=ClockSignal("usb"), i_CE=1, i_S=0, i_R=0,
                     i_D1=_rd_n, i_D2=rd_n, o_Q=pads.rd_n
            ),
            Instance("ODDR",
                     p_DDR_CLK_EDGE="SAME_EDGE",
                     i_C=ClockSignal("usb"), i_CE=1, i_S=0, i_R=0,
                     i_D1=_wr_n, i_D2=wr_n, o_Q=pads.wr_n
            ),
            Instance("ODDR",
                     p_DDR_CLK_EDGE="SAME_EDGE",
                     i_C=ClockSignal("usb"), i_CE=1, i_S=0, i_R=0,
                     i_D1=_oe_n, i_D2=oe_n, o_Q=pads.oe_n
            )
        ]
`  
Would you please show the Lattice equivalent primitive that is workable with the Trellis toolchains?

Thanks,

Hello,

the equivalent of the ODDR primitive for a lattice ECP5 would probably be the ODDRX1F, you can find an instance in LiteX here: https://github.com/enjoy-digital/litex/blob/master/litex/build/lattice/common.py#L94-L109

Regards,

Florent