. FPGA_tbuf_record_stop_timed_RW [pn][si] # Stop recording at specified SSN time, not needed for raw data ???
. FPGA_tbuf_retrieve_inter_packet_gap_RW --> wait time between packets send to CEP in FPGA_tbuf_sample_period_R units
. FPGA_tbuf_record_all_antenna_RW[pn] # True = record all antenna inputs, False = record only half of the antenna inputs, the once that have even index.
FPGA_tbuf_retrieve_timestamp_RW [pn][si]
FPGA_tbuf_retrieve_nof_pre_pages_RW [pn][si]
FPGA_tbuf_retrieve_nof_post_pages_RW [pn][si]
. FPGA_tbuf_retrieve_enable_RW
. FPGA_tbuf_dump_inter_packet_gap_RW --> wait time between packets send to CEP in FPGA_tbuf_sample_period_R units
- total nof pages = nof_pre_pages + 1 (pointed by ssn) + nof_post_pages
FPGA_tbuf_dump_timestamp_range_RW[pn][rsn] --> [0] = from rsn, [1] to rsn, SDPTR translates between float timestamp and int RSN
FPGA_tbuf_dump_enable_RW[pn][ai] --> boolean, SC takes care that only one global ai is TRUE
--> SC / dump tool loops global ai via FPGA_tbuf_dump_enable_RW and
FPGA_tbuf_dumping_R
--> SC / dump tool needs to take care that only one global ai is selected at
a time to avoid 10GbE link overload
--> use FPGA_tbuf_dumping_R to see when dump is busy or done, hoe als het heel snel klaar is ???
FPGA_tbuf_clear_total_counts_RW[pn] --> clear all TBuf total counts in pn
Not: FPGA_tbuf_dump_enable_RW[pn] -- antenna index
Not: TR_tbuf_dump_enable_RW -- antenna index
. FPGA_tbuf_output_hdr_eth_destination_mac_RW
. FPGA_tbuf_output_hdr_eth_destination_mac_RW
. FPGA_tbuf_output_hdr_ip_destination_address_RW
. FPGA_tbuf_output_hdr_ip_destination_address_RW
. FPGA_tbuf_output_hdr_udp_destination_port_RW
. FPGA_tbuf_output_hdr_udp_destination_port_RW
. FPGA_tbuf_output_enable_RW
. FPGA_tbuf_output_enable_RW[pn]
. FPGA_tbuf_memory_address_RW[pn]
. FPGA_tbuf_memory_read_nof_words_RW[pn] --> read nof words (256b) from FPGA_tbuf_memory_address_RW
FPGA_tbuf_memory_read_data_R[pn] --> read data results from FPGA_tbuf_memory_read_nof_words_RW
. FPGA_tbuf_memory_write_data_words_RW[pn] --> write data words (256b) to FPGA_tbuf_memory_address_RW
- Monitor Points (MP):
- Monitor Points (MP):
. FPGA_tbuf_ddr4_present_R --> True is ddr4 memory is availabe, False is ddr4 calibration failed/ ddr4 not present
* Raw data:
. FPGA_tbuf_total_nof_pages_R --> 16GB / 8kB = 2M
. FPGA_tbuf_nof_bits_per_sample_R --> 14 b = W_adc
Use ddr_ for DDR4 in slot I, in case in future DDR4 slot II is also used, then use e.g. ddr_ii for that module.
. FPGA_ddr_calibrated_R = cal_ok && !cal_fail --> True is ddr4 memory is available, False is ddr4 calibration failed or ddr4 not present
. FPGA_ddr_wr_fifo_full_R = wr_fifo_full_reg, True if write FIFO to ddr4 memory got full since last MP read, else False. Should remain False.
. FPGA_ddr_rd_fifo_full_R = rd_fifo_full_reg, True if read FIFO from ddr4 memory got full since last MP read, else False. Should remain False.
. FPGA_ddr_wr_fifo_usedw_R = ctlr_wr_fifo_usedw, current fill level of write FIFO to ddr4 memory in number of 512b words, should be 0 when not recording
. FPGA_ddr_rd_fifo_usedw_R = ctlr_rd_fifo_usedw, current fill level of read FIFO from ddr4 memory in number of 512b words, should be 0 when not dumping
No need for CP of:
- dvr_wr_flush_en, because io_ddr and DDR4 should work without need to flush when they operate OK.
No need to MP for:
- ctlr_tech_mosi.wr, because controlled by streaming sequencer
- ctlr_rst_out_i, because also used as reset for io_ddr itself
- ctlr_tech_miso.waitrequest_n ? could show hanging io_ddr_driver
- ctlr_tech_miso.done ? could show hanging io_ddr_driver
REG_TBUF_RAW new in node_sdp_transient_buffer_raw.vhd
. nof_bytes_in_ddr_R = 16 * 1024**3 (16GiB)
. nof_bytes_per_ddr_word_R = 64 Bytes (= 512b)
. nof_ddr_words_per_page_R = 657 or 329, depends on FPGA_tbuf_record_all_antenna_RW
. 16b nof_samples_per_packet --> (8kB - 16) / 14b = 4672 (= 1022 words of 64b) --> log2() = 13b
. 16b nof_samples_per_packet --> (8kB - 16) / 14b = 4672 (= 1022 words of 64b) --> log2() = 13b
. 24b nof_packets_remaining in current dump (log2(2M pages) = 21b ??? to detect lost packets and progress
. 64b RSN = Sample Sequence Number --> is prefered over a BSN, because RSN can start at any sample, whereas a BSN has to fit start at 1970.
. 64b SSN = Sample Sequence Number
Not needed ???:
- 32b observation_id --> like for beamlets, not needed, also not in LOFAR1
- 1b udp_error --> based on ETH/IP/UDP CRC error in case LCU does UDP to TCP,
no needed, because CRC error packets will be dropped
- header_crc (covered by eth crc)
- payload_crc (covered by eth crc and by memory_error bit)
- headers: 14 + 20 + 8 + 24 = 66 bytes
- headers: 14 + 20 + 8 + 24 = 66 bytes
crc: 4 bytes
crc: 4 bytes
...
@@ -343,26 +424,31 @@ Not needed ???:
...
@@ -343,26 +424,31 @@ Not needed ???:
--> packet overhead is (66 + 4) / 8246 = 0.85 %
--> packet overhead is (66 + 4) / 8246 = 0.85 %
7) Transient detection (TDet) Design
SigMF:
- no self triggering yet for MVP
Tammo Jan 25 nov 2022:
- will use Hilbert transform of real input and > 30MHz BPF
Hoi Eric, over het opslaan van complex voltage data, dat ik gisteren tijdens de group meeting even noemde: het metadataformaat heet SigMF. . Het is gewoon een json-bestandje dat je naast een databestand met alleen complex voltages opslaat. Een prima viewer hiervoor is inspectrum ( https://github.com/miek/inspectrum ). Als data formaat voor streaming complex voltages gebruiken we difi (een subset van vita49) over ZeroMQ.