Compare commits

..

26 Commits

Author SHA1 Message Date
morgan 20732c0de1 Cal skew: use static must 2024-04-09 12:47:09 +08:00
morgan 611c08262f wrpll fw & tag collector: use static mut 2024-04-09 12:42:59 +08:00
morgan 06266eba84 wrpll gw: remove debug leftover 2024-04-09 12:16:33 +08:00
morgan cf3f5dfcfa freq counter fw: fix counts formula & remove delay 2024-04-09 12:11:42 +08:00
morgan 7b97d30a43 freq counter gw: cleanup 2024-04-09 12:10:34 +08:00
morgan fa5765383f freq counter gw: refactor but still had bugs 2024-03-28 17:05:33 +08:00
morgan cd4169e571 satman main: use const si549_settings 2024-03-28 12:24:09 +08:00
morgan 84b5a5f2e3 freq count fw: change to use CSR 2024-03-28 12:23:26 +08:00
morgan adc7554f79 freq counter: refactor
use CSR instead of CSRStatus
add FSM to support CSR
2024-03-28 12:23:01 +08:00
morgan 30316d585d wrpll fw: add delay for reset_plls 2024-03-27 12:46:50 +08:00
morgan 8eeec0bae8 fix freq counter need long delay to work 2024-03-27 12:44:03 +08:00
morgan 3a76f207e1 wrpll: reword PS->PL 2024-03-26 17:45:18 +08:00
morgan 4c164f980f smamultipler: hz -> Hz 2024-03-26 17:44:29 +08:00
morgan b4424476b9 si549 fw: del stb = 0&move nack after while loop 2024-03-26 17:39:42 +08:00
morgan 8d76696b27 si549 gw: use CSR for stb & refacto
programmer: remove extra adpll signal
programmer: clear nack when stb = 1
2024-03-26 17:39:03 +08:00
morgan 9e06faac94 rtio_clocking: Mhz -> MHz 2024-03-26 17:22:27 +08:00
morgan 733658db68 satman: Mhz -> MHz 2024-03-26 17:21:44 +08:00
morgan 240b80309e wrpll_refclk: MMCM -> mmcm 2024-03-26 16:24:31 +08:00
morgan be6c1474b0 wrpll_refclk M"H"z 2024-03-26 16:23:45 +08:00
morgan e846655402 si549: remove 20s warm up 2024-03-26 16:19:45 +08:00
morgan 137489da93 Firmware: Runtime WRPLL
runtime: drive CLK_SEL to true when si549 is used
runtime & libboard_artiq: allow standalone to use io_expander
si549: add bit bang mmcm dynamic configuration
si549: add frequency counter for refclk
rtio_clocking & si549: add 125Mhz wrpll refclk setup
2024-03-26 13:22:37 +08:00
morgan 19a431b5be Firmware: Satman skew calibration & tester
cargo template: add calibrate_wrpll_skew feature
tag collector: add TAG_OFFSET for Satman WRPLL
tag collector: add TAG_OFFSET getter & setter for calibration
wrpll: add skew tester and calibration
wrpll: gate calibration behind calibrate_wrpll_skew feature
2024-03-26 13:22:37 +08:00
morgan dec407c9d7 Firmware: Satman WRPLL
satman: drive CLK_SEL to true when si549 is used
satman : add main & helper si549 setup
satman : add WRPLL select_recovered_clock
si549: add tag collector to process gtx & main tags
si549: add frequency counter to set BASE_ADPLL
si549: add set_adpll for main & helper PLL
si549: add main & helper PLL
FIQ & si549: replace dummy with a custom handler for gtx & main tags ISR
2024-03-26 13:22:37 +08:00
morgan f396fb1c02 Firmware: Si549 and io_expander
io_expander: set CLK_SEL pin to output when si549 is used
io_expander: gate virtual leds for standalone
si549: add bit bang i2c
si549: add si549 programming
si549: add main & helper setup
2024-03-26 13:22:37 +08:00
morgan fb1d09a0a4 Gateware: kasli_soc WRPLL setup
kasli_soc: use enable_wrpll from json to switch from si5324 to si549
kasli_soc: add wrpll for all variants
kasli_soc: add gtx & main tag nFIQ for all variants
kasli_soc: add clk_synth_se for master & satellite
kasli_soc: add wrpll_refclk for runtime
kasli_soc: add skewtester for satman
kasli_soc: add WRPLL_REF_CLK config for firmware
2024-03-26 13:21:12 +08:00
morgan 530fb2e7b0 Gateware: WRPLL
ddmtd: add DDMTD and deglitcher
wrpll: add helper clockdomain
wrpll: add frequency counter
wrpll: add skewtester
wrpll: add gtx & main tag collection
wrpll: add gtx & main tag eventmanager for shared peripheral interrupt
wrpll: add SMA frequency multiplier to generate 125Mhz refclk
si549: add i2c and adpll programmer
2024-03-26 10:10:06 +08:00
1 changed files with 10 additions and 6 deletions

View File

@ -407,6 +407,7 @@ pub mod wrpll {
pub fn get_period_error() -> i32 {
// n * BEATING_PERIOD - REF_TAG(n) mod BEATING_PERIOD
let mut period_error = unsafe { REF_TAG.overflowing_neg().0.rem_euclid(BEATING_PERIOD as u32) as i32 };
// mapping tags from [0, 2π] -> [-π, π]
if period_error > BEATING_HALFPERIOD {
period_error -= BEATING_PERIOD
@ -515,20 +516,23 @@ pub mod wrpll {
fn helper_pll() -> Result<(), &'static str> {
let period_err = tag_collector::get_period_error();
let h_adpll = unsafe {
let h_adpll;
unsafe {
H_INTEGRATOR += period_err * KI;
(BASE_ADPLL + period_err * KP + H_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX)
};
h_adpll = (BASE_ADPLL + period_err * KP + H_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX);
}
set_adpll(i2c::DCXO::Helper, h_adpll)?;
Ok(())
}
fn main_pll() -> Result<(), &'static str> {
let phase_err = tag_collector::get_phase_error();
let m_adpll = unsafe {
let m_adpll;
unsafe {
M_INTEGRATOR += phase_err * KI;
(BASE_ADPLL + phase_err * KP + M_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX)
};
m_adpll = (BASE_ADPLL + phase_err * KP + M_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX);
}
set_adpll(i2c::DCXO::Main, m_adpll)?;
Ok(())
}