add dcxo frequency change settling time
wrapper: add default settling value sim: gate frequency change behind settling time example: update adpll_period to 200μs to account for settling delay example: update docs for adpll_period minimum value docs: remove the settling time limitation
This commit is contained in:
parent
6e562732e5
commit
734e87eede
@ -54,5 +54,4 @@ nix develop
|
|||||||
</details><br>
|
</details><br>
|
||||||
|
|
||||||
## Limitation
|
## Limitation
|
||||||
1. The simulation is missing the switching delay of "receiving ADPLL -> DCXO output starting to change"
|
1. The white noise is used to simulate jitter which may result in higher phase noise
|
||||||
2. The white noise is used to simulate jitter which may result in higher phase noise
|
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
"timestep = 1e-10\n",
|
"timestep = 1e-10\n",
|
||||||
"total_steps = 200_000_000\n",
|
"total_steps = 200_000_000\n",
|
||||||
"sim_mode = \"both\"\n",
|
"sim_mode = \"both\"\n",
|
||||||
"adpll_period = 100e-6 # in seconds, the period that pll will trigger, (minimum > the sampling rate of collector)\n",
|
"adpll_period = 200e-6 # in seconds, the period that pll will trigger, (minimum > total DCXO frequency change delay)\n",
|
||||||
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
||||||
"\n",
|
"\n",
|
||||||
"gtx_freq = 125_001_519\n",
|
"gtx_freq = 125_001_519\n",
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
"timestep = 1e-10\n",
|
"timestep = 1e-10\n",
|
||||||
"total_steps = 100_000_000\n",
|
"total_steps = 100_000_000\n",
|
||||||
"sim_mode = \"helper_pll\"\n",
|
"sim_mode = \"helper_pll\"\n",
|
||||||
"adpll_period = 100e-6 # in seconds, the period that pll will trigger, (minimum > the sampling rate of collector)\n",
|
"adpll_period = 200e-6 # in seconds, the period that pll will trigger, (minimum > total DCXO frequency change delay)\n",
|
||||||
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
||||||
"\n",
|
"\n",
|
||||||
"gtx_freq = 125_001_519\n",
|
"gtx_freq = 125_001_519\n",
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
"timestep = 1e-10\n",
|
"timestep = 1e-10\n",
|
||||||
"total_steps = 100_000_000\n",
|
"total_steps = 100_000_000\n",
|
||||||
"sim_mode = \"main_pll\"\n",
|
"sim_mode = \"main_pll\"\n",
|
||||||
"adpll_period = 100e-6 # in seconds, the period that pll will trigger, (minimum > the sampling rate of collector)\n",
|
"adpll_period = 200e-6 # in seconds, the period that pll will trigger, (minimum > total DCXO frequency change delay)\n",
|
||||||
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
"start_up_delay = 100e-6 # in seconds, the frequency adjustment is DISABLE until time > start_up_delay\n",
|
||||||
"\n",
|
"\n",
|
||||||
"gtx_freq = 125_001_519\n",
|
"gtx_freq = 125_001_519\n",
|
||||||
|
@ -23,6 +23,7 @@ def simulation_jit(
|
|||||||
N,
|
N,
|
||||||
adpll_write_period,
|
adpll_write_period,
|
||||||
i2c_comm_delay,
|
i2c_comm_delay,
|
||||||
|
dcxo_settling_delay,
|
||||||
blind_period,
|
blind_period,
|
||||||
start_up_delay,
|
start_up_delay,
|
||||||
helper_init_freq=0
|
helper_init_freq=0
|
||||||
@ -203,11 +204,11 @@ def simulation_jit(
|
|||||||
|
|
||||||
# i2c communication delay
|
# i2c communication delay
|
||||||
|
|
||||||
if h_i2c_active and i >= i2c_comm_delay + h_i2c_active_index:
|
if h_i2c_active and i >= i2c_comm_delay + dcxo_settling_delay + h_i2c_active_index:
|
||||||
helper_freq = dcxo_freq * (1 + h_adpll * 0.0001164 / 1_000_000) * ((N-1) / N)
|
helper_freq = dcxo_freq * (1 + h_adpll * 0.0001164 / 1_000_000) * ((N-1) / N)
|
||||||
h_i2c_active = False
|
h_i2c_active = False
|
||||||
|
|
||||||
if m_i2c_active and i >= i2c_comm_delay + m_i2c_active_index:
|
if m_i2c_active and i >= i2c_comm_delay + dcxo_settling_delay + m_i2c_active_index:
|
||||||
main_freq = dcxo_freq * (1 + m_adpll * 0.0001164 / 1_000_000)
|
main_freq = dcxo_freq * (1 + m_adpll * 0.0001164 / 1_000_000)
|
||||||
m_i2c_active = False
|
m_i2c_active = False
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ class WRPLL_simulator():
|
|||||||
adpll_write_period,
|
adpll_write_period,
|
||||||
start_up_delay,
|
start_up_delay,
|
||||||
i2c_comm_delay=85.6e-6,
|
i2c_comm_delay=85.6e-6,
|
||||||
|
dcxo_settling_delay=100e-6,
|
||||||
gtx_jitter=370e-15,
|
gtx_jitter=370e-15,
|
||||||
dcxo_freq=125_000_000,
|
dcxo_freq=125_000_000,
|
||||||
dcxo_jitter=95e-15,
|
dcxo_jitter=95e-15,
|
||||||
@ -52,6 +53,7 @@ class WRPLL_simulator():
|
|||||||
|
|
||||||
# sim config
|
# sim config
|
||||||
self.i2c_comm_delay = int(i2c_comm_delay/timestep)
|
self.i2c_comm_delay = int(i2c_comm_delay/timestep)
|
||||||
|
self.dcxo_settling_delay = int(dcxo_settling_delay/timestep)
|
||||||
self.blind_period = blind_period
|
self.blind_period = blind_period
|
||||||
self.adpll_write_period = int(adpll_write_period/timestep)
|
self.adpll_write_period = int(adpll_write_period/timestep)
|
||||||
self.start_up_delay = int(start_up_delay/timestep)
|
self.start_up_delay = int(start_up_delay/timestep)
|
||||||
@ -92,6 +94,7 @@ class WRPLL_simulator():
|
|||||||
self.N,
|
self.N,
|
||||||
self.adpll_write_period,
|
self.adpll_write_period,
|
||||||
self.i2c_comm_delay,
|
self.i2c_comm_delay,
|
||||||
|
self.dcxo_settling_delay,
|
||||||
self.blind_period,
|
self.blind_period,
|
||||||
self.start_up_delay,
|
self.start_up_delay,
|
||||||
self.helper_init_freq
|
self.helper_init_freq
|
||||||
|
Loading…
Reference in New Issue
Block a user