1) Hoe weet de firmware eigenlijk dattie op 160MHz draait?
Daarvoor moeten we een component toevoegen die gebruik maakt van de 25MHz crystal clock (van het 1GbE interface) en daarmee dan telt hoeveel CLK pulsen er in 1 seconde zitten. Het M&C interface werkt ook op deze 25MHz crystal, en daarom blijft het bord wel bereikbaar na een CLK 160M <-> 200M wissel. Dus het duurt 1s en dan weet de SDPFW of CLK is 160M of 200M.
2) SC acties
Na clock wissel 200M --> 160M of andersom is het volgende nodig en genoeg voor SC richting SDP:
* doe FPGA_boot_image_RW zodat de images opnieuw geladen worden
* write FPGA_pps_expected_cnt_RW met 160M of 200M
JDM: Als ik FPGA_boot_image_RW schrijf naar de huidige waarde, hoe kan ik dan zien of de FPGAs gereboot zijn? wachten op TR_FPGA_communication_error_R == False oid?
EK: Handmatig poll ik altijd FPGA_firmware_version_R totdat die een naam terug geeft, want het duurt een aantal secondes na een reboot. Maar TR_FPGA_communication_error_R == False voldoet mogelijk ook.
3) SDPFW modifiaties:
De SDPFW is er nog niet helemaal voor klaar, want FPGA_sdp_info_f_adc_R = 1 = 200 MHz staat fixed in de VHDL code. Dit betekent dat het f_adc veldje in de statistics header en beamlet output header altijd 1 is. Echter dit is makkelijk dynamisch te maken in de SDPFW (zie 1).
De SDPFW moet dan ook dynamisch FPGA_sdp_info_block_period_R goed zetten (staat nu fixed op 5120 ns).
De BSN nummering blijft verder gelijk, alleen de resolutie wijzigt. Dus BSN waarde voor t0 in 160MHz mode is factor 160/200 = 0.8 kleiner dan voor t0 in 200MHz mode.