1
0
Fork 0

Compare commits

...

2 Commits

Author SHA1 Message Date
morgan 86ccbf16d0 Si549: recalibrate TAG_OFFSET for ISERDESE2 2024-04-26 12:35:41 +08:00
morgan 974d864901 DDMTD: replace FD with ISERDESE2 2024-04-26 12:35:37 +08:00
2 changed files with 40 additions and 13 deletions

View File

@ -8,20 +8,47 @@ class DDMTDSampler(Module):
self.ref_beating = Signal() self.ref_beating = Signal()
self.main_beating = Signal() self.main_beating = Signal()
ref_clk = Signal()
# # # # # #
ref_beating_FF = Signal() self.specials +=[
main_beating_FF = Signal() # ISERDESE2 can only be driven from fabric via IDELAYE2 (see UG471)
self.specials += [ Instance("IDELAYE2",
# Two back to back FFs are used to prevent metastability p_DELAY_SRC="DATAIN",
Instance("FD", i_C=ClockSignal("helper"), p_HIGH_PERFORMANCE_MODE="TRUE",
i_D=cd_ref.clk, o_Q=ref_beating_FF), p_REFCLK_FREQUENCY=208.3, # REFCLK frequency from IDELAYCTRL
Instance("FD", i_C=ClockSignal("helper"), p_IDELAY_VALUE=0,
i_D=ref_beating_FF, o_Q=self.ref_beating),
Instance("FD", i_C=ClockSignal("helper"), i_DATAIN=cd_ref.clk,
i_D=main_clk_se, o_Q=main_beating_FF),
Instance("FD", i_C=ClockSignal("helper"), o_DATAOUT=ref_clk
i_D=main_beating_FF, o_Q=self.main_beating) ),
Instance("ISERDESE2",
p_IOBDELAY="IFD", # use DDLY as input
p_DATA_RATE="SDR",
p_DATA_WIDTH=2, # min is 2
p_NUM_CE=1,
i_DDLY=ref_clk,
i_CE1=1,
i_CLK=ClockSignal("helper"),
i_CLKDIV=ClockSignal("helper"),
o_Q1=self.ref_beating
),
Instance("ISERDESE2",
p_DATA_RATE="SDR",
p_DATA_WIDTH=2, # min is 2
p_NUM_CE=1,
i_D=main_clk_se,
i_CE1=1,
i_CLK=ClockSignal("helper"),
i_CLKDIV=ClockSignal("helper"),
o_Q1=self.main_beating,
),
] ]

View File

@ -356,7 +356,7 @@ pub mod wrpll {
use super::*; use super::*;
#[cfg(wrpll_ref_clk = "GT_CDR")] #[cfg(wrpll_ref_clk = "GT_CDR")]
static mut TAG_OFFSET: u32 = 19050; static mut TAG_OFFSET: u32 = 8382;
#[cfg(wrpll_ref_clk = "SMA_CLKIN")] #[cfg(wrpll_ref_clk = "SMA_CLKIN")]
static mut TAG_OFFSET: u32 = 0; static mut TAG_OFFSET: u32 = 0;
static mut REF_TAG: u32 = 0; static mut REF_TAG: u32 = 0;