diff --git a/applications/lofar2/doc/prestudy/station2_sdp_transient_buffer.txt b/applications/lofar2/doc/prestudy/station2_sdp_transient_buffer.txt index 169cd995df680db0b5c27f7b1290db9a39e61893..d309c5cc4f62dfa830cc4640838c2d42e633ae86 100644 --- a/applications/lofar2/doc/prestudy/station2_sdp_transient_buffer.txt +++ b/applications/lofar2/doc/prestudy/station2_sdp_transient_buffer.txt @@ -1,7 +1,10 @@ Detailed design: Transient Buffer function (LIFT) References: -[1] https://plm.astron.nl/polarion/#/project/LOFAR2System/workitem?id=LOFAR2-12060 Transient buffer data +[1] LIFT requirements: https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/Overview%20pages/LIFT%20Reference +[2] https://support.astron.nl/confluence/display/L2M/2022-10-24+LIFT+meeting+notes +[3] L1 LOFAR2 Decision: Transport of buffer data from Station to CEP, https://support.astron.nl/confluence/pages/viewpage.action?pageId=94766339 +[4] LOFAR1 TBB: https://support.astron.nl/confluence/display/L2M/Temporary+storage+of+documents+and+papers 1) DDR4 memory per receiver input @@ -17,7 +20,12 @@ Assume 4 % storage overhead for packet header information ==> Per recveiver input T_tbuf = 1.33 GByte = 10.6 Gbit, so at full 10GbE rate it takes about 1 s to read all samples from 1 receiver input ==> 192 * 1.33 = 256 GByte / LB for T_tbuf = 3.2 s -In [1] time series data en pulse data, wat is pulse data ? +In LOFAR12060 [1] time series data en pulse data, wat is pulse data : + De Transient Buffer Time-Series Data Product zijn de ruwe samples, zoals we daar net ook over spraken + De Transient Buffer Pulse Data Product is dat wat er uit de Transient Detect moet komen + Voor beide geldt dan natuurlijk dat CEP er een data product van moet maken + + Hoe streng is de 3.33 s, mag 3.2 s ook ? Gebruik een 16 GByte module per FPGA, zodat uitbreiding naar 6.66 s mopgelijkl is door beide slots the gebruiken Uitlezen per receiver input, zodat uitlezen van een deel vd receiver inputs mogelijk is (bijv 12 vd 192 in [1]) @@ -25,3 +33,24 @@ Defineer TB functie per receiver input: . zodat de TB functie makkelijk uitbreidbaar is naar meer inputs en naar meer DDR4 modules. . data capture en uitlezen van een receiver input onafhankelijk kan van de andere receiver inputs + +2) Meeting EK-BH 24 okt 2022 [2] +Design decision 16GByte DDR4 na L2SDP-854, 850 +. uitbreidbaar door andere slot ook te vullen +. 1 slot met 16GB kost minder FPGA resources dan 2 slots met 8GB + +- Uitgaan van 14 bit ingepakt +- < 14 bit --> select reg voor welke 8 bit als veld in header +- ICD SC-SDP CP, MP + . unfreeze, freeze, read out range from buffer +- ICD SDP-CEP + . packet header and payload data format 3.1.2 in TBB1 doc + . applied coarse delay (compenseert voor cable delay) + . receiver configuration (LB, HB, frequency band, attenuation) + . read out flow control + +- One dual polarion +- Ring +- Buffer lengte versus nof antennes +- Self trigger + diff --git a/libraries/base/common/python/try_round_weight.py b/libraries/base/common/python/try_round_weight.py index b8d82b2a6fcdd21615f9f986659745a33814a067..e2a6986247d7e14a2a23ec22b1c187f66f17ec45 100644 --- a/libraries/base/common/python/try_round_weight.py +++ b/libraries/base/common/python/try_round_weight.py @@ -65,7 +65,7 @@ noise /= np.std(noise) # Noise level range, 1 unit = 1 LSbit sigma_lo = 0.1 -sigma_hi = 5 +sigma_hi = 25 sigmas = np.arange(sigma_lo, sigma_hi, 0.1) N_sigmas = len(sigmas) diff --git a/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd b/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd index 0b1cf79bcdf78a9c2d1a00407bad000069b48014..1aeeb57d843fad84551b8e868d140a2b48a327aa 100644 --- a/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd +++ b/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd @@ -75,8 +75,12 @@ ARCHITECTURE rtl of nw_arp_request IS CONSTANT c_dp_field_blk_snk_data_w : NATURAL := field_slv_len(c_hdr_field_arr); CONSTANT c_dp_field_blk_src_data_w : NATURAL := c_data_w; - SIGNAL pps_cnt : NATURAL := 0; - SIGNAL trigger : BOOLEAN := FALSE; + SIGNAL valid_sha : STD_LOGIC := '0'; + SIGNAL valid_spa : STD_LOGIC := '0'; + SIGNAL valid_tpa : STD_LOGIC := '0'; + SIGNAL valid_arp : STD_LOGIC := '0'; + SIGNAL pps_cnt : NATURAL := 0; + SIGNAL trigger : BOOLEAN := FALSE; SIGNAL dp_field_blk_snk_in : t_dp_sosi := c_dp_sosi_rst; SIGNAL nxt_dp_field_blk_snk_in : t_dp_sosi := c_dp_sosi_rst; @@ -96,33 +100,46 @@ BEGIN nxt_dp_field_blk_snk_in.data(field_hi(c_hdr_field_arr, "arp_spa") DOWNTO field_lo(c_hdr_field_arr, "arp_spa")) <= arp_spa; nxt_dp_field_blk_snk_in.data(field_hi(c_hdr_field_arr, "arp_tpa") DOWNTO field_lo(c_hdr_field_arr, "arp_tpa")) <= arp_tpa; END PROCESS; - + -- pps counter process setting sop, eop and valid p_dp_pps : PROCESS (dp_clk, dp_rst) BEGIN IF dp_rst = '1' THEN + valid_sha <= '0'; + valid_spa <= '0'; + valid_tpa <= '0'; + valid_arp <= '0'; trigger <= FALSE; pps_cnt <= 0; dp_field_blk_snk_in <= c_dp_sosi_rst; ELSIF RISING_EDGE(dp_clk) THEN + -- Use signal to indicate if ARP can be enabled. + valid_sha <= vector_or(arp_sha); + valid_spa <= vector_or(arp_spa); + valid_tpa <= vector_or(arp_tpa); + valid_arp <= valid_sha AND valid_spa AND valid_tpa; + IF valid_arp = '1' THEN + dp_field_blk_snk_in <= nxt_dp_field_blk_snk_in; + IF trigger AND dp_field_blk_snk_out.ready = '1' AND dp_field_blk_snk_out.xon = '1' THEN + trigger <= FALSE; + dp_field_blk_snk_in.sop <= '1'; + dp_field_blk_snk_in.eop <= '1'; + dp_field_blk_snk_in.valid <= '1'; + END IF; - dp_field_blk_snk_in <= nxt_dp_field_blk_snk_in; - IF trigger AND dp_field_blk_snk_out.ready = '1' AND dp_field_blk_snk_out.xon = '1' THEN - trigger <= FALSE; - dp_field_blk_snk_in.sop <= '1'; - dp_field_blk_snk_in.eop <= '1'; - dp_field_blk_snk_in.valid <= '1'; - END IF; - - IF dp_pps = '1' THEN - IF pps_cnt < g_period_s-1 THEN - pps_cnt <= pps_cnt + 1; - ELSE - pps_cnt <= 0; - trigger <= TRUE; + IF dp_pps = '1' THEN + IF pps_cnt < g_period_s-1 THEN + pps_cnt <= pps_cnt + 1; + ELSE + pps_cnt <= 0; + trigger <= TRUE; + END IF; END IF; + ELSE + trigger <= FALSE; + pps_cnt <= 0; + dp_field_blk_snk_in <= c_dp_sosi_rst; END IF; - END IF; END PROCESS;