From e76925391c6afa52c35da2ea3e24cad259914fbb Mon Sep 17 00:00:00 2001 From: Jason <83615043+JJassonn69@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:51:08 +0200 Subject: [PATCH] Fix multi-seg/chain handshake deadlock + add radar_receiver_final integration test (10/10 PASS) RTL fix: matched_filter_multi_segment.v ST_WAIT_FFT now waits for processing chain to complete ALL 1024 outputs and return to IDLE before advancing to next segment. Previously, it transitioned on the first fft_pc_valid edge, causing the chain to still be outputting while multi-seg started collecting data for the next segment. This broke the handshake and caused permanent deadlock after segment 0. Also fixes forward reference of sample_addr_from_chain in radar_receiver_final.v (declaration moved before first use). New files: - tb/tb_radar_receiver_final.v: P0 integration test for full RX pipeline (ADC->DDC->MF->range_bin_decimator->doppler), 10 checks - tb/ad9484_interface_400m_stub.v: behavioral ADC stub for iverilog All existing tests still pass: multi-seg 32/32, MF co-sim 3/3, Doppler co-sim 14/14. --- .../9_2_FPGA/matched_filter_multi_segment.v | 72 +- 9_Firmware/9_2_FPGA/radar_receiver_final.v | 2 +- .../9_2_FPGA/tb/ad9484_interface_400m_stub.v | 53 + .../tb/cosim/rx_final_doppler_out.csv | 2049 +++++++++++++++++ .../9_2_FPGA/tb/tb_radar_receiver_final.v | 444 ++++ 5 files changed, 2590 insertions(+), 30 deletions(-) create mode 100644 9_Firmware/9_2_FPGA/tb/ad9484_interface_400m_stub.v create mode 100644 9_Firmware/9_2_FPGA/tb/cosim/rx_final_doppler_out.csv create mode 100644 9_Firmware/9_2_FPGA/tb/tb_radar_receiver_final.v diff --git a/9_Firmware/9_2_FPGA/matched_filter_multi_segment.v b/9_Firmware/9_2_FPGA/matched_filter_multi_segment.v index 5e05516..66bf014 100644 --- a/9_Firmware/9_2_FPGA/matched_filter_multi_segment.v +++ b/9_Firmware/9_2_FPGA/matched_filter_multi_segment.v @@ -76,11 +76,12 @@ localparam ST_WAIT_FFT = 5; localparam ST_OUTPUT = 6; localparam ST_NEXT_SEGMENT = 7; -// Segment tracking -reg [2:0] current_segment; // 0-3 -reg [2:0] total_segments; -reg segment_done; -reg chirp_complete; +// Segment tracking +reg [2:0] current_segment; // 0-3 +reg [2:0] total_segments; +reg segment_done; +reg chirp_complete; +reg saw_chain_output; // Flag: chain started producing output // Microcontroller sync detection reg mc_new_chirp_prev, mc_new_elevation_prev, mc_new_azimuth_prev; @@ -139,25 +140,27 @@ always @(posedge clk or negedge reset_n) begin pc_valid <= 0; status <= 0; chirp_samples_collected <= 0; - chirp_complete <= 0; - fft_input_valid <= 0; - fft_start <= 0; + chirp_complete <= 0; + saw_chain_output <= 0; + fft_input_valid <= 0; + fft_start <= 0; end else begin pc_valid <= 0; mem_request <= 0; fft_input_valid <= 0; case (state) - ST_IDLE: begin - // Reset for new chirp - buffer_write_ptr <= 0; - buffer_read_ptr <= 0; - buffer_has_data <= 0; - buffer_processing <= 0; - current_segment <= 0; - segment_done <= 0; - chirp_samples_collected <= 0; - chirp_complete <= 0; + ST_IDLE: begin + // Reset for new chirp + buffer_write_ptr <= 0; + buffer_read_ptr <= 0; + buffer_has_data <= 0; + buffer_processing <= 0; + current_segment <= 0; + segment_done <= 0; + chirp_samples_collected <= 0; + chirp_complete <= 0; + saw_chain_output <= 0; // Wait for chirp start from microcontroller if (chirp_start_pulse) begin @@ -290,13 +293,14 @@ always @(posedge clk or negedge reset_n) begin buffer_read_ptr <= buffer_read_ptr + 1; - end else if (buffer_read_ptr >= BUFFER_SIZE) begin - // Done feeding buffer - fft_input_valid <= 0; - mem_request <= 0; - buffer_processing <= 0; - buffer_has_data <= 0; - state <= ST_WAIT_FFT; // CRITICAL: Wait for FFT completion + end else if (buffer_read_ptr >= BUFFER_SIZE) begin + // Done feeding buffer + fft_input_valid <= 0; + mem_request <= 0; + buffer_processing <= 0; + buffer_has_data <= 0; + saw_chain_output <= 0; + state <= ST_WAIT_FFT; // CRITICAL: Wait for FFT completion `ifdef SIMULATION $display("[MULTI_SEG_FIXED] Finished feeding %d samples to FFT, waiting...", @@ -305,15 +309,25 @@ always @(posedge clk or negedge reset_n) begin end end - ST_WAIT_FFT: begin - // Wait for the processing chain to complete (2159 cycles latency) + ST_WAIT_FFT: begin + // Wait for the processing chain to complete ALL outputs. + // The chain streams 1024 samples (fft_pc_valid=1 for 1024 clocks), + // then transitions to ST_DONE (9) -> ST_IDLE (0). + // We track when output starts (saw_chain_output) and only + // proceed once the chain returns to idle after outputting. if (fft_pc_valid) begin + saw_chain_output <= 1; + end + + if (saw_chain_output && fft_chain_state == 4'd0) begin + // Chain has returned to idle after completing all output + saw_chain_output <= 0; state <= ST_OUTPUT; `ifdef SIMULATION - $display("[MULTI_SEG_FIXED] FFT processing complete for segment %d", + $display("[MULTI_SEG_FIXED] Chain complete for segment %d, entering ST_OUTPUT", current_segment); `endif - end + end end ST_OUTPUT: begin diff --git a/9_Firmware/9_2_FPGA/radar_receiver_final.v b/9_Firmware/9_2_FPGA/radar_receiver_final.v index 9365ad6..d406641 100644 --- a/9_Firmware/9_2_FPGA/radar_receiver_final.v +++ b/9_Firmware/9_2_FPGA/radar_receiver_final.v @@ -170,6 +170,7 @@ ddc_input_interface ddc_if ( ); // 3. Dual Chirp Memory Loader +wire [9:0] sample_addr_from_chain; chirp_memory_loader_param chirp_mem ( .clk(clk), @@ -219,7 +220,6 @@ assign short_chirp_real = delayed_ref_i; assign short_chirp_imag = delayed_ref_q; // 5. Dual Chirp Matched Filter -wire [9:0] sample_addr_from_chain; wire signed [15:0] range_profile_i; wire signed [15:0] range_profile_q; diff --git a/9_Firmware/9_2_FPGA/tb/ad9484_interface_400m_stub.v b/9_Firmware/9_2_FPGA/tb/ad9484_interface_400m_stub.v new file mode 100644 index 0000000..7904af0 --- /dev/null +++ b/9_Firmware/9_2_FPGA/tb/ad9484_interface_400m_stub.v @@ -0,0 +1,53 @@ +`timescale 1ns / 1ps +// ============================================================================ +// ad9484_interface_400m_stub.v -- Behavioral stub for iverilog simulation +// +// Replaces the real ad9484_interface_400m which uses Xilinx primitives +// (IBUFDS, BUFG, IDDR) that cannot compile in iverilog. +// +// Convention for testbench use: +// - Drive adc_d_p[7:0] with single-ended 8-bit ADC data +// - Drive adc_dco_p with the 400MHz clock (testbench-generated) +// - adc_d_n and adc_dco_n are ignored +// - adc_dco_bufg = adc_dco_p (pass-through, no BUFG) +// - 1-cycle pipeline latency on data, same as real IDDR+register path +// ============================================================================ + +module ad9484_interface_400m ( + // ADC Physical Interface (LVDS) + input wire [7:0] adc_d_p, + input wire [7:0] adc_d_n, + input wire adc_dco_p, + input wire adc_dco_n, + + // System Interface + input wire sys_clk, + input wire reset_n, + + // Output at 400MHz domain + output wire [7:0] adc_data_400m, + output wire adc_data_valid_400m, + output wire adc_dco_bufg +); + +// Pass-through clock (no BUFG needed in simulation) +assign adc_dco_bufg = adc_dco_p; + +// 1-cycle pipeline register (matches real IDDR + output register latency) +reg [7:0] adc_data_400m_reg; +reg adc_data_valid_400m_reg; + +always @(posedge adc_dco_p or negedge reset_n) begin + if (!reset_n) begin + adc_data_400m_reg <= 8'b0; + adc_data_valid_400m_reg <= 1'b0; + end else begin + adc_data_400m_reg <= adc_d_p; + adc_data_valid_400m_reg <= 1'b1; + end +end + +assign adc_data_400m = adc_data_400m_reg; +assign adc_data_valid_400m = adc_data_valid_400m_reg; + +endmodule diff --git a/9_Firmware/9_2_FPGA/tb/cosim/rx_final_doppler_out.csv b/9_Firmware/9_2_FPGA/tb/cosim/rx_final_doppler_out.csv new file mode 100644 index 0000000..8145be3 --- /dev/null +++ b/9_Firmware/9_2_FPGA/tb/cosim/rx_final_doppler_out.csv @@ -0,0 +1,2049 @@ +cycle,range_bin,doppler_bin,output_hex +1114075000,0,0,ff70fe67 +1114085000,0,1,00bf0008 +1114095000,0,2,0037026e +1114105000,0,3,fefafcd7 +1114115000,0,4,011e0202 +1114125000,0,5,fec5fe31 +1114135000,0,6,009601f2 +1114145000,0,7,feadff76 +1114155000,0,8,020dffd0 +1114165000,0,9,fd850022 +1114175000,0,10,01810067 +1114185000,0,11,fefefef9 +1114195000,0,12,026c019f +1114205000,0,13,fe18ff54 +1114215000,0,14,009effc8 +1114225000,0,15,fff1005c +1114235000,0,16,fedc000f +1114245000,0,17,020bffb8 +1114255000,0,18,fe3b00f4 +1114265000,0,19,01bafeff +1114275000,0,20,ff6e00aa +1114285000,0,21,0005ff21 +1114295000,0,22,ffa00050 +1114305000,0,23,fffdff84 +1114315000,0,24,00e300fa +1114325000,0,25,0049fdb6 +1114335000,0,26,fdc90343 +1114345000,0,27,015eff71 +1114355000,0,28,0064fee5 +1114365000,0,29,ff36ffc2 +1114375000,0,30,01d8003a +1114385000,0,31,fea500aa +1119455000,1,0,006800ce +1119465000,1,1,ff90fdb4 +1119475000,1,2,007d0318 +1119485000,1,3,ff85fcac +1119495000,1,4,00b90262 +1119505000,1,5,ffeafd76 +1119515000,1,6,ff9902b7 +1119525000,1,7,ff9eff01 +1119535000,1,8,ffa6008c +1119545000,1,9,01f7ff90 +1119555000,1,10,fda000c8 +1119565000,1,11,00caff4a +1119575000,1,12,02180138 +1119585000,1,13,fe81fdc4 +1119595000,1,14,ff7d021e +1119605000,1,15,01e9fe1e +1119615000,1,16,fe3000e2 +1119625000,1,17,00deff38 +1119635000,1,18,fff90122 +1119645000,1,19,0041ff18 +1119655000,1,20,004b0082 +1119665000,1,21,fd88003a +1119675000,1,22,026dfe65 +1119685000,1,23,fdfc00e3 +1119695000,1,24,02ae0004 +1119705000,1,25,fddb0030 +1119715000,1,26,0016003a +1119725000,1,27,009cfef6 +1119735000,1,28,00100114 +1119745000,1,29,ffcd0068 +1119755000,1,30,0019fe4a +1119765000,1,31,ff710142 +1124835000,2,0,ff43ff79 +1124845000,2,1,ff68ffbc +1124855000,2,2,023a01b0 +1124865000,2,3,fdb5fd14 +1124875000,2,4,00bc030b +1124885000,2,5,0082fdb0 +1124895000,2,6,feea00f8 +1124905000,2,7,008aff30 +1124915000,2,8,000a024f +1124925000,2,9,ff3afd5f +1124935000,2,10,00b4015f +1124945000,2,11,ffaaffb1 +1124955000,2,12,01e70166 +1124965000,2,13,fe53ff16 +1124975000,2,14,0056ffca +1124985000,2,15,fff3ff87 +1124995000,2,16,ffe300d3 +1125005000,2,17,009aff52 +1125015000,2,18,ff000022 +1125025000,2,19,00b30072 +1125035000,2,20,0176ff1b +1125045000,2,21,fd800152 +1125055000,2,22,01b4fe5e +1125065000,2,23,fef0005e +1125075000,2,24,01f400cd +1125085000,2,25,fd04ff13 +1125095000,2,26,01de0003 +1125105000,2,27,fe9e0185 +1125115000,2,28,014bfe8c +1125125000,2,29,fea30048 +1125135000,2,30,01c8ff5c +1125145000,2,31,ff9b011f +1130215000,3,0,00cb0117 +1130225000,3,1,fd78fec7 +1130235000,3,2,0313021b +1130245000,3,3,fd65fd78 +1130255000,3,4,00c6034a +1130265000,3,5,ffd7fcde +1130275000,3,6,002e0212 +1130285000,3,7,ff70fe2b +1130295000,3,8,01cd029a +1130305000,3,9,fddefef6 +1130315000,3,10,02440002 +1130325000,3,11,fe0fffd7 +1130335000,3,12,01bd00cf +1130345000,3,13,ff40ffac +1130355000,3,14,009aff36 +1130365000,3,15,ff9f0029 +1130375000,3,16,ffabff7d +1130385000,3,17,00b40103 +1130395000,3,18,ff85fe7f +1130405000,3,19,ffb90266 +1130415000,3,20,0092fd2a +1130425000,3,21,00d701ae +1130435000,3,22,ffd6ffa2 +1130445000,3,23,fd16fff1 +1130455000,3,24,02c9ffce +1130465000,3,25,ff0effc8 +1130475000,3,26,ffb0ffe4 +1130485000,3,27,ff5b0163 +1130495000,3,28,019ffe81 +1130505000,3,29,ff1a00a0 +1130515000,3,30,00e60126 +1130525000,3,31,ff63fdf3 +1135595000,4,0,ff70fe20 +1135605000,4,1,017001b1 +1135615000,4,2,ff1afed2 +1135625000,4,3,005301b1 +1135635000,4,4,ffa1fdfc +1135645000,4,5,0158014e +1135655000,4,6,fdd5fe1d +1135665000,4,7,016d0151 +1135675000,4,8,fdf3ff5e +1135685000,4,9,0283004f +1135695000,4,10,fe73001f +1135705000,4,11,fed1ffee +1135715000,4,12,037c0062 +1135725000,4,13,fd89ffcb +1135735000,4,14,00860023 +1135745000,4,15,0119ff1c +1135755000,4,16,fe9200d0 +1135765000,4,17,000a0019 +1135775000,4,18,ff6affb0 +1135785000,4,19,0169ff17 +1135795000,4,20,ff25017a +1135805000,4,21,0056ff6a +1135815000,4,22,ff7bff51 +1135825000,4,23,00b90063 +1135835000,4,24,febf01aa +1135845000,4,25,0157fe3b +1135855000,4,26,fee10187 +1135865000,4,27,00bffeda +1135875000,4,28,ff5a0070 +1135885000,4,29,01950199 +1135895000,4,30,feb2fd37 +1135905000,4,31,00a50200 +1140975000,5,0,007dfe2c +1140985000,5,1,ffc100d8 +1140995000,5,2,00f4ff17 +1141005000,5,3,fea301b3 +1141015000,5,4,00e8fee6 +1141025000,5,5,ff1f016f +1141035000,5,6,0029fe6f +1141045000,5,7,00510107 +1141055000,5,8,ff5b000b +1141065000,5,9,01a6ff5d +1141075000,5,10,ff170047 +1141085000,5,11,ff9d0044 +1141095000,5,12,01b400b7 +1141105000,5,13,fea1fe4d +1141115000,5,14,00c500fc +1141125000,5,15,ff84ff8d +1141135000,5,16,fef3001c +1141145000,5,17,02e7004e +1141155000,5,18,fcc80013 +1141165000,5,19,01d3ff93 +1141175000,5,20,ff6aff5c +1141185000,5,21,01970071 +1141195000,5,22,fcf30029 +1141205000,5,23,02f50019 +1141215000,5,24,fdf5ff65 +1141225000,5,25,019e00dd +1141235000,5,26,fdfd007b +1141245000,5,27,0199fe72 +1141255000,5,28,fe8200f7 +1141265000,5,29,01fd0013 +1141275000,5,30,ffd7fe48 +1141285000,5,31,fe7a0247 +1146355000,6,0,019e0040 +1146365000,6,1,ff69fefe +1146375000,6,2,0094ffd5 +1146385000,6,3,fe900138 +1146395000,6,4,014fff94 +1146405000,6,5,feaaff41 +1146415000,6,6,016e01e7 +1146425000,6,7,fd64fde1 +1146435000,6,8,04100234 +1146445000,6,9,fd07fe18 +1146455000,6,10,010a01e7 +1146465000,6,11,feffff3d +1146475000,6,12,0171004d +1146485000,6,13,ff24ffba +1146495000,6,14,005a005c +1146505000,6,15,ffcfff82 +1146515000,6,16,0096fe9c +1146525000,6,17,00490356 +1146535000,6,18,ff70fe39 +1146545000,6,19,0090feda +1146555000,6,20,ff0d01ee +1146565000,6,21,024efe7f +1146575000,6,22,fd5600d9 +1146585000,6,23,009cff0d +1146595000,6,24,00fc0088 +1146605000,6,25,fed30028 +1146615000,6,26,0056fea7 +1146625000,6,27,ff3d01f5 +1146635000,6,28,014bff51 +1146645000,6,29,ff40ff42 +1146655000,6,30,02c60180 +1146665000,6,31,fc4dff0c +1151735000,7,0,02c80131 +1151745000,7,1,ffd0fe09 +1151755000,7,2,007e017f +1151765000,7,3,ff77ff34 +1151775000,7,4,ffca0064 +1151785000,7,5,0000ffa2 +1151795000,7,6,00500125 +1151805000,7,7,fdd3feb9 +1151815000,7,8,02d501e4 +1151825000,7,9,ff5afe3a +1151835000,7,10,ff8e0144 +1151845000,7,11,002cfeda +1151855000,7,12,009400be +1151865000,7,13,ff5bff7c +1151875000,7,14,006a00c8 +1151885000,7,15,0009ff93 +1151895000,7,16,ffd2feb1 +1151905000,7,17,006e0367 +1151915000,7,18,0008fd9b +1151925000,7,19,fffdffbe +1151935000,7,20,ff980040 +1151945000,7,21,014cffac +1151955000,7,22,fddefff1 +1151965000,7,23,0171ffeb +1151975000,7,24,ff95003e +1151985000,7,25,0038ff8e +1151995000,7,26,ff8c012e +1152005000,7,27,ffb8fe04 +1152015000,7,28,ff560202 +1152025000,7,29,ffc9fed6 +1152035000,7,30,03d8019e +1152045000,7,31,fabbfeb1 +1157115000,8,0,ff22ff86 +1157125000,8,1,0154fee3 +1157135000,8,2,fe0c01c2 +1157145000,8,3,013cfe24 +1157155000,8,4,ff170139 +1157165000,8,5,01a1ffbb +1157175000,8,6,fdf6ff16 +1157185000,8,7,00de01e8 +1157195000,8,8,00aefdef +1157205000,8,9,ff7f01c7 +1157215000,8,10,ff2afed8 +1157225000,8,11,00ca023a +1157235000,8,12,0196fcc7 +1157245000,8,13,fe2702df +1157255000,8,14,0000fe99 +1157265000,8,15,006200f1 +1157275000,8,16,feacfe14 +1157285000,8,17,034001d1 +1157295000,8,18,fe4eff84 +1157305000,8,19,003cffca +1157315000,8,20,00c3ff8f +1157325000,8,21,ff170049 +1157335000,8,22,005cff9a +1157345000,8,23,ff80ff7c +1157355000,8,24,ffcc016f +1157365000,8,25,0075fdf5 +1157375000,8,26,fe68027a +1157385000,8,27,01dafe30 +1157395000,8,28,fe980191 +1157405000,8,29,0161fe95 +1157415000,8,30,ff92ff87 +1157425000,8,31,003c01eb +1162495000,9,0,ffb3fe41 +1162505000,9,1,013fff5d +1162515000,9,2,ff1b0088 +1162525000,9,3,0104007e +1162535000,9,4,ff11ff66 +1162545000,9,5,001bff11 +1162555000,9,6,ffd400b0 +1162565000,9,7,ffd0003d +1162575000,9,8,007fffd3 +1162585000,9,9,ff55ff12 +1162595000,9,10,008d014f +1162605000,9,11,feeafea3 +1162615000,9,12,028b014c +1162625000,9,13,fdefffc6 +1162635000,9,14,ff690054 +1162645000,9,15,01bbfedc +1162655000,9,16,fdad01a9 +1162665000,9,17,02c3fe6d +1162675000,9,18,fdfd01a0 +1162685000,9,19,0184fdae +1162695000,9,20,ff0701d2 +1162705000,9,21,0043fe93 +1162715000,9,22,ff360104 +1162725000,9,23,00eaffa7 +1162735000,9,24,ff35015b +1162745000,9,25,0175fe2c +1162755000,9,26,fe270215 +1162765000,9,27,010afecd +1162775000,9,28,ff41ffd4 +1162785000,9,29,00b7017e +1162795000,9,30,00a9fc5c +1162805000,9,31,ff5f0454 +1167875000,10,0,00fe0059 +1167885000,10,1,0107fe39 +1167895000,10,2,feb101f5 +1167905000,10,3,ff4bfe32 +1167915000,10,4,026a001c +1167925000,10,5,fde10001 +1167935000,10,6,01460095 +1167945000,10,7,fd32ff74 +1167955000,10,8,03df00ca +1167965000,10,9,fcf0fef3 +1167975000,10,10,01e20177 +1167985000,10,11,fdc0ff10 +1167995000,10,12,02980119 +1168005000,10,13,fdf7fefa +1168015000,10,14,00c90079 +1168025000,10,15,008200a1 +1168035000,10,16,fe62ff43 +1168045000,10,17,01bdff87 +1168055000,10,18,0127017f +1168065000,10,19,fe9ffe64 +1168075000,10,20,fffc014a +1168085000,10,21,ff9fff19 +1168095000,10,22,001cff7d +1168105000,10,23,0086014e +1168115000,10,24,ff210032 +1168125000,10,25,0154fef1 +1168135000,10,26,feaa003d +1168145000,10,27,011a0022 +1168155000,10,28,ff82ffa1 +1168165000,10,29,ffe900f8 +1168175000,10,30,01f1fe05 +1168185000,10,31,fd3a01b5 +1173255000,11,0,00e0ff0c +1173265000,11,1,ff66013c +1173275000,11,2,01d7fe8f +1173285000,11,3,fdf201cf +1173295000,11,4,012afef8 +1173305000,11,5,ff47005b +1173315000,11,6,00240074 +1173325000,11,7,fece005b +1173335000,11,8,0335fefe +1173345000,11,9,fd2dfff8 +1173355000,11,10,021e0159 +1173365000,11,11,ff0efe0a +1173375000,11,12,01330104 +1173385000,11,13,fd7fff85 +1173395000,11,14,01e000aa +1173405000,11,15,ff0c001c +1173415000,11,16,fff2febc +1173425000,11,17,007c0286 +1173435000,11,18,0071ff35 +1173445000,11,19,0034ff07 +1173455000,11,20,ff0eff8e +1173465000,11,21,014b0029 +1173475000,11,22,ffd8009a +1173485000,11,23,ff6aff65 +1173495000,11,24,ffa50066 +1173505000,11,25,013dff9a +1173515000,11,26,fe66ffcb +1173525000,11,27,00f00128 +1173535000,11,28,ffc1fec2 +1173545000,11,29,fe0bffdb +1173555000,11,30,04400078 +1173565000,11,31,fc700054 +1178635000,12,0,01aefdb7 +1178645000,12,1,fe10011a +1178655000,12,2,0181fe33 +1178665000,12,3,fef60120 +1178675000,12,4,0083ffae +1178685000,12,5,fe9fffa1 +1178695000,12,6,015e00cf +1178705000,12,7,ff4eff3c +1178715000,12,8,0005013b +1178725000,12,9,ff71ff67 +1178735000,12,10,0081014c +1178745000,12,11,fff0fdf1 +1178755000,12,12,01e50250 +1178765000,12,13,fca9ff8c +1178775000,12,14,01cf0022 +1178785000,12,15,007cfe0c +1178795000,12,16,ff7e02cf +1178805000,12,17,015efe2c +1178815000,12,18,fe95005b +1178825000,12,19,01befeee +1178835000,12,20,fe730128 +1178845000,12,21,ff55ffaf +1178855000,12,22,01b600ad +1178865000,12,23,fef8ff92 +1178875000,12,24,ffc7ff57 +1178885000,12,25,00d100fb +1178895000,12,26,0129ffda +1178905000,12,27,fe28ff09 +1178915000,12,28,0085002a +1178925000,12,29,ffe3009c +1178935000,12,30,0175fd36 +1178945000,12,31,fdd2040e +1184015000,13,0,0116ff93 +1184025000,13,1,009c004a +1184035000,13,2,ffcb00bb +1184045000,13,3,fec1ff06 +1184055000,13,4,00ac002a +1184065000,13,5,0094ff87 +1184075000,13,6,fe3f012d +1184085000,13,7,ffe7fef5 +1184095000,13,8,0104019c +1184105000,13,9,006afd8a +1184115000,13,10,fecd02ec +1184125000,13,11,008ffdce +1184135000,13,12,003a01ce +1184145000,13,13,0074ff65 +1184155000,13,14,ff60fedf +1184165000,13,15,ffd40226 +1184175000,13,16,00d4ffbb +1184185000,13,17,ffc8ff38 +1184195000,13,18,fee1002f +1184205000,13,19,013fff60 +1184215000,13,20,018effca +1184225000,13,21,fd8c0043 +1184235000,13,22,00f50065 +1184245000,13,23,ffe30013 +1184255000,13,24,00ba0006 +1184265000,13,25,feceffe0 +1184275000,13,26,0103ff82 +1184285000,13,27,fdf5005c +1184295000,13,28,035c002e +1184305000,13,29,fca8ff0d +1184315000,13,30,032800f7 +1184325000,13,31,fd56ff7a +1189395000,14,0,ff9dff7c +1189405000,14,1,00f2007b +1189415000,14,2,fe8f001b +1189425000,14,3,01d40101 +1189435000,14,4,fdfbfd2e +1189445000,14,5,014402ac +1189455000,14,6,feeffeed +1189465000,14,7,ff52ff24 +1189475000,14,8,020901db +1189485000,14,9,ff73ff63 +1189495000,14,10,ffdeff3b +1189505000,14,11,ff740165 +1189515000,14,12,0093fdfb +1189525000,14,13,ffe20184 +1189535000,14,14,ff9effd3 +1189545000,14,15,ffb1007d +1189555000,14,16,0043ff1a +1189565000,14,17,001001a5 +1189575000,14,18,0059fe6b +1189585000,14,19,001400fb +1189595000,14,20,ffbd002a +1189605000,14,21,0266fe6a +1189615000,14,22,fc3d0105 +1189625000,14,23,034c006e +1189635000,14,24,fe3bffff +1189645000,14,25,00e3fe31 +1189655000,14,26,fece00e3 +1189665000,14,27,01900087 +1189675000,14,28,fd89ff5d +1189685000,14,29,01fcff2a +1189695000,14,30,ff3a0217 +1189705000,14,31,0055fef1 +1194775000,15,0,0368006d +1194785000,15,1,fd9afec9 +1194795000,15,2,0167017d +1194805000,15,3,ff3effb5 +1194815000,15,4,ffe5fef7 +1194825000,15,5,ff8bff71 +1194835000,15,6,007b0214 +1194845000,15,7,fe2afda1 +1194855000,15,8,0342034f +1194865000,15,9,fde5fd93 +1194875000,15,10,001001ea +1194885000,15,11,0071ff51 +1194895000,15,12,00a7ff90 +1194905000,15,13,feb40076 +1194915000,15,14,008bffb0 +1194925000,15,15,00980048 +1194935000,15,16,ffb0ff21 +1194945000,15,17,ff8801ff +1194955000,15,18,015ffe3d +1194965000,15,19,ff7200fd +1194975000,15,20,ff65fefd +1194985000,15,21,01d9fff7 +1194995000,15,22,fe5f00f8 +1195005000,15,23,ff86ffb1 +1195015000,15,24,00eaff8f +1195025000,15,25,ff91ffb5 +1195035000,15,26,00c20030 +1195045000,15,27,fdbb0001 +1195055000,15,28,034300b0 +1195065000,15,29,fdd8feca +1195075000,15,30,020b01f0 +1195085000,15,31,fcd4fe8a +1200155000,16,0,0030ff5a +1200165000,16,1,0096fec1 +1200175000,16,2,0067021b +1200185000,16,3,fffcfe5d +1200195000,16,4,ffaf0027 +1200205000,16,5,fe41ffce +1200215000,16,6,027700bc +1200225000,16,7,fc9ffecd +1200235000,16,8,0350013b +1200245000,16,9,fe5bfec9 +1200255000,16,10,009400da +1200265000,16,11,fe72ff48 +1200275000,16,12,03010179 +1200285000,16,13,fe1cfee6 +1200295000,16,14,ff4d0014 +1200305000,16,15,01190078 +1200315000,16,16,fee4ff70 +1200325000,16,17,019a0035 +1200335000,16,18,fe65019d +1200345000,16,19,008afd87 +1200355000,16,20,00630187 +1200365000,16,21,005ffdc0 +1200375000,16,22,fea70290 +1200385000,16,23,0127ffbb +1200395000,16,24,ffa0ffcf +1200405000,16,25,006dff3d +1200415000,16,26,fe7c018e +1200425000,16,27,0150ff50 +1200435000,16,28,0041ffdd +1200445000,16,29,febcffe8 +1200455000,16,30,0251ffe8 +1200465000,16,31,fe7900ec +1205535000,17,0,0079fdd9 +1205545000,17,1,ff6f00d2 +1205555000,17,2,00af002f +1205565000,17,3,ff99fe21 +1205575000,17,4,ff0d0342 +1205585000,17,5,0103fcf9 +1205595000,17,6,004c013f +1205605000,17,7,feb7ff2c +1205615000,17,8,0084012d +1205625000,17,9,ffc2fe9f +1205635000,17,10,009a0121 +1205645000,17,11,fe4eff81 +1205655000,17,12,031a00a0 +1205665000,17,13,fe08009e +1205675000,17,14,ffebfe59 +1205685000,17,15,fffc00f5 +1205695000,17,16,0081ffbf +1205705000,17,17,00b5000e +1205715000,17,18,fd53feaf +1205725000,17,19,01f30143 +1205735000,17,20,0077ffca +1205745000,17,21,fd4f012d +1205755000,17,22,02fefe9d +1205765000,17,23,fe2d00f2 +1205775000,17,24,0146ffbf +1205785000,17,25,fee6003d +1205795000,17,26,0124001d +1205805000,17,27,fe42009f +1205815000,17,28,0256fee0 +1205825000,17,29,fe5a00b8 +1205835000,17,30,0203fe1f +1205845000,17,31,fed402b1 +1210915000,18,0,ff2bfd8a +1210925000,18,1,011802d4 +1210935000,18,2,fe3efd34 +1210945000,18,3,01bd01fb +1210955000,18,4,fe38ff47 +1210965000,18,5,017900dd +1210975000,18,6,fee8ff03 +1210985000,18,7,ffd8ffe0 +1210995000,18,8,00600201 +1211005000,18,9,fffefee3 +1211015000,18,10,ff64feec +1211025000,18,11,01ba01d9 +1211035000,18,12,0032ffa5 +1211045000,18,13,fe63fedc +1211055000,18,14,017e00f4 +1211065000,18,15,fea7ffc3 +1211075000,18,16,00e7006e +1211085000,18,17,ffecff28 +1211095000,18,18,ff9c0094 +1211105000,18,19,0097ff59 +1211115000,18,20,ff6a00d3 +1211125000,18,21,016bff05 +1211135000,18,22,fe32002d +1211145000,18,23,00c2ffc2 +1211155000,18,24,004effdb +1211165000,18,25,ff8e00dd +1211175000,18,26,ff2e0030 +1211185000,18,27,017affbf +1211195000,18,28,fe7c002d +1211205000,18,29,0191ff4e +1211215000,18,30,ff2cff98 +1211225000,18,31,008f0187 +1216295000,19,0,fec20055 +1216305000,19,1,0108febc +1216315000,19,2,ffb100e3 +1216325000,19,3,0016ffda +1216335000,19,4,ff8bffd1 +1216345000,19,5,0036ff43 +1216355000,19,6,00970219 +1216365000,19,7,fe35fd0d +1216375000,19,8,024503a0 +1216385000,19,9,fe42fd5a +1216395000,19,10,00c501da +1216405000,19,11,003aff60 +1216415000,19,12,0036ffe6 +1216425000,19,13,ffd60036 +1216435000,19,14,ffe200ce +1216445000,19,15,0063fd88 +1216455000,19,16,ff1c017f +1216465000,19,17,00e6ffa6 +1216475000,19,18,00a30151 +1216485000,19,19,ff2efd72 +1216495000,19,20,ffd50253 +1216505000,19,21,0174fe89 +1216515000,19,22,fe61008f +1216525000,19,23,006fff2b +1216535000,19,24,00190060 +1216545000,19,25,fea40004 +1216555000,19,26,01dfff8a +1216565000,19,27,feba0144 +1216575000,19,28,ff7effaa +1216585000,19,29,013cff6e +1216595000,19,30,00eeffca +1216605000,19,31,ff2100c0 +1221675000,20,0,0163fcd2 +1221685000,20,1,fe7d01ae +1221695000,20,2,01d7ff72 +1221705000,20,3,fff1016d +1221715000,20,4,fefafe4e +1221725000,20,5,004d00ee +1221735000,20,6,0045ff4e +1221745000,20,7,ffe2ffd4 +1221755000,20,8,00050087 +1221765000,20,9,ffc1ff0f +1221775000,20,10,00840139 +1221785000,20,11,fe2efedd +1221795000,20,12,03880191 +1221805000,20,13,fcebff0e +1221815000,20,14,017b004d +1221825000,20,15,0038fea4 +1221835000,20,16,ffe901d6 +1221845000,20,17,ff71feae +1221855000,20,18,ff3f0002 +1221865000,20,19,00730019 +1221875000,20,20,0172ff78 +1221885000,20,21,fd950022 +1221895000,20,22,00c70130 +1221905000,20,23,00b4ffb6 +1221915000,20,24,ffa7ff51 +1221925000,20,25,feb10051 +1221935000,20,26,01be014f +1221945000,20,27,fed6fee1 +1221955000,20,28,00d4ffb9 +1221965000,20,29,ff23024e +1221975000,20,30,0211fbf9 +1221985000,20,31,fdca0416 +1227055000,21,0,ff32ff79 +1227065000,21,1,009bffde +1227075000,21,2,ff46000f +1227085000,21,3,00fe011b +1227095000,21,4,ffc2fe74 +1227105000,21,5,001e010d +1227115000,21,6,003dffc2 +1227125000,21,7,fe4eff01 +1227135000,21,8,01ca0251 +1227145000,21,9,ffedfdd8 +1227155000,21,10,ffc302bb +1227165000,21,11,fe51fdb2 +1227175000,21,12,02be0138 +1227185000,21,13,feb2ff2b +1227195000,21,14,0074fffa +1227205000,21,15,001cffc1 +1227215000,21,16,006a010f +1227225000,21,17,ff89fdd6 +1227235000,21,18,ff960249 +1227245000,21,19,0070fe99 +1227255000,21,20,ffd40198 +1227265000,21,21,0090fce3 +1227275000,21,22,fde702ce +1227285000,21,23,02dcff05 +1227295000,21,24,fd22008b +1227305000,21,25,0143fe8c +1227315000,21,26,00a101d5 +1227325000,21,27,ffbdfe46 +1227335000,21,28,004c0188 +1227345000,21,29,ff64ffa5 +1227355000,21,30,0090fefe +1227365000,21,31,ff960115 +1232435000,22,0,0215005e +1232445000,22,1,ff81ff6a +1232455000,22,2,ffef0002 +1232465000,22,3,0047009a +1232475000,22,4,004effa9 +1232485000,22,5,ff4aff8d +1232495000,22,6,002800a6 +1232505000,22,7,fe30fe83 +1232515000,22,8,03600183 +1232525000,22,9,fe66ff69 +1232535000,22,10,ff630048 +1232545000,22,11,00e7ff60 +1232555000,22,12,004100b2 +1232565000,22,13,ff67009f +1232575000,22,14,0094fde4 +1232585000,22,15,fee801c7 +1232595000,22,16,015dfe64 +1232605000,22,17,feb90282 +1232615000,22,18,0043fd5a +1232625000,22,19,0013019e +1232635000,22,20,0080feab +1232645000,22,21,0008007b +1232655000,22,22,ff5affb6 +1232665000,22,23,00360109 +1232675000,22,24,ffb6fea3 +1232685000,22,25,ff5c0253 +1232695000,22,26,00effd94 +1232705000,22,27,feb70108 +1232715000,22,28,016901aa +1232725000,22,29,fedbfe69 +1232735000,22,30,0286fff0 +1232745000,22,31,fd0a0055 +1237815000,23,0,02db0135 +1237825000,23,1,fd21ff62 +1237835000,23,2,01c1007e +1237845000,23,3,ff240076 +1237855000,23,4,fff1fe4c +1237865000,23,5,ff2a007d +1237875000,23,6,020c0175 +1237885000,23,7,fd0bfef4 +1237895000,23,8,02f9018b +1237905000,23,9,fe78fd39 +1237915000,23,10,00b6029b +1237925000,23,11,ffe3fe3f +1237935000,23,12,007e014b +1237945000,23,13,febefe75 +1237955000,23,14,00b802ca +1237965000,23,15,fff0fdd3 +1237975000,23,16,ff9bfff5 +1237985000,23,17,ffa90194 +1237995000,23,18,0187ff5a +1238005000,23,19,0008ff5a +1238015000,23,20,fe97005e +1238025000,23,21,0320ffed +1238035000,23,22,fc5000ef +1238045000,23,23,02adfe58 +1238055000,23,24,febd000b +1238065000,23,25,01f600d9 +1238075000,23,26,fd36ffa1 +1238085000,23,27,00b9fea1 +1238095000,23,28,004e0193 +1238105000,23,29,ff48fee9 +1238115000,23,30,012800e6 +1238125000,23,31,fe18fef1 +1243195000,24,0,fdf7fdff +1243205000,24,1,018b0089 +1243215000,24,2,ffcaff5f +1243225000,24,3,feb400de +1243235000,24,4,006fffc6 +1243245000,24,5,0036ffd0 +1243255000,24,6,ffdd0062 +1243265000,24,7,ff8c009a +1243275000,24,8,013bfeac +1243285000,24,9,ff130207 +1243295000,24,10,01b8fec8 +1243305000,24,11,fd890040 +1243315000,24,12,0281ffcf +1243325000,24,13,fe3b015c +1243335000,24,14,ffbafd68 +1243345000,24,15,017401a3 +1243355000,24,16,ff410027 +1243365000,24,17,0227ffbd +1243375000,24,18,fcecff39 +1243385000,24,19,02000030 +1243395000,24,20,fecd000e +1243405000,24,21,01da0090 +1243415000,24,22,fd93ff26 +1243425000,24,23,01320074 +1243435000,24,24,ff7500b2 +1243445000,24,25,018ffe87 +1243455000,24,26,fcee00fc +1243465000,24,27,0313ffd6 +1243475000,24,28,feebfe99 +1243485000,24,29,004901f0 +1243495000,24,30,ff1afe14 +1243505000,24,31,0166028b +1248575000,25,0,ff3dfe52 +1248585000,25,1,00cbffa8 +1248595000,25,2,002600b5 +1248605000,25,3,feff0036 +1248615000,25,4,013aff1b +1248625000,25,5,fea4ff5e +1248635000,25,6,ffe60132 +1248645000,25,7,0069ffff +1248655000,25,8,007effd5 +1248665000,25,9,fdfdff68 +1248675000,25,10,02c700d3 +1248685000,25,11,fd56fe9d +1248695000,25,12,0317018e +1248705000,25,13,fd1bffab +1248715000,25,14,0153fffe +1248725000,25,15,ff57ff8a +1248735000,25,16,00390104 +1248745000,25,17,0011fea6 +1248755000,25,18,ffdc01d3 +1248765000,25,19,ffcffde6 +1248775000,25,20,00fc012f +1248785000,25,21,fe90ffda +1248795000,25,22,00680060 +1248805000,25,23,0007ff1b +1248815000,25,24,009802a9 +1248825000,25,25,0027fd7e +1248835000,25,26,ffcf0171 +1248845000,25,27,ffc8ffd3 +1248855000,25,28,00afff94 +1248865000,25,29,ff510009 +1248875000,25,30,00dffe64 +1248885000,25,31,000d02b0 +1253955000,26,0,00d6fff8 +1253965000,26,1,ff8a006a +1253975000,26,2,00db0069 +1253985000,26,3,ff72ffcd +1253995000,26,4,ff68ffc3 +1254005000,26,5,007100d7 +1254015000,26,6,01a1fed6 +1254025000,26,7,fc6300d2 +1254035000,26,8,02d5fed1 +1254045000,26,9,ffe600e2 +1254055000,26,10,ff2fff93 +1254065000,26,11,ff7e0090 +1254075000,26,12,017900dd +1254085000,26,13,ffdffe04 +1254095000,26,14,003a0193 +1254105000,26,15,ffadfe39 +1254115000,26,16,ffd80162 +1254125000,26,17,ff32ff12 +1254135000,26,18,010fffcd +1254145000,26,19,fe76ff83 +1254155000,26,20,01580285 +1254165000,26,21,feb7fc75 +1254175000,26,22,01710278 +1254185000,26,23,ff150006 +1254195000,26,24,0091ffa1 +1254205000,26,25,ff86000a +1254215000,26,26,ff13ffaf +1254225000,26,27,016200a0 +1254235000,26,28,ff63000f +1254245000,26,29,0029fff8 +1254255000,26,30,00a8ffe7 +1254265000,26,31,feebff7f +1259335000,27,0,ff1f0090 +1259345000,27,1,0008ff28 +1259355000,27,2,006700e1 +1259365000,27,3,fff4fe2d +1259375000,27,4,fe8f019f +1259385000,27,5,0161ff6a +1259395000,27,6,fecf0203 +1259405000,27,7,fffafd25 +1259415000,27,8,014a023f +1259425000,27,9,ffb8ffc2 +1259435000,27,10,ff93fe87 +1259445000,27,11,ffbc01d3 +1259455000,27,12,0279fe2c +1259465000,27,13,fe610272 +1259475000,27,14,fec9fe53 +1259485000,27,15,026600de +1259495000,27,16,fdf5fd80 +1259505000,27,17,01d403a2 +1259515000,27,18,feadfc97 +1259525000,27,19,019802a9 +1259535000,27,20,fd7dfd37 +1259545000,27,21,025901c8 +1259555000,27,22,fe45ff2b +1259565000,27,23,015a00cf +1259575000,27,24,ffdaff11 +1259585000,27,25,fed80074 +1259595000,27,26,00410005 +1259605000,27,27,0090006f +1259615000,27,28,fe53fefe +1259625000,27,29,01390154 +1259635000,27,30,004bff2b +1259645000,27,31,008e000e +1264715000,28,0,fe64fffa +1264725000,28,1,01d9ffba +1264735000,28,2,fe650009 +1264745000,28,3,00a200c7 +1264755000,28,4,ff26fe7a +1264765000,28,5,01500172 +1264775000,28,6,fec1ff4a +1264785000,28,7,01afff10 +1264795000,28,8,fd150287 +1264805000,28,9,0290fe78 +1264815000,28,10,fe8500ac +1264825000,28,11,011cff7b +1264835000,28,12,fff601a0 +1264845000,28,13,ff91ffa0 +1264855000,28,14,ffa1fde3 +1264865000,28,15,01bd0283 +1264875000,28,16,fedefe00 +1264885000,28,17,ff8100f2 +1264895000,28,18,0161ff5d +1264905000,28,19,ffec010d +1264915000,28,20,ff92fee8 +1264925000,28,21,00680174 +1264935000,28,22,ff3ffdac +1264945000,28,23,013f016e +1264955000,28,24,fe6dfed7 +1264965000,28,25,003e0178 +1264975000,28,26,00a1ff0e +1264985000,28,27,fefa0009 +1264995000,28,28,0106ffae +1265005000,28,29,ff2f0136 +1265015000,28,30,016bfeef +1265025000,28,31,ffa1005f +1270095000,29,0,0123ffed +1270105000,29,1,febbfefd +1270115000,29,2,011a00a3 +1270125000,29,3,fe1b0117 +1270135000,29,4,0089fec9 +1270145000,29,5,000e0013 +1270155000,29,6,00ce010a +1270165000,29,7,fd7dfe10 +1270175000,29,8,039102f4 +1270185000,29,9,fd62fde2 +1270195000,29,10,00fd0254 +1270205000,29,11,ff5efdd6 +1270215000,29,12,016e0111 +1270225000,29,13,fe820010 +1270235000,29,14,01290045 +1270245000,29,15,ff7efe68 +1270255000,29,16,001700bf +1270265000,29,17,ffe3011f +1270275000,29,18,0048fe53 +1270285000,29,19,ff91011b +1270295000,29,20,ffc5006b +1270305000,29,21,02a0ff11 +1270315000,29,22,fce000f4 +1270325000,29,23,01b9ff54 +1270335000,29,24,fee5ffec +1270345000,29,25,011400b2 +1270355000,29,26,ffcdfe72 +1270365000,29,27,ff9a0148 +1270375000,29,28,008cffb7 +1270385000,29,29,000cff7c +1270395000,29,30,00f500b9 +1270405000,29,31,fe68ff44 +1275475000,30,0,01a40058 +1275485000,30,1,ff72000f +1275495000,30,2,00b4ff3c +1275505000,30,3,fe0400dc +1275515000,30,4,0157fef7 +1275525000,30,5,ff310165 +1275535000,30,6,0082ff42 +1275545000,30,7,fd26fe7a +1275555000,30,8,03bc0372 +1275565000,30,9,fe74fcf9 +1275575000,30,10,0063025a +1275585000,30,11,fe8eff46 +1275595000,30,12,0260ffd4 +1275605000,30,13,feecff5d +1275615000,30,14,ffba01fb +1275625000,30,15,ffddfeeb +1275635000,30,16,00ac0044 +1275645000,30,17,004affeb +1275655000,30,18,ff6e0048 +1275665000,30,19,00fafece +1275675000,30,20,fe8301ab +1275685000,30,21,029bfd4f +1275695000,30,22,fcdc0230 +1275705000,30,23,0364fec6 +1275715000,30,24,fd0001ba +1275725000,30,25,00ccfe61 +1275735000,30,26,00970046 +1275745000,30,27,ff900028 +1275755000,30,28,ffda006a +1275765000,30,29,002cfee3 +1275775000,30,30,00ac01a7 +1275785000,30,31,fe9dfe95 +1280855000,31,0,01c1ff0c +1280865000,31,1,feb0ff8f +1280875000,31,2,001d0240 +1280885000,31,3,00a8feb3 +1280895000,31,4,fea10020 +1280905000,31,5,fff1ff4a +1280915000,31,6,010f02d8 +1280925000,31,7,fdbcfb56 +1280935000,31,8,022d0482 +1280945000,31,9,fed1fd42 +1280955000,31,10,0096018b +1280965000,31,11,ffe70026 +1280975000,31,12,0066ff6e +1280985000,31,13,000500a5 +1280995000,31,14,ffcbffc7 +1281005000,31,15,ffef0014 +1281015000,31,16,0097fe42 +1281025000,31,17,ff140321 +1281035000,31,18,ffddfdf6 +1281045000,31,19,00680093 +1281055000,31,20,0015ff56 +1281065000,31,21,01bd00ec +1281075000,31,22,fdfbff10 +1281085000,31,23,00700166 +1281095000,31,24,019ffedc +1281105000,31,25,fd530036 +1281115000,31,26,01e4ffa7 +1281125000,31,27,feb10150 +1281135000,31,28,0138fec8 +1281145000,31,29,fe9dff75 +1281155000,31,30,02af01c1 +1281165000,31,31,fd95fecc +1286235000,32,0,00b200a5 +1286245000,32,1,002efe31 +1286255000,32,2,ff2e016f +1286265000,32,3,ff22ff44 +1286275000,32,4,01d40095 +1286285000,32,5,fe0cfe66 +1286295000,32,6,01d302c3 +1286305000,32,7,fc9dfe90 +1286315000,32,8,037efff7 +1286325000,32,9,fe75ff30 +1286335000,32,10,00bd0206 +1286345000,32,11,fd2bfea1 +1286355000,32,12,04b10138 +1286365000,32,13,fd93ff4f +1286375000,32,14,002a00b6 +1286385000,32,15,0001000f +1286395000,32,16,ff3afef9 +1286405000,32,17,01780029 +1286415000,32,18,ffc4010f +1286425000,32,19,000cfed8 +1286435000,32,20,004a012b +1286445000,32,21,febefdc8 +1286455000,32,22,016f0173 +1286465000,32,23,ff3b0034 +1286475000,32,24,00caff23 +1286485000,32,25,ff7100f2 +1286495000,32,26,ff31ff64 +1286505000,32,27,002f009f +1286515000,32,28,00b5ffa8 +1286525000,32,29,ff9f011f +1286535000,32,30,01dcfd64 +1286545000,32,31,fe370129 +1291615000,33,0,00bcfd3c +1291625000,33,1,fe680104 +1291635000,33,2,00cdffe2 +1291645000,33,3,006cff33 +1291655000,33,4,fede012f +1291665000,33,5,00d4fdd8 +1291675000,33,6,001802e0 +1291685000,33,7,ff52fd8a +1291695000,33,8,00b301ad +1291705000,33,9,fe7bff88 +1291715000,33,10,00b20107 +1291725000,33,11,ff14fde7 +1291735000,33,12,02c20328 +1291745000,33,13,fdbefe48 +1291755000,33,14,00b10080 +1291765000,33,15,ffb8feb8 +1291775000,33,16,004201a8 +1291785000,33,17,0204feb6 +1291795000,33,18,fccd0058 +1291805000,33,19,02d6007d +1291815000,33,20,ff140091 +1291825000,33,21,fec4fe4a +1291835000,33,22,017001f6 +1291845000,33,23,feecfdfa +1291855000,33,24,019f007b +1291865000,33,25,ff1d0022 +1291875000,33,26,ff38ffb3 +1291885000,33,27,006200dd +1291895000,33,28,00c4ff54 +1291905000,33,29,ff1e0032 +1291915000,33,30,014bfefe +1291925000,33,31,ff0a02c0 +1296995000,34,0,0067009f +1297005000,34,1,ffbffeec +1297015000,34,2,0056004a +1297025000,34,3,007d006e +1297035000,34,4,fceaff41 +1297045000,34,5,02c40022 +1297055000,34,6,feb4017a +1297065000,34,7,fecdfe25 +1297075000,34,8,01c60272 +1297085000,34,9,0005fe07 +1297095000,34,10,fe7f0197 +1297105000,34,11,01e5fe9d +1297115000,34,12,ff7b0036 +1297125000,34,13,00720188 +1297135000,34,14,febeff52 +1297145000,34,15,0154ffcd +1297155000,34,16,fed5ff07 +1297165000,34,17,00f90338 +1297175000,34,18,002afc10 +1297185000,34,19,006f0252 +1297195000,34,20,fe16fe91 +1297205000,34,21,023e00f4 +1297215000,34,22,fe9aff94 +1297225000,34,23,00e90045 +1297235000,34,24,ff36fef4 +1297245000,34,25,01b70269 +1297255000,34,26,fea9fccf +1297265000,34,27,ff5b0277 +1297275000,34,28,002dfef4 +1297285000,34,29,0090ff6e +1297295000,34,30,00bc0108 +1297305000,34,31,ff02ff25 +1302375000,35,0,0044ffec +1302385000,35,1,001fff7a +1302395000,35,2,006e0103 +1302405000,35,3,fed1ff70 +1302415000,35,4,00ae00b5 +1302425000,35,5,fdf4fef3 +1302435000,35,6,0295016d +1302445000,35,7,fc90fddb +1302455000,35,8,03fd03bb +1302465000,35,9,fe26fde7 +1302475000,35,10,00920060 +1302485000,35,11,ff4bffc8 +1302495000,35,12,021a006e +1302505000,35,13,fe2bff90 +1302515000,35,14,004d0016 +1302525000,35,15,008700f9 +1302535000,35,16,fffcfe56 +1302545000,35,17,fff30132 +1302555000,35,18,ff0cffc3 +1302565000,35,19,01c1fe8e +1302575000,35,20,ff200151 +1302585000,35,21,00ecff8d +1302595000,35,22,fe67ffef +1302605000,35,23,00be00c9 +1302615000,35,24,009ffef7 +1302625000,35,25,ff8400bd +1302635000,35,26,ff44feb6 +1302645000,35,27,00f3014a +1302655000,35,28,ff6cff30 +1302665000,35,29,ff01ffd8 +1302675000,35,30,0297015a +1302685000,35,31,fe33fedb +1307755000,36,0,0080ff36 +1307765000,36,1,ffdd000a +1307775000,36,2,ffcb0015 +1307785000,36,3,00970054 +1307795000,36,4,ffb5ff06 +1307805000,36,5,0058ff99 +1307815000,36,6,feb801e0 +1307825000,36,7,00f6fd41 +1307835000,36,8,fe3801f5 +1307845000,36,9,02c4ff5c +1307855000,36,10,fe9400bc +1307865000,36,11,fefbfed4 +1307875000,36,12,023cff99 +1307885000,36,13,fea90271 +1307895000,36,14,0060fdc3 +1307905000,36,15,ff4b01be +1307915000,36,16,ffc6fe8a +1307925000,36,17,01a100fc +1307935000,36,18,fe29fe0f +1307945000,36,19,0181026a +1307955000,36,20,fe8bfe02 +1307965000,36,21,00e401b5 +1307975000,36,22,fee8fdca +1307985000,36,23,00b00313 +1307995000,36,24,0036fed7 +1308005000,36,25,fffaffba +1308015000,36,26,00180128 +1308025000,36,27,ff9dfeb2 +1308035000,36,28,006000b3 +1308045000,36,29,ff4ffffd +1308055000,36,30,0160ff0b +1308065000,36,31,ff5f0172 +1313135000,37,0,0185004c +1313145000,37,1,ff30ff87 +1313155000,37,2,0111ff4c +1313165000,37,3,ff900247 +1313175000,37,4,ffdbfd7a +1313185000,37,5,ffa30207 +1313195000,37,6,0087ffa2 +1313205000,37,7,fdd8fe2a +1313215000,37,8,030102cc +1313225000,37,9,ff00fe00 +1313235000,37,10,00500127 +1313245000,37,11,fefeffd4 +1313255000,37,12,019d0013 +1313265000,37,13,ff1eff1f +1313275000,37,14,008a0140 +1313285000,37,15,fe91fef5 +1313295000,37,16,01930150 +1313305000,37,17,ffccfead +1313315000,37,18,004500e2 +1313325000,37,19,ff9eff09 +1313335000,37,20,ffcf006a +1313345000,37,21,0139fe17 +1313355000,37,22,fd8b0254 +1313365000,37,23,029afec4 +1313375000,37,24,fe730100 +1313385000,37,25,ff78ff24 +1313395000,37,26,008e009f +1313405000,37,27,0038ff48 +1313415000,37,28,ff150161 +1313425000,37,29,009afe7b +1313435000,37,30,01980086 +1313445000,37,31,fd410031 +1318515000,38,0,011ffee6 +1318525000,38,1,ff7a0003 +1318535000,38,2,01050118 +1318545000,38,3,fefeffc3 +1318555000,38,4,00dffef3 +1318565000,38,5,fdfd0196 +1318575000,38,6,0319fee5 +1318585000,38,7,fba9ffb7 +1318595000,38,8,041102c5 +1318605000,38,9,fdedfdaf +1318615000,38,10,01b601b1 +1318625000,38,11,fdebfec1 +1318635000,38,12,021a001e +1318645000,38,13,fe7b0076 +1318655000,38,14,018eff0d +1318665000,38,15,feb30056 +1318675000,38,16,0071ff8a +1318685000,38,17,00fc017d +1318695000,38,18,ff09ff70 +1318705000,38,19,ff7cfee5 +1318715000,38,20,0103012b +1318725000,38,21,00ebff28 +1318735000,38,22,fd0fffcb +1318745000,38,23,027300db +1318755000,38,24,fe37ff97 +1318765000,38,25,015dffc1 +1318775000,38,26,ff240003 +1318785000,38,27,003f004b +1318795000,38,28,00d40040 +1318805000,38,29,fec5ffa4 +1318815000,38,30,028a006f +1318825000,38,31,fcd5ffec +1323895000,39,0,017d00c5 +1323905000,39,1,ffcaffd3 +1323915000,39,2,00a5ffdb +1323925000,39,3,fea80039 +1323935000,39,4,01a3ff24 +1323945000,39,5,fd35016c +1323955000,39,6,01a7ffb1 +1323965000,39,7,fde7feea +1323975000,39,8,031d0279 +1323985000,39,9,fe64fd44 +1323995000,39,10,018702ae +1324005000,39,11,fe5efdfd +1324015000,39,12,01de00cb +1324025000,39,13,fd7e0034 +1324035000,39,14,029cffb3 +1324045000,39,15,fe9c0148 +1324055000,39,16,ff57fdb3 +1324065000,39,17,019801e5 +1324075000,39,18,00650025 +1324085000,39,19,ff46fe45 +1324095000,39,20,febdffdc +1324105000,39,21,02d10018 +1324115000,39,22,fe07006b +1324125000,39,23,00ef0098 +1324135000,39,24,fea3ff13 +1324145000,39,25,015a0070 +1324155000,39,26,feb70036 +1324165000,39,27,fffcff11 +1324175000,39,28,008e0079 +1324185000,39,29,fefc00c4 +1324195000,39,30,02ceff65 +1324205000,39,31,fce6ff62 +1329275000,40,0,00b10126 +1329285000,40,1,ffdbff60 +1329295000,40,2,fff10085 +1329305000,40,3,fed5ff86 +1329315000,40,4,0199ff62 +1329325000,40,5,ff260184 +1329335000,40,6,0043ff45 +1329345000,40,7,ff890192 +1329355000,40,8,0168feea +1329365000,40,9,fe60002b +1329375000,40,10,01f70115 +1329385000,40,11,fe6cfde0 +1329395000,40,12,01c60234 +1329405000,40,13,fe00fdbe +1329415000,40,14,01eb005f +1329425000,40,15,fecb01b3 +1329435000,40,16,0081fef0 +1329445000,40,17,000dff82 +1329455000,40,18,0105ffdd +1329465000,40,19,fecd0038 +1329475000,40,20,00dd00ea +1329485000,40,21,fe7cfe60 +1329495000,40,22,00590107 +1329505000,40,23,00b3ff44 +1329515000,40,24,fec600c8 +1329525000,40,25,0270fe37 +1329535000,40,26,fc7b0205 +1329545000,40,27,02f2ffa2 +1329555000,40,28,ff8cffe0 +1329565000,40,29,fe2efeaa +1329575000,40,30,02790201 +1329585000,40,31,fde1fe57 +1334655000,41,0,003dffa6 +1334665000,41,1,003bff88 +1334675000,41,2,00edffbe +1334685000,41,3,fe2e0020 +1334695000,41,4,0219ff31 +1334705000,41,5,fe2f00a1 +1334715000,41,6,012fffd8 +1334725000,41,7,fe49ffc7 +1334735000,41,8,022d014f +1334745000,41,9,fe59fe77 +1334755000,41,10,0193012a +1334765000,41,11,fd29fe36 +1334775000,41,12,03750254 +1334785000,41,13,fd4ffe90 +1334795000,41,14,005c0066 +1334805000,41,15,00a4fff4 +1334815000,41,16,ff3f002e +1334825000,41,17,01c3ff74 +1334835000,41,18,fecd014a +1334845000,41,19,003efe1a +1334855000,41,20,000301e3 +1334865000,41,21,ffe7fe5f +1334875000,41,22,fefd017e +1334885000,41,23,0107ff47 +1334895000,41,24,ff6b0089 +1334905000,41,25,00d5febd +1334915000,41,26,ff83019a +1334925000,41,27,00130004 +1334935000,41,28,001bfef4 +1334945000,41,29,ff2700f0 +1334955000,41,30,0368fea0 +1334965000,41,31,fd2c01aa +1340035000,42,0,00fb01d8 +1340045000,42,1,0070feaf +1340055000,42,2,ffa200d5 +1340065000,42,3,fef4fde5 +1340075000,42,4,01c40287 +1340085000,42,5,fe7bfdc6 +1340095000,42,6,00e70181 +1340105000,42,7,fd3bff23 +1340115000,42,8,04290096 +1340125000,42,9,fcfaff49 +1340135000,42,10,0184001a +1340145000,42,11,ff3eff90 +1340155000,42,12,ff4a01f8 +1340165000,42,13,0124fde0 +1340175000,42,14,ff760173 +1340185000,42,15,ff8500c6 +1340195000,42,16,0037fef8 +1340205000,42,17,00e0ff37 +1340215000,42,18,ffbe012d +1340225000,42,19,0022ffaf +1340235000,42,20,ff06ffe3 +1340245000,42,21,00edffa6 +1340255000,42,22,ffab004b +1340265000,42,23,ffdd006f +1340275000,42,24,0051ffc2 +1340285000,42,25,00da0049 +1340295000,42,26,fd6cffbc +1340305000,42,27,0260008c +1340315000,42,28,fea0ffa6 +1340325000,42,29,0058ffb4 +1340335000,42,30,02380109 +1340345000,42,31,fdb7fe30 +1345415000,43,0,009500a0 +1345425000,43,1,fff1feb5 +1345435000,43,2,006e01e8 +1345445000,43,3,fffcfd11 +1345455000,43,4,ff5501fd +1345465000,43,5,ff01feb2 +1345475000,43,6,02e401f0 +1345485000,43,7,fc88fe99 +1345495000,43,8,026802bf +1345505000,43,9,ff4afd64 +1345515000,43,10,005d0119 +1345525000,43,11,00660013 +1345535000,43,12,fec8ff48 +1345545000,43,13,0169009e +1345555000,43,14,ff28ff9c +1345565000,43,15,002500d9 +1345575000,43,16,ff9ffdec +1345585000,43,17,01a70287 +1345595000,43,18,ffceff3e +1345605000,43,19,ff9efe81 +1345615000,43,20,ffd501c3 +1345625000,43,21,0099ff30 +1345635000,43,22,feb2ff32 +1345645000,43,23,001200b7 +1345655000,43,24,01a4fef1 +1345665000,43,25,fe7200dc +1345675000,43,26,0063ff9d +1345685000,43,27,ff04009f +1345695000,43,28,018effac +1345705000,43,29,fe01ff4c +1345715000,43,30,03460176 +1345725000,43,31,fd25ff4b +1350795000,44,0,0248fc43 +1350805000,44,1,fe7f0098 +1350815000,44,2,00f80040 +1350825000,44,3,ff5affe9 +1350835000,44,4,00d20005 +1350845000,44,5,fe8fff57 +1350855000,44,6,fff3010a +1350865000,44,7,0034fecd +1350875000,44,8,0000020b +1350885000,44,9,ff6dfeba +1350895000,44,10,00df00ce +1350905000,44,11,ff95fe91 +1350915000,44,12,02290234 +1350925000,44,13,fcb2fe5c +1350935000,44,14,01a001cd +1350945000,44,15,002bfec1 +1350955000,44,16,0038011b +1350965000,44,17,0049fe88 +1350975000,44,18,fee4010e +1350985000,44,19,016afee5 +1350995000,44,20,ffba006f +1351005000,44,21,ff35fff3 +1351015000,44,22,008fffaa +1351025000,44,23,00380005 +1351035000,44,24,000800c3 +1351045000,44,25,ff1fff7a +1351055000,44,26,017500e4 +1351065000,44,27,fed7fe99 +1351075000,44,28,00430044 +1351085000,44,29,ff3e005e +1351095000,44,30,022efd17 +1351105000,44,31,fd31056d +1356175000,45,0,014701d7 +1356185000,45,1,ff33fe60 +1356195000,45,2,fedd0065 +1356205000,45,3,01d2ff7f +1356215000,45,4,fe4cffee +1356225000,45,5,0161ffe3 +1356235000,45,6,febf0089 +1356245000,45,7,ff680018 +1356255000,45,8,011600a9 +1356265000,45,9,0130fea0 +1356275000,45,10,fd28015b +1356285000,45,11,024cff34 +1356295000,45,12,ff23007b +1356305000,45,13,00adffd5 +1356315000,45,14,ff13012f +1356325000,45,15,ff92fe13 +1356335000,45,16,01d5010f +1356345000,45,17,fe43000e +1356355000,45,18,019dff71 +1356365000,45,19,fea4ffd3 +1356375000,45,20,0174014c +1356385000,45,21,feb1fe27 +1356395000,45,22,008b01bb +1356405000,45,23,ffcaffa4 +1356415000,45,24,008a001d +1356425000,45,25,ff2effb6 +1356435000,45,26,01b6005f +1356445000,45,27,fe26fe76 +1356455000,45,28,00d90267 +1356465000,45,29,0085fd1d +1356475000,45,30,00230165 +1356485000,45,31,feecff45 +1361555000,46,0,01750115 +1361565000,46,1,fd5cff36 +1361575000,46,2,03030152 +1361585000,46,3,fdf8ff20 +1361595000,46,4,0013ffc4 +1361605000,46,5,ffd4007c +1361615000,46,6,00ee005c +1361625000,46,7,fdb5fedc +1361635000,46,8,02380232 +1361645000,46,9,ff18fdac +1361655000,46,10,ffa80148 +1361665000,46,11,0161004a +1361675000,46,12,ffda003e +1361685000,46,13,ff96ffb5 +1361695000,46,14,0003ffa6 +1361705000,46,15,ffddfffb +1361715000,46,16,007fffc1 +1361725000,46,17,fe7c0126 +1361735000,46,18,01d5fe5e +1361745000,46,19,ff1e022a +1361755000,46,20,fffbfe2a +1361765000,46,21,01bc0058 +1361775000,46,22,fdec0040 +1361785000,46,23,016300b6 +1361795000,46,24,ffd0fe58 +1361805000,46,25,ff5800e4 +1361815000,46,26,00b4009c +1361825000,46,27,feb5ff84 +1361835000,46,28,019c003c +1361845000,46,29,ff1afde3 +1361855000,46,30,013f0292 +1361865000,46,31,fe87fdd3 +1366935000,47,0,ff63ff24 +1366945000,47,1,01100044 +1366955000,47,2,ffe0ffd9 +1366965000,47,3,ff1200df +1366975000,47,4,004ffeee +1366985000,47,5,0062ff40 +1366995000,47,6,fe8d014c +1367005000,47,7,00ae0039 +1367015000,47,8,0038ffc8 +1367025000,47,9,00cd0078 +1367035000,47,10,fe16006e +1367045000,47,11,01d1ff2a +1367055000,47,12,fe9bffd0 +1367065000,47,13,008dfff3 +1367075000,47,14,ffbb002a +1367085000,47,15,00550161 +1367095000,47,16,00c5fd44 +1367105000,47,17,ff10033a +1367115000,47,18,ffeefe71 +1367125000,47,19,01220049 +1367135000,47,20,feebfed6 +1367145000,47,21,018c022e +1367155000,47,22,fe39fdf0 +1367165000,47,23,00500199 +1367175000,47,24,0010fe58 +1367185000,47,25,0137018e +1367195000,47,26,fe60fe20 +1367205000,47,27,0153017a +1367215000,47,28,ff930004 +1367225000,47,29,0011fe5b +1367235000,47,30,00430312 +1367245000,47,31,ffc5fe51 +1372315000,48,0,ffd0ffe3 +1372325000,48,1,0072fede +1372335000,48,2,01de01e1 +1372345000,48,3,fcebfd60 +1372355000,48,4,018102cf +1372365000,48,5,ffddfced +1372375000,48,6,fe7f0283 +1372385000,48,7,001aff5c +1372395000,48,8,01adffc5 +1372405000,48,9,ffddff8d +1372415000,48,10,ff7c0120 +1372425000,48,11,ff62fec2 +1372435000,48,12,024800f2 +1372445000,48,13,fdcfff73 +1372455000,48,14,ff48ff04 +1372465000,48,15,01260230 +1372475000,48,16,feeafdaf +1372485000,48,17,01700248 +1372495000,48,18,fdfaffaf +1372505000,48,19,01a7ff84 +1372515000,48,20,ffb3feff +1372525000,48,21,ff8f0189 +1372535000,48,22,01370057 +1372545000,48,23,fe64ff9a +1372555000,48,24,0199009d +1372565000,48,25,ffa5feed +1372575000,48,26,ffd80124 +1372585000,48,27,ff20ff6a +1372595000,48,28,025c0054 +1372605000,48,29,fdc1fe67 +1372615000,48,30,02fe0146 +1372625000,48,31,fde8ffda +1377695000,49,0,ffb6fd4b +1377705000,49,1,fff00113 +1377715000,49,2,020800c8 +1377725000,49,3,fd70febb +1377735000,49,4,014c00c9 +1377745000,49,5,ffd1ff2a +1377755000,49,6,0100009f +1377765000,49,7,fe0fff27 +1377775000,49,8,00dd0145 +1377785000,49,9,ffb2fead +1377795000,49,10,00d90060 +1377805000,49,11,fe260037 +1377815000,49,12,039a00d8 +1377825000,49,13,fd3cff22 +1377835000,49,14,00d8ffee +1377845000,49,15,ffe00028 +1377855000,49,16,ff62ffd3 +1377865000,49,17,0184001f +1377875000,49,18,fea0ff84 +1377885000,49,19,003e003b +1377895000,49,20,005cff01 +1377905000,49,21,ffe901d0 +1377915000,49,22,ff34fe4f +1377925000,49,23,007d0119 +1377935000,49,24,004fff35 +1377945000,49,25,fee200d9 +1377955000,49,26,00ff0018 +1377965000,49,27,feec007f +1377975000,49,28,00eaff1e +1377985000,49,29,ff8a0144 +1377995000,49,30,00f4fc98 +1378005000,49,31,ff5c0444 +1383075000,50,0,ff81ff12 +1383085000,50,1,ffed0045 +1383095000,50,2,00be0005 +1383105000,50,3,fed8ff8b +1383115000,50,4,ffd0ff68 +1383125000,50,5,008b00e3 +1383135000,50,6,00bd0014 +1383145000,50,7,fe39ff85 +1383155000,50,8,00d5024a +1383165000,50,9,0029fd42 +1383175000,50,10,ffc302f8 +1383185000,50,11,0080fc89 +1383195000,50,12,ffd1029e +1383205000,50,13,ff1cfef8 +1383215000,50,14,010a0091 +1383225000,50,15,ffebfef6 +1383235000,50,16,000901e8 +1383245000,50,17,0007feed +1383255000,50,18,013efff5 +1383265000,50,19,fee0ff25 +1383275000,50,20,007c01f4 +1383285000,50,21,00cffe43 +1383295000,50,22,fd6bffca +1383305000,50,23,01eb0005 +1383315000,50,24,fef5004c +1383325000,50,25,0043fff8 +1383335000,50,26,00c10042 +1383345000,50,27,fec8ff77 +1383355000,50,28,01d70096 +1383365000,50,29,fd72ffde +1383375000,50,30,0176ff9d +1383385000,50,31,00390108 +1388455000,51,0,0062fed1 +1388465000,51,1,fe72006a +1388475000,51,2,022dfe39 +1388485000,51,3,fe1101bb +1388495000,51,4,0013fe61 +1388505000,51,5,ffea0066 +1388515000,51,6,00a400de +1388525000,51,7,fe8aff92 +1388535000,51,8,01b30176 +1388545000,51,9,ff52fe3f +1388555000,51,10,ff880121 +1388565000,51,11,001fff88 +1388575000,51,12,012700a2 +1388585000,51,13,fe8b001f +1388595000,51,14,00a3006a +1388605000,51,15,ffbbfe16 +1388615000,51,16,0188015f +1388625000,51,17,fe0800a6 +1388635000,51,18,022dfe6f +1388645000,51,19,ff7900e1 +1388655000,51,20,fec7ff7d +1388665000,51,21,01d600fc +1388675000,51,22,fe1efe92 +1388685000,51,23,013c0136 +1388695000,51,24,ff8bff06 +1388705000,51,25,fff800a9 +1388715000,51,26,00fafe7b +1388725000,51,27,fe530174 +1388735000,51,28,00afffac +1388745000,51,29,00510037 +1388755000,51,30,fff7fe6a +1388765000,51,31,0013027a +1393835000,52,0,0126fea7 +1393845000,52,1,0064ffbc +1393855000,52,2,006b0146 +1393865000,52,3,fef6ff6a +1393875000,52,4,ff63ff97 +1393885000,52,5,ffc3ffce +1393895000,52,6,01260109 +1393905000,52,7,fe37ffce +1393915000,52,8,010eff6b +1393925000,52,9,00110087 +1393935000,52,10,00d600b1 +1393945000,52,11,fd23fe27 +1393955000,52,12,03ab0394 +1393965000,52,13,fdc8fcd5 +1393975000,52,14,0048021c +1393985000,52,15,0176fe64 +1393995000,52,16,fe9201bd +1394005000,52,17,00eefe8a +1394015000,52,18,ff3900ea +1394025000,52,19,0090fe0e +1394035000,52,20,0039013d +1394045000,52,21,ff85ffc6 +1394055000,52,22,ffd40155 +1394065000,52,23,0049fea8 +1394075000,52,24,008a0139 +1394085000,52,25,fec9fefb +1394095000,52,26,02420127 +1394105000,52,27,feb7fe09 +1394115000,52,28,00390088 +1394125000,52,29,ff74019f +1394135000,52,30,01c2fcc6 +1394145000,52,31,fd6a026e +1399215000,53,0,005a000f +1399225000,53,1,00dbfff4 +1399235000,53,2,ff12ff40 +1399245000,53,3,00db01d3 +1399255000,53,4,ffa8fe99 +1399265000,53,5,ff8effd4 +1399275000,53,6,012f002f +1399285000,53,7,fd9c0037 +1399295000,53,8,0308ff37 +1399305000,53,9,ff05003b +1399315000,53,10,ff1f0124 +1399325000,53,11,ff21fef9 +1399335000,53,12,02fb01bc +1399345000,53,13,fde3fdc7 +1399355000,53,14,0129013b +1399365000,53,15,feccff1d +1399375000,53,16,0166ff73 +1399385000,53,17,fe930108 +1399395000,53,18,00d2ffec +1399405000,53,19,ff93fee7 +1399415000,53,20,ff6c017b +1399425000,53,21,025efe44 +1399435000,53,22,fd2b01a5 +1399445000,53,23,0124ffc1 +1399455000,53,24,ff580017 +1399465000,53,25,ffcdff31 +1399475000,53,26,00590098 +1399485000,53,27,0029ff7d +1399495000,53,28,00510228 +1399505000,53,29,ff99fe29 +1399515000,53,30,01610031 +1399525000,53,31,fe54005b +1404595000,54,0,02070039 +1404605000,54,1,fef8ffd8 +1404615000,54,2,0014ff24 +1404625000,54,3,00380202 +1404635000,54,4,00ebfeb0 +1404645000,54,5,fdecff99 +1404655000,54,6,013e0147 +1404665000,54,7,fe57febd +1404675000,54,8,024e0081 +1404685000,54,9,ffa5ff75 +1404695000,54,10,fea901c0 +1404705000,54,11,0091fd45 +1404715000,54,12,0136033e +1404725000,54,13,ff64fcf5 +1404735000,54,14,ff96021c +1404745000,54,15,ffa9fed2 +1404755000,54,16,01a1005b +1404765000,54,17,fe2affd0 +1404775000,54,18,00600108 +1404785000,54,19,00d6fe32 +1404795000,54,20,ff1500ee +1404805000,54,21,0182fe51 +1404815000,54,22,fe2401d7 +1404825000,54,23,00c5ff5f +1404835000,54,24,ff8e004f +1404845000,54,25,ff45004f +1404855000,54,26,0133ffc8 +1404865000,54,27,fed9ff6f +1404875000,54,28,01c60248 +1404885000,54,29,fe1afe2d +1404895000,54,30,01d8000a +1404905000,54,31,fe2b0032 +1409975000,55,0,00f1ffe2 +1409985000,55,1,ff7e023f +1409995000,55,2,ff77fd78 +1410005000,55,3,fff7012d +1410015000,55,4,0069fe9c +1410025000,55,5,ffbc01ee +1410035000,55,6,014efe23 +1410045000,55,7,fd2801cc +1410055000,55,8,01fbff4c +1410065000,55,9,0086ffc9 +1410075000,55,10,fec10057 +1410085000,55,11,ffde0062 +1410095000,55,12,00e300b9 +1410105000,55,13,0003fe6f +1410115000,55,14,ffa200f8 +1410125000,55,15,004b004d +1410135000,55,16,ffa1fd8a +1410145000,55,17,006a02af +1410155000,55,18,0035feac +1410165000,55,19,011b00ef +1410175000,55,20,fd6bffa6 +1410185000,55,21,03bcff88 +1410195000,55,22,fbfcffa1 +1410205000,55,23,030e00f4 +1410215000,55,24,fd43fe1c +1410225000,55,25,025a0195 +1410235000,55,26,fdc3ff65 +1410245000,55,27,00bcffd6 +1410255000,55,28,00310011 +1410265000,55,29,001d013f +1410275000,55,30,007cffa4 +1410285000,55,31,ff23ff0f +1415355000,56,0,ff1eff9b +1415365000,56,1,00deff7f +1415375000,56,2,005400fe +1415385000,56,3,fdd9feb7 +1415395000,56,4,02470113 +1415405000,56,5,febffeb2 +1415415000,56,6,00430121 +1415425000,56,7,ffc20119 +1415435000,56,8,022ffddc +1415445000,56,9,fdaa016c +1415455000,56,10,01aeff2f +1415465000,56,11,fe3effce +1415475000,56,12,0325005e +1415485000,56,13,fc7b0006 +1415495000,56,14,00dcff51 +1415505000,56,15,004e0054 +1415515000,56,16,0008ff63 +1415525000,56,17,ffbc009d +1415535000,56,18,003c009c +1415545000,56,19,001ffedf +1415555000,56,20,ffd90097 +1415565000,56,21,ff47ff52 +1415575000,56,22,0085019b +1415585000,56,23,ff22febb +1415595000,56,24,00df015e +1415605000,56,25,007cfe14 +1415615000,56,26,fec20277 +1415625000,56,27,00a2fe80 +1415635000,56,28,004fffb8 +1415645000,56,29,ffef009a +1415655000,56,30,0064ffbb +1415665000,56,31,fff600b4 +1420735000,57,0,ff75fe7e +1420745000,57,1,00b50012 +1420755000,57,2,00a3013c +1420765000,57,3,fe45fdfe +1420775000,57,4,01a8008e +1420785000,57,5,fee5ffe3 +1420795000,57,6,00460048 +1420805000,57,7,feffff17 +1420815000,57,8,025000b9 +1420825000,57,9,fe04ff85 +1420835000,57,10,01aa0169 +1420845000,57,11,fd3bfd49 +1420855000,57,12,021602c0 +1420865000,57,13,feccff13 +1420875000,57,14,0066fef8 +1420885000,57,15,0028015d +1420895000,57,16,fee5002a +1420905000,57,17,01edff06 +1420915000,57,18,feeb00b2 +1420925000,57,19,0067ffca +1420935000,57,20,ffe8003c +1420945000,57,21,0011fec5 +1420955000,57,22,ff420180 +1420965000,57,23,00edff89 +1420975000,57,24,fec60127 +1420985000,57,25,00defe93 +1420995000,57,26,ffe8ffbd +1421005000,57,27,ff49011b +1421015000,57,28,01eaff3e +1421025000,57,29,fe0a016d +1421035000,57,30,0132fe5c +1421045000,57,31,002c01ff +1426115000,58,0,ff7600a3 +1426125000,58,1,0004ffae +1426135000,58,2,01c10065 +1426145000,58,3,fbdcfe51 +1426155000,58,4,031a01b7 +1426165000,58,5,fee2fe53 +1426175000,58,6,008f0186 +1426185000,58,7,fe36017b +1426195000,58,8,024efde3 +1426205000,58,9,ffa600f5 +1426215000,58,10,004e00e6 +1426225000,58,11,fec0fe3d +1426235000,58,12,01c30109 +1426245000,58,13,ff02ff4b +1426255000,58,14,ffe500cf +1426265000,58,15,009dfe47 +1426275000,58,16,fe940197 +1426285000,58,17,01bafef2 +1426295000,58,18,ffa70127 +1426305000,58,19,0100fe83 +1426315000,58,20,fe080137 +1426325000,58,21,0084ff31 +1426335000,58,22,00590006 +1426345000,58,23,ff30ffdb +1426355000,58,24,ff8c0173 +1426365000,58,25,0240fe73 +1426375000,58,26,fdde00ca +1426385000,58,27,00d4ff67 +1426395000,58,28,001f0089 +1426405000,58,29,0044fff1 +1426415000,58,30,00070009 +1426425000,58,31,ffedff73 +1431495000,59,0,ffc9fea3 +1431505000,59,1,00d0ffe7 +1431515000,59,2,009f00ec +1431525000,59,3,fd51fef3 +1431535000,59,4,026e001a +1431545000,59,5,fdb30074 +1431555000,59,6,024affc5 +1431565000,59,7,fc63fffe +1431575000,59,8,03d60113 +1431585000,59,9,fd30fe5a +1431595000,59,10,019400db +1431605000,59,11,fe9a0011 +1431615000,59,12,02cbffd6 +1431625000,59,13,fd20016b +1431635000,59,14,0152fe94 +1431645000,59,15,ff840124 +1431655000,59,16,ffdffe97 +1431665000,59,17,012c0225 +1431675000,59,18,ff6ffef4 +1431685000,59,19,006bfec9 +1431695000,59,20,ff7e00a6 +1431705000,59,21,011f007c +1431715000,59,22,fe00ff2f +1431725000,59,23,01f1002c +1431735000,59,24,fe820037 +1431745000,59,25,0154011e +1431755000,59,26,ffd6fe65 +1431765000,59,27,fe4a0123 +1431775000,59,28,0181ffb6 +1431785000,59,29,000eff69 +1431795000,59,30,0074ff68 +1431805000,59,31,ff48019a +1436875000,60,0,ff75fe3f +1436885000,60,1,fef20053 +1436895000,60,2,02e8ff96 +1436905000,60,3,fe4f0010 +1436915000,60,4,0056ff63 +1436925000,60,5,ffa4004a +1436935000,60,6,fff80004 +1436945000,60,7,00a3ff5e +1436955000,60,8,feca0115 +1436965000,60,9,004fff06 +1436975000,60,10,00cc01a5 +1436985000,60,11,fe12fd0f +1436995000,60,12,01df037a +1437005000,60,13,fe6bfe0b +1437015000,60,14,011d007d +1437025000,60,15,ff3cfe89 +1437035000,60,16,010f02b7 +1437045000,60,17,ff74fdc1 +1437055000,60,18,0034013a +1437065000,60,19,ff790006 +1437075000,60,20,0078fee7 +1437085000,60,21,feae0124 +1437095000,60,22,00c0ffbe +1437105000,60,23,00510018 +1437115000,60,24,ff5e0099 +1437125000,60,25,009bff8a +1437135000,60,26,0064ffdb +1437145000,60,27,ff420047 +1437155000,60,28,011fffc0 +1437165000,60,29,fefb00f3 +1437175000,60,30,00d7fe69 +1437185000,60,31,003c0265 +1442255000,61,0,0236fc29 +1442265000,61,1,ff1b02df +1442275000,61,2,006bfe33 +1442285000,61,3,ff180152 +1442295000,61,4,005efe9b +1442305000,61,5,00810130 +1442315000,61,6,fe58fe29 +1442325000,61,7,003f0180 +1442335000,61,8,019affeb +1442345000,61,9,fe900088 +1442355000,61,10,00020111 +1442365000,61,11,010cfde8 +1442375000,61,12,ff360215 +1442385000,61,13,ffe9fe65 +1442395000,61,14,00a3010f +1442405000,61,15,ff9aff4f +1442415000,61,16,007c002d +1442425000,61,17,00af00ed +1442435000,61,18,fef9feb5 +1442445000,61,19,00c8009a +1442455000,61,20,ffceff53 +1442465000,61,21,011500ea +1442475000,61,22,ff02ff21 +1442485000,61,23,ffbbfff0 +1442495000,61,24,ff04007b +1442505000,61,25,023efffc +1442515000,61,26,fe5efe0b +1442525000,61,27,001402a4 +1442535000,61,28,0136fe29 +1442545000,61,29,fe9900a9 +1442555000,61,30,0197ff8b +1442565000,61,31,fd7c0281 +1447635000,62,0,0220ff41 +1447645000,62,1,feaf0039 +1447655000,62,2,00a70067 +1447665000,62,3,fec3000c +1447675000,62,4,0060feb9 +1447685000,62,5,ff9500fd +1447695000,62,6,012800d2 +1447705000,62,7,fc90fe3b +1447715000,62,8,045302bf +1447725000,62,9,fee1fe5a +1447735000,62,10,ffc0017c +1447745000,62,11,ff7aff47 +1447755000,62,12,0100ffcb +1447765000,62,13,ff48fe7d +1447775000,62,14,00760299 +1447785000,62,15,ff31fea0 +1447795000,62,16,0166ffab +1447805000,62,17,fead0097 +1447815000,62,18,00a10013 +1447825000,62,19,0093ff64 +1447835000,62,20,ff140179 +1447845000,62,21,01c9fe43 +1447855000,62,22,fd4c0178 +1447865000,62,23,0252fee7 +1447875000,62,24,ff4b0139 +1447885000,62,25,fefffe92 +1447895000,62,26,0134005a +1447905000,62,27,0008ff65 +1447915000,62,28,00200107 +1447925000,62,29,fef6fea7 +1447935000,62,30,021201a5 +1447945000,62,31,fd4dff42 +1453015000,63,0,01290176 +1453025000,63,1,ff63fd99 +1453035000,63,2,016c01c0 +1453045000,63,3,fe370021 +1453055000,63,4,0155ff40 +1453065000,63,5,fe580141 +1453075000,63,6,016dfe39 +1453085000,63,7,fe90038d +1453095000,63,8,018efc84 +1453105000,63,9,fe8c00e7 +1453115000,63,10,0205020a +1453125000,63,11,fe96fdf7 +1453135000,63,12,00d90038 +1453145000,63,13,feb00016 +1453155000,63,14,01680018 +1453165000,63,15,fefafef8 +1453175000,63,16,003701ae +1453185000,63,17,0057fe35 +1453195000,63,18,ff6a0044 +1453205000,63,19,00a500e9 +1453215000,63,20,ff4dff40 +1453225000,63,21,00a6019f +1453235000,63,22,ffedff17 +1453245000,63,23,febcff5b +1453255000,63,24,029601cc +1453265000,63,25,fe3efe47 +1453275000,63,26,00f10082 +1453285000,63,27,fe82ffd7 +1453295000,63,28,00d1009c +1453305000,63,29,ff6efebe +1453315000,63,30,024202e0 +1453325000,63,31,fd86fcf8 diff --git a/9_Firmware/9_2_FPGA/tb/tb_radar_receiver_final.v b/9_Firmware/9_2_FPGA/tb/tb_radar_receiver_final.v new file mode 100644 index 0000000..2d64385 --- /dev/null +++ b/9_Firmware/9_2_FPGA/tb/tb_radar_receiver_final.v @@ -0,0 +1,444 @@ +`timescale 1ns / 1ps +// ============================================================================ +// tb_radar_receiver_final.v -- P0 Integration Test for radar_receiver_final +// +// Tests the full RX pipeline from ADC input to Doppler output: +// ad9484_interface (stub) -> CDC -> DDC -> ddc_input_interface +// -> matched_filter_multi_segment -> range_bin_decimator +// -> doppler_processor_optimized -> doppler_output +// +// Strategy: +// - Uses behavioral stub for ad9484_interface_400m (no Xilinx primitives) +// - Overrides radar_mode_controller timing params for fast simulation +// - Feeds 120 MHz tone at ADC input (IF frequency -> DDC passband) +// - Verifies structural correctness of Doppler outputs: +// * Outputs appear (doppler_valid asserted) +// * Correct output count per frame (64 range bins x 32 Doppler bins = 2048) +// * Range bin index covers 0..63 +// * Doppler bin index covers 0..31 +// * Output values are non-trivial (not all zeros) +// - Does NOT require bit-perfect match (too many cascaded stages) +// +// Convention: check task, VCD dump, CSV output, pass/fail summary +// ============================================================================ + +module tb_radar_receiver_final; + +// ============================================================================ +// CLOCK AND RESET +// ============================================================================ +reg clk_100m; // 100 MHz system clock +reg clk_400m; // 400 MHz ADC clock +reg reset_n; + +// 100 MHz: period = 10 ns +initial clk_100m = 0; +always #5 clk_100m = ~clk_100m; + +// 400 MHz: period = 2.5 ns +initial clk_400m = 0; +always #1.25 clk_400m = ~clk_400m; + +// ============================================================================ +// ADC STIMULUS +// ============================================================================ +// Feed a 120 MHz tone (IF frequency) sampled at 400 MHz +// Phase increment per sample: 120/400 * 65536 = 19660.8 +// This produces a strong DC component after DDC downconversion +reg [7:0] adc_data; +reg [15:0] phase_acc; // 16-bit phase accumulator for precision +localparam [15:0] PHASE_INC = 16'd19661; // 120/400 * 65536 + +always @(posedge clk_400m or negedge reset_n) begin + if (!reset_n) begin + phase_acc <= 16'd0; + adc_data <= 8'd128; // Mid-scale + end else begin + phase_acc <= phase_acc + PHASE_INC; + // Use phase_acc[15:8] directly as pseudo-sinusoidal data + // A sawtooth/triangle wave has energy at IF -- good enough for integration test + adc_data <= phase_acc[15:8]; + end +end + +// ============================================================================ +// CHIRP COUNTER (external input to DUT) +// ============================================================================ +// In the real system, this comes from the transmitter. For the test, +// we increment it on each mc_new_chirp toggle from the mode controller. +// Access the internal signal via hierarchical reference. +reg [5:0] chirp_counter; +reg mc_new_chirp_prev; + +always @(posedge clk_100m or negedge reset_n) begin + if (!reset_n) begin + chirp_counter <= 6'd0; + mc_new_chirp_prev <= 1'b0; + end else begin + mc_new_chirp_prev <= dut.mc_new_chirp; + if (dut.mc_new_chirp != mc_new_chirp_prev) begin + chirp_counter <= chirp_counter + 1; + end + end +end + +// ============================================================================ +// DUT INSTANTIATION +// ============================================================================ +wire [31:0] doppler_output; +wire doppler_valid; +wire [4:0] doppler_bin; +wire [5:0] range_bin_out; + +radar_receiver_final dut ( + .clk(clk_100m), + .reset_n(reset_n), + + // ADC "LVDS" -- stub treats adc_d_p as single-ended data + .adc_d_p(adc_data), + .adc_d_n(~adc_data), // Complement (ignored by stub) + .adc_dco_p(clk_400m), // 400 MHz clock + .adc_dco_n(~clk_400m), // Complement (ignored by stub) + .adc_pwdn(), + + .chirp_counter(chirp_counter), + + .doppler_output(doppler_output), + .doppler_valid(doppler_valid), + .doppler_bin(doppler_bin), + .range_bin(range_bin_out) +); + +// ============================================================================ +// OVERRIDE TIMING PARAMETERS via defparam +// ============================================================================ +// Reduce radar_mode_controller timing to keep simulation tractable. +// Real values: LONG_CHIRP=3000, LONG_LISTEN=13700, GUARD=17540, +// SHORT_CHIRP=50, SHORT_LISTEN=17450 (total ~51740 per chirp) +// Need enough DDC samples to fill MF buffer (896) plus latency buffer (3187). +// At ~1 DDC sample per sys_clk, we need at least ~5000 sys_clk per chirp. +// Use moderately reduced values: ~5000 cycles per chirp pair +defparam dut.rmc.LONG_CHIRP_CYCLES = 500; +defparam dut.rmc.LONG_LISTEN_CYCLES = 2000; +defparam dut.rmc.GUARD_CYCLES = 500; +defparam dut.rmc.SHORT_CHIRP_CYCLES = 50; +defparam dut.rmc.SHORT_LISTEN_CYCLES = 1000; + +// ============================================================================ +// TEST INFRASTRUCTURE +// ============================================================================ +integer pass_count; +integer fail_count; +integer total_tests; + +task check; + input cond; + input [512*8-1:0] label; + begin + total_tests = total_tests + 1; + if (cond) begin + pass_count = pass_count + 1; + $display("[PASS %0d] %0s", total_tests, label); + end else begin + fail_count = fail_count + 1; + $display("[FAIL %0d] %0s", total_tests, label); + end + end +endtask + +// ============================================================================ +// OUTPUT MONITORING +// ============================================================================ +integer doppler_output_count; +integer doppler_frame_count; +reg [63:0] range_bin_seen; // Bitmap: which range bins appeared +reg [31:0] doppler_bin_seen; // Bitmap: which Doppler bins appeared +integer nonzero_output_count; +reg [31:0] first_doppler_time; // Cycle when first doppler_valid appears +reg first_doppler_seen; + +// Per-frame tracking +integer frame_output_count; +reg frame_done_prev; + +// CSV output +integer csv_fd; + +initial begin + doppler_output_count = 0; + doppler_frame_count = 0; + range_bin_seen = 64'd0; + doppler_bin_seen = 32'd0; + nonzero_output_count = 0; + first_doppler_seen = 0; + first_doppler_time = 0; + frame_output_count = 0; + frame_done_prev = 0; + + csv_fd = $fopen("tb/cosim/rx_final_doppler_out.csv", "w"); + if (csv_fd) $fdisplay(csv_fd, "cycle,range_bin,doppler_bin,output_hex"); +end + +// Monitor doppler outputs -- only after reset released +always @(posedge clk_100m) begin + if (reset_n && doppler_valid) begin + doppler_output_count = doppler_output_count + 1; + frame_output_count = frame_output_count + 1; + + // Track which bins we've seen + if (range_bin_out < 64) + range_bin_seen = range_bin_seen | (64'd1 << range_bin_out); + if (doppler_bin < 32) + doppler_bin_seen = doppler_bin_seen | (32'd1 << doppler_bin); + + // Track non-zero outputs + if (doppler_output != 32'd0) + nonzero_output_count = nonzero_output_count + 1; + + // Record first output time + if (!first_doppler_seen) begin + first_doppler_seen = 1; + first_doppler_time = $time; + $display("[INFO] First doppler_valid at time %0t", $time); + end + + // CSV logging + if (csv_fd) + $fdisplay(csv_fd, "%0t,%0d,%0d,%08h", $time, range_bin_out, doppler_bin, doppler_output); + + // Progress reporting (every 256 outputs) + if ((doppler_output_count % 256) == 0) + $display("[INFO] %0d doppler outputs so far (t=%0t)", doppler_output_count, $time); + end + + // Track frame completions via doppler_proc -- only after reset + if (reset_n && dut.doppler_frame_done && !frame_done_prev) begin + doppler_frame_count = doppler_frame_count + 1; + $display("[INFO] Doppler frame %0d complete: %0d outputs (t=%0t)", + doppler_frame_count, frame_output_count, $time); + frame_output_count = 0; + end + frame_done_prev = dut.doppler_frame_done; +end + +// ============================================================================ +// PROGRESS MONITOR -- pipeline stage activity +// ============================================================================ +reg [31:0] ddc_valid_count; +reg [31:0] mf_valid_count; +reg [31:0] range_decim_count; +reg [31:0] range_data_valid_count; + +initial begin + ddc_valid_count = 0; + mf_valid_count = 0; + range_decim_count = 0; + range_data_valid_count = 0; +end + +always @(posedge clk_100m) begin + if (dut.adc_valid_sync) ddc_valid_count = ddc_valid_count + 1; + if (dut.range_valid) mf_valid_count = mf_valid_count + 1; + if (dut.decimated_range_valid) range_decim_count = range_decim_count + 1; + if (dut.range_data_valid) range_data_valid_count = range_data_valid_count + 1; +end + +// Periodic progress dump +reg [31:0] progress_timer; +initial progress_timer = 0; +always @(posedge clk_100m) begin + progress_timer = progress_timer + 1; + if (progress_timer % 50000 == 0) begin + $display("[PROGRESS t=%0t] ddc_valid=%0d mf_out=%0d range_decim=%0d doppler_out=%0d chirp=%0d", + $time, ddc_valid_count, mf_valid_count, range_decim_count, + doppler_output_count, chirp_counter); + end +end + +// ============================================================================ +// MF PIPELINE DEBUG MONITOR — track state transitions +// ============================================================================ +reg [3:0] mf_state_prev; +reg [3:0] chain_state_prev; +initial begin + mf_state_prev = 0; + chain_state_prev = 0; +end + +always @(posedge clk_100m) begin + // Multi-segment FSM state changes + if (dut.mf_dual.state != mf_state_prev) begin + $display("[MF_DBG t=%0t] multi_seg state: %0d -> %0d (seg=%0d, wr_ptr=%0d, rd_ptr=%0d, samples=%0d)", + $time, mf_state_prev, dut.mf_dual.state, + dut.mf_dual.current_segment, dut.mf_dual.buffer_write_ptr, + dut.mf_dual.buffer_read_ptr, dut.mf_dual.chirp_samples_collected); + mf_state_prev = dut.mf_dual.state; + end + // Processing chain state changes + if (dut.mf_dual.m_f_p_c.state != chain_state_prev) begin + $display("[CHAIN_DBG t=%0t] chain state: %0d -> %0d (fwd_count=%0d, out_count=%0d)", + $time, chain_state_prev, dut.mf_dual.m_f_p_c.state, + dut.mf_dual.m_f_p_c.fwd_in_count, dut.mf_dual.m_f_p_c.out_count); + chain_state_prev = dut.mf_dual.m_f_p_c.state; + end + // Watch for fft_pc_valid while multi-seg is in ST_WAIT_FFT + if (dut.mf_dual.state == 5 && dut.mf_dual.fft_pc_valid) begin + $display("[MF_DBG t=%0t] *** fft_pc_valid=1 while in ST_WAIT_FFT! Should transition!", $time); + end + // Watch for fft_pc_valid while multi-seg is NOT in ST_WAIT_FFT + if (dut.mf_dual.state != 5 && dut.mf_dual.fft_pc_valid) begin + $display("[MF_DBG t=%0t] WARNING: fft_pc_valid=1 but multi_seg state=%0d (NOT ST_WAIT_FFT)", + $time, dut.mf_dual.state); + end +end + +// ============================================================================ +// MAIN TEST SEQUENCE +// ============================================================================ +// Simulation timeout calculation: +// 1. DDC pipeline fill: ~4 sys_clk cycles +// 2. MF overlap-save buffer fill: 896 valid DDC samples +// 3. Latency buffer priming: 3187 valid_in assertions +// 4. 1024 MF outputs -> range_bin_decimator -> 64 decimated outputs +// 5. 32 chirps of decimated data -> Doppler FFT +// +// With shortened mode controller timing (~600 cycles per chirp pair), +// DDC output rate depends on how many 400MHz samples per chirp period +// produce valid 100MHz outputs (CIC 4x decimation = ~1 per 4 clk_400m). +// +// Conservative estimate: ~500K 100MHz cycles for the full pipeline. +// ~4050 cycles/chirp x 32 chirps = ~130K, plus latency buffer priming, +// plus Doppler processing time. Set generous timeout. + +localparam SIM_TIMEOUT = 2_000_000; // 2M cycles — full pipeline with multi-segment drain + +initial begin + // VCD dump disabled for long integration test -- uncomment for debug + // $dumpfile("tb/tb_radar_receiver_final.vcd"); + // $dumpvars(0, tb_radar_receiver_final); + + pass_count = 0; + fail_count = 0; + total_tests = 0; + + // ---- RESET ---- + reset_n = 0; + #100; + reset_n = 1; + $display("[INFO] Reset released at t=%0t", $time); + + // ---- WAIT FOR PIPELINE ---- + // Poll until first Doppler frame completes or timeout + begin : wait_loop + integer wait_cycles; + wait_cycles = 0; + while (doppler_frame_count < 1 && wait_cycles < SIM_TIMEOUT) begin + @(posedge clk_100m); + wait_cycles = wait_cycles + 1; + end + if (doppler_frame_count >= 1) begin + $display("[INFO] First Doppler frame completed at t=%0t", $time); + #1000; + end else begin + $display("[WARN] Simulation timeout reached at t=%0t (%0d cycles)", $time, wait_cycles); + $display("[WARN] Pipeline progress: ddc_valid=%0d mf_out=%0d range_decim=%0d doppler=%0d", + ddc_valid_count, mf_valid_count, range_decim_count, doppler_output_count); + end + end + + // ---- RUN CHECKS ---- + $display(""); + $display("============================================================"); + $display("RADAR RECEIVER FINAL -- INTEGRATION TEST RESULTS"); + $display("============================================================"); + $display("Total doppler outputs: %0d", doppler_output_count); + $display("Doppler frames complete: %0d", doppler_frame_count); + $display("Non-zero outputs: %0d", nonzero_output_count); + $display("DDC valid count: %0d", ddc_valid_count); + $display("MF output count: %0d", mf_valid_count); + $display("Range decim count: %0d", range_decim_count); + $display("============================================================"); + $display(""); + + // ---- CHECK 1: Pipeline activity ---- + check(ddc_valid_count > 0, + "DDC produces valid outputs (adc_valid_sync asserted)"); + + // ---- CHECK 2: MF outputs appear ---- + check(mf_valid_count > 0, + "Matched filter produces outputs (range_valid asserted)"); + + // ---- CHECK 3: Range decimator outputs appear ---- + check(range_decim_count > 0, + "Range bin decimator produces outputs"); + + // ---- CHECK 4: Doppler outputs appear ---- + check(doppler_output_count > 0, + "Doppler processor produces outputs (doppler_valid asserted)"); + + // ---- CHECK 5: Correct output count per frame ---- + // A complete Doppler frame should produce 64 x 32 = 2048 outputs + if (doppler_frame_count > 0) begin + check(doppler_output_count >= 2048, + "At least 2048 doppler outputs (one full frame: 64 rbins x 32 dbins)"); + end else begin + check(0, "At least 2048 doppler outputs (NO FRAME COMPLETED)"); + end + + // ---- CHECK 6: Range bin coverage ---- + // Count how many unique range bins appeared + begin : count_range_bins + integer rb_count, rb_i; + rb_count = 0; + for (rb_i = 0; rb_i < 64; rb_i = rb_i + 1) begin + if (range_bin_seen[rb_i]) rb_count = rb_count + 1; + end + $display("[INFO] Unique range bins seen: %0d / 64", rb_count); + check(rb_count == 64, + "All 64 range bins present in Doppler output"); + end + + // ---- CHECK 7: Doppler bin coverage ---- + begin : count_doppler_bins + integer db_count, db_i; + db_count = 0; + for (db_i = 0; db_i < 32; db_i = db_i + 1) begin + if (doppler_bin_seen[db_i]) db_count = db_count + 1; + end + $display("[INFO] Unique Doppler bins seen: %0d / 32", db_count); + check(db_count == 32, + "All 32 Doppler bins present in Doppler output"); + end + + // ---- CHECK 8: Non-trivial outputs ---- + check(nonzero_output_count > 0, + "At least some Doppler outputs are non-zero"); + + // ---- CHECK 9: Non-zero fraction ---- + // With a tone input, we expect most outputs to have some energy + if (doppler_output_count > 0) begin + check(nonzero_output_count > doppler_output_count / 4, + "More than 25pct of Doppler outputs are non-zero"); + end else begin + check(0, "More than 25pct of Doppler outputs are non-zero (NO OUTPUTS)"); + end + + // ---- CHECK 10: Pipeline didn't stall ---- + check(ddc_valid_count > 100, + "DDC produced substantial output (>100 valid samples)"); + + // ---- SUMMARY ---- + $display(""); + $display("============================================================"); + $display("SUMMARY: %0d / %0d tests passed", pass_count, total_tests); + if (fail_count == 0) + $display("ALL TESTS PASSED"); + else + $display("SOME TESTS FAILED (%0d failures)", fail_count); + $display("============================================================"); + + if (csv_fd) $fclose(csv_fd); + $finish; +end + +endmodule