From 4238eb1b9990922f75d494d218e60dfded4ee036 Mon Sep 17 00:00:00 2001 From: Jason <83615043+JJassonn69@users.noreply.github.com> Date: Thu, 30 Apr 2026 19:37:43 +0545 Subject: [PATCH] chirp-v2 PR-C: chirp_reference_rom replaces chirp_memory_loader_param MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the chirp-v1 1-bit use_long_chirp memory loader and its 6 .mem files; introduce chirp_reference_rom — wave_sel-native, single 8192x16 BRAM array per Q15 lane, 4-region init (SHORT, MEDIUM, LONG seg0/seg1) loaded from the PR-B mem files. Same 1-clk read latency as the legacy module so the RX-B autocorrelation alignment fix carries through unchanged. Receiver-side wave_sel shim added in radar_receiver_final.v: wire [1:0] wave_sel = use_long_chirp ? RP_WAVE_LONG : RP_WAVE_SHORT; This is a 1-line transitional bridge while radar_mode_controller still emits 1-bit use_long_chirp; PR-D deletes the shim and wires chirp_scheduler straight through. MEDIUM is loaded into the ROM but unreachable through the production path until PR-D. BRAM cost: 8 RAMB18 (was 6 in chirp-v1). +2 BRAM is the cost of adding MEDIUM to the waveform set; not avoidable. Files added: - chirp_reference_rom.v Files removed: - chirp_memory_loader_param.v - long_chirp_seg{0,1}_{i,q}.mem (4 files) - short_chirp_{i,q}.mem (2 files) - tb/cosim/validate_mem_files.py (legacy file-set validator; replaced by gen_chirp_mem.py's internal verify_phase_match) - tb/cosim/analyze_short_chirp_mismatch.py (one-shot tool from the chirp-v1 TX-I investigation; finding incorporated, references the deleted short_chirp_*.mem files) Files updated for module rename: - radar_receiver_final.v — instance, comments, wave_sel shim - radar_mode_controller.v — header comment - matched_filter_processing_chain.v — header comment - scripts/200t/build_200t.tcl — explicit RTL list - run_regression.sh — 5 spots - tb/tb_rxb_fullchain_latency.v — instance, wave_sel shim, mem filenames, SHORT_LEN 50 → 100 (1 µs at 100 MHz) - tb/tb_system_e2e.v — header comment Verification: - chirp_reference_rom standalone iverilog compile: clean - Full receiver chain compile (21 RTL files): clean - tb_rxb_fullchain_latency runs end-to-end with new ROM + new mem files + 100-sample SHORT chirp; autocorrelation peak at bin 0, peak |I|+|Q| = 15115. Confirms 1-clk ROM read latency is preserved and the RX-B direct-wire-with-1-FF alignment still holds. - 50T build script (scripts/50t/build_50t.tcl) uses glob *.v — no edit needed; it picks up the new file automatically. --- .../9_2_FPGA/chirp_memory_loader_param.v | 131 -- 9_Firmware/9_2_FPGA/chirp_reference_rom.v | 121 + 9_Firmware/9_2_FPGA/long_chirp_seg0_i.mem | 2048 ----------------- 9_Firmware/9_2_FPGA/long_chirp_seg0_q.mem | 2048 ----------------- 9_Firmware/9_2_FPGA/long_chirp_seg1_i.mem | 2048 ----------------- 9_Firmware/9_2_FPGA/long_chirp_seg1_q.mem | 2048 ----------------- .../matched_filter_processing_chain.v | 4 +- 9_Firmware/9_2_FPGA/radar_mode_controller.v | 3 +- 9_Firmware/9_2_FPGA/radar_receiver_final.v | 20 +- 9_Firmware/9_2_FPGA/run_regression.sh | 10 +- .../9_2_FPGA/scripts/200t/build_200t.tcl | 2 +- 9_Firmware/9_2_FPGA/short_chirp_i.mem | 50 - 9_Firmware/9_2_FPGA/short_chirp_q.mem | 50 - .../tb/cosim/analyze_short_chirp_mismatch.py | 188 -- .../9_2_FPGA/tb/cosim/validate_mem_files.py | 492 ---- .../9_2_FPGA/tb/tb_rxb_fullchain_latency.v | 41 +- 9_Firmware/9_2_FPGA/tb/tb_system_e2e.v | 2 +- 17 files changed, 169 insertions(+), 9137 deletions(-) delete mode 100644 9_Firmware/9_2_FPGA/chirp_memory_loader_param.v create mode 100644 9_Firmware/9_2_FPGA/chirp_reference_rom.v delete mode 100644 9_Firmware/9_2_FPGA/long_chirp_seg0_i.mem delete mode 100644 9_Firmware/9_2_FPGA/long_chirp_seg0_q.mem delete mode 100644 9_Firmware/9_2_FPGA/long_chirp_seg1_i.mem delete mode 100644 9_Firmware/9_2_FPGA/long_chirp_seg1_q.mem delete mode 100644 9_Firmware/9_2_FPGA/short_chirp_i.mem delete mode 100644 9_Firmware/9_2_FPGA/short_chirp_q.mem delete mode 100644 9_Firmware/9_2_FPGA/tb/cosim/analyze_short_chirp_mismatch.py delete mode 100644 9_Firmware/9_2_FPGA/tb/cosim/validate_mem_files.py diff --git a/9_Firmware/9_2_FPGA/chirp_memory_loader_param.v b/9_Firmware/9_2_FPGA/chirp_memory_loader_param.v deleted file mode 100644 index 65f7247..0000000 --- a/9_Firmware/9_2_FPGA/chirp_memory_loader_param.v +++ /dev/null @@ -1,131 +0,0 @@ -`timescale 1ns / 1ps -module chirp_memory_loader_param #( - parameter LONG_I_FILE_SEG0 = "long_chirp_seg0_i.mem", - parameter LONG_Q_FILE_SEG0 = "long_chirp_seg0_q.mem", - parameter LONG_I_FILE_SEG1 = "long_chirp_seg1_i.mem", - parameter LONG_Q_FILE_SEG1 = "long_chirp_seg1_q.mem", - parameter SHORT_I_FILE = "short_chirp_i.mem", - parameter SHORT_Q_FILE = "short_chirp_q.mem", - parameter DEBUG = 1 -)( - input wire clk, - input wire reset_n, - input wire [1:0] segment_select, - input wire mem_request, - input wire use_long_chirp, - input wire [10:0] sample_addr, - output reg [15:0] ref_i, - output reg [15:0] ref_q, - output reg mem_ready -); - -// Memory declarations — 2 long segments × 2048 = 4096 samples -(* ram_style = "block" *) reg [15:0] long_chirp_i [0:4095]; -(* ram_style = "block" *) reg [15:0] long_chirp_q [0:4095]; -(* ram_style = "block" *) reg [15:0] short_chirp_i [0:2047]; -(* ram_style = "block" *) reg [15:0] short_chirp_q [0:2047]; - -// Initialize memory -integer i; - -initial begin - `ifdef SIMULATION - if (DEBUG) begin - $display("[MEM] Starting memory initialization for 2 long chirp segments"); - end - `endif - - // === LOAD LONG CHIRP — 2 SEGMENTS === - // Segment 0 (addresses 0-2047) - $readmemh(LONG_I_FILE_SEG0, long_chirp_i, 0, 2047); - $readmemh(LONG_Q_FILE_SEG0, long_chirp_q, 0, 2047); - `ifdef SIMULATION - if (DEBUG) $display("[MEM] Loaded long chirp segment 0 (0-2047)"); - `endif - - // Segment 1 (addresses 2048-4095) - $readmemh(LONG_I_FILE_SEG1, long_chirp_i, 2048, 4095); - $readmemh(LONG_Q_FILE_SEG1, long_chirp_q, 2048, 4095); - `ifdef SIMULATION - if (DEBUG) $display("[MEM] Loaded long chirp segment 1 (2048-4095)"); - `endif - - // === LOAD SHORT CHIRP === - // Load first 50 samples (0-49) - $readmemh(SHORT_I_FILE, short_chirp_i, 0, 49); - $readmemh(SHORT_Q_FILE, short_chirp_q, 0, 49); - `ifdef SIMULATION - if (DEBUG) $display("[MEM] Loaded short chirp (0-49)"); - `endif - - // Zero pad remaining samples (50-2047) - for (i = 50; i < 2048; i = i + 1) begin - short_chirp_i[i] = 16'h0000; - short_chirp_q[i] = 16'h0000; - end - `ifdef SIMULATION - if (DEBUG) $display("[MEM] Zero-padded short chirp from 50-2047"); - - // === VERIFICATION === - if (DEBUG) begin - $display("[MEM] Memory loading complete. Verification samples:"); - $display(" Long[0]: I=%h Q=%h", long_chirp_i[0], long_chirp_q[0]); - $display(" Long[2047]: I=%h Q=%h", long_chirp_i[2047], long_chirp_q[2047]); - $display(" Long[2048]: I=%h Q=%h", long_chirp_i[2048], long_chirp_q[2048]); - $display(" Long[4095]: I=%h Q=%h", long_chirp_i[4095], long_chirp_q[4095]); - $display(" Short[0]: I=%h Q=%h", short_chirp_i[0], short_chirp_q[0]); - $display(" Short[49]: I=%h Q=%h", short_chirp_i[49], short_chirp_q[49]); - $display(" Short[50]: I=%h Q=%h (zero-padded)", short_chirp_i[50], short_chirp_q[50]); - end - `endif -end - -// Memory access logic -// long_addr: segment_select[0] selects segment (0 or 1), sample_addr[10:0] selects within -wire [11:0] long_addr = {segment_select[0], sample_addr}; - -// ---- BRAM read block (sync-only, sync reset) ---- -// REQP-1839/1840 fix: BRAM output registers cannot have async resets. -// We use a synchronous reset instead, which Vivado maps to the BRAM -// RSTREGB port (supported by 7-series BRAM primitives). -always @(posedge clk) begin - if (!reset_n) begin - ref_i <= 16'd0; - ref_q <= 16'd0; - end else if (mem_request) begin - if (use_long_chirp) begin - ref_i <= long_chirp_i[long_addr]; - ref_q <= long_chirp_q[long_addr]; - - `ifdef SIMULATION - if (DEBUG && $time < 100) begin - $display("[MEM @%0t] Long chirp: seg=%b, addr=%d, I=%h, Q=%h", - $time, segment_select, long_addr, - long_chirp_i[long_addr], long_chirp_q[long_addr]); - end - `endif - end else begin - // Short chirp (0-2047) - ref_i <= short_chirp_i[sample_addr]; - ref_q <= short_chirp_q[sample_addr]; - - `ifdef SIMULATION - if (DEBUG && $time < 100) begin - $display("[MEM @%0t] Short chirp: addr=%d, I=%h, Q=%h", - $time, sample_addr, short_chirp_i[sample_addr], short_chirp_q[sample_addr]); - end - `endif - end - end -end - -// ---- Control block (async reset for mem_ready only) ---- -always @(posedge clk or negedge reset_n) begin - if (!reset_n) begin - mem_ready <= 1'b0; - end else begin - mem_ready <= mem_request; - end -end - -endmodule diff --git a/9_Firmware/9_2_FPGA/chirp_reference_rom.v b/9_Firmware/9_2_FPGA/chirp_reference_rom.v new file mode 100644 index 0000000..42417e8 --- /dev/null +++ b/9_Firmware/9_2_FPGA/chirp_reference_rom.v @@ -0,0 +1,121 @@ +`timescale 1ns / 1ps + +`include "radar_params.vh" + +// ============================================================================ +// chirp_reference_rom.v — 3-waveform matched-filter reference ROM (RX side) +// ============================================================================ +// Replaces the chirp-v1 chirp_memory_loader_param.v (1-bit `use_long_chirp`, +// 6 .mem files, separate BRAMs for long/short). +// +// Carries one of {SHORT, MEDIUM, LONG} via wave_sel[1:0] — see RP_WAVE_* +// in radar_params.vh. The .mem files (PR-B) are uniformly 2048 entries each +// in Q15 I/Q hex; LONG occupies two 2048 segments; SHORT and MEDIUM each +// occupy a single 2048 segment with internal zero-pad past the chirp end. +// +// BRAM layout (single 8192x16 array per lane — Vivado infers 4 RAMB18/lane, +// 8 RAMB18 total. Same cost as chirp-v1 dual-array layout because LONG +// already needed 4 RAMB18; folding SHORT and MEDIUM into the same address +// space costs the 4 BRAMs we'd add for medium anyway): +// +// addr[12:11] region source files +// --------- --------------------- -------------------------------- +// 2'b00 SHORT ([0..2047]) rx_short_{i,q}.mem +// 2'b01 MEDIUM ([0..2047]) rx_medium_{i,q}.mem +// 2'b10 LONG seg0 ([0..2047]) rx_long_seg0_{i,q}.mem +// 2'b11 LONG seg1 ([0..2047]) rx_long_seg1_{i,q}.mem +// +// Read addressing: +// case (wave_sel) +// RP_WAVE_SHORT: full_addr = {2'b00, sample_addr} +// RP_WAVE_MEDIUM: full_addr = {2'b01, sample_addr} +// RP_WAVE_LONG: full_addr = {1'b1, segment_select[0], sample_addr} +// default: (RP_WAVE_RESERVED) zero-output, mem_ready still pulses +// endcase +// +// Output semantics — drop-in compatible with chirp_memory_loader_param: +// - Synchronous read: ref_i / ref_q valid 1 clk after mem_request. +// - mem_ready pulses with ref data (1 clk after mem_request). +// - SAME 1-cycle latency as the legacy module (preserves RX-B autocorrelation +// peak alignment validated by tb_rxb_fullchain_latency). +// +// REQP-1839/1840 compliance (BRAM output registers cannot have async resets): +// - The BRAM read block uses a SYNCHRONOUS reset, which Vivado maps to the +// RAMB18 RSTREGB port. mem_ready (a non-BRAM control register) keeps the +// async reset for clean post-reset behavior. Same split as the legacy +// chirp_memory_loader_param.v. +// ============================================================================ +module chirp_reference_rom ( + input wire clk, + input wire reset_n, + input wire [1:0] wave_sel, // RP_WAVE_{SHORT,MEDIUM,LONG} + input wire [1:0] segment_select, // [0]=LONG seg index; ignored for SHORT/MEDIUM + input wire mem_request, + input wire [10:0] sample_addr, // 0..2047 within the active waveform/segment + output reg [15:0] ref_i, + output reg [15:0] ref_q, + output reg mem_ready +); + + // ----------------------------------------------------------------------- + // BRAM arrays (one per Q15 lane). Vivado infers RAMB18 with sync read. + // ----------------------------------------------------------------------- + (* ram_style = "block" *) reg [15:0] mem_i [0:8191]; + (* ram_style = "block" *) reg [15:0] mem_q [0:8191]; + + // ----------------------------------------------------------------------- + // Initialization — load 4 distinct .mem files into 4 contiguous regions + // of the unified BRAM. $readmemh range form lets us target each 2048-cell + // segment independently. Vivado honors these for RAMB18 init contents. + // ----------------------------------------------------------------------- + initial begin + $readmemh("rx_short_i.mem", mem_i, 0, 2047); + $readmemh("rx_short_q.mem", mem_q, 0, 2047); + $readmemh("rx_medium_i.mem", mem_i, 2048, 4095); + $readmemh("rx_medium_q.mem", mem_q, 2048, 4095); + $readmemh("rx_long_seg0_i.mem", mem_i, 4096, 6143); + $readmemh("rx_long_seg0_q.mem", mem_q, 4096, 6143); + $readmemh("rx_long_seg1_i.mem", mem_i, 6144, 8191); + $readmemh("rx_long_seg1_q.mem", mem_q, 6144, 8191); + end + + // ----------------------------------------------------------------------- + // Address mux — combinational. Encodes the region select into addr[12:11] + // and passes sample_addr through addr[10:0]. + // ----------------------------------------------------------------------- + reg [12:0] full_addr; + always @(*) begin + case (wave_sel) + `RP_WAVE_SHORT: full_addr = {2'b00, sample_addr}; + `RP_WAVE_MEDIUM: full_addr = {2'b01, sample_addr}; + `RP_WAVE_LONG: full_addr = {1'b1, segment_select[0], sample_addr}; + default: full_addr = 13'd0; // RP_WAVE_RESERVED — read-zero region + endcase + end + + // ----------------------------------------------------------------------- + // BRAM read block — sync-only, sync reset (REQP-1839/1840). Single stage: + // ref_i / ref_q valid 1 clk after mem_request, matching legacy timing. + // ----------------------------------------------------------------------- + always @(posedge clk) begin + if (!reset_n) begin + ref_i <= 16'd0; + ref_q <= 16'd0; + end else if (mem_request) begin + ref_i <= mem_i[full_addr]; + ref_q <= mem_q[full_addr]; + end + end + + // ----------------------------------------------------------------------- + // Control register — async-resettable. mem_ready follows mem_request by + // 1 clk to match the BRAM read latency. + // ----------------------------------------------------------------------- + always @(posedge clk or negedge reset_n) begin + if (!reset_n) + mem_ready <= 1'b0; + else + mem_ready <= mem_request; + end + +endmodule diff --git a/9_Firmware/9_2_FPGA/long_chirp_seg0_i.mem b/9_Firmware/9_2_FPGA/long_chirp_seg0_i.mem deleted file mode 100644 index 8209045..0000000 --- a/9_Firmware/9_2_FPGA/long_chirp_seg0_i.mem +++ /dev/null @@ -1,2048 +0,0 @@ -7332 -5d2f -2382 -dc32 -a294 -8cce -a351 -dd87 -2510 -5e55 -732c -5b73 -2047 -d88c -a01b -8cee -a691 -e318 -2af2 -620b -72cb -568e -1854 -d082 -9b55 -8dca -ad4b -ed7b -3507 -679e -7128 -4dc7 -0b77 -c48d -954a -9093 -b85f -fcd7 -429d -6db7 -6cca -4021 -f9a2 -b5aa -8fa7 -9702 -c8d8 -110b -525f -724b -63c3 -2c9e -e342 -a596 -8cd2 -a329 -df89 -2943 -6215 -729d -53fa -12b6 -c9b1 -9712 -8fd3 -b709 -fc87 -437f -6e72 -6b73 -3bad -f2fa -afad -8df0 -9bf3 -d3eb -1e6c -5c2e -732e -59a9 -1a4e -cfce -99a5 -8ecb -b3ee -f95e -41aa -6e10 -6b99 -3b3e -f190 -ae04 -8d87 -9e15 -d8a9 -242c -602a -72c6 -53e9 -10ce -c667 -94e2 -91c0 -be6f -079e -4d87 -71ba -645f -2b37 -df25 -a168 -8d10 -ab1b -ee6f -3984 -6b54 -6de2 -3ff8 -f5c9 -b014 -8db6 -9dfb -d9c0 -268b -623c -7236 -4f47 -08f1 -be93 -9170 -95ce -c9cc -1627 -5897 -7331 -59e7 -180c -cb4b -9656 -912f -be41 -092f -4ffa -726e -60cc -2306 -d53c -9af3 -8edd -b697 -0000 -4973 -712d -64d8 -2a0c -dbd4 -9e46 -8dde -b246 -fab8 -45a6 -7044 -66b5 -2d54 -decc -9fb8 -8d95 -b0f3 -f958 -44e5 -7027 -66bd -2cff -de09 -9f0c -8dca -b27d -fbe0 -4740 -70e1 -64f3 -2909 -d992 -9c5f -8ea6 -b709 -0251 -4c86 -721c -60fe -214c -d191 -9824 -90b9 -bef9 -0ca4 -543d -731b -5a38 -1590 -c667 -9334 -94ee -cad3 -1aae -5d8d -72b7 -4fc0 -05b1 -b8ce -8ed8 -9c7e -db1f -2bf3 -6724 -6f6d -40a1 -f1d3 -aa02 -8ccf -a8cc -f027 -3f6d -6f24 -6770 -2c15 -daaa -9be4 -8f3e -bb25 -09a4 -5354 -731e -58ee -11e1 -c1c4 -9113 -987d -d457 -265d -64f3 -7042 -4275 -f2c9 -a9d0 -8cce -aaa7 -f42d -43ca -70af -63c3 -2393 -d10f -96ad -9290 -c6ed -18cd -5de3 -7265 -4b9e -fd96 -b0c6 -8d20 -a542 -ecb2 -3e3c -6f4f -6636 -279c -d43a -97c4 -9203 -c611 -18a2 -5e43 -7236 -49e0 -fa7a -adf7 -8cde -a8cc -f306 -442e -711b -61d4 -1e66 -cab7 -9376 -9638 -d19c -25e2 -65e0 -6f2f -3cb9 -e990 -a273 -8dc3 -b6bd -0754 -53fe -7332 -53f5 -0723 -b667 -8daa -a329 -eb45 -3eb8 -6ff4 -63fe -214c -cc54 -93aa -9676 -d345 -28b8 -67c7 -6da4 -36fd -e1ee -9d77 -8f88 -bfee -13e7 -5cdb -7236 -4802 -f5aa -a90d -8cf3 -b125 -0179 -5103 -732a -54b3 -06a2 -b4cd -8d46 -a662 -f211 -45a6 -71e5 -5db4 -146c -bf88 -8f32 -9ef2 -e5e8 -3bc2 -6f95 -63c3 -1ef5 -c86b -91a8 -9a18 -dcfa -33ff -6d2c -6791 -2651 -cef4 -93da -9733 -d725 -2ec4 -6b54 -69aa -2aa7 -d2d4 -953e -95ce -d446 -2c49 -6a77 -6a6b -2c15 -d3e5 -9589 -95a8 -d446 -2ca4 -6ac2 -69f8 -2aa7 -d21e -94ac -96b9 -d725 -2fd3 -6c26 -683c -2651 -cd8f -92d4 -9935 -dcfa -35b6 -6e58 -64e7 -1ef5 -c667 -906b -9d84 -e5e8 -3e0d -70ce -5f77 -146c -bcfe -8e1b -a43e -f211 -4862 -72ba -5744 -06a2 -b1eb -8cd6 -ae1a -0179 -53fa -730d -4b90 -f5aa -a615 -8dca -bbd2 -13e7 -5fbc -7078 -3bad -e1ee -9ac6 -925c -cdfe -28b8 -6a28 -698a -2728 -cc54 -91b8 -9c02 -e4da -3eb8 -7151 -5cd7 -0e0e -b667 -8d06 -ac0b -0000 -53fe -72f7 -4943 -f12e -a273 -8f03 -c347 -1e24 -65e0 -6cca -2e64 -d262 -9376 -99de -e19a -3cd4 -711b -5cdb -0cfa -b4ba -8cde -af20 -0586 -5864 -7236 -4238 -e75e -9c6e -9203 -cef4 -2bc6 -6c2c -6636 -1dad -c1c4 -8e6f -a542 -f76b -4f3a -732c -4b9e -f26d -a21d -8f81 -c6ed -23f7 -6953 -6933 -2393 -c667 -8f51 -a2dc -f42d -4d5e -7332 -4c6f -f2c9 -a1e8 -8fbe -c881 -265d -6a9a -6783 -1f12 -c1c4 -8e33 -a712 -fbc1 -5354 -72cb -44db -e86d -9be4 -9306 -d3eb -32b3 -6f24 -602a -0fd9 -b4ba -8ccf -b35a -0e2d -5f5c -6f6d -334f -d40d -92de -9c7e -ea6a -4732 -730e -4fc0 -f57f -a273 -8ff0 -cad3 -2a7f -6ccc -63c3 -1590 -b85f -8ce5 -b16d -0ca4 -5f16 -6f47 -31d5 -d191 -91b8 -9f02 -f039 -4c86 -732c -48f7 -eb75 -9c5f -9367 -d6f7 -377f -70e1 -5a85 -0420 -aac8 -8dca -c1c9 -21f7 -6a0c -66bd -1a4e -bb1b -8cff -b0f3 -0d62 -6048 -6e4f -2d54 -cbd5 -8fbc -a43e -fab8 -5506 -7222 -3cfe -dbd4 -94c0 -9b28 -ea82 -4973 -7332 -4969 -ea52 -9af3 -9509 -dcfa -3e75 -726e -52e9 -f6d1 -a168 -912f -d21e -34b5 -70a9 -59e7 -0110 -a769 -8ef4 -c9cc -2ca4 -6e90 -5ed0 -08f1 -ac6c -8dca -c3d5 -268b -6ca9 -6205 -0e70 -b014 -8d42 -c008 -2296 -6b54 -63d0 -1191 -b222 -8d10 -be41 -20db -6ac9 -645f -125b -b279 -8d0e -be6f -2163 -6b1e -63c3 -10ce -b112 -8d3a -c093 -242c -6c45 -61eb -0ce8 -ae04 -8db6 -c4c2 -2926 -6e10 -5ea6 -06a2 -a97f -8ecb -cb25 -3032 -7027 -59a9 -fdf9 -a3d2 -90e5 -d3eb -3919 -7210 -5293 -f2fa -9d77 -948d -df42 -437f -7325 -48f7 -e5ca -9712 -9a69 -ed4a -4edb -729d -3c6b -d6bd -9179 -a329 -fdf9 -5a6a -6f8e -2c9e -c667 -8db5 -af78 -110b -6522 -68fe -1975 -b5aa -8cfb -bfdf -25e2 -6db7 -5dfc -0329 -a5c8 -9093 -d49c -3b73 -72a0 -4dc7 -ea6a -9862 -99bc -ed7b -502f -7236 -3801 -d082 -8f67 -a972 -09a4 -620b -6ae4 -1ce8 -b764 -8cee -c02c -2774 -6e95 -5b73 -fd96 -a1ab -92ee -dd87 -4469 -7332 -4366 -dc32 -9269 -a2d1 -0000 -5d36 -6d87 -2364 -bbfa -8cce -bcfe -24b8 -6e07 -5c09 -fd96 -a11e -9391 -e04d -477a -7312 -3e9e -d5d7 -9048 -a82f -09a4 -630b -6965 -1744 -b191 -8dca -ca1e -33d9 -71e7 -4fe4 -ea6a -9726 -9c87 -f619 -5814 -6f6d -283f -bedf -8cd0 -bcb3 -25e2 -6ed4 -5950 -f796 -9d05 -9702 -eacb -50c1 -7191 -3107 -c667 -8d35 -b6a5 -1f30 -6cea -5cd7 -fcb8 -9f67 -9579 -e79a -4edb -71e3 -3244 -c70d -8d37 -b709 -2047 -6d7a -5b68 -f9b5 -9d77 -972b -ec69 -52cb -70cc -2c15 -c0bc -8cd1 -bdf0 -2914 -7027 -549e -ee99 -97e1 -9ceb -f95e -5bb3 -6d08 -1df4 -b458 -8db6 -cc5f -38d8 -72e3 -46df -dbd4 -90f2 -a8f0 -0e89 -6732 -63c3 -0736 -a42f -9348 -e3ba -4d87 -71d5 -2ffa -c302 -8cd7 -be41 -2ae1 -70e5 -5122 -e825 -94ac -a22f -048f -62d5 -6799 -0e70 -a827 -919c -df60 -4ad5 -7236 -3192 -c3ba -8cd6 -bf12 -2ca4 -716c -4e6f -e39c -92c6 -a619 -0bf2 -66d9 -633a -0451 -a168 -95a1 -ebef -54c8 -6f5c -2306 -b646 -8dbd -cf0a -3dbf -7332 -3db4 -cedd -8daf -b6de -242c -6fca -5329 -e8e6 -9430 -a43e -0a25 -6693 -62ec -0282 -9fb8 -9752 -f14c -5921 -6d18 -1a4e -aeb3 -8fc2 -dac7 -48fb -7236 -2f62 -bfab -8ce4 -c743 -377f -730d -4145 -d163 -8dda -b709 -25cb -7085 -4fd6 -e2dd -91b8 -aa16 -14bb -6b89 -5b3b -f35c -979a -a02c -04ec -64f6 -63c3 -0263 -9eaf -98ea -f6bf -5d8d -69db -0fa8 -a643 -93df -ea6a -55f2 -6df8 -1b08 -adc3 -9093 -e000 -4eaa -708f -247e -b4ba -8e96 -d77c -481a -720b -2c15 -bad0 -8d83 -d0cb -428e -72cb -31e6 -bfc5 -8d04 -cbd5 -3e3c -7319 -3608 -c36b -8cd7 -c881 -3b48 -7330 -3892 -c5a7 -8cce -c6bd -39c9 -7332 -3994 -c667 -8cce -c67c -39c9 -7332 -3913 -c5a7 -8ccf -c7be -3b48 -732c -370d -c36b -8ce0 -ca8b -3e3c -7308 -3375 -bfc5 -8d22 -cef4 -428e -729b -2e37 -bad0 -8dca -d50e -481a -71a6 -273a -b4ba -8f21 -dcf4 -4eaa -6fd6 -1e66 -adc3 -9182 -e6bb -55f2 -6cca -13aa -a643 -9555 -f26d -5d8d -6811 -0704 -9eaf -9b10 -0000 -64f6 -6136 -f88d -979a -a329 -0f4d -6b89 -57c5 -e87f -91b8 -ae0d -2000 -7085 -4b58 -d748 -8dda -bc13 -3192 -730d -3bad -c58c -8ce4 -cd68 -433e -7236 -28b2 -b433 -8fc2 -e1fa -53fa -6d18 -12a4 -a467 -9752 -f95e -627c -62ec -fa1e -978d -a43e -12c2 -6d49 -5329 -e030 -8f32 -b6de -2cd7 -72cd -3db4 -c667 -8ce8 -cf0a -45d2 -7185 -2306 -aec8 -9211 -ebef -5b7b -683c -0451 -9bb6 -9fa3 -0bf2 -6b54 -5650 -e39c -8fb7 -b5d9 -2ca4 -72df -3c01 -c3ba -8d29 -d3eb -4ad5 -6ffe -1aae -a827 -95ce -f7d4 -62d5 -6168 -f504 -94ac -aa54 -1e42 -70e5 -4728 -cef4 -8cd7 -c9dd -42b6 -71d5 -2306 -ad6d -9348 -f1a8 -5ff7 -63c3 -f8be -95c4 -a8f0 -1d06 -70ce -46df -cde2 -8ccf -cc5f -45a6 -710f -1df4 -a94a -95c4 -f95e -646f -5ebf -ee99 -91ff -b125 -2914 -72c2 -3b13 -c0bc -8dca -dbda -52cb -6c1b -0b0f -9d77 -9f88 -0f03 -6d7a -4fa1 -d748 -8d37 -c5c1 -40a1 -71e3 -214c -aab3 -9579 -f9f2 -655d -5cd7 -ea09 -905e -b6a5 -3112 -7332 -3107 -b67f -907a -eacb -5d8d -6487 -f796 -9456 -ad60 -25e2 -729e -3ac4 -bedf -8e67 -e19a -5814 -6858 -ff6c -9726 -a8cc -1fee -71e7 -3f2a -c2c4 -8dca -de27 -5613 -6965 -016c -97c4 -a82f -1f89 -71ec -3e9e -c1c4 -8e06 -e04d -57e5 -6804 -fd96 -95fc -ab6f -24b8 -72a7 -3913 -bbfa -8f5e -e825 -5d36 -63c3 -f3ef -9269 -b314 -2f35 -7332 -2e0f -b20b -92ee -f5e7 -64f3 -5b73 -e4aa -8e8b -c02c -3e3c -71c1 -1ce8 -a55d -9a9a -09a4 -6d1c -4d5e -d082 -8cd1 -d3eb -502f -6bba -0536 -9862 -a8cc -22b4 -72a0 -37bb -b948 -9093 -ef14 -6225 -5dfc -e78e -8ed8 -bfdf -3f06 -7161 -1975 -a273 -9daa -110b -6f9a -45a1 -c667 -8db7 -e11d -5a6a -64c3 -f35c -9179 -b77c -36bc -729d -214c -a6eb -9a69 -0b4c -6e40 -48f7 -c970 -8d68 -df42 -59b1 -64f3 -f2fa -9127 -b8ff -3919 -7236 -1d35 -a3d2 -9d44 -11ce -7027 -4284 -c1c9 -8ecb -e95f -6048 -5ea6 -e66c -8e3f -c4c2 -45a6 -6f13 -0ce8 -9a7d -a7cc -242c -72fe -30da -b112 -94e7 -0000 -6b1e -4ec9 -cec1 -8d0e -dcfa -5950 -645f -f008 -8ff4 -be41 -402c -7074 -1191 -9c49 -a619 -2296 -72f4 -3086 -b014 -95ce -0367 -6ca9 -4abe -c903 -8dca -e522 -5efe -5ed0 -e4bc -8db6 -c9cc -4bb6 -6c10 -0110 -94ac -b2d9 -34b5 -7273 -1c28 -a168 -a125 -1bce -726e -3499 -b279 -9509 -02a1 -6cd2 -4969 -c667 -8e6c -ea82 -62a6 -5a0a -dbd4 -8cdf -d474 -5506 -664d -f190 -8fbc -c123 -450d -6e4f -06a2 -9638 -b0f3 -33bd -7267 -1a4e -9f82 -a402 -21f7 -7312 -2c15 -aac8 -9a3d -1072 -70e1 -3bad -b74c -9367 -ffbc -6c6f -48f7 -c468 -8f2b -f039 -6652 -53fa -d191 -8d23 -e229 -5f16 -5cd7 -de56 -8ce5 -d5af -5738 -63c3 -ea64 -8e06 -cad3 -4f23 -68fe -f57f -9022 -c18b -4732 -6cca -ff7e -92de -b9c2 -3fab -6f6d -084b -95e8 -b35a -38c8 -7128 -0fd9 -98fd -ae30 -32b3 -7236 -1627 -9be4 -aa22 -2d8d -72cb -1b38 -9e6d -a712 -296b -7312 -1f12 -a077 -a4e3 -265d -732c -21bc -a1e8 -a381 -246c -7332 -233b -a2ad -a2dc -239f -7332 -2393 -a2bf -a2ef -23f7 -7332 -22c5 -a21d -a3b8 -2573 -732c -20cf -a0ce -a542 -2810 -7312 -1dad -9ee1 -a79c -2bc6 -72cb -1957 -9c6e -aadd -3086 -7236 -13c8 -9997 -af20 -363f -7128 -0cfa -9687 -b487 -3cd4 -6f6d -04ec -9376 -bb33 -441f -6cca -fba2 -90a4 -c347 -4bed -68fe -f12e -8e61 -ccde -53fe -63c3 -e5ac -8d06 -d80d -5bfe -5cd7 -d94c -8cf6 -e4da -6388 -53fa -cc54 -8e99 -f337 -6a28 -48f7 -bf21 -925c -02fe -6f57 -3bad -b230 -98a5 -13e7 -7281 -2c15 -a615 -a1cf -2585 -730d -1a4e -9b82 -ae1a -3743 -7064 -06a2 -933e -bda5 -4862 -69ff -f190 -8e1b -d05a -57f9 -5f77 -dbd4 -8cec -e5e8 -64fe -5095 -c667 -906e -fdaf -6e58 -3d66 -b279 -9935 -16bf -72e9 -2651 -a168 -a790 -2fd3 -71b5 -0c23 -94ac -bb6f -4759 -69f8 -f01a -8db6 -d446 -5b86 -5b55 -d3e5 -8dca -f0fd -6a77 -45f4 -b991 -95ce -0fe6 -725c -2aa7 -a36f -a619 -2ec4 -71b5 -0afc -93da -be41 -4aed -6791 -e941 -8cfb -dcfa -6178 -53d3 -c86b -906e -0000 -6f95 -3769 -abe0 -9ef2 -242c -72e9 -146c -971e -b816 -45a6 -69ff -ee1f -8d46 -da06 -6048 -54b3 -c8bd -9091 -0179 -7027 -347e -a90d -a1cf -29de -7236 -0c9e -93c9 -bfee -4dd0 -64f3 -e1ee -8cd8 -e7ca -67c7 -48f7 -ba6e -9676 -1442 -7300 -214c -9c78 -b083 -3eb8 -6c80 -f35c -8daa -d80d -6001 -53f5 -c667 -91ba -0754 -719f -2c49 -a273 -a95e -366a -6f2f -fba2 -8ed8 -d19c -5c65 -57b1 -cab7 -9093 -03c3 -711b -2e53 -a35c -a8cc -363f -6f0e -fa7a -8e84 -d3eb -5e43 -5523 -c6bd -9203 -09a4 -722b -279c -9ee1 -aea5 -3e3c -6c01 -efe9 -8d20 -df31 -64f3 -4b9e -bb0c -9740 -18cd -7332 -1793 -96ad -bc5e -4d19 -63c3 -dc61 -8d72 -f42d -6dad -3913 -a9d0 -a381 -3043 -7042 -fd96 -8ec0 -d457 -5f89 -525f -c1c4 -9482 -12f3 -731e -1b38 -97c4 -bb25 -4ccb -6369 -daaa -8dca -f830 -6f24 -3391 -a51c -a8cc -38c8 -6d61 -f1d3 -8d1a -e19a -6724 -463e -b3ee -9c7e -25e2 -7207 -05b1 -9022 -cfbd -5d8d -53b6 -c217 -94ee -159c -7332 -1590 -94dc -c275 -543d -5cd7 -ce2b -90b9 -08c6 -7284 -214c -99ae -b948 -4c86 -6296 -d748 -8ea6 -ffbc -7143 -2909 -9d77 -b3a8 -4740 -65c3 -dcf4 -8dca -fa99 -7050 -2cff -9f82 -b125 -44e5 -66ed -def5 -8d95 -f95e -7021 -2d54 -9f78 -b183 -45a6 -664d -dd3b -8dde -fc0b -70ce -2a0c -9d5a -b4cd -4973 -63c3 -d7d3 -8edd -02a1 -7204 -2306 -9983 -bb4c -4ffa -5edb -cef4 -912f -0d19 -7310 -180c -94ac -c57c -5897 -56d3 -c312 -95ce -1b44 -72d3 -08f1 -8ffb -d3eb -623c -4abe -b505 -9dfb -2ca4 -6fcf -f5c9 -8d0c -e703 -6b54 -39af -a630 -ab1b -402c -683c -df25 -8dea -fec5 -71ba -2306 -98a5 -be6f -540a -5a44 -c667 -94e7 -1a66 -72c6 -06d9 -8f32 -d8a9 -6583 -4469 -ae04 -a43e -37f1 -6b99 -e66c -8d33 -f95e -70f4 -2623 -99a5 -bd7c -53fa -59a9 -c4a8 -9614 -1e6c -7236 -0094 -8df0 -e0a6 -69a3 -3bad -a64f -ac6c -437f -6574 -d748 -8fd3 -0b4c -7323 -12b6 -91b8 -d0ba -6215 -4884 -b083 -a329 -37d6 -6b07 -e342 -8db7 -0000 -724b -1c8e -94d0 -c8d8 -5d8d -4e39 -b5aa -9f93 -32cf -6cca -e78e -8d4d -fcd7 -71f2 -1e66 -954a -c845 -5d89 -4dc7 -b4ba -a09a -3507 -6bba -e3ea -8dca -01d5 -72a3 -1854 -92e4 -cef4 -620b -4719 -ade2 -a691 -3e3c -673a -d88c -9018 -0ef1 -732c -0a19 -8f03 -dd87 -6996 -3913 -a294 -b314 -4d27 -5d2f -c667 -96c6 -23b0 -70a2 -f393 -8cce -f4d3 -70eb -2220 -95fc -c881 -5ee2 -4a77 -aff0 -a5a9 -3e3c -6693 -d5d7 -9134 -14a9 -72cb -016c -8d7a -e8bc -6e1c -2c15 -9a2f -c0d6 -5a0a -4fe4 -b4ba -a241 -3a19 -6858 -d8d8 -9093 -131e -72da -015a -8d62 -ea6a -6ed4 -28f8 -984c -c512 -5d8d -4afb -af3f diff --git a/9_Firmware/9_2_FPGA/long_chirp_seg0_q.mem b/9_Firmware/9_2_FPGA/long_chirp_seg0_q.mem deleted file mode 100644 index 6207c52..0000000 --- a/9_Firmware/9_2_FPGA/long_chirp_seg0_q.mem +++ /dev/null @@ -1,2048 +0,0 @@ -0000 -43bb -6d97 -6d7e -4366 -ff66 -bb97 -9215 -92ee -bde1 -026a -460d -6e95 -6c3b -3fd4 -fa93 -b764 -907d -951c -c386 -09a4 -4c05 -7099 -68f3 -3801 -f0f7 -afd1 -8e4d -99bc -cdab -1596 -54fa -72a0 -62ac -2b64 -e2c5 -a5c8 -8cd9 -a204 -dce2 -25e2 -5fb2 -7305 -5801 -1975 -d098 -9ade -8e12 -af78 -f196 -3999 -6a34 -6f8e -4762 -0207 -bbcd -9179 -9472 -c395 -0b96 -4edb -71ab -6597 -2f89 -e5ca -a6db -8cdb -a2a6 -df42 -2988 -6289 -7275 -5293 -1023 -c6e7 -9593 -90e5 -bae9 -0207 -4854 -7027 -68a1 -34db -eaad -a97f -8cff -a15a -ddfd -2926 -62cc -724a -50ed -0ce8 -c351 -93bb -92a1 -c093 -09db -4eee -71f7 -63c3 -2a62 -de9d -a148 -8d0e -aacc -eda5 -3888 -6ac9 -6e69 -41bf -f843 -b222 -8e27 -9c30 -d628 -2296 -5fcd -72be -52f6 -0e70 -c37b -9357 -9371 -c3d5 -0f09 -5394 -72d9 -5ed0 -2059 -d35c -9a5a -8ef4 -b65e -fef0 -4807 -70a9 -666f -2de2 -e089 -a168 -8d2c -ad17 -f2bc -3e75 -6dbe -6af7 -374e -ea52 -a739 -8cce -a741 -ea82 -37b0 -6b40 -6d5f -3cfe -f064 -aafa -8ced -a43e -e630 -342b -69e7 -6e4f -3f3f -f29e -ac35 -8cff -a3ad -e5b2 -341b -6a0c -6e13 -3e37 -f0f7 -aac8 -8ce1 -a57b -e905 -377f -6ba4 -6c99 -39d4 -eb75 -a6db -8cd4 -a9e5 -f039 -3e27 -6e48 -696c -31d5 -e235 -a0ea -8d80 -b16d -fb65 -47a1 -7129 -63c3 -25dd -d581 -99d0 -8ff0 -bcc7 -0a81 -5321 -730e -5a90 -1596 -c5f7 -92de -9584 -ccb1 -1d3b -5f5c -7252 -4ca6 -00f1 -b4ba -8de6 -9fd6 -e1b2 -32b3 -6a6d -6cfa -38fe -e86d -a3a6 -8d35 -b076 -fbc1 -4939 -71cd -60f0 -1f12 -cd73 -9566 -9361 -c881 -19dc -5e18 -7270 -4c6f -ff66 -b2a2 -8d69 -a2dc -e813 -3999 -6d91 -6933 -2ea8 -dc09 -9bf0 -8f81 -bd40 -0d93 -56e7 -732c -53a1 -0895 -b909 -8e6f -9f10 -e253 -3522 -6c2c -6a8e -310c -ddc2 -9c6e -8f78 -bdc8 -0f09 -5864 -7310 -50e0 -03d6 -b4ba -8d89 -a325 -ea27 -3cd4 -6f1d -6622 -2697 -d262 -968f -9336 -ca39 -1e24 -61e4 -70fd -4339 -f12e -a71a -8d09 -b129 -0000 -4ee0 -72fa -589f -0e0e -bbcd -8eaf -9f60 -e4da -3933 -6e48 -66f5 -2728 -d1d4 -95d8 -943d -cdfe -2358 -653a -6f34 -3bad -e715 -a044 -8e89 -bbd2 -0f09 -59eb -72bb -4b90 -fa30 -ac06 -8cd0 -ae1a -fd52 -4e15 -7301 -5744 -0a62 -b79e -8da6 -a43e -eeb8 -4302 -715f -5f77 -175c -c1f3 -8fcc -9d84 -e360 -3999 -6ef6 -64e7 -2116 -ca4a -9242 -9935 -db3c -3271 -6ca3 -683c -27ae -d02d -944b -96b9 -d628 -2de2 -6b02 -69f8 -2b48 -d35c -956d -95a8 -d401 -2c1b -6a6d -6a6b -2bff -d3b7 -956d -95ce -d4b8 -2d2c -6b02 -69aa -29d8 -d13c -944b -9733 -d852 -310c -6ca3 -6791 -24c4 -cc01 -9242 -9a18 -deea -3795 -6ef6 -63c3 -1ca0 -c43e -8fcc -9ef2 -e8a4 -4078 -715f -5db4 -1148 -ba5a -8da6 -a662 -f59e -4b33 -7301 -54b3 -02ae -aefd -8cd0 -b125 -05d0 -56f3 -72bb -4802 -f0f7 -a325 -8e89 -bfee -18eb -6289 -6f34 -36fd -dca8 -9839 -943d -d345 -2e2c -6c56 -66f5 -214c -c6cd -900c -9f60 -eb45 -4433 -7256 -589f -0723 -b120 -8cce -b129 -0754 -58e6 -723d -4339 -e990 -9e1c -90d1 -ca39 -25e2 -6971 -69c8 -2697 -cab7 -90e3 -9e2c -ea27 -442e -7277 -5734 -03d6 -adf7 -8cf0 -b620 -0f09 -5e43 -7088 -39ef -ddc2 -97c4 -9572 -d864 -3522 -6f4f -60f0 -134e -b909 -8d20 -ac5f -026a -56e7 -7265 -42c0 -e733 -9bf0 -9290 -d158 -2ef1 -6d91 -63c3 -17ed -bc36 -8d69 -aaa7 -009a -5630 -7270 -4275 -e624 -9b0d -9361 -d457 -328d -6eed -60f0 -11e1 -b6c7 -8ce2 -b076 -09a4 -5c5a -70c2 -38fe -daaa -9593 -9890 -e1b2 -3f6d -721a -5734 -00f1 -aa02 -8dae -bf5f -1d3b -6724 -6a7c -24e1 -c5f7 -8ed8 -a570 -fa4f -5321 -72b7 -4339 -e552 -99d0 -94ee -da23 -3999 -7129 -5a38 -049b -abc3 -8d80 -bef9 -1dcb -67dc -696c -214c -c1d9 -8de4 -a9e5 -0251 -5925 -715a -39d4 -d992 -945c -9b0d -e905 -4740 -731f -4d83 -f0f7 -9f0c -91ed -d301 -341b -7027 -5c53 -06a8 -ac35 -8d95 -c0c1 -2134 -69e7 -66b5 -19d0 -ba5a -8ced -b246 -0f9c -61ba -6d5f -2a0c -c850 -8ed3 -a741 -0000 -58c7 -7123 -374e -d53c -9242 -9f34 -f2bc -4ffa -72d4 -41bf -e089 -9656 -9991 -e7f4 -4807 -7331 -49a2 -e9d9 -9a5a -95ce -dfa7 -416d -72d9 -4f47 -f0f7 -9dc4 -9371 -d9c0 -3c85 -724a -52f6 -f5c9 -a033 -921e -d628 -3984 -71d9 -54e5 -f843 -a168 -9197 -d4c9 -3888 -71ba -5534 -f862 -a148 -91c0 -d59e -3999 -71f7 -53e9 -f625 -9fd6 -92a1 -d8a9 -3caf -7279 -50ed -f190 -9d34 -9467 -ddfd -41aa -7301 -4c12 -eaad -99a5 -975f -e5b2 -4854 -732e -4517 -e194 -9593 -9bf3 -efdd -5053 -7275 -3bad -d678 -918e -a2a6 -fc87 -5925 -702d -2f89 -c9b1 -8e55 -ac06 -0b96 -6215 -6b8e -2077 -bbcd -8cd2 -b89e -1cbe -6a34 -63c3 -0e6a -ada1 -8e12 -c8d8 -2f68 -7059 -5801 -f9a2 -a04e -9336 -dce2 -429d -7327 -47a1 -e2c5 -954a -9d54 -f489 -54fa -7128 -3255 -caf9 -8e4d -ad4b -0f09 -64ab -68f3 -1854 -b3fb -8d35 -c386 -2af2 -6f83 -596f -fa93 -a01b -93c5 -dfb9 -460d -732c -421f -daf0 -9215 -a351 -009a -5d6c -6d7e -2382 -bc45 -8cce -bc4f -23b0 -6da0 -5cf8 -ff66 -a24c -92d0 -dde0 -4548 -732c -4154 -d91d -9140 -a5a9 -056d -60b1 -6b34 -1c16 -b571 -8d35 -c52c -2e80 -70d3 -545f -f0f7 -9a2f -9921 -eeca -52fe -7128 -2fb6 -c5e7 -8d3b -b5c2 -1d3b -6bf0 -5f05 -015a -a282 -9336 -e095 -48c2 -72e4 -3aee -d098 -8ec6 -add9 -134e -683e -63c3 -099e -a72e -911b -da7b -4433 -7326 -3ec3 -d429 -8f6b -ac06 -1154 -67a7 -6423 -09bc -a6db -916b -dc26 -461c -7306 -3bad -d03e -8e7b -afe7 -1762 -6a6d -6045 -01b7 -a1a1 -9461 -e5b2 -4e2b -71e0 -314a -c53c -8cff -ba47 -252d -6f3c -56df -f190 -9906 -9bce -f78a -5ad1 -6d5f -1e9b -b490 -8db9 -cccd -3999 -72f8 -4592 -d9e9 -9054 -aacc -11b0 -68bb -61ba -02df -a168 -9515 -e917 -51c8 -70b3 -29d8 -bd27 -8ce5 -c4d2 -3260 -724a -4a85 -df13 -9185 -a86b -0f09 -67fc -622c -02cc -a0d8 -95ce -ebdd -545f -6fa5 -249b -b7f9 -8d6d -cc1c -3a84 -731e -41bf -d3c8 -8e91 -b202 -1d7d -6dbe -5884 -f159 -97ba -9ec0 -0000 -6147 -6831 -0e39 -a6fe -92a1 -e432 -4fb7 -70db -2895 -ba5a -8d40 -cb93 -3b09 -732b -3f3f -cfea -8dbf -b705 -24ff -7027 -519c -e612 -92fc -a6df -0f09 -6900 -5f90 -fb90 -9bbf -9b0d -fa3c -5eec -6958 -0f7e -a6db -932e -e751 -530b -6f73 -214c -b343 -8eaf -d6b2 -4656 -7280 -30b3 -c012 -8ce9 -c886 -3999 -732c -3da5 -cc96 -8d2d -bcc7 -2d71 -7221 -483c -d847 -8ed8 -b34c -224f -6ffb -50ab -e2c5 -9156 -abd8 -1884 -6d44 -5734 -ebd0 -942a -a628 -1041 -6a6d -5c1b -f343 -96ec -a1f9 -09a4 -67d4 -5fa1 -f908 -994b -9f10 -04ba -65bd -61fb -fd15 -9b0d -9d3a -018b -6459 -6353 -ff66 -9c0b -9c58 -0019 -63c6 -63c3 -fffa -9c30 -9c58 -0063 -6410 -6353 -fed1 -9b79 -9d3a -026a -6531 -61fb -fbec -99f5 -9f10 -062c -6711 -5fa1 -f74c -97c4 -a1f9 -0ba8 -6985 -5c1b -f0f7 -951c -a628 -12d5 -6c50 -5734 -e8f8 -9244 -abd8 -1b9e -6f1d -50ab -df6c -8f9c -b34c -25e2 -7182 -483c -d47f -8d9b -bcc7 -3166 -72fc -3da5 -c87c -8cce -c886 -3dcf -72f5 -30b3 -bbcd -8dd3 -d6b2 -4a9d -70c6 -214c -af0a -9156 -e751 -5724 -6bc3 -0f7e -a2f6 -9804 -fa3c -6289 -6344 -fb90 -9882 -a277 -0f09 -6bc5 -56bf -e612 -90c9 -b125 -24ff -71ae -45dc -cfea -8cff -c43e -3b09 -730c -3097 -ba5a -8e57 -db94 -4fb7 -6eb7 -175c -a6fe -95e4 -f675 -6147 -63c3 -fb27 -97ba -a460 -1397 -6dbe -51b2 -dd93 -8e91 -b9fd -310c -731e -38ad -c0e0 -8d6d -d628 -4c4a -6fa5 -19be -a7d8 -95ce -f759 -6256 -622c -f6f0 -9593 -a86b -1afc -7010 -4a85 -d35c -8d18 -c4d2 -3d80 -72ac -29d8 -b2fe -90d9 -e917 -5a98 -683c -02df -9a51 -a216 -11b0 -6dbe -5053 -d9e9 -8db3 -c045 -3999 -72f8 -2c8d -b490 -9085 -e8a4 -5ad1 -67b9 -00de -9906 -a43e -1615 -6f3c -4bd6 -d373 -8cff -c793 -4187 -71e0 -2232 -ac06 -9461 -f5fa -62e5 -6045 -f0f7 -929f -afe7 -27cb -72aa -3bad -c109 -8dc9 -dc26 -533f -6bc3 -09bc -9c9d -a0a4 -1154 -6e48 -4d6c -d429 -8cf6 -c944 -4433 -7115 -1c70 -a72e -97c7 -0000 -683e -58b3 -e324 -8ec6 -bcc7 -3842 -72e4 -28f8 -afbb -9336 -f476 -6315 -5f05 -ece2 -90e3 -b5c2 -30cf -7332 -2fb6 -b4ba -9151 -eeca -6056 -6193 -f0f7 -91e4 -b371 -2e80 -7330 -310c -b571 -9134 -eee9 -60b1 -60f0 -ef44 -9140 -b589 -3182 -732c -2d10 -b1c7 -92d0 -f4d3 -6410 -5cf8 -e7d6 -8f4d -bc4f -3999 -7290 -2382 -aa3f -96ec -009a -6996 -54d0 -daf0 -8d3f -c881 -460d -6fe8 -13f3 -a01b -9f10 -122a -6f83 -4719 -c954 -8d35 -db0d -5559 -68f3 -fe2b -9593 -ad4b -28cf -7314 -3255 -b4ba -9228 -f489 -64d2 -5aef -e2c5 -8e0e -c3b0 -429d -7093 -1596 -a04e -9f93 -1460 -7059 -4339 -c3ff -8e12 -e372 -5bc6 -63c3 -f18a -9105 -b89e -37d6 -7280 -2077 -a67e -9aa3 -0b96 -6e48 -490a -c9b1 -8d5c -de9d -5925 -6574 -f439 -918e -b7b6 -377f -7275 -1f5a -a54a -9bf3 -0f09 -6f6f -4517 -c4a8 -8e30 -e5b2 -5e0e -60f4 -eaad -8f0c -c0c1 -41aa -7052 -122a -9d34 -a43e -1e89 -7279 -3675 -b5e7 -92a1 -f927 -6853 -53e9 -d592 -8cce -d59e -540a -6824 -f862 -9242 -b73e -3888 -7216 -1ac0 -a168 -a055 -18fd -71d9 -39af -b7f9 -921e -f880 -687a -52f6 -d35c -8cdb -d9c0 -57a9 -653a -f0f7 -8ffb -bed5 -416d -6fec -0e70 -9a5a -a92d -27e8 -7331 -29d8 -aa75 -9991 -0d19 -6fb4 -41bf -bea2 -9036 -f2bc -667d -5534 -d53c -8cd5 -da35 -58c7 -63c3 -ecc4 -8ed3 -c483 -47db -6d5f -03f5 -955a -b246 -34f7 -724a -19d0 -9f78 -a3cb -2134 -7301 -2d9e -ac35 -9913 -0d81 -7027 -3eec -baa9 -91ed -fa99 -6a6d -4d83 -ca03 -8dfc -e905 -6289 -595b -d992 -8cce -d91d -5925 -6296 -e8c8 -8de4 -cb14 -4edb -696c -f73a -90bc -bef9 -4433 -6e2b -049b -94dc -b4bf -3999 -7127 -10bc -99d0 -ac4a -2f68 -72b7 -1b80 -9f34 -a570 -25e2 -7332 -24e1 -a4b2 -9fff -1d3b -72e6 -2ce3 -aa02 -9bc5 -1596 -721a -3391 -aee7 -9890 -0f09 -710c -38fe -b335 -9631 -09a4 -6fef -3d3c -b6c7 -9482 -056d -6eed -405f -b982 -9361 -026a -6e25 -4275 -bb56 -92b7 -009a -6dad -4389 -bc36 -9273 -0000 -6d91 -43a2 -bc1d -9290 -009a -6dd3 -42c0 -bb0c -9310 -026a -6e6d -40df -b909 -93ff -056d -6f4f -3df3 -b620 -9572 -09a4 -7060 -39ef -b266 -9786 -0f09 -717c -34c0 -adf7 -9a60 -1596 -7277 -2e53 -a8f8 -9e2c -1d3b -7317 -2697 -a39b -a31a -25e2 -731d -1d7d -9e1c -a95e -2f68 -723d -12ff -98c6 -b129 -3999 -7026 -0723 -93f4 -baa9 -4433 -6c80 -f9ff -900c -c601 -4edb -66f5 -ebbe -8d84 -d345 -5925 -5f32 -dca8 -8cd8 -e271 -6289 -54f1 -cd20 -8e89 -f362 -6a6d -4802 -bdaf -9316 -05d0 -7027 -3852 -aefd -9aed -1945 -7301 -25fa -a1d6 -a662 -2d1b -724a -1148 -971e -b5a1 -4078 -6d5f -faca -8fcc -c897 -5252 -63c3 -e354 -8cd4 -deea -6178 -5534 -cc01 -8f12 -f7e6 -6ca3 -41bf -b62e -9733 -1279 -728e -29d8 -a36f -a58f -2d2c -7218 -0e70 -956d -ba0c -4634 -6a6b -f0f7 -8dc9 -d401 -5b86 -5b28 -d35c -8de8 -f223 -6b02 -4491 -b7f9 -96b9 -1279 -72ac -27ae -a168 -a87f -3271 -70ee -065e -9242 -c29a -4f04 -64e7 -e354 -8cce -e360 -64fe -4eb3 -c1f3 -92a1 -081a -715f -2fa6 -a602 -a43e -2d1b -71cd -0a62 -933e -c0c1 -4e15 -6513 -e2cb -8cd0 -e5b2 -668b -4b90 -bdaf -94ae -0f09 -7281 -277f -a044 -ab0f -377f -6f34 -fd02 -8f60 -cdfe -5925 -5bd1 -d1d4 -8e99 -f946 -6e48 -39ff -ac9f -9f60 -26b4 -7280 -0e0e -93f4 -c055 -4ee0 -63c3 -deae -8d09 -ed01 -6a58 -4339 -b413 -9a77 -1e24 -731d -1596 -968f -bb33 -4ab4 -6622 -e2c5 -8cdd -ea27 -6979 -4478 -b4ba -9a60 -1e9b -7310 -13c8 -9593 -bdc8 -4d9a -63f5 -ddc2 -8d35 -f0a1 -6c2c -3df3 -ae71 -9f10 -2810 -7211 -0895 -9193 -c881 -56e7 -5c48 -d011 -8f81 -009a -70c2 -2ea8 -a2bf -aa69 -3999 -6d8d -f3dd -8d69 -dcc5 -6410 -4c6f -bb56 -9766 -19dc -732c -1516 -9566 -bfa1 -5088 -60f0 -d695 -8e5f -fbc1 -6fef -310c -a3a6 -aa22 -3a34 -6cfa -f0f7 -8d12 -e1b2 -6703 -46c7 -b4ba -9bc5 -2426 -7252 -084b -90e3 -ccb1 -5b4e -5681 -c5f7 -9336 -1060 -730e -1b80 -9766 -bcc7 -4f23 -6126 -d581 -8ed9 -0000 -7129 -2a51 -9e9f -b16d -4433 -67dc -e235 -8d23 -f381 -6e48 -34ec -a511 -a9e5 -3b98 -6bc3 -eb75 -8cce -eafc -6ba4 -3bad -a9bc -a57b -35fd -6dbc -f0f7 -8cee -e660 -6a0c -3eec -ac06 -a3ad -33bd -6e5b -f29e -8cff -e59a -69e7 -3edd -abae -a43e -34f7 -6dd3 -f064 -8cdf -e8a4 -6b40 -3b7d -a8bc -a741 -3999 -6bf7 -ea52 -8cd5 -ef8e -6dbe -3499 -a388 -ad17 -415e -683c -e089 -8d8d -fa6e -70a9 -29d8 -9cc6 -b65e -4bb6 -61c4 -d35c -9014 -0941 -72d9 -1ade -9593 -c3d5 -57a9 -5774 -c37b -95ce -1bbc -72be -0780 -8f8c -d628 -63b7 -4824 -b222 -a055 -310c -6e69 -f008 -8ccf -eda5 -6dbe -32e0 -a148 -b137 -4793 -63c3 -d592 -8fdf -09db -72fe -175c -93bb -c98b -5caf -50ed -ba5a -9b4c -2926 -7052 -f675 -8cff -e95f -6cb4 -34db -a1f2 -b125 -4854 -62bc -d2b7 -90e5 -0f09 -7332 -1023 -9127 -d20d -6289 -484a -b0b9 -a2a6 -3690 -6bc3 -e5ca -8d5c -fc3d -71ab -214c -96f3 -c395 -5982 -5361 -bbcd -9b3d -2a9c -6f8e -f18a -8cce -f196 -6f9a -2a34 -9ade -bcc7 -5491 -5801 -c0fa -989d -25e2 -7093 -f54e -8cd9 -ef14 -6f1d -2b64 -9b2e -bcc2 -54fa -5734 -bf6e -99bc -28cf -6fb8 -f0f7 -8cd1 -f4a8 -7099 -24f3 -97c4 -c386 -5aa3 -50ca -b764 -9f10 -3322 -6c3b -e4aa -8dc7 -026a -72c1 -1670 -9215 -d1f1 -6410 -4366 -aa3f -aa75 -43bb -63c3 -d120 -9279 -182a -7286 -ff66 -8d59 -e935 -6e07 -2d10 -9b0d -beac -57e5 -52d4 -b886 -9f10 -346d -6b34 -e077 -8eac -09a4 -7330 -0c6d -8f2d -de27 -6a6d -35e2 -9faa -b825 -52fe -5734 -bd0d -9c87 -30cf -6c56 -e2c5 -8e67 -08e5 -7330 -0b8a -8ed8 -e095 -6baa -3229 -9d05 -bcc7 -5774 -5227 diff --git a/9_Firmware/9_2_FPGA/long_chirp_seg1_i.mem b/9_Firmware/9_2_FPGA/long_chirp_seg1_i.mem deleted file mode 100644 index 0dbd6d4..0000000 --- a/9_Firmware/9_2_FPGA/long_chirp_seg1_i.mem +++ /dev/null @@ -1,2048 +0,0 @@ -a74d -41c4 -63c3 -ceee -9410 -1f30 -7115 -f35c -8cda -f9f2 -722d -1866 -91b8 -d611 -67a7 -3a3f -a176 -b709 -533f -55c9 -b9e4 -9f88 -377f -68d5 -d835 -913d -1762 -7236 -f958 -8cd1 -f5fa -71be -1a4e -91ff -d622 -681f -386d -9fb8 -ba47 -56b6 -518f -b458 -a43e -3f5e -6432 -cde2 -9537 -242c -6f7b -ea33 -8db9 -0742 -7332 -0736 -8db3 -eaa1 -6fac -2306 -9494 -d006 -65af -3c11 -a168 -b8d8 -5650 -5122 -b2fe -a619 -42d9 -6168 -c7ff -9867 -2ca4 -6c76 -df13 -9002 -1504 -7236 -f6f0 -8cd8 -fd34 -72df -0e70 -8e94 -e642 -6ee2 -249b -94ac -d10f -66d9 -38ad -9e77 -be41 -5b7b -4a19 -ab38 -ae4e -4d87 -5884 -ba2e -a176 -3dbf -63c3 -ca9c -97cf -2cd7 -6bd6 -dbd4 -9149 -1b74 -70db -ed3e -8db6 -0a25 -730c -fe56 -8cd5 -f95e -72b3 -0eb4 -8e52 -e97e -7027 -1e06 -91d5 -dac7 -6bc5 -2c15 -9700 -cd68 -65e8 -38bd -9d77 -c17b -5eec -43ed -a4e3 -b709 -5724 -4da3 -acf5 -ae0d -4edb -55ea -b563 -a676 -4656 -5cd7 -bdf0 -a02c -3dcf -6286 -c667 -9b10 -3575 -6716 -ce9a -9702 -2d71 -6aab -d667 -93df -25e2 -6d67 -ddb1 -9182 -1ee3 -6f6d -e462 -8fc9 -1884 -70df -ea6a -8e96 -12d5 -71db -efbf -8dca -0ddd -727d -f458 -8d4b -09a4 -72de -f830 -8d04 -062c -7312 -fb46 -8ce0 -0379 -7329 -fd96 -8cd2 -018b -7331 -ff22 -8cce -0063 -7332 -ffe7 -8cce -0000 -7332 -ffe7 -8cce -0063 -7332 -ff22 -8ccf -018b -732e -fd96 -8cd7 -0379 -7320 -fb46 -8cee -062c -72fc -f830 -8d22 -09a4 -72b5 -f458 -8d83 -0ddd -7236 -efbf -8e25 -12d5 -716a -ea6a -8f21 -1884 -7037 -e462 -9093 -1ee3 -6e7e -ddb1 -9299 -25e2 -6c21 -d667 -9555 -2d71 -68fe -ce9a -98ea -3575 -64f0 -c667 -9d7a -3dcf -5fd4 -bdf0 -a329 -4656 -598a -b563 -aa16 -4edb -51f3 -acf5 -b25d -5724 -48f7 -a4e3 -bc13 -5eec -3e85 -9d77 -c743 -65e8 -3298 -9700 -d3eb -6bc5 -2539 -91d5 -e1fa -7027 -1682 -8e52 -f14c -72b3 -06a2 -8cd5 -01aa -730c -f5db -8db6 -12c2 -70db -e48c -9149 -242c -6bd6 -d329 -97cf -3564 -63c3 -c241 -a176 -45d2 -5884 -b279 -ae4e -54c8 -4a19 -a485 -be41 -6189 -38ad -9927 -d10f -6b54 -249b -911e -e642 -716c -0e70 -8d21 -fd34 -7328 -f6f0 -8dca -1504 -6ffe -df13 -938a -2ca4 -6799 -c7ff -9e98 -42d9 -59e7 -b2fe -aede -5650 -4728 -a168 -c3ef -65af -2ffa -9494 -dcfa -6fac -155f -8db3 -f8ca -7332 -f8be -8db9 -15cd -6f7b -dbd4 -9537 -321e -6432 -c0a2 -a43e -4ba8 -518f -a94a -ba47 -6048 -386d -97e1 -d622 -6e01 -1a4e -8e42 -f5fa -732f -f958 -8dca -1762 -6ec3 -d835 -972b -377f -6078 -b9e4 -aa37 -533f -48f7 -a176 -c5c1 -67a7 -29ef -91b8 -e79a -722d -060e -8cda -0ca4 -7115 -e0d0 -9410 -3112 -63c3 -be3c -a74d -50c1 -4afb -a273 -c512 -67b4 -28f8 -912c -ea6a -729e -015a -8d26 -131e -6f6d -d8d8 -97a8 -3a19 -5dbf -b4ba -b01c -5a0a -3f2a -9a2f -d3eb -6e1c -1744 -8d7a -fe94 -72cb -eb57 -9134 -2a29 -6693 -c1c4 -a5a9 -5010 -4a77 -a11e -c881 -6a04 -2220 -8f15 -f4d3 -7332 -f393 -8f5e -23b0 -693a -c667 -a2d1 -4d27 -4cec -a294 -c6ed -6996 -2279 -8f03 -f5e7 -732c -f10f -9018 -2774 -673a -c1c4 -a691 -521e -4719 -9df5 -cef4 -6d1c -1854 -8d5d -01d5 -7236 -e3ea -9446 -3507 -5f66 -b4ba -b239 -5d89 -37bb -954a -e19a -71f2 -0329 -8d4d -1872 -6cca -cd31 -9f93 -4a56 -4e39 -a273 -c8d8 -6b30 -1c8e -8db5 -0000 -7249 -e342 -94f9 -37d6 -5cd7 -b083 -b77c -6215 -2f46 -91b8 -ed4a -7323 -f4b4 -8fd3 -28b8 -6574 -bc81 -ac6c -59b1 -3bad -965d -e0a6 -7210 -0094 -8dca -1e6c -69ec -c4a8 -a657 -53fa -4284 -99a5 -d9dd -70f4 -06a2 -8d33 -1994 -6b99 -c80f -a43e -51fc -4469 -9a7d -d8a9 -70ce -06d9 -8d3a -1a66 -6b19 -c667 -a5bc -540a -4191 -98a5 -dcfa -71ba -013b -8dea -20db -683c -bfd4 -ab1b -59d0 -39af -94ac -e703 -72f4 -f5c9 -9031 -2ca4 -6205 -b505 -b542 -623c -2c15 -8ffb -f70f -72d3 -e4bc -95ce -3cee -56d3 -a769 -c57c -6b54 -180c -8cf0 -0d19 -6ed1 -cef4 -a125 -4ffa -44b4 -9983 -dcfa -7204 -fd5f -8edd -282d -63c3 -b68d -b4cd -62a6 -2a0c -8f32 -fc0b -7222 -dd3b -99b3 -45a6 -4e7d -9f78 -d2ac -7021 -06a2 -8d95 -210b -66ed -bb1b -b125 -607e -2cff -8fb0 -fa99 -7236 -dcf4 -9a3d -4740 -4c58 -9d77 -d6f7 -7143 -0044 -8ea6 -28b8 -6296 -b37a -b948 -6652 -214c -8d7c -08c6 -6f47 -ce2b -a329 -543d -3d8b -94dc -ea70 -7332 -ea64 -94ee -3de9 -53b6 -a273 -cfbd -6fde -05b1 -8df9 -25e2 -6382 -b3ee -b9c2 -6724 -1e66 -8d1a -0e2d -6d61 -c738 -a8cc -5ae4 -3391 -90dc -f830 -7236 -daaa -9c97 -4ccb -44db -97c4 -e4c8 -731e -ed0d -9482 -3e3c -525f -a077 -d457 -7140 -fd96 -8fbe -3043 -5c7f -a9d0 -c6ed -6dad -0bd3 -8d72 -239f -63c3 -b2e7 -bc5e -6953 -1793 -8cce -18cd -68c0 -bb0c -b462 -64f3 -20cf -8d20 -1017 -6c01 -c1c4 -aea5 -611f -279c -8dd5 -09a4 -6dfd -c6bd -aadd -5e43 -2c15 -8e84 -0586 -6f0e -c9c1 -a8cc -5ca4 -2e53 -8ee5 -03c3 -6f6d -cab7 -a84f -5c65 -2e64 -8ed8 -045e -6f2f -c996 -a95e -5d8d -2c49 -8e61 -0754 -6e46 -c667 -ac0b -6001 -27f3 -8daa -0ca4 -6c80 -c148 -b083 -6388 -214c -8d00 -1442 -698a -ba6e -b709 -67c7 -1836 -8cd8 -1e12 -64f3 -b230 -bfee -6c37 -0c9e -8dca -29de -5e31 -a90d -cb82 -7027 -fe87 -9091 -3743 -54b3 -9fb8 -da06 -72ba -ee1f -9601 -45a6 -47ea -971e -eb94 -72e9 -dbd4 -9ef2 -5420 -3769 -906b -0000 -6f92 -c86b -ac2d -6178 -2306 -8cfb -16bf -6791 -b513 -be41 -6c26 -0afc -8e4b -2ec4 -59e7 -a36f -d559 -725c -f01a -95ce -466f -45f4 -9589 -f0fd -7236 -d3e5 -a4ab -5b86 -2bba -8db6 -0fe6 -69f8 -b8a7 -bb6f -6b54 -0c23 -8e4b -2fd3 -5870 -a168 -d9af -72e9 -e941 -9935 -4d87 -3d66 -91a8 -fdaf -6f92 -c667 -af6b -64fe -1a18 -8cec -242c -5f77 -a807 -d05a -71e5 -f190 -9601 -4862 -425b -933e -f95e -7064 -c8bd -ae1a -647e -1a4e -8cf3 -2585 -5e31 -a615 -d3eb -7281 -ec19 -98a5 -4dd0 -3bad -90a9 -02fe -6da4 -bf21 -b709 -6a28 -0cc9 -8e99 -33ac -53fa -9c78 -e4da -730a -d94c -a329 -5bfe -27f3 -8d06 -1a54 -63c3 -ac02 -ccde -719f -f12e -9702 -4bed -3cb9 -90a4 -045e -6cca -bbe1 -bb33 -6c8a -04ec -9093 -3cd4 -4b79 -9687 -f306 -7128 -c9c1 -af20 -6669 -13c8 -8dca -3086 -5523 -9c6e -e6a9 -72cb -d43a -a79c -611f -1dad -8cee -2810 -5abe -a0ce -df31 -732c -da8d -a3b8 -5de3 -22c5 -8cce -23f7 -5d11 -a2bf -dc6d -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 diff --git a/9_Firmware/9_2_FPGA/long_chirp_seg1_q.mem b/9_Firmware/9_2_FPGA/long_chirp_seg1_q.mem deleted file mode 100644 index f7000dc..0000000 --- a/9_Firmware/9_2_FPGA/long_chirp_seg1_q.mem +++ /dev/null @@ -1,2048 +0,0 @@ -b67f -a16c -3999 -6839 -d7c1 -911b -15f7 -7280 -fcb8 -8cf6 -f0b3 -7095 -214c -94b5 -cdbc -6363 -41d3 -a6db -b05f -4ce2 -5b68 -c109 -9b0d -2fc2 -6c1b -e059 -8f34 -0f09 -7301 -01b7 -8d3e -edc4 -7027 -2232 -94ae -ceb6 -646f -3f3f -a44d -b42a -515b -56df -ba5a -9fcc -38d8 -67b9 -d4c9 -92a1 -1d06 -711d -f177 -8d08 -0000 -72f8 -0e58 -8ece -e3ba -6dbe -2999 -9745 -c9dd -624c -41bf -a568 -b3b6 -51c8 -55ac -b7f9 -a22f -3d80 -64ab -cda0 -95ce -26d1 -6e64 -e504 -8ebd -0f09 -72d7 -fce3 -8cd6 -f759 -724a -1423 -8fb7 -e0c4 -6d3a -29d8 -96cd -cc1c -644a -3d4c -a168 -b9fd -5834 -4dfe -aec8 -aacc -49ba -5ba0 -be2d -9ec0 -3999 -6614 -cedd -95e4 -2884 -6d5f -e030 -901f -171a -71a9 -f190 -8d40 -05e2 -732f -0282 -8cff -f54e -7241 -12a4 -8f06 -e5b2 -6f37 -21aa -92fc -d74e -6a6d -2f62 -9882 -ca4a -6441 -3bad -9f3e -bebb -5d0a -467e -a6db -b4a8 -551b -4fd6 -af0a -ac06 -4cbd -57c5 -b786 -a4c5 -4433 -5e5f -c012 -9eca -3bb2 -63c3 -c87c -99f5 -336a -6811 -d098 -9625 -2b81 -6b6c -d847 -9336 -2414 -6df8 -df6c -9105 -1d3b -6fd6 -e5f4 -8f71 -1708 -7128 -ebd0 -8e5a -1185 -720b -f0f7 -8da4 -0cbd -729b -f560 -8d35 -08b4 -72ee -f908 -8cf8 -056d -7319 -fbec -8cdb -02eb -732c -fe0c -8cd0 -012f -7331 -ff66 -8cce -0038 -7332 -fffa -8cce -0006 -7332 -ffc8 -8cce -009a -7331 -fed1 -8cd0 -01f4 -732c -fd15 -8cdb -0414 -7319 -fa93 -8cf8 -06f8 -72ee -f74c -8d35 -0aa0 -729b -f343 -8da4 -0f09 -720b -ee7b -8e5a -1430 -7128 -e8f8 -8f71 -1a0c -6fd6 -e2c5 -9105 -2094 -6df8 -dbec -9336 -27b9 -6b6c -d47f -9625 -2f68 -6811 -cc96 -99f5 -3784 -63c3 -c44e -9eca -3fee -5e5f -bbcd -a4c5 -487a -57c5 -b343 -ac06 -50f6 -4fd6 -aae5 -b4a8 -5925 -467e -a2f6 -bebb -60c2 -3bad -9bbf -ca4a -677e -2f62 -9593 -d74e -6d04 -21aa -90c9 -e5b2 -70fa -12a4 -8dbf -f54e -7301 -0282 -8cd1 -05e2 -72c0 -f190 -8e57 -171a -6fe1 -e030 -92a1 -2884 -6a1c -cedd -99ec -3999 -6140 -be2d -a460 -49ba -5534 -aec8 -b202 -5834 -4603 -a168 -c2b4 -644a -33e4 -96cd -d628 -6d3a -1f3c -8fb7 -ebdd -724a -08a7 -8cd6 -031d -72d7 -f0f7 -8ebd -1afc -6e64 -d92f -95ce -3260 -64ab -c280 -a22f -4807 -55ac -ae38 -b3b6 -5a98 -41bf -9db4 -c9dd -68bb -2999 -9242 -e3ba -7132 -0e58 -8d08 -0000 -72f8 -f177 -8ee3 -1d06 -6d5f -d4c9 -9847 -38d8 -6034 -ba5a -a921 -515b -4bd6 -a44d -c0c1 -646f -314a -94ae -ddce -7027 -123c -8d3e -fe49 -7301 -f0f7 -8f34 -1fa7 -6c1b -d03e -9b0d -3ef7 -5b68 -b31e -b05f -5925 -41d3 -9c9d -cdbc -6b4b -214c -8f6b -f0b3 -730a -fcb8 -8d80 -15f7 -6ee5 -d7c1 -97c7 -3999 -5e94 -b67f -add9 -5774 -4339 -9d05 -cdd7 -6baa -1f6b -8ed8 -f476 -7330 -f71b -8e67 -1d3b -6c56 -cf31 -9c87 -42f3 -5734 -ad02 -b825 -6056 -35e2 -9593 -de27 -70d3 -0c6d -8cd0 -09a4 -7154 -e077 -94cc -346d -60f0 -b886 -ad2c -57e5 -4154 -9b0d -d2f0 -6e07 -16cb -8d59 -009a -7286 -e7d6 -9279 -2ee0 -63c3 -bc45 -aa75 -55c1 -4366 -9bf0 -d1f1 -6deb -1670 -8d3f -026a -7239 -e4aa -93c5 -3322 -60f0 -b764 -af36 -5aa3 -3c7a -97c4 -db0d -7099 -0b58 -8cd1 -0f09 -6fb8 -d731 -99bc -4092 -5734 -ab06 -bcc2 -64d2 -2b64 -90e3 -ef14 -7327 -f54e -8f6d -25e2 -6763 -c0fa -a7ff -5491 -4339 -9ade -d5cc -6f9a -0e6a -8cce -0e76 -6f8e -d564 -9b3d -4433 -5361 -a67e -c395 -690d -214c -8e55 -fc3d -72a4 -e5ca -943d -3690 -5d5a -b0b9 -b7b6 -6289 -2df3 -9127 -efdd -7332 -f0f7 -90e5 -2d49 -62bc -b7ac -b125 -5e0e -34db -934c -e95f -7301 -f675 -8fae -2926 -64b4 -ba5a -af13 -5caf -3675 -93bb -e8a4 -72fe -f625 -8fdf -2a6e -63c3 -b86d -b137 -5eb8 -32e0 -9242 -eda5 -7331 -f008 -9197 -310c -5fab -b222 -b7dc -63b7 -29d8 -8f8c -f880 -72be -e444 -95ce -3c85 -5774 -a857 -c3d5 -6a6d -1ade -8d27 -0941 -6fec -d35c -9e3c -4bb6 -49a2 -9cc6 -d628 -70a9 -0592 -8d8d -1f77 -683c -bea2 -ad17 -5c78 -3499 -9242 -ef8e -732b -ea52 -9409 -3999 -58bf -a8bc -c483 -6b40 -175c -8cdf -0f9c -6dd3 -cb09 -a43e -5452 -3edd -9619 -e59a -7301 -f29e -91a5 -33bd -5c53 -ac06 -c114 -6a0c -19a0 -8cee -0f09 -6dbc -ca03 -a57b -5644 -3bad -945c -eafc -7332 -eb75 -943d -3b98 -561b -a511 -cb14 -6e48 -0c7f -8d23 -1dcb -67dc -bbcd -b16d -6161 -2a51 -8ed7 -0000 -7127 -d581 -9eda -4f23 -4339 -9766 -e480 -730e -efa0 -9336 -3a09 -5681 -a4b2 -ccb1 -6f1d -084b -8dae -2426 -643b -b4ba -b939 -6703 -1e4e -8d12 -0f09 -6cfa -c5cc -aa22 -5c5a -310c -9011 -fbc1 -71a1 -d695 -9f10 -5088 -405f -9566 -eaea -732c -e624 -9766 -44aa -4c6f -9bf0 -dcc5 -7297 -f3dd -9273 -3999 -5597 -a2bf -d158 -70c2 -ff66 -8f81 -2fef -5c48 -a919 -c881 -6e6d -0895 -8def -2810 -60f0 -ae71 -c20d -6c2c -0f5f -8d35 -223e -63f5 -b266 -bdc8 -6a6d -13c8 -8cf0 -1e9b -65a0 -b4ba -bb88 -6979 -15d9 -8cdd -1d3b -6622 -b54c -bb33 -6971 -1596 -8ce3 -1e24 -6589 -b413 -bcc7 -6a58 -12ff -8d09 -2152 -63c3 -b120 -c055 -6c0c -0e0e -8d80 -26b4 -60a0 -ac9f -c601 -6e48 -06ba -8e99 -2e2c -5bd1 -a6db -cdfe -70a0 -fd02 -90cc -377f -54f1 -a044 -d881 -7281 -f0f7 -94ae -4251 -4b90 -9975 -e5b2 -7330 -e2cb -9aed -4e15 -3f3f -933e -f59e -71cd -d2e5 -a43e -59fe -2fa6 -8ea1 -081a -6d5f -c1f3 -b14d -64fe -1ca0 -8cce -1cac -64e7 -b0fc -c29a -6dbe -065e -8f12 -3271 -5781 -a168 -d852 -72ac -ed87 -96b9 -4807 -4491 -94fe -f223 -7218 -d35c -a4d8 -5b86 -2bff -8dc9 -0f09 -6a6b -b9cc -ba0c -6a93 -0e70 -8de8 -2d2c -5a71 -a36f -d628 -728e -ed87 -9733 -49d2 -41bf -935d -f7e6 -70ee -cc01 -aacc -6178 -2116 -8cd4 -1cac -63c3 -adae -c897 -7034 -faca -92a1 -4078 -4a5f -971e -eeb8 -724a -d2e5 -a662 -5e2a -25fa -8cff -1945 -6513 -aefd -c7ae -7027 -fa30 -9316 -4251 -4802 -9593 -f362 -7177 -cd20 -ab0f -6289 -1d8f -8cd8 -2358 -5f32 -a6db -d345 -727c -ebbe -990b -4edb -39ff -900c -0601 -6c80 -bbcd -baa9 -6c0c -0723 -8fda -3999 -4ed7 -98c6 -ed01 -723d -d098 -a95e -61e4 -1d7d -8ce3 -25e2 -5ce6 -a39b -d969 -7317 -e2c5 -9e2c -5708 -2e53 -8d89 -1596 -65a0 -adf7 -cb40 -717c -f0f7 -9786 -4d9a -39ef -8fa0 -09a4 -6a8e -b620 -c20d -6f4f -fa93 -93ff -46f7 -40df -9193 -026a -6cf0 -bb0c -bd40 -6dd3 -ff66 -9290 -43e3 -43a2 -926f -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 -0000 diff --git a/9_Firmware/9_2_FPGA/matched_filter_processing_chain.v b/9_Firmware/9_2_FPGA/matched_filter_processing_chain.v index 86db56b..ee3419a 100644 --- a/9_Firmware/9_2_FPGA/matched_filter_processing_chain.v +++ b/9_Firmware/9_2_FPGA/matched_filter_processing_chain.v @@ -63,8 +63,8 @@ module matched_filter_processing_chain ( // inside the chain. multi_segment passed it through to nothing. // Reference chirp (time-domain, latency-aligned by upstream buffer) - // Upstream chirp_memory_loader_param selects long/short reference - // via use_long_chirp — this single pair carries whichever is active. + // Upstream chirp_reference_rom selects SHORT/MEDIUM/LONG reference + // via wave_sel[1:0] — this single pair carries whichever is active. input wire [15:0] ref_chirp_real, input wire [15:0] ref_chirp_imag, diff --git a/9_Firmware/9_2_FPGA/radar_mode_controller.v b/9_Firmware/9_2_FPGA/radar_mode_controller.v index 9c4c7ec..38a918a 100644 --- a/9_Firmware/9_2_FPGA/radar_mode_controller.v +++ b/9_Firmware/9_2_FPGA/radar_mode_controller.v @@ -13,7 +13,8 @@ * - mc_new_azimuth : toggle signal indicating azimuth step * * These signals are consumed by matched_filter_multi_segment and - * chirp_memory_loader_param in the receiver path. + * chirp_reference_rom in the receiver path. (chirp-v2 PR-D will replace + * this entire module with chirp_scheduler.) * * The controller mirrors the transmitter's chirp sequence defined in * plfm_chirp_controller_enhanced: diff --git a/9_Firmware/9_2_FPGA/radar_receiver_final.v b/9_Firmware/9_2_FPGA/radar_receiver_final.v index 0651e7e..2b68ff2 100644 --- a/9_Firmware/9_2_FPGA/radar_receiver_final.v +++ b/9_Firmware/9_2_FPGA/radar_receiver_final.v @@ -148,10 +148,16 @@ wire [7:0] gc_saturation_count; // Diagnostic: per-frame clipped sample counter wire [7:0] gc_peak_magnitude; // Diagnostic: per-frame peak magnitude wire [3:0] gc_current_gain; // Diagnostic: effective gain_shift -// Reference signal for the processing chain (carries long OR short ref -// depending on use_long_chirp — selected by chirp_memory_loader_param) +// Reference signal for the processing chain (carries SHORT/MEDIUM/LONG ref +// depending on wave_sel — selected by chirp_reference_rom). wire [15:0] ref_chirp_real, ref_chirp_imag; +// chirp-v2 PR-C: wave_sel shim. radar_mode_controller still produces a +// 1-bit use_long_chirp output (replaced in PR-D by chirp_scheduler whose +// native output is wave_sel[1:0]). MEDIUM is unreachable through the +// 1-bit path; the rom serves SHORT or LONG only until PR-D lands. +wire [1:0] wave_sel = use_long_chirp ? `RP_WAVE_LONG : `RP_WAVE_SHORT; + // ========== DOPPLER PROCESSING SIGNALS ========== wire [31:0] range_data_32bit; wire range_data_valid; @@ -390,16 +396,16 @@ rx_gain_control gain_ctrl ( .current_gain(gc_current_gain) ); -// 3. Dual Chirp Memory Loader +// 3. Chirp reference ROM (chirp-v2 PR-C) wire [10:0] sample_addr_from_chain; -chirp_memory_loader_param chirp_mem ( +chirp_reference_rom chirp_rom ( .clk(clk), .reset_n(reset_n), + .wave_sel(wave_sel), .segment_select(segment_request), .mem_request(mem_request), - .use_long_chirp(use_long_chirp), - .sample_addr(sample_addr_from_chain), + .sample_addr(sample_addr_from_chain), .ref_i(ref_i), .ref_q(ref_q), .mem_ready(mem_ready) @@ -414,7 +420,7 @@ chirp_memory_loader_param chirp_mem ( // // Why the 1-FF stage: multi_segment ST_PROCESSING latches `adc_data` through // one register stage (`fft_input_i <= buf_rdata_i`) before it reaches the -// chain. The ref path from chirp_memory_loader is combinational into the +// chain. The ref path from chirp_reference_rom is combinational into the // chain. Without compensation, ref leads sig by 1 cycle → autocorrelation // peak at bin 1 instead of bin 0 (verified in tb/tb_rxb_fullchain_latency.v // against fft_engine.v synthesis path: peak/mean ratio ~80× confirms clean diff --git a/9_Firmware/9_2_FPGA/run_regression.sh b/9_Firmware/9_2_FPGA/run_regression.sh index f399506..8683de1 100755 --- a/9_Firmware/9_2_FPGA/run_regression.sh +++ b/9_Firmware/9_2_FPGA/run_regression.sh @@ -62,7 +62,7 @@ PROD_RTL=( cdc_async_fifo.v fir_lowpass.v ddc_input_interface.v - chirp_memory_loader_param.v + chirp_reference_rom.v matched_filter_multi_segment.v matched_filter_processing_chain.v range_bin_decimator.v @@ -101,7 +101,7 @@ RECEIVER_RTL=( tb/ad9484_interface_400m_stub.v ddc_400m.v nco_400m_enhanced.v cic_decimator_4x_enhanced.v cdc_modules.v cdc_async_fifo.v fir_lowpass.v ddc_input_interface.v - chirp_memory_loader_param.v + chirp_reference_rom.v matched_filter_multi_segment.v matched_filter_processing_chain.v range_bin_decimator.v doppler_processor.v xfft_16.v fft_engine.v xfft_2048.v fft_engine_axi_bridge.v @@ -285,7 +285,7 @@ run_mf_cosim() { if [[ -n "$define" ]]; then cmd="$cmd $define" fi - cmd="$cmd -o $vvp tb/tb_mf_cosim.v matched_filter_processing_chain.v fft_engine.v xfft_2048.v fft_engine_axi_bridge.v frequency_matched_filter.v chirp_memory_loader_param.v" + cmd="$cmd -o $vvp tb/tb_mf_cosim.v matched_filter_processing_chain.v fft_engine.v xfft_2048.v fft_engine_axi_bridge.v frequency_matched_filter.v chirp_reference_rom.v" if ! eval "$cmd" 2>/tmp/iverilog_err_$$; then echo -e "${RED}COMPILE FAIL${NC}" @@ -677,7 +677,7 @@ run_test --timeout=600 "Matched Filter Chain" \ tb/tb_mf_reg.vvp \ tb/tb_matched_filter_processing_chain.v matched_filter_processing_chain.v \ fft_engine.v xfft_2048.v fft_engine_axi_bridge.v \ - chirp_memory_loader_param.v frequency_matched_filter.v + chirp_reference_rom.v frequency_matched_filter.v # RX-B regression coverage: chain pipeline depth + full-chain # autocorrelation peak position. Both run the production fft_engine @@ -693,7 +693,7 @@ run_test --timeout=600 "RX-B Full-Chain Autocorrelation (tb_rxb_fullchain_latenc tb/tb_rxb_fullchain_latency.v matched_filter_multi_segment.v \ matched_filter_processing_chain.v fft_engine.v xfft_2048.v \ fft_engine_axi_bridge.v frequency_matched_filter.v \ - chirp_memory_loader_param.v + chirp_reference_rom.v echo "" diff --git a/9_Firmware/9_2_FPGA/scripts/200t/build_200t.tcl b/9_Firmware/9_2_FPGA/scripts/200t/build_200t.tcl index 72ef327..0a183b7 100644 --- a/9_Firmware/9_2_FPGA/scripts/200t/build_200t.tcl +++ b/9_Firmware/9_2_FPGA/scripts/200t/build_200t.tcl @@ -55,7 +55,7 @@ set rtl_files [list \ "${rtl_dir}/adc_clk_mmcm.v" \ "${rtl_dir}/ad9484_interface_400m.v" \ "${rtl_dir}/cdc_modules.v" \ - "${rtl_dir}/chirp_memory_loader_param.v" \ + "${rtl_dir}/chirp_reference_rom.v" \ "${rtl_dir}/cic_decimator_4x_enhanced.v" \ "${rtl_dir}/dac_interface_single.v" \ "${rtl_dir}/ddc_400m.v" \ diff --git a/9_Firmware/9_2_FPGA/short_chirp_i.mem b/9_Firmware/9_2_FPGA/short_chirp_i.mem deleted file mode 100644 index 87023f7..0000000 --- a/9_Firmware/9_2_FPGA/short_chirp_i.mem +++ /dev/null @@ -1,50 +0,0 @@ -7332 -5c56 -1e0c -d044 -9729 -9271 -c9c7 -2238 -679c -6a91 -2399 -c10f -8d21 -b576 -1e0c -6d8f -57d5 -ebd7 -92e6 -ad06 -2399 -7276 -38c3 -b7b1 -92e6 -0000 -6dff -3ef1 -b234 -9bc2 -2399 -7219 -0173 -8de7 -e4c2 -6d8f -290f -956f -d440 -6ba2 -2399 -9012 -f021 -7330 -f021 -9271 -38c3 -54f5 -9f85 -ddc8 diff --git a/9_Firmware/9_2_FPGA/short_chirp_q.mem b/9_Firmware/9_2_FPGA/short_chirp_q.mem deleted file mode 100644 index dff81bd..0000000 --- a/9_Firmware/9_2_FPGA/short_chirp_q.mem +++ /dev/null @@ -1,50 +0,0 @@ -0000 -44e0 -6f35 -68d7 -2fbc -dc67 -9a5d -9201 -cda5 -2bc0 -6d8f -607b -08ad -a82b -90cb -dc67 -4a8a -716b -24f9 -b018 -9271 -f300 -643e -59ad -db07 -8cce -ddc8 -607b -54f5 -c73d -9271 -0fdf -7330 -0fdf -9012 -dc67 -6ba2 -2bc0 -956f -d6f1 -6d8f -1b3e -8de7 -fe8d -7219 -dc67 -9bc2 -4dcc -3ef1 -9201 diff --git a/9_Firmware/9_2_FPGA/tb/cosim/analyze_short_chirp_mismatch.py b/9_Firmware/9_2_FPGA/tb/cosim/analyze_short_chirp_mismatch.py deleted file mode 100644 index 7910b99..0000000 --- a/9_Firmware/9_2_FPGA/tb/cosim/analyze_short_chirp_mismatch.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python3 -# ruff: noqa: T201 -""" -analyze_short_chirp_mismatch.py — quantify TX-I matched-filter mismatch loss. - -Background ----------- -TX path (`plfm_chirp_controller.v:74,118-127`): - 60-sample inline LUT, 8-bit unsigned offset binary (DAC center = 128), - played at fs_tx = 120 MHz over 0.5 us. Real-valued passband chirp. - Module comment claims "30 MHz to 10 MHz" downchirp. - -RX matched-filter reference (`gen_chirp_mem.py:81-101` -> `short_chirp_{i,q}.mem`): - 50-sample complex baseband, Q15, fs_rx = 100 MHz over 0.5 us. - Generated as a 0 -> +20 MHz baseband upchirp: - phi(t) = pi * (BW/T) * t^2, BW = 20 MHz, T = 0.5 us - I(n) = cos(phi), Q(n) = sin(phi), scaled by 0.9*Q15 - -These are claimed by the ledger to be ~2-3 dB mismatched. This script -derives the implied baseband chirp from the TX LUT (modeling the IF chain -and DDC by NCO at 120 MHz, decimation 4x to 100 MHz), then computes the -true matched-filter peak power lost to template mismatch by: - - 1. Loading the TX LUT, computing the analytic signal (Hilbert), - verifying instantaneous-frequency trajectory + claimed bandwidth. - 2. Modeling the DDC: mix by 120 MHz NCO at 400 MHz ADC sample rate, - low-pass + decimate 4x to recover 100 MHz baseband. Since the TX - LUT is only at 120 MHz, we upsample 120->400 first via zero-stuff + - filter (the radar's analog chain does this naturally). - 3. Producing the implied 50-sample Q15 baseband reference. - 4. Computing the ambiguity peak between - a) implied-from-TX reference cross-correlated with itself - b) implied-from-TX reference cross-correlated with the existing - short_chirp_{i,q}.mem - The dB ratio of (b) peak / (a) peak is the mismatch loss. - -Output: report only. Does not modify any .mem files. -""" - -import os -import re -import sys - -import numpy as np -from scipy.signal import hilbert, resample_poly - -THIS_DIR = os.path.dirname(os.path.abspath(__file__)) -RTL_DIR = os.path.join(THIS_DIR, "..", "..") - -FS_TX = 120e6 # DAC sample rate -FS_RX = 100e6 # post-DDC processing rate -T_CHIRP = 0.5e-6 -N_TX = 60 # samples in TX LUT -N_RX = 50 # samples in RX reference - -# --- Parse TX LUT inline-coded in plfm_chirp_controller.v ---------------- -def read_tx_lut() -> np.ndarray: - path = os.path.join(RTL_DIR, "plfm_chirp_controller.v") - with open(path) as f: - src = f.read() - # Capture every "short_chirp_lut[] = 8'd;" - pairs = re.findall(r"short_chirp_lut\[\s*(\d+)\s*\]\s*=\s*8'd\s*(\d+)\s*;", src) - if len(pairs) != N_TX: - sys.exit(f"expected {N_TX} TX LUT entries, got {len(pairs)}") - arr = np.zeros(N_TX, dtype=np.int32) - for idx_s, val_s in pairs: - arr[int(idx_s)] = int(val_s) - # Convert from 8-bit unsigned offset binary (DAC center = 128) to signed. - return arr - 128 # int range roughly [-128, +127] - - -# --- Parse existing RX reference .mem files ------------------------------- -def read_q15_mem(name: str) -> np.ndarray: - path = os.path.join(RTL_DIR, name) - out = [] - with open(path) as f: - for line in f: - line = line.strip() - if not line: - continue - v = int(line, 16) - if v >= 0x8000: - v -= 0x10000 - out.append(v) - return np.array(out, dtype=np.int32) - - -# --- Derive implied 50-sample baseband reference from the TX LUT --------- -def derive_baseband_from_tx(tx: np.ndarray) -> np.ndarray: - """ - 1) Treat tx as fs=120 MHz real samples. - 2) Compute analytic signal (Hilbert) -> single-sided spectrum copy. - 3) Find the chirp's center frequency from the analytic signal's - mean instantaneous frequency, then mix it down to baseband by - multiplying by exp(-j*2*pi*fc*t). - 4) Resample 120 -> 100 MHz to get exactly N_RX = 50 samples - (matching the existing reference grid). - 5) Return as complex float64. - """ - x = tx.astype(np.float64) - z = hilbert(x) # complex analytic, fs=120 MHz - n = np.arange(len(z)) - # Instantaneous phase + frequency - inst_phase = np.unwrap(np.angle(z)) - inst_freq = np.diff(inst_phase) * FS_TX / (2 * np.pi) - fc = float(np.mean(inst_freq)) # rough center frequency in Hz - # Mix to baseband - bb_120 = z * np.exp(-1j * 2 * np.pi * fc * n / FS_TX) - # Resample 120 MHz -> 100 MHz: use up=5, down=6 (5/6 = 100/120). - bb_100 = resample_poly(bb_120, up=5, down=6) - # Trim/pad to exactly N_RX samples - if len(bb_100) >= N_RX: - bb_100 = bb_100[:N_RX] - else: - bb_100 = np.concatenate([bb_100, np.zeros(N_RX - len(bb_100), dtype=complex)]) - return bb_100, fc, inst_freq - - -# --- Mismatch loss in dB -------------------------------------------------- -def peak_corr_db(ref: np.ndarray, sig: np.ndarray) -> float: - """Peak |ref dot conj(sig_shifted)| over all integer shifts, normalised.""" - # Both arrays equal length; cross-correlate. - c = np.correlate(sig, ref, mode="full") - return 20 * np.log10(np.max(np.abs(c)) + 1e-30) - - -def main() -> int: - tx = read_tx_lut() - rx_i = read_q15_mem("short_chirp_i.mem") - rx_q = read_q15_mem("short_chirp_q.mem") - if len(rx_i) != N_RX or len(rx_q) != N_RX: - sys.exit(f"RX .mem files expected {N_RX} samples, got I={len(rx_i)} Q={len(rx_q)}") - rx = (rx_i + 1j * rx_q).astype(complex) - - # Derive implied baseband reference from TX LUT - bb, fc, inst_freq = derive_baseband_from_tx(tx) - - # Bandwidth check from instantaneous frequency - f_lo, f_hi = float(np.min(inst_freq)), float(np.max(inst_freq)) - bw = f_hi - f_lo - - print("=== TX LUT analysis ===") - print(f" samples: {N_TX} @ {FS_TX/1e6:.0f} MHz, duration {N_TX/FS_TX*1e6:.3f} us") - print(f" inst-freq range: {f_lo/1e6:+7.2f} MHz .. {f_hi/1e6:+7.2f} MHz") - print(f" bandwidth swept: {bw/1e6:6.2f} MHz") - print(f" center frequency: {fc/1e6:+7.2f} MHz (inferred from mean inst freq)") - sweep_dir = "UP" if inst_freq[-1] > inst_freq[0] else "DOWN" - print(f" sweep direction: {sweep_dir} (start={inst_freq[0]/1e6:+.2f} MHz, " - f"end={inst_freq[-1]/1e6:+.2f} MHz)") - - print() - print("=== Existing RX reference (short_chirp_{i,q}.mem) ===") - rx_phase = np.unwrap(np.angle(rx + 1e-30)) - rx_inst_freq = np.diff(rx_phase) * FS_RX / (2 * np.pi) - rx_lo, rx_hi = float(np.min(rx_inst_freq)), float(np.max(rx_inst_freq)) - print(f" samples: {N_RX} @ {FS_RX/1e6:.0f} MHz") - print(f" inst-freq range: {rx_lo/1e6:+7.2f} MHz .. {rx_hi/1e6:+7.2f} MHz") - print(f" bandwidth swept: {(rx_hi - rx_lo)/1e6:6.2f} MHz") - rx_sweep = "UP" if rx_inst_freq[-1] > rx_inst_freq[0] else "DOWN" - print(f" sweep direction: {rx_sweep}") - - print() - print("=== Mismatch loss (matched-filter peak: implied-vs-existing) ===") - # Normalise both to unit energy so the only thing the ratio reflects is shape. - bb_n = bb / np.sqrt(np.sum(np.abs(bb) ** 2) + 1e-30) - rx_n = rx / np.sqrt(np.sum(np.abs(rx) ** 2) + 1e-30) - auto_db = peak_corr_db(bb_n, bb_n) - cross_db = peak_corr_db(bb_n, rx_n) - loss_db = auto_db - cross_db - print(f" auto-correlation peak (implied vs implied): {auto_db:+6.2f} dB") - print(f" cross-corr peak (implied vs existing RX): {cross_db:+6.2f} dB") - print(f" MISMATCH LOSS (matched filter): {loss_db:6.2f} dB") - print() - - # Decision aid - if loss_db < 0.5: - verdict = "AGREEMENT — TX LUT and RX reference are consistent within 0.5 dB." - elif loss_db < 2.0: - verdict = ("MILD MISMATCH — within ledger's 2-3 dB note; refresh " - "recommended but not blocking.") - else: - verdict = "SIGNIFICANT MISMATCH — RX reference should be regenerated from TX LUT." - print(f"VERDICT: {verdict}") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/9_Firmware/9_2_FPGA/tb/cosim/validate_mem_files.py b/9_Firmware/9_2_FPGA/tb/cosim/validate_mem_files.py deleted file mode 100644 index 9645768..0000000 --- a/9_Firmware/9_2_FPGA/tb/cosim/validate_mem_files.py +++ /dev/null @@ -1,492 +0,0 @@ -#!/usr/bin/env python3 -""" -validate_mem_files.py — Validate all .mem files against AERIS-10 radar parameters. - -Checks: - 1. Structural: line counts, hex format, value ranges for all 12 .mem files - 2. FFT twiddle files: bit-exact match against cos(2*pi*k/N) in Q15 - 3. Long chirp .mem files: reverse-engineer parameters, check for chirp structure - 4. Short chirp .mem files: check length, value range, spectral content - -Usage: - python3 validate_mem_files.py -""" - -import math -import os -import sys - -# ============================================================================ -# AERIS-10 System Parameters (from radar_scene.py) -# ============================================================================ -F_CARRIER = 10.5e9 # 10.5 GHz carrier -C_LIGHT = 3.0e8 -F_IF = 120e6 # IF frequency -CHIRP_BW = 20e6 # 20 MHz sweep -FS_ADC = 400e6 # ADC sample rate -FS_SYS = 100e6 # System clock (100 MHz, after CIC 4x) -T_LONG_CHIRP = 30e-6 # 30 us long chirp -T_SHORT_CHIRP = 0.5e-6 # 0.5 us short chirp -CIC_DECIMATION = 4 -FFT_SIZE = 1024 -DOPPLER_FFT_SIZE = 16 -LONG_CHIRP_SAMPLES = int(T_LONG_CHIRP * FS_SYS) # 3000 at 100 MHz - -# Overlap-save parameters -OVERLAP_SAMPLES = 128 -SEGMENT_ADVANCE = FFT_SIZE - OVERLAP_SAMPLES # 896 -LONG_SEGMENTS = 4 - -MEM_DIR = os.path.join(os.path.dirname(__file__), '..', '..') - -pass_count = 0 -fail_count = 0 -warn_count = 0 - -def check(condition, _label): - global pass_count, fail_count - if condition: - pass_count += 1 - else: - fail_count += 1 - -def warn(_label): - global warn_count - warn_count += 1 - -def read_mem_hex(filename): - """Read a .mem file, return list of integer values (16-bit signed).""" - path = os.path.join(MEM_DIR, filename) - values = [] - with open(path) as f: - for line in f: - line = line.strip() - if not line or line.startswith('//'): - continue - val = int(line, 16) - # Interpret as 16-bit signed - if val >= 0x8000: - val -= 0x10000 - values.append(val) - return values - - -# ============================================================================ -# TEST 1: Structural validation of all .mem files -# ============================================================================ -def test_structural(): - - expected = { - # FFT twiddle files (quarter-wave cosine ROMs) - 'fft_twiddle_1024.mem': {'lines': 256, 'desc': '1024-pt FFT quarter-wave cos ROM'}, - 'fft_twiddle_16.mem': {'lines': 4, 'desc': '16-pt FFT quarter-wave cos ROM'}, - # Long chirp segments (4 segments x 1024 samples each) - 'long_chirp_seg0_i.mem': {'lines': 1024, 'desc': 'Long chirp seg 0 I'}, - 'long_chirp_seg0_q.mem': {'lines': 1024, 'desc': 'Long chirp seg 0 Q'}, - 'long_chirp_seg1_i.mem': {'lines': 1024, 'desc': 'Long chirp seg 1 I'}, - 'long_chirp_seg1_q.mem': {'lines': 1024, 'desc': 'Long chirp seg 1 Q'}, - 'long_chirp_seg2_i.mem': {'lines': 1024, 'desc': 'Long chirp seg 2 I'}, - 'long_chirp_seg2_q.mem': {'lines': 1024, 'desc': 'Long chirp seg 2 Q'}, - 'long_chirp_seg3_i.mem': {'lines': 1024, 'desc': 'Long chirp seg 3 I'}, - 'long_chirp_seg3_q.mem': {'lines': 1024, 'desc': 'Long chirp seg 3 Q'}, - # Short chirp (50 samples) - 'short_chirp_i.mem': {'lines': 50, 'desc': 'Short chirp I'}, - 'short_chirp_q.mem': {'lines': 50, 'desc': 'Short chirp Q'}, - } - - for fname, info in expected.items(): - path = os.path.join(MEM_DIR, fname) - exists = os.path.isfile(path) - check(exists, f"{fname} exists") - if not exists: - continue - - vals = read_mem_hex(fname) - check(len(vals) == info['lines'], - f"{fname}: {len(vals)} data lines (expected {info['lines']})") - - # Check all values are in 16-bit signed range - in_range = all(-32768 <= v <= 32767 for v in vals) - check(in_range, f"{fname}: all values in [-32768, 32767]") - - -# ============================================================================ -# TEST 2: FFT Twiddle Factor Validation -# ============================================================================ -def test_twiddle_1024(): - vals = read_mem_hex('fft_twiddle_1024.mem') - - max_err = 0 - err_details = [] - for k in range(min(256, len(vals))): - angle = 2.0 * math.pi * k / 1024.0 - expected = round(math.cos(angle) * 32767.0) - expected = max(-32768, min(32767, expected)) - actual = vals[k] - err = abs(actual - expected) - if err > max_err: - max_err = err - if err > 1: - err_details.append((k, actual, expected, err)) - - check(max_err <= 1, - f"fft_twiddle_1024.mem: max twiddle error = {max_err} LSB (tolerance: 1)") - if err_details: - for _, _act, _exp, _e in err_details[:5]: - pass - - -def test_twiddle_16(): - vals = read_mem_hex('fft_twiddle_16.mem') - - max_err = 0 - for k in range(min(4, len(vals))): - angle = 2.0 * math.pi * k / 16.0 - expected = round(math.cos(angle) * 32767.0) - expected = max(-32768, min(32767, expected)) - actual = vals[k] - err = abs(actual - expected) - if err > max_err: - max_err = err - - check(max_err <= 1, - f"fft_twiddle_16.mem: max twiddle error = {max_err} LSB (tolerance: 1)") - - # Print all 4 entries for reference - for k in range(min(4, len(vals))): - angle = 2.0 * math.pi * k / 16.0 - expected = round(math.cos(angle) * 32767.0) - - -# ============================================================================ -# TEST 3: Long Chirp .mem File Analysis -# ============================================================================ -def test_long_chirp(): - - # Load all 4 segments - all_i = [] - all_q = [] - for seg in range(4): - seg_i = read_mem_hex(f'long_chirp_seg{seg}_i.mem') - seg_q = read_mem_hex(f'long_chirp_seg{seg}_q.mem') - all_i.extend(seg_i) - all_q.extend(seg_q) - - total_samples = len(all_i) - check(total_samples == 4096, - f"Total long chirp samples: {total_samples} (expected 4096 = 4 segs x 1024)") - - # Compute magnitude envelope - magnitudes = [math.sqrt(i*i + q*q) for i, q in zip(all_i, all_q, strict=False)] - max_mag = max(magnitudes) - min(magnitudes) - sum(magnitudes) / len(magnitudes) - - - # Check if this looks like it came from generate_reference_chirp_q15 - # That function uses 32767 * 0.9 scaling => max magnitude ~29490 - expected_max_from_model = 32767 * 0.9 - uses_model_scaling = max_mag > expected_max_from_model * 0.8 - if uses_model_scaling: - pass - else: - warn(f"Magnitude ({max_mag:.0f}) is much lower than expected from Python model " - f"({expected_max_from_model:.0f}). .mem files may have unknown provenance.") - - # Check non-zero content: how many samples are non-zero? - sum(1 for v in all_i if v != 0) - sum(1 for v in all_q if v != 0) - - # Analyze instantaneous frequency via phase differences - phases = [] - for i_val, q_val in zip(all_i, all_q, strict=False): - if abs(i_val) > 5 or abs(q_val) > 5: # Skip near-zero samples - phases.append(math.atan2(q_val, i_val)) - else: - phases.append(None) - - # Compute phase differences (instantaneous frequency) - freq_estimates = [] - for n in range(1, len(phases)): - if phases[n] is not None and phases[n-1] is not None: - dp = phases[n] - phases[n-1] - # Unwrap - while dp > math.pi: - dp -= 2 * math.pi - while dp < -math.pi: - dp += 2 * math.pi - # Frequency in Hz (at 100 MHz sample rate, since these are post-DDC) - f_inst = dp * FS_SYS / (2 * math.pi) - freq_estimates.append(f_inst) - - if freq_estimates: - sum(freq_estimates[:50]) / 50 if len(freq_estimates) > 50 else freq_estimates[0] - sum(freq_estimates[-50:]) / 50 if len(freq_estimates) > 50 else freq_estimates[-1] - f_min = min(freq_estimates) - f_max = max(freq_estimates) - f_range = f_max - f_min - - - # A chirp should show frequency sweep - is_chirp = f_range > 0.5e6 # At least 0.5 MHz sweep - check(is_chirp, - f"Long chirp shows frequency sweep ({f_range/1e6:.2f} MHz > 0.5 MHz)") - - # Check if bandwidth roughly matches expected - bw_match = abs(f_range - CHIRP_BW) / CHIRP_BW < 0.5 # within 50% - if bw_match: - pass - else: - warn(f"Bandwidth {f_range/1e6:.2f} MHz does NOT match expected {CHIRP_BW/1e6:.2f} MHz") - - # Compare segment boundaries for overlap-save consistency - # In proper overlap-save, the chirp data should be segmented at 896-sample boundaries - # with segments being 1024-sample FFT blocks - for seg in range(4): - seg_i = read_mem_hex(f'long_chirp_seg{seg}_i.mem') - seg_q = read_mem_hex(f'long_chirp_seg{seg}_q.mem') - seg_mags = [math.sqrt(i*i + q*q) for i, q in zip(seg_i, seg_q, strict=False)] - sum(seg_mags) / len(seg_mags) - max(seg_mags) - - # Check segment 3 zero-padding (chirp is 3000 samples, seg3 starts at 3072) - # Samples 3000-4095 should be zero (or near-zero) if chirp is exactly 3000 samples - if seg == 3: - # Seg3 covers chirp samples 3072..4095 - # If chirp is only 3000 samples, then only samples 0..(3000-3072) = NONE are valid - # Actually chirp has 3000 samples total. Seg3 starts at index 3*1024=3072. - # So seg3 should only have 3000-3072 = -72 -> no valid chirp data! - # Wait, but the .mem files have 1024 lines with non-trivial data... - # Let's check if seg3 has significant data - zero_count = sum(1 for m in seg_mags if m < 2) - if zero_count > 500: - pass - else: - pass - else: - pass - - -# ============================================================================ -# TEST 4: Short Chirp .mem File Analysis -# ============================================================================ -def test_short_chirp(): - - short_i = read_mem_hex('short_chirp_i.mem') - short_q = read_mem_hex('short_chirp_q.mem') - - check(len(short_i) == 50, f"Short chirp I: {len(short_i)} samples (expected 50)") - check(len(short_q) == 50, f"Short chirp Q: {len(short_q)} samples (expected 50)") - - # Expected: 0.5 us chirp at 100 MHz = 50 samples - expected_samples = int(T_SHORT_CHIRP * FS_SYS) - check(len(short_i) == expected_samples, - f"Short chirp length matches T_SHORT_CHIRP * FS_SYS = {expected_samples}") - - magnitudes = [math.sqrt(i*i + q*q) for i, q in zip(short_i, short_q, strict=False)] - max(magnitudes) - sum(magnitudes) / len(magnitudes) - - - # Check non-zero - nonzero = sum(1 for m in magnitudes if m > 1) - check(nonzero == len(short_i), f"All {nonzero}/{len(short_i)} samples non-zero") - - # Check it looks like a chirp (phase should be quadratic) - phases = [math.atan2(q, i) for i, q in zip(short_i, short_q, strict=False)] - freq_est = [] - for n in range(1, len(phases)): - dp = phases[n] - phases[n-1] - while dp > math.pi: - dp -= 2 * math.pi - while dp < -math.pi: - dp += 2 * math.pi - freq_est.append(dp * FS_SYS / (2 * math.pi)) - - if freq_est: - freq_est[0] - freq_est[-1] - - -# ============================================================================ -# TEST 5: Generate Expected Chirp .mem and Compare -# ============================================================================ -def test_chirp_vs_model(): - - # Generate reference using the same method as radar_scene.py - chirp_rate = CHIRP_BW / T_LONG_CHIRP # Hz/s - - model_i = [] - model_q = [] - n_chirp = min(FFT_SIZE, LONG_CHIRP_SAMPLES) # 1024 - - for n in range(n_chirp): - t = n / FS_SYS - phase = math.pi * chirp_rate * t * t - re_val = round(32767 * 0.9 * math.cos(phase)) - im_val = round(32767 * 0.9 * math.sin(phase)) - model_i.append(max(-32768, min(32767, re_val))) - model_q.append(max(-32768, min(32767, im_val))) - - # Read seg0 from .mem - mem_i = read_mem_hex('long_chirp_seg0_i.mem') - mem_q = read_mem_hex('long_chirp_seg0_q.mem') - - # Compare magnitudes - model_mags = [math.sqrt(i*i + q*q) for i, q in zip(model_i, model_q, strict=False)] - mem_mags = [math.sqrt(i*i + q*q) for i, q in zip(mem_i, mem_q, strict=False)] - - model_max = max(model_mags) - mem_max = max(mem_mags) - - - # Check if they match (they almost certainly won't based on magnitude analysis) - matches = sum(1 for a, b in zip(model_i, mem_i, strict=False) if a == b) - - if matches > len(model_i) * 0.9: - pass - else: - warn(".mem files do NOT match Python model. They likely have different provenance.") - # Try to detect scaling - if mem_max > 0: - model_max / mem_max - - # Check phase correlation (shape match regardless of scaling) - model_phases = [math.atan2(q, i) for i, q in zip(model_i, model_q, strict=False)] - mem_phases = [math.atan2(q, i) for i, q in zip(mem_i, mem_q, strict=False)] - - # Compute phase differences - phase_diffs = [] - for mp, fp in zip(model_phases, mem_phases, strict=False): - d = mp - fp - while d > math.pi: - d -= 2 * math.pi - while d < -math.pi: - d += 2 * math.pi - phase_diffs.append(d) - - sum(phase_diffs) / len(phase_diffs) - max_phase_diff = max(abs(d) for d in phase_diffs) - - - phase_match = max_phase_diff < 0.5 # within 0.5 rad - check( - phase_match, - f"Phase shape match: max diff = {math.degrees(max_phase_diff):.1f} deg " - f"(tolerance: 28.6 deg)", - ) - - -# ============================================================================ -# TEST 7: Cross-check chirp memory loader addressing -# ============================================================================ -def test_memory_addressing(): - - # chirp_memory_loader_param uses: long_addr = {segment_select[1:0], sample_addr[9:0]} - # This creates a 12-bit address: seg[1:0] ++ addr[9:0] - # Segment 0: addresses 0x000..0x3FF (0..1023) - # Segment 1: addresses 0x400..0x7FF (1024..2047) - # Segment 2: addresses 0x800..0xBFF (2048..3071) - # Segment 3: addresses 0xC00..0xFFF (3072..4095) - - for seg in range(4): - base = seg * 1024 - end = base + 1023 - addr_from_concat = (seg << 10) | 0 # {seg[1:0], 10'b0} - addr_end = (seg << 10) | 1023 - - check( - addr_from_concat == base, - f"Seg {seg} base address: {{{seg}[1:0], 10'b0}} = {addr_from_concat} " - f"(expected {base})", - ) - check(addr_end == end, - f"Seg {seg} end address: {{{seg}[1:0], 10'h3FF}} = {addr_end} (expected {end})") - - # Memory is declared as: reg [15:0] long_chirp_i [0:4095] - # $readmemh loads seg0 to [0:1023], seg1 to [1024:2047], etc. - # Addressing via {segment_select, sample_addr} maps correctly. - - -# ============================================================================ -# TEST 8: Seg3 zero-padding analysis -# ============================================================================ -def test_seg3_padding(): - - # The long chirp has 3000 samples (30 us at 100 MHz). - # With 4 segments of 1024 samples = 4096 total memory slots. - # Segments are loaded contiguously into memory: - # Seg0: chirp samples 0..1023 - # Seg1: chirp samples 1024..2047 - # Seg2: chirp samples 2048..3071 - # Seg3: chirp samples 3072..4095 - # - # But the chirp only has 3000 samples! So seg3 should have: - # Valid chirp data at indices 0..(3000-3072-1) = NEGATIVE - # Wait — 3072 > 3000, so seg3 has NO valid chirp samples if chirp is exactly 3000. - # - # However, the overlap-save algorithm in matched_filter_multi_segment.v - # collects data differently: - # Seg0: collect 896 DDC samples, buffer[0:895], zero-pad [896:1023] - # Seg1: overlap from seg0[768:895] → buffer[0:127], collect 896 → buffer[128:1023] - # ... - # The chirp reference is indexed by segment_select + sample_addr, - # so it reads ALL 1024 values for each segment regardless. - # - # If the chirp is 3000 samples but only 4*1024=4096 slots exist, - # the question is: do the .mem files contain 3000 samples of real chirp - # data spread across 4096 slots, or something else? - - seg3_i = read_mem_hex('long_chirp_seg3_i.mem') - seg3_q = read_mem_hex('long_chirp_seg3_q.mem') - - mags = [math.sqrt(i*i + q*q) for i, q in zip(seg3_i, seg3_q, strict=False)] - - # Count trailing zeros (samples after chirp ends) - trailing_zeros = 0 - for m in reversed(mags): - if m < 2: - trailing_zeros += 1 - else: - break - - nonzero = sum(1 for m in mags if m > 2) - - - if nonzero == 1024: - # This means the .mem files encode 4096 chirp samples, not 3000 - # The chirp duration used for .mem generation was different from T_LONG_CHIRP - actual_chirp_samples = 4 * 1024 # = 4096 - actual_duration = actual_chirp_samples / FS_SYS - warn(f"Chirp in .mem files appears to be {actual_chirp_samples} samples " - f"({actual_duration*1e6:.1f} us), not {LONG_CHIRP_SAMPLES} samples " - f"({T_LONG_CHIRP*1e6:.1f} us)") - elif trailing_zeros > 100: - # Some padding at end - 3072 + (1024 - trailing_zeros) - - -# ============================================================================ -# MAIN -# ============================================================================ -def main(): - - test_structural() - test_twiddle_1024() - test_twiddle_16() - test_long_chirp() - test_short_chirp() - test_chirp_vs_model() - test_memory_addressing() - test_seg3_padding() - - if fail_count == 0: - pass - else: - pass - - return 0 if fail_count == 0 else 1 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/9_Firmware/9_2_FPGA/tb/tb_rxb_fullchain_latency.v b/9_Firmware/9_2_FPGA/tb/tb_rxb_fullchain_latency.v index fe13b6f..c72a3ca 100644 --- a/9_Firmware/9_2_FPGA/tb/tb_rxb_fullchain_latency.v +++ b/9_Firmware/9_2_FPGA/tb/tb_rxb_fullchain_latency.v @@ -8,22 +8,28 @@ // // Production wiring this TB mirrors: // ddc_i/q (test stimulus) -> matched_filter_multi_segment -> chain -// chirp_memory_loader -----direct wire--------------------> chain ref +// chirp_reference_rom ---- direct wire -------------------> chain ref // // Tests: // 1) Pipeline timing: report cycle counts (first ddc_valid -> first // pc_valid). Confirms FSM advances and produces output. // 2) Autocorrelation peak position: drive ddc with the SAME short-chirp -// samples that the loader serves up as ref. Output is the chirp -// autocorrelation. Peak should be at bin 0 if ref/signal are aligned -// at the chain. Any shift indicates an alignment error of N cycles. +// samples the ROM serves up as ref. Output is the chirp autocorrelation. +// Peak should be at bin 0 if ref/signal are aligned at the chain. +// +// chirp-v2 PR-C: ROM swapped from chirp_memory_loader_param to +// chirp_reference_rom. Stim now reads rx_short_{i,q}.mem (100 active samples, +// 1 µs at 100 MHz) instead of the legacy short_chirp_*.mem (50 samples, +// 0.5 µs); SHORT_LEN tracks the new active-sample count. The ROM and the +// stim always read from the same file, so the autocorrelation invariant +// (peak at bin 0) holds without further coordination. // ============================================================================ module tb_rxb_fullchain_latency; localparam CLK_PERIOD = 10.0; // 100 MHz localparam FFT_SIZE = `RP_FFT_SIZE; // 2048 - localparam SHORT_LEN = 50; // matches RP_SHORT_CHIRP_SAMPLES + localparam SHORT_LEN = 100; // matches RP_DEF_SHORT_CHIRP_CYCLES_V2 (1 µs) reg clk; reg reset_n; @@ -38,13 +44,13 @@ module tb_rxb_fullchain_latency; reg mc_new_elevation; reg mc_new_azimuth; - // multi_segment <-> memory loader interconnect + // multi_segment <-> chirp_reference_rom interconnect wire [1:0] segment_request; wire [10:0] sample_addr_out; wire mem_request; - wire mem_ready_loader; // direct from loader + wire mem_ready_loader; // direct from rom - // Loader outputs (direct-wired to chain via multi_segment ports) + // ROM outputs (direct-wired to chain via multi_segment ports) wire [15:0] ref_i_raw; wire [15:0] ref_q_raw; @@ -54,15 +60,16 @@ module tb_rxb_fullchain_latency; wire pc_valid; wire [3:0] ms_status; - // ----- Memory loader ----- - chirp_memory_loader_param #( - .DEBUG(0) - ) chirp_mem ( + // wave_sel shim — matches radar_receiver_final.v PR-C transitional wiring. + wire [1:0] wave_sel = use_long_chirp ? `RP_WAVE_LONG : `RP_WAVE_SHORT; + + // ----- Chirp reference ROM (chirp-v2 PR-C) ----- + chirp_reference_rom chirp_rom ( .clk (clk), .reset_n (reset_n), + .wave_sel (wave_sel), .segment_select (segment_request), .mem_request (mem_request), - .use_long_chirp (use_long_chirp), .sample_addr (sample_addr_out), .ref_i (ref_i_raw), .ref_q (ref_q_raw), @@ -224,11 +231,11 @@ module tb_rxb_fullchain_latency; mc_new_elevation = 1'b0; mc_new_azimuth = 1'b0; - // Load the same short-chirp samples the loader will serve as ref, + // Load the same short-chirp samples the ROM will serve as ref, // so signal == ref → autocorrelation. Peak should be at bin 0 if // ref/signal alignment is correct. - $readmemh("short_chirp_i.mem", stim_chirp_i, 0, SHORT_LEN-1); - $readmemh("short_chirp_q.mem", stim_chirp_q, 0, SHORT_LEN-1); + $readmemh("rx_short_i.mem", stim_chirp_i, 0, SHORT_LEN-1); + $readmemh("rx_short_q.mem", stim_chirp_q, 0, SHORT_LEN-1); $display("[TB] Loaded %0d short-chirp samples for stimulus", SHORT_LEN); repeat (8) @(posedge clk); @@ -237,7 +244,7 @@ module tb_rxb_fullchain_latency; $display("\n=== RX-B Option A verification ==="); $display("Configuration: latency_buffer REMOVED, ref direct-wired"); - $display("Path: chirp_memory_loader.ref_i ----> multi_segment.ref_chirp_real"); + $display("Path: chirp_reference_rom.ref_i ----> multi_segment.ref_chirp_real"); $display("FFT_SIZE: %0d, SHORT_LEN: %0d", FFT_SIZE, SHORT_LEN); $display(""); diff --git a/9_Firmware/9_2_FPGA/tb/tb_system_e2e.v b/9_Firmware/9_2_FPGA/tb/tb_system_e2e.v index 9f47286..1a22e21 100644 --- a/9_Firmware/9_2_FPGA/tb/tb_system_e2e.v +++ b/9_Firmware/9_2_FPGA/tb/tb_system_e2e.v @@ -32,7 +32,7 @@ * radar_receiver_final.v tb/ad9484_interface_400m_stub.v \ * ddc_400m.v nco_400m_enhanced.v cic_decimator_4x_enhanced.v \ * cdc_modules.v fir_lowpass.v ddc_input_interface.v \ - * chirp_memory_loader_param.v \ + * chirp_reference_rom.v \ * matched_filter_multi_segment.v matched_filter_processing_chain.v \ * range_bin_decimator.v doppler_processor.v xfft_16.v fft_engine.v \ * usb_data_interface.v edge_detector.v radar_mode_controller.v