Add files via upload

This commit is contained in:
NawfalMotii79
2026-03-09 00:17:39 +00:00
committed by GitHub
parent 8974a38ff6
commit 5fbe97fa5f
99 changed files with 52953 additions and 0 deletions
@@ -0,0 +1,98 @@
module ad9484_interface_400m (
// ADC Physical Interface (LVDS)
input wire [7:0] adc_d_p, // ADC Data P
input wire [7:0] adc_d_n, // ADC Data N
input wire adc_dco_p, // Data Clock Output P (400MHz)
input wire adc_dco_n, // Data Clock Output N (400MHz)
// System Interface
input wire sys_clk, // 100MHz system clock (for control only)
input wire reset_n,
// Output at 400MHz domain
output wire [7:0] adc_data_400m, // ADC data at 400MHz
output wire adc_data_valid_400m // Valid at 400MHz
);
// LVDS to single-ended conversion
wire [7:0] adc_data;
wire adc_dco;
// IBUFDS for each data bit
genvar i;
generate
for (i = 0; i < 8; i = i + 1) begin : data_buffers
IBUFDS #(
.DIFF_TERM("TRUE"),
.IOSTANDARD("LVDS_25")
) ibufds_data (
.O(adc_data[i]),
.I(adc_d_p[i]),
.IB(adc_d_n[i])
);
end
endgenerate
// IBUFDS for DCO
IBUFDS #(
.DIFF_TERM("TRUE"),
.IOSTANDARD("LVDS_25")
) ibufds_dco (
.O(adc_dco),
.I(adc_dco_p),
.IB(adc_dco_n)
);
// IDDR for capturing DDR data
wire [7:0] adc_data_rise; // Data on rising edge
wire [7:0] adc_data_fall; // Data on falling edge
genvar j;
generate
for (j = 0; j < 8; j = j + 1) begin : iddr_gen
IDDR #(
.DDR_CLK_EDGE("SAME_EDGE_PIPELINED"),
.INIT_Q1(1'b0),
.INIT_Q2(1'b0),
.SRTYPE("SYNC")
) iddr_inst (
.Q1(adc_data_rise[j]), // Rising edge data
.Q2(adc_data_fall[j]), // Falling edge data
.C(adc_dco), // 400MHz DCO
.CE(1'b1),
.D(adc_data[j]),
.R(1'b0),
.S(1'b0)
);
end
endgenerate
// Combine rising and falling edge data to get 400MSPS stream
reg [7:0] adc_data_400m_reg;
reg adc_data_valid_400m_reg;
reg dco_phase;
always @(posedge adc_dco or negedge reset_n) begin
if (!reset_n) begin
adc_data_400m_reg <= 8'b0;
adc_data_valid_400m_reg <= 1'b0;
dco_phase <= 1'b0;
end else begin
dco_phase <= ~dco_phase;
if (dco_phase) begin
// Output falling edge data (completes the 400MSPS stream)
adc_data_400m_reg <= adc_data_fall;
end else begin
// Output rising edge data
adc_data_400m_reg <= adc_data_rise;
end
adc_data_valid_400m_reg <= 1'b1; // Always valid when ADC is running
end
end
assign adc_data_400m = adc_data_400m_reg;
assign adc_data_valid_400m = adc_data_valid_400m_reg;
endmodule
+237
View File
@@ -0,0 +1,237 @@
`timescale 1ns / 1ps
// ============================================================================
// CDC FOR MULTI-BIT DATA (ADVANCED)
// ============================================================================
module cdc_adc_to_processing #(
parameter WIDTH = 8,
parameter STAGES = 3
)(
input wire src_clk,
input wire dst_clk,
input wire reset_n,
input wire [WIDTH-1:0] src_data,
input wire src_valid,
output wire [WIDTH-1:0] dst_data,
output wire dst_valid
);
// Gray encoding for safe CDC
function [WIDTH-1:0] binary_to_gray;
input [WIDTH-1:0] binary;
binary_to_gray = binary ^ (binary >> 1);
endfunction
function [WIDTH-1:0] gray_to_binary;
input [WIDTH-1:0] gray;
reg [WIDTH-1:0] binary;
integer i;
begin
binary[WIDTH-1] = gray[WIDTH-1];
for (i = WIDTH-2; i >= 0; i = i - 1) begin
binary[i] = binary[i+1] ^ gray[i];
end
gray_to_binary = binary;
end
endfunction
// Source domain registers
reg [WIDTH-1:0] src_data_reg;
reg [1:0] src_toggle = 2'b00;
reg src_toggle_sync = 0;
// Destination domain registers
reg [WIDTH-1:0] dst_data_gray [0:STAGES-1];
reg [1:0] dst_toggle_sync [0:STAGES-1];
reg [WIDTH-1:0] dst_data_reg;
reg dst_valid_reg = 0;
reg [1:0] prev_dst_toggle = 2'b00;
always @(posedge src_clk or negedge reset_n) begin
if (!reset_n) begin
src_data_reg <= 0;
src_toggle <= 2'b00;
end else if (src_valid) begin
src_data_reg <= src_data;
src_toggle <= src_toggle + 1;
end
end
// CDC synchronization chain for data
genvar i;
generate
for (i = 0; i < STAGES; i = i + 1) begin : data_sync_chain
always @(posedge dst_clk or negedge reset_n) begin
if (!reset_n) begin
if (i == 0) begin
dst_data_gray[i] <= 0;
end else begin
dst_data_gray[i] <= dst_data_gray[i-1];
end
end else begin
if (i == 0) begin
// Convert to gray code at domain crossing
dst_data_gray[i] <= binary_to_gray(src_data_reg);
end else begin
dst_data_gray[i] <= dst_data_gray[i-1];
end
end
end
end
for (i = 0; i < STAGES; i = i + 1) begin : toggle_sync_chain
always @(posedge dst_clk or negedge reset_n) begin
if (!reset_n) begin
if (i == 0) begin
dst_toggle_sync[i] <= 2'b00;
end else begin
dst_toggle_sync[i] <= dst_toggle_sync[i-1];
end
end else begin
if (i == 0) begin
dst_toggle_sync[i] <= src_toggle;
end else begin
dst_toggle_sync[i] <= dst_toggle_sync[i-1];
end
end
end
end
endgenerate
// Detect new data
always @(posedge dst_clk or negedge reset_n) begin
if (!reset_n) begin
dst_data_reg <= 0;
dst_valid_reg <= 0;
prev_dst_toggle <= 2'b00;
end else begin
// Convert from gray code
dst_data_reg <= gray_to_binary(dst_data_gray[STAGES-1]);
// Check if toggle changed (new data)
if (dst_toggle_sync[STAGES-1] != prev_dst_toggle) begin
dst_valid_reg <= 1'b1;
prev_dst_toggle <= dst_toggle_sync[STAGES-1];
end else begin
dst_valid_reg <= 1'b0;
end
end
end
assign dst_data = dst_data_reg;
assign dst_valid = dst_valid_reg;
endmodule
// ============================================================================
// CDC FOR SINGLE BIT SIGNALS
// ============================================================================
module cdc_single_bit #(
parameter STAGES = 3
)(
input wire src_clk,
input wire dst_clk,
input wire reset_n,
input wire src_signal,
output wire dst_signal
);
reg [STAGES-1:0] sync_chain;
always @(posedge dst_clk or negedge reset_n) begin
if (!reset_n) begin
sync_chain <= 0;
end else begin
sync_chain <= {sync_chain[STAGES-2:0], src_signal};
end
end
assign dst_signal = sync_chain[STAGES-1];
endmodule
// ============================================================================
// CDC FOR MULTI-BIT WITH HANDSHAKE
// ============================================================================
module cdc_handshake #(
parameter WIDTH = 32
)(
input wire src_clk,
input wire dst_clk,
input wire reset_n,
input wire [WIDTH-1:0] src_data,
input wire src_valid,
output wire src_ready,
output wire [WIDTH-1:0] dst_data,
output wire dst_valid,
input wire dst_ready
);
// Source domain
reg [WIDTH-1:0] src_data_reg;
reg src_busy = 0;
reg src_ack_sync = 0;
reg [1:0] src_ack_sync_chain = 2'b00;
// Destination domain
reg [WIDTH-1:0] dst_data_reg;
reg dst_valid_reg = 0;
reg dst_req_sync = 0;
reg [1:0] dst_req_sync_chain = 2'b00;
reg dst_ack = 0;
// Source clock domain
always @(posedge src_clk or negedge reset_n) begin
if (!reset_n) begin
src_data_reg <= 0;
src_busy <= 0;
src_ack_sync <= 0;
src_ack_sync_chain <= 2'b00;
end else begin
// Sync acknowledge from destination
src_ack_sync_chain <= {src_ack_sync_chain[0], dst_ack};
src_ack_sync <= src_ack_sync_chain[1];
if (!src_busy && src_valid) begin
src_data_reg <= src_data;
src_busy <= 1'b1;
end else if (src_busy && src_ack_sync) begin
src_busy <= 1'b0;
end
end
end
// Destination clock domain
always @(posedge dst_clk or negedge reset_n) begin
if (!reset_n) begin
dst_data_reg <= 0;
dst_valid_reg <= 0;
dst_req_sync <= 0;
dst_req_sync_chain <= 2'b00;
dst_ack <= 0;
end else begin
// Sync request from source
dst_req_sync_chain <= {dst_req_sync_chain[0], src_busy};
dst_req_sync <= dst_req_sync_chain[1];
// Capture data when request arrives
if (dst_req_sync && !dst_valid_reg) begin
dst_data_reg <= src_data_reg;
dst_valid_reg <= 1'b1;
dst_ack <= 1'b1;
end else if (dst_valid_reg && dst_ready) begin
dst_valid_reg <= 1'b0;
end
// Clear acknowledge after source sees it
if (dst_ack && !dst_req_sync) begin
dst_ack <= 1'b0;
end
end
end
assign src_ready = !src_busy;
assign dst_data = dst_data_reg;
assign dst_valid = dst_valid_reg;
endmodule
+244
View File
@@ -0,0 +1,244 @@
// Auto-generated LUT initialization for PLFM chirp controller
// Long chirp: 30us from 30MHz to 10MHz
// Short chirp: 0.5us from 30MHz to 10MHz
// Long PLFM chirp LUT (30us, 30MHz to 10MHz)
initial begin
long_chirp_lut[ 0] = 8'd255; long_chirp_lut[ 1] = 8'd128; long_chirp_lut[ 2] = 8'd 1; long_chirp_lut[ 3] = 8'd127; long_chirp_lut[ 4] = 8'd254; long_chirp_lut[ 5] = 8'd128; long_chirp_lut[ 6] = 8'd 1; long_chirp_lut[ 7] = 8'd127; long_chirp_lut[ 8] = 8'd254; long_chirp_lut[ 9] = 8'd129; long_chirp_lut[ 10] = 8'd 1; long_chirp_lut[ 11] = 8'd125; long_chirp_lut[ 12] = 8'd254; long_chirp_lut[ 13] = 8'd131; long_chirp_lut[ 14] = 8'd 1; long_chirp_lut[ 15] = 8'd123;
long_chirp_lut[ 16] = 8'd254; long_chirp_lut[ 17] = 8'd133; long_chirp_lut[ 18] = 8'd 1; long_chirp_lut[ 19] = 8'd121; long_chirp_lut[ 20] = 8'd254; long_chirp_lut[ 21] = 8'd136; long_chirp_lut[ 22] = 8'd 1; long_chirp_lut[ 23] = 8'd118; long_chirp_lut[ 24] = 8'd254; long_chirp_lut[ 25] = 8'd139; long_chirp_lut[ 26] = 8'd 1; long_chirp_lut[ 27] = 8'd114; long_chirp_lut[ 28] = 8'd254; long_chirp_lut[ 29] = 8'd143; long_chirp_lut[ 30] = 8'd 2; long_chirp_lut[ 31] = 8'd110;
long_chirp_lut[ 32] = 8'd253; long_chirp_lut[ 33] = 8'd148; long_chirp_lut[ 34] = 8'd 2; long_chirp_lut[ 35] = 8'd105; long_chirp_lut[ 36] = 8'd252; long_chirp_lut[ 37] = 8'd153; long_chirp_lut[ 38] = 8'd 3; long_chirp_lut[ 39] = 8'd100; long_chirp_lut[ 40] = 8'd251; long_chirp_lut[ 41] = 8'd158; long_chirp_lut[ 42] = 8'd 5; long_chirp_lut[ 43] = 8'd 94; long_chirp_lut[ 44] = 8'd249; long_chirp_lut[ 45] = 8'd164; long_chirp_lut[ 46] = 8'd 6; long_chirp_lut[ 47] = 8'd 87;
long_chirp_lut[ 48] = 8'd247; long_chirp_lut[ 49] = 8'd171; long_chirp_lut[ 50] = 8'd 9; long_chirp_lut[ 51] = 8'd 81; long_chirp_lut[ 52] = 8'd245; long_chirp_lut[ 53] = 8'd178; long_chirp_lut[ 54] = 8'd 12; long_chirp_lut[ 55] = 8'd 73; long_chirp_lut[ 56] = 8'd242; long_chirp_lut[ 57] = 8'd185; long_chirp_lut[ 58] = 8'd 15; long_chirp_lut[ 59] = 8'd 66; long_chirp_lut[ 60] = 8'd237; long_chirp_lut[ 61] = 8'd193; long_chirp_lut[ 62] = 8'd 20; long_chirp_lut[ 63] = 8'd 58;
long_chirp_lut[ 64] = 8'd233; long_chirp_lut[ 65] = 8'd201; long_chirp_lut[ 66] = 8'd 25; long_chirp_lut[ 67] = 8'd 50; long_chirp_lut[ 68] = 8'd227; long_chirp_lut[ 69] = 8'd209; long_chirp_lut[ 70] = 8'd 31; long_chirp_lut[ 71] = 8'd 43; long_chirp_lut[ 72] = 8'd220; long_chirp_lut[ 73] = 8'd216; long_chirp_lut[ 74] = 8'd 39; long_chirp_lut[ 75] = 8'd 35; long_chirp_lut[ 76] = 8'd212; long_chirp_lut[ 77] = 8'd224; long_chirp_lut[ 78] = 8'd 47; long_chirp_lut[ 79] = 8'd 27;
long_chirp_lut[ 80] = 8'd203; long_chirp_lut[ 81] = 8'd231; long_chirp_lut[ 82] = 8'd 57; long_chirp_lut[ 83] = 8'd 20; long_chirp_lut[ 84] = 8'd193; long_chirp_lut[ 85] = 8'd238; long_chirp_lut[ 86] = 8'd 67; long_chirp_lut[ 87] = 8'd 14; long_chirp_lut[ 88] = 8'd182; long_chirp_lut[ 89] = 8'd244; long_chirp_lut[ 90] = 8'd 79; long_chirp_lut[ 91] = 8'd 9; long_chirp_lut[ 92] = 8'd170; long_chirp_lut[ 93] = 8'd248; long_chirp_lut[ 94] = 8'd 92; long_chirp_lut[ 95] = 8'd 5;
long_chirp_lut[ 96] = 8'd157; long_chirp_lut[ 97] = 8'd252; long_chirp_lut[ 98] = 8'd106; long_chirp_lut[ 99] = 8'd 2; long_chirp_lut[100] = 8'd142; long_chirp_lut[101] = 8'd254; long_chirp_lut[102] = 8'd120; long_chirp_lut[103] = 8'd 1; long_chirp_lut[104] = 8'd127; long_chirp_lut[105] = 8'd254; long_chirp_lut[106] = 8'd136; long_chirp_lut[107] = 8'd 1; long_chirp_lut[108] = 8'd112; long_chirp_lut[109] = 8'd253; long_chirp_lut[110] = 8'd151; long_chirp_lut[111] = 8'd 4;
long_chirp_lut[112] = 8'd 96; long_chirp_lut[113] = 8'd249; long_chirp_lut[114] = 8'd167; long_chirp_lut[115] = 8'd 8; long_chirp_lut[116] = 8'd 80; long_chirp_lut[117] = 8'd243; long_chirp_lut[118] = 8'd183; long_chirp_lut[119] = 8'd 15; long_chirp_lut[120] = 8'd 64; long_chirp_lut[121] = 8'd235; long_chirp_lut[122] = 8'd199; long_chirp_lut[123] = 8'd 25; long_chirp_lut[124] = 8'd 49; long_chirp_lut[125] = 8'd224; long_chirp_lut[126] = 8'd213; long_chirp_lut[127] = 8'd 37;
long_chirp_lut[128] = 8'd 35; long_chirp_lut[129] = 8'd211; long_chirp_lut[130] = 8'd226; long_chirp_lut[131] = 8'd 51; long_chirp_lut[132] = 8'd 23; long_chirp_lut[133] = 8'd196; long_chirp_lut[134] = 8'd237; long_chirp_lut[135] = 8'd 68; long_chirp_lut[136] = 8'd 13; long_chirp_lut[137] = 8'd178; long_chirp_lut[138] = 8'd246; long_chirp_lut[139] = 8'd 86; long_chirp_lut[140] = 8'd 6; long_chirp_lut[141] = 8'd159; long_chirp_lut[142] = 8'd252; long_chirp_lut[143] = 8'd106;
long_chirp_lut[144] = 8'd 2; long_chirp_lut[145] = 8'd138; long_chirp_lut[146] = 8'd254; long_chirp_lut[147] = 8'd128; long_chirp_lut[148] = 8'd 1; long_chirp_lut[149] = 8'd116; long_chirp_lut[150] = 8'd253; long_chirp_lut[151] = 8'd150; long_chirp_lut[152] = 8'd 4; long_chirp_lut[153] = 8'd 94; long_chirp_lut[154] = 8'd249; long_chirp_lut[155] = 8'd171; long_chirp_lut[156] = 8'd 10; long_chirp_lut[157] = 8'd 73; long_chirp_lut[158] = 8'd240; long_chirp_lut[159] = 8'd192;
long_chirp_lut[160] = 8'd 21; long_chirp_lut[161] = 8'd 53; long_chirp_lut[162] = 8'd227; long_chirp_lut[163] = 8'd212; long_chirp_lut[164] = 8'd 36; long_chirp_lut[165] = 8'd 35; long_chirp_lut[166] = 8'd210; long_chirp_lut[167] = 8'd228; long_chirp_lut[168] = 8'd 55; long_chirp_lut[169] = 8'd 20; long_chirp_lut[170] = 8'd189; long_chirp_lut[171] = 8'd241; long_chirp_lut[172] = 8'd 77; long_chirp_lut[173] = 8'd 9; long_chirp_lut[174] = 8'd166; long_chirp_lut[175] = 8'd250;
long_chirp_lut[176] = 8'd101; long_chirp_lut[177] = 8'd 2; long_chirp_lut[178] = 8'd141; long_chirp_lut[179] = 8'd254; long_chirp_lut[180] = 8'd127; long_chirp_lut[181] = 8'd 1; long_chirp_lut[182] = 8'd114; long_chirp_lut[183] = 8'd253; long_chirp_lut[184] = 8'd154; long_chirp_lut[185] = 8'd 5; long_chirp_lut[186] = 8'd 88; long_chirp_lut[187] = 8'd246; long_chirp_lut[188] = 8'd180; long_chirp_lut[189] = 8'd 15; long_chirp_lut[190] = 8'd 62; long_chirp_lut[191] = 8'd233;
long_chirp_lut[192] = 8'd204; long_chirp_lut[193] = 8'd 31; long_chirp_lut[194] = 8'd 40; long_chirp_lut[195] = 8'd214; long_chirp_lut[196] = 8'd225; long_chirp_lut[197] = 8'd 52; long_chirp_lut[198] = 8'd 21; long_chirp_lut[199] = 8'd191; long_chirp_lut[200] = 8'd241; long_chirp_lut[201] = 8'd 77; long_chirp_lut[202] = 8'd 8; long_chirp_lut[203] = 8'd164; long_chirp_lut[204] = 8'd251; long_chirp_lut[205] = 8'd106; long_chirp_lut[206] = 8'd 1; long_chirp_lut[207] = 8'd134;
long_chirp_lut[208] = 8'd254; long_chirp_lut[209] = 8'd136; long_chirp_lut[210] = 8'd 2; long_chirp_lut[211] = 8'd103; long_chirp_lut[212] = 8'd250; long_chirp_lut[213] = 8'd167; long_chirp_lut[214] = 8'd 9; long_chirp_lut[215] = 8'd 73; long_chirp_lut[216] = 8'd239; long_chirp_lut[217] = 8'd196; long_chirp_lut[218] = 8'd 25; long_chirp_lut[219] = 8'd 46; long_chirp_lut[220] = 8'd220; long_chirp_lut[221] = 8'd220; long_chirp_lut[222] = 8'd 47; long_chirp_lut[223] = 8'd 24;
long_chirp_lut[224] = 8'd195; long_chirp_lut[225] = 8'd240; long_chirp_lut[226] = 8'd 75; long_chirp_lut[227] = 8'd 9; long_chirp_lut[228] = 8'd164; long_chirp_lut[229] = 8'd251; long_chirp_lut[230] = 8'd107; long_chirp_lut[231] = 8'd 1; long_chirp_lut[232] = 8'd131; long_chirp_lut[233] = 8'd254; long_chirp_lut[234] = 8'd141; long_chirp_lut[235] = 8'd 3; long_chirp_lut[236] = 8'd 96; long_chirp_lut[237] = 8'd248; long_chirp_lut[238] = 8'd175; long_chirp_lut[239] = 8'd 13;
long_chirp_lut[240] = 8'd 64; long_chirp_lut[241] = 8'd233; long_chirp_lut[242] = 8'd206; long_chirp_lut[243] = 8'd 33; long_chirp_lut[244] = 8'd 36; long_chirp_lut[245] = 8'd209; long_chirp_lut[246] = 8'd231; long_chirp_lut[247] = 8'd 61; long_chirp_lut[248] = 8'd 15; long_chirp_lut[249] = 8'd178; long_chirp_lut[250] = 8'd247; long_chirp_lut[251] = 8'd 95; long_chirp_lut[252] = 8'd 3; long_chirp_lut[253] = 8'd142; long_chirp_lut[254] = 8'd254; long_chirp_lut[255] = 8'd132;
long_chirp_lut[256] = 8'd 1; long_chirp_lut[257] = 8'd105; long_chirp_lut[258] = 8'd250; long_chirp_lut[259] = 8'd169; long_chirp_lut[260] = 8'd 11; long_chirp_lut[261] = 8'd 69; long_chirp_lut[262] = 8'd235; long_chirp_lut[263] = 8'd203; long_chirp_lut[264] = 8'd 31; long_chirp_lut[265] = 8'd 37; long_chirp_lut[266] = 8'd210; long_chirp_lut[267] = 8'd230; long_chirp_lut[268] = 8'd 61; long_chirp_lut[269] = 8'd 14; long_chirp_lut[270] = 8'd176; long_chirp_lut[271] = 8'd248;
long_chirp_lut[272] = 8'd 98; long_chirp_lut[273] = 8'd 2; long_chirp_lut[274] = 8'd137; long_chirp_lut[275] = 8'd254; long_chirp_lut[276] = 8'd138; long_chirp_lut[277] = 8'd 2; long_chirp_lut[278] = 8'd 97; long_chirp_lut[279] = 8'd248; long_chirp_lut[280] = 8'd178; long_chirp_lut[281] = 8'd 15; long_chirp_lut[282] = 8'd 59; long_chirp_lut[283] = 8'd228; long_chirp_lut[284] = 8'd213; long_chirp_lut[285] = 8'd 41; long_chirp_lut[286] = 8'd 28; long_chirp_lut[287] = 8'd198;
long_chirp_lut[288] = 8'd239; long_chirp_lut[289] = 8'd 76; long_chirp_lut[290] = 8'd 8; long_chirp_lut[291] = 8'd159; long_chirp_lut[292] = 8'd253; long_chirp_lut[293] = 8'd117; long_chirp_lut[294] = 8'd 1; long_chirp_lut[295] = 8'd116; long_chirp_lut[296] = 8'd253; long_chirp_lut[297] = 8'd161; long_chirp_lut[298] = 8'd 8; long_chirp_lut[299] = 8'd 74; long_chirp_lut[300] = 8'd237; long_chirp_lut[301] = 8'd200; long_chirp_lut[302] = 8'd 30; long_chirp_lut[303] = 8'd 38;
long_chirp_lut[304] = 8'd209; long_chirp_lut[305] = 8'd232; long_chirp_lut[306] = 8'd 65; long_chirp_lut[307] = 8'd 12; long_chirp_lut[308] = 8'd170; long_chirp_lut[309] = 8'd251; long_chirp_lut[310] = 8'd107; long_chirp_lut[311] = 8'd 1; long_chirp_lut[312] = 8'd125; long_chirp_lut[313] = 8'd254; long_chirp_lut[314] = 8'd153; long_chirp_lut[315] = 8'd 6; long_chirp_lut[316] = 8'd 80; long_chirp_lut[317] = 8'd240; long_chirp_lut[318] = 8'd196; long_chirp_lut[319] = 8'd 27;
long_chirp_lut[320] = 8'd 40; long_chirp_lut[321] = 8'd211; long_chirp_lut[322] = 8'd230; long_chirp_lut[323] = 8'd 63; long_chirp_lut[324] = 8'd 13; long_chirp_lut[325] = 8'd171; long_chirp_lut[326] = 8'd251; long_chirp_lut[327] = 8'd108; long_chirp_lut[328] = 8'd 1; long_chirp_lut[329] = 8'd123; long_chirp_lut[330] = 8'd253; long_chirp_lut[331] = 8'd156; long_chirp_lut[332] = 8'd 7; long_chirp_lut[333] = 8'd 76; long_chirp_lut[334] = 8'd238; long_chirp_lut[335] = 8'd201;
long_chirp_lut[336] = 8'd 31; long_chirp_lut[337] = 8'd 36; long_chirp_lut[338] = 8'd206; long_chirp_lut[339] = 8'd235; long_chirp_lut[340] = 8'd 71; long_chirp_lut[341] = 8'd 9; long_chirp_lut[342] = 8'd161; long_chirp_lut[343] = 8'd253; long_chirp_lut[344] = 8'd119; long_chirp_lut[345] = 8'd 1; long_chirp_lut[346] = 8'd111; long_chirp_lut[347] = 8'd251; long_chirp_lut[348] = 8'd169; long_chirp_lut[349] = 8'd 12; long_chirp_lut[350] = 8'd 62; long_chirp_lut[351] = 8'd229;
long_chirp_lut[352] = 8'd213; long_chirp_lut[353] = 8'd 43; long_chirp_lut[354] = 8'd 24; long_chirp_lut[355] = 8'd191; long_chirp_lut[356] = 8'd244; long_chirp_lut[357] = 8'd 88; long_chirp_lut[358] = 8'd 3; long_chirp_lut[359] = 8'd141; long_chirp_lut[360] = 8'd255; long_chirp_lut[361] = 8'd141; long_chirp_lut[362] = 8'd 3; long_chirp_lut[363] = 8'd 88; long_chirp_lut[364] = 8'd243; long_chirp_lut[365] = 8'd191; long_chirp_lut[366] = 8'd 25; long_chirp_lut[367] = 8'd 42;
long_chirp_lut[368] = 8'd212; long_chirp_lut[369] = 8'd231; long_chirp_lut[370] = 8'd 66; long_chirp_lut[371] = 8'd 11; long_chirp_lut[372] = 8'd164; long_chirp_lut[373] = 8'd252; long_chirp_lut[374] = 8'd118; long_chirp_lut[375] = 8'd 1; long_chirp_lut[376] = 8'd110; long_chirp_lut[377] = 8'd251; long_chirp_lut[378] = 8'd172; long_chirp_lut[379] = 8'd 14; long_chirp_lut[380] = 8'd 58; long_chirp_lut[381] = 8'd225; long_chirp_lut[382] = 8'd219; long_chirp_lut[383] = 8'd 50;
long_chirp_lut[384] = 8'd 19; long_chirp_lut[385] = 8'd181; long_chirp_lut[386] = 8'd248; long_chirp_lut[387] = 8'd101; long_chirp_lut[388] = 8'd 1; long_chirp_lut[389] = 8'd125; long_chirp_lut[390] = 8'd253; long_chirp_lut[391] = 8'd158; long_chirp_lut[392] = 8'd 9; long_chirp_lut[393] = 8'd 70; long_chirp_lut[394] = 8'd233; long_chirp_lut[395] = 8'd209; long_chirp_lut[396] = 8'd 41; long_chirp_lut[397] = 8'd 26; long_chirp_lut[398] = 8'd191; long_chirp_lut[399] = 8'd244;
long_chirp_lut[400] = 8'd 91; long_chirp_lut[401] = 8'd 2; long_chirp_lut[402] = 8'd135; long_chirp_lut[403] = 8'd254; long_chirp_lut[404] = 8'd150; long_chirp_lut[405] = 8'd 6; long_chirp_lut[406] = 8'd 77; long_chirp_lut[407] = 8'd237; long_chirp_lut[408] = 8'd204; long_chirp_lut[409] = 8'd 36; long_chirp_lut[410] = 8'd 29; long_chirp_lut[411] = 8'd195; long_chirp_lut[412] = 8'd242; long_chirp_lut[413] = 8'd 87; long_chirp_lut[414] = 8'd 3; long_chirp_lut[415] = 8'd138;
long_chirp_lut[416] = 8'd254; long_chirp_lut[417] = 8'd148; long_chirp_lut[418] = 8'd 5; long_chirp_lut[419] = 8'd 78; long_chirp_lut[420] = 8'd237; long_chirp_lut[421] = 8'd204; long_chirp_lut[422] = 8'd 36; long_chirp_lut[423] = 8'd 29; long_chirp_lut[424] = 8'd195; long_chirp_lut[425] = 8'd243; long_chirp_lut[426] = 8'd 89; long_chirp_lut[427] = 8'd 3; long_chirp_lut[428] = 8'd135; long_chirp_lut[429] = 8'd254; long_chirp_lut[430] = 8'd151; long_chirp_lut[431] = 8'd 7;
long_chirp_lut[432] = 8'd 73; long_chirp_lut[433] = 8'd235; long_chirp_lut[434] = 8'd209; long_chirp_lut[435] = 8'd 41; long_chirp_lut[436] = 8'd 25; long_chirp_lut[437] = 8'd188; long_chirp_lut[438] = 8'd246; long_chirp_lut[439] = 8'd 97; long_chirp_lut[440] = 8'd 1; long_chirp_lut[441] = 8'd126; long_chirp_lut[442] = 8'd253; long_chirp_lut[443] = 8'd161; long_chirp_lut[444] = 8'd 10; long_chirp_lut[445] = 8'd 64; long_chirp_lut[446] = 8'd228; long_chirp_lut[447] = 8'd217;
long_chirp_lut[448] = 8'd 50; long_chirp_lut[449] = 8'd 18; long_chirp_lut[450] = 8'd176; long_chirp_lut[451] = 8'd250; long_chirp_lut[452] = 8'd111; long_chirp_lut[453] = 8'd 1; long_chirp_lut[454] = 8'd111; long_chirp_lut[455] = 8'd250; long_chirp_lut[456] = 8'd177; long_chirp_lut[457] = 8'd 18; long_chirp_lut[458] = 8'd 49; long_chirp_lut[459] = 8'd216; long_chirp_lut[460] = 8'd229; long_chirp_lut[461] = 8'd 66; long_chirp_lut[462] = 8'd 9; long_chirp_lut[463] = 8'd157;
long_chirp_lut[464] = 8'd254; long_chirp_lut[465] = 8'd132; long_chirp_lut[466] = 8'd 2; long_chirp_lut[467] = 8'd 90; long_chirp_lut[468] = 8'd242; long_chirp_lut[469] = 8'd197; long_chirp_lut[470] = 8'd 31; long_chirp_lut[471] = 8'd 32; long_chirp_lut[472] = 8'd198; long_chirp_lut[473] = 8'd242; long_chirp_lut[474] = 8'd 89; long_chirp_lut[475] = 8'd 2; long_chirp_lut[476] = 8'd132; long_chirp_lut[477] = 8'd254; long_chirp_lut[478] = 8'd158; long_chirp_lut[479] = 8'd 10;
long_chirp_lut[480] = 8'd 64; long_chirp_lut[481] = 8'd228; long_chirp_lut[482] = 8'd219; long_chirp_lut[483] = 8'd 53; long_chirp_lut[484] = 8'd 15; long_chirp_lut[485] = 8'd171; long_chirp_lut[486] = 8'd252; long_chirp_lut[487] = 8'd120; long_chirp_lut[488] = 8'd 1; long_chirp_lut[489] = 8'd100; long_chirp_lut[490] = 8'd246; long_chirp_lut[491] = 8'd189; long_chirp_lut[492] = 8'd 26; long_chirp_lut[493] = 8'd 37; long_chirp_lut[494] = 8'd203; long_chirp_lut[495] = 8'd240;
long_chirp_lut[496] = 8'd 84; long_chirp_lut[497] = 8'd 3; long_chirp_lut[498] = 8'd135; long_chirp_lut[499] = 8'd254; long_chirp_lut[500] = 8'd157; long_chirp_lut[501] = 8'd 9; long_chirp_lut[502] = 8'd 64; long_chirp_lut[503] = 8'd227; long_chirp_lut[504] = 8'd220; long_chirp_lut[505] = 8'd 55; long_chirp_lut[506] = 8'd 14; long_chirp_lut[507] = 8'd167; long_chirp_lut[508] = 8'd253; long_chirp_lut[509] = 8'd125; long_chirp_lut[510] = 8'd 2; long_chirp_lut[511] = 8'd 92;
long_chirp_lut[512] = 8'd243; long_chirp_lut[513] = 8'd197; long_chirp_lut[514] = 8'd 33; long_chirp_lut[515] = 8'd 30; long_chirp_lut[516] = 8'd193; long_chirp_lut[517] = 8'd245; long_chirp_lut[518] = 8'd 97; long_chirp_lut[519] = 8'd 1; long_chirp_lut[520] = 8'd120; long_chirp_lut[521] = 8'd252; long_chirp_lut[522] = 8'd172; long_chirp_lut[523] = 8'd 17; long_chirp_lut[524] = 8'd 49; long_chirp_lut[525] = 8'd214; long_chirp_lut[526] = 8'd232; long_chirp_lut[527] = 8'd 73;
long_chirp_lut[528] = 8'd 6; long_chirp_lut[529] = 8'd145; long_chirp_lut[530] = 8'd254; long_chirp_lut[531] = 8'd149; long_chirp_lut[532] = 8'd 7; long_chirp_lut[533] = 8'd 69; long_chirp_lut[534] = 8'd230; long_chirp_lut[535] = 8'd218; long_chirp_lut[536] = 8'd 53; long_chirp_lut[537] = 8'd 14; long_chirp_lut[538] = 8'd167; long_chirp_lut[539] = 8'd253; long_chirp_lut[540] = 8'd127; long_chirp_lut[541] = 8'd 2; long_chirp_lut[542] = 8'd 88; long_chirp_lut[543] = 8'd241;
long_chirp_lut[544] = 8'd202; long_chirp_lut[545] = 8'd 38; long_chirp_lut[546] = 8'd 24; long_chirp_lut[547] = 8'd184; long_chirp_lut[548] = 8'd249; long_chirp_lut[549] = 8'd109; long_chirp_lut[550] = 8'd 1; long_chirp_lut[551] = 8'd105; long_chirp_lut[552] = 8'd247; long_chirp_lut[553] = 8'd188; long_chirp_lut[554] = 8'd 27; long_chirp_lut[555] = 8'd 35; long_chirp_lut[556] = 8'd198; long_chirp_lut[557] = 8'd243; long_chirp_lut[558] = 8'd 94; long_chirp_lut[559] = 8'd 1;
long_chirp_lut[560] = 8'd120; long_chirp_lut[561] = 8'd251; long_chirp_lut[562] = 8'd175; long_chirp_lut[563] = 8'd 19; long_chirp_lut[564] = 8'd 45; long_chirp_lut[565] = 8'd209; long_chirp_lut[566] = 8'd237; long_chirp_lut[567] = 8'd 82; long_chirp_lut[568] = 8'd 3; long_chirp_lut[569] = 8'd132; long_chirp_lut[570] = 8'd253; long_chirp_lut[571] = 8'd165; long_chirp_lut[572] = 8'd 14; long_chirp_lut[573] = 8'd 53; long_chirp_lut[574] = 8'd216; long_chirp_lut[575] = 8'd232;
long_chirp_lut[576] = 8'd 73; long_chirp_lut[577] = 8'd 5; long_chirp_lut[578] = 8'd141; long_chirp_lut[579] = 8'd254; long_chirp_lut[580] = 8'd157; long_chirp_lut[581] = 8'd 11; long_chirp_lut[582] = 8'd 59; long_chirp_lut[583] = 8'd221; long_chirp_lut[584] = 8'd228; long_chirp_lut[585] = 8'd 68; long_chirp_lut[586] = 8'd 7; long_chirp_lut[587] = 8'd146; long_chirp_lut[588] = 8'd254; long_chirp_lut[589] = 8'd152; long_chirp_lut[590] = 8'd 9; long_chirp_lut[591] = 8'd 63;
long_chirp_lut[592] = 8'd224; long_chirp_lut[593] = 8'd225; long_chirp_lut[594] = 8'd 65; long_chirp_lut[595] = 8'd 8; long_chirp_lut[596] = 8'd149; long_chirp_lut[597] = 8'd254; long_chirp_lut[598] = 8'd150; long_chirp_lut[599] = 8'd 8; long_chirp_lut[600] = 8'd 64; long_chirp_lut[601] = 8'd225; long_chirp_lut[602] = 8'd225; long_chirp_lut[603] = 8'd 64; long_chirp_lut[604] = 8'd 8; long_chirp_lut[605] = 8'd149; long_chirp_lut[606] = 8'd254; long_chirp_lut[607] = 8'd150;
long_chirp_lut[608] = 8'd 9; long_chirp_lut[609] = 8'd 63; long_chirp_lut[610] = 8'd224; long_chirp_lut[611] = 8'd226; long_chirp_lut[612] = 8'd 66; long_chirp_lut[613] = 8'd 7; long_chirp_lut[614] = 8'd146; long_chirp_lut[615] = 8'd254; long_chirp_lut[616] = 8'd154; long_chirp_lut[617] = 8'd 10; long_chirp_lut[618] = 8'd 59; long_chirp_lut[619] = 8'd220; long_chirp_lut[620] = 8'd229; long_chirp_lut[621] = 8'd 71; long_chirp_lut[622] = 8'd 5; long_chirp_lut[623] = 8'd140;
long_chirp_lut[624] = 8'd254; long_chirp_lut[625] = 8'd161; long_chirp_lut[626] = 8'd 13; long_chirp_lut[627] = 8'd 53; long_chirp_lut[628] = 8'd215; long_chirp_lut[629] = 8'd234; long_chirp_lut[630] = 8'd 79; long_chirp_lut[631] = 8'd 3; long_chirp_lut[632] = 8'd131; long_chirp_lut[633] = 8'd253; long_chirp_lut[634] = 8'd170; long_chirp_lut[635] = 8'd 18; long_chirp_lut[636] = 8'd 45; long_chirp_lut[637] = 8'd207; long_chirp_lut[638] = 8'd240; long_chirp_lut[639] = 8'd 90;
long_chirp_lut[640] = 8'd 1; long_chirp_lut[641] = 8'd119; long_chirp_lut[642] = 8'd250; long_chirp_lut[643] = 8'd182; long_chirp_lut[644] = 8'd 25; long_chirp_lut[645] = 8'd 35; long_chirp_lut[646] = 8'd195; long_chirp_lut[647] = 8'd246; long_chirp_lut[648] = 8'd104; long_chirp_lut[649] = 8'd 1; long_chirp_lut[650] = 8'd104; long_chirp_lut[651] = 8'd246; long_chirp_lut[652] = 8'd196; long_chirp_lut[653] = 8'd 35; long_chirp_lut[654] = 8'd 24; long_chirp_lut[655] = 8'd181;
long_chirp_lut[656] = 8'd251; long_chirp_lut[657] = 8'd121; long_chirp_lut[658] = 8'd 2; long_chirp_lut[659] = 8'd 86; long_chirp_lut[660] = 8'd237; long_chirp_lut[661] = 8'd211; long_chirp_lut[662] = 8'd 49; long_chirp_lut[663] = 8'd 14; long_chirp_lut[664] = 8'd162; long_chirp_lut[665] = 8'd254; long_chirp_lut[666] = 8'd141; long_chirp_lut[667] = 8'd 6; long_chirp_lut[668] = 8'd 67; long_chirp_lut[669] = 8'd225; long_chirp_lut[670] = 8'd226; long_chirp_lut[671] = 8'd 68;
long_chirp_lut[672] = 8'd 6; long_chirp_lut[673] = 8'd140; long_chirp_lut[674] = 8'd254; long_chirp_lut[675] = 8'd164; long_chirp_lut[676] = 8'd 16; long_chirp_lut[677] = 8'd 47; long_chirp_lut[678] = 8'd208; long_chirp_lut[679] = 8'd240; long_chirp_lut[680] = 8'd 91; long_chirp_lut[681] = 8'd 1; long_chirp_lut[682] = 8'd114; long_chirp_lut[683] = 8'd249; long_chirp_lut[684] = 8'd189; long_chirp_lut[685] = 8'd 31; long_chirp_lut[686] = 8'd 28; long_chirp_lut[687] = 8'd185;
long_chirp_lut[688] = 8'd250; long_chirp_lut[689] = 8'd119; long_chirp_lut[690] = 8'd 2; long_chirp_lut[691] = 8'd 86; long_chirp_lut[692] = 8'd237; long_chirp_lut[693] = 8'd213; long_chirp_lut[694] = 8'd 52; long_chirp_lut[695] = 8'd 12; long_chirp_lut[696] = 8'd157; long_chirp_lut[697] = 8'd254; long_chirp_lut[698] = 8'd150; long_chirp_lut[699] = 8'd 9; long_chirp_lut[700] = 8'd 58; long_chirp_lut[701] = 8'd217; long_chirp_lut[702] = 8'd234; long_chirp_lut[703] = 8'd 81;
long_chirp_lut[704] = 8'd 2; long_chirp_lut[705] = 8'd123; long_chirp_lut[706] = 8'd251; long_chirp_lut[707] = 8'd182; long_chirp_lut[708] = 8'd 26; long_chirp_lut[709] = 8'd 32; long_chirp_lut[710] = 8'd189; long_chirp_lut[711] = 8'd249; long_chirp_lut[712] = 8'd115; long_chirp_lut[713] = 8'd 1; long_chirp_lut[714] = 8'd 88; long_chirp_lut[715] = 8'd237; long_chirp_lut[716] = 8'd213; long_chirp_lut[717] = 8'd 53; long_chirp_lut[718] = 8'd 11; long_chirp_lut[719] = 8'd154;
long_chirp_lut[720] = 8'd255; long_chirp_lut[721] = 8'd154; long_chirp_lut[722] = 8'd 12; long_chirp_lut[723] = 8'd 53; long_chirp_lut[724] = 8'd212; long_chirp_lut[725] = 8'd238; long_chirp_lut[726] = 8'd 89; long_chirp_lut[727] = 8'd 1; long_chirp_lut[728] = 8'd113; long_chirp_lut[729] = 8'd248; long_chirp_lut[730] = 8'd193; long_chirp_lut[731] = 8'd 35; long_chirp_lut[732] = 8'd 23; long_chirp_lut[733] = 8'd176; long_chirp_lut[734] = 8'd252; long_chirp_lut[735] = 8'd132;
long_chirp_lut[736] = 8'd 4; long_chirp_lut[737] = 8'd 71; long_chirp_lut[738] = 8'd227; long_chirp_lut[739] = 8'd226; long_chirp_lut[740] = 8'd 71; long_chirp_lut[741] = 8'd 4; long_chirp_lut[742] = 8'd132; long_chirp_lut[743] = 8'd252; long_chirp_lut[744] = 8'd177; long_chirp_lut[745] = 8'd 24; long_chirp_lut[746] = 8'd 34; long_chirp_lut[747] = 8'd191; long_chirp_lut[748] = 8'd249; long_chirp_lut[749] = 8'd116; long_chirp_lut[750] = 8'd 2; long_chirp_lut[751] = 8'd 84;
long_chirp_lut[752] = 8'd235; long_chirp_lut[753] = 8'd217; long_chirp_lut[754] = 8'd 60; long_chirp_lut[755] = 8'd 8; long_chirp_lut[756] = 8'd143; long_chirp_lut[757] = 8'd254; long_chirp_lut[758] = 8'd167; long_chirp_lut[759] = 8'd 18; long_chirp_lut[760] = 8'd 40; long_chirp_lut[761] = 8'd199; long_chirp_lut[762] = 8'd246; long_chirp_lut[763] = 8'd109; long_chirp_lut[764] = 8'd 1; long_chirp_lut[765] = 8'd 91; long_chirp_lut[766] = 8'd238; long_chirp_lut[767] = 8'd213;
long_chirp_lut[768] = 8'd 55; long_chirp_lut[769] = 8'd 10; long_chirp_lut[770] = 8'd148; long_chirp_lut[771] = 8'd254; long_chirp_lut[772] = 8'd164; long_chirp_lut[773] = 8'd 17; long_chirp_lut[774] = 8'd 42; long_chirp_lut[775] = 8'd200; long_chirp_lut[776] = 8'd245; long_chirp_lut[777] = 8'd108; long_chirp_lut[778] = 8'd 1; long_chirp_lut[779] = 8'd 90; long_chirp_lut[780] = 8'd237; long_chirp_lut[781] = 8'd214; long_chirp_lut[782] = 8'd 57; long_chirp_lut[783] = 8'd 9;
long_chirp_lut[784] = 8'd145; long_chirp_lut[785] = 8'd254; long_chirp_lut[786] = 8'd167; long_chirp_lut[787] = 8'd 19; long_chirp_lut[788] = 8'd 38; long_chirp_lut[789] = 8'd195; long_chirp_lut[790] = 8'd247; long_chirp_lut[791] = 8'd114; long_chirp_lut[792] = 8'd 2; long_chirp_lut[793] = 8'd 83; long_chirp_lut[794] = 8'd233; long_chirp_lut[795] = 8'd220; long_chirp_lut[796] = 8'd 64; long_chirp_lut[797] = 8'd 6; long_chirp_lut[798] = 8'd135; long_chirp_lut[799] = 8'd253;
long_chirp_lut[800] = 8'd178; long_chirp_lut[801] = 8'd 26; long_chirp_lut[802] = 8'd 30; long_chirp_lut[803] = 8'd184; long_chirp_lut[804] = 8'd251; long_chirp_lut[805] = 8'd128; long_chirp_lut[806] = 8'd 4; long_chirp_lut[807] = 8'd 70; long_chirp_lut[808] = 8'd224; long_chirp_lut[809] = 8'd230; long_chirp_lut[810] = 8'd 79; long_chirp_lut[811] = 8'd 2; long_chirp_lut[812] = 8'd117; long_chirp_lut[813] = 8'd248; long_chirp_lut[814] = 8'd194; long_chirp_lut[815] = 8'd 38;
long_chirp_lut[816] = 8'd 19; long_chirp_lut[817] = 8'd166; long_chirp_lut[818] = 8'd254; long_chirp_lut[819] = 8'd149; long_chirp_lut[820] = 8'd 11; long_chirp_lut[821] = 8'd 51; long_chirp_lut[822] = 8'd208; long_chirp_lut[823] = 8'd242; long_chirp_lut[824] = 8'd101; long_chirp_lut[825] = 8'd 1; long_chirp_lut[826] = 8'd 93; long_chirp_lut[827] = 8'd238; long_chirp_lut[828] = 8'd214; long_chirp_lut[829] = 8'd 58; long_chirp_lut[830] = 8'd 8; long_chirp_lut[831] = 8'd139;
long_chirp_lut[832] = 8'd253; long_chirp_lut[833] = 8'd176; long_chirp_lut[834] = 8'd 25; long_chirp_lut[835] = 8'd 30; long_chirp_lut[836] = 8'd183; long_chirp_lut[837] = 8'd252; long_chirp_lut[838] = 8'd132; long_chirp_lut[839] = 8'd 5; long_chirp_lut[840] = 8'd 64; long_chirp_lut[841] = 8'd219; long_chirp_lut[842] = 8'd235; long_chirp_lut[843] = 8'd 88; long_chirp_lut[844] = 8'd 1; long_chirp_lut[845] = 8'd105; long_chirp_lut[846] = 8'd243; long_chirp_lut[847] = 8'd206;
long_chirp_lut[848] = 8'd 50; long_chirp_lut[849] = 8'd 11; long_chirp_lut[850] = 8'd148; long_chirp_lut[851] = 8'd254; long_chirp_lut[852] = 8'd169; long_chirp_lut[853] = 8'd 21; long_chirp_lut[854] = 8'd 34; long_chirp_lut[855] = 8'd187; long_chirp_lut[856] = 8'd251; long_chirp_lut[857] = 8'd128; long_chirp_lut[858] = 8'd 5; long_chirp_lut[859] = 8'd 66; long_chirp_lut[860] = 8'd220; long_chirp_lut[861] = 8'd235; long_chirp_lut[862] = 8'd 88; long_chirp_lut[863] = 8'd 1;
long_chirp_lut[864] = 8'd104; long_chirp_lut[865] = 8'd242; long_chirp_lut[866] = 8'd209; long_chirp_lut[867] = 8'd 53; long_chirp_lut[868] = 8'd 9; long_chirp_lut[869] = 8'd143; long_chirp_lut[870] = 8'd253; long_chirp_lut[871] = 8'd175; long_chirp_lut[872] = 8'd 25; long_chirp_lut[873] = 8'd 29; long_chirp_lut[874] = 8'd180; long_chirp_lut[875] = 8'd253; long_chirp_lut[876] = 8'd138; long_chirp_lut[877] = 8'd 8; long_chirp_lut[878] = 8'd 56; long_chirp_lut[879] = 8'd211;
long_chirp_lut[880] = 8'd241; long_chirp_lut[881] = 8'd101; long_chirp_lut[882] = 8'd 1; long_chirp_lut[883] = 8'd 90; long_chirp_lut[884] = 8'd235; long_chirp_lut[885] = 8'd220; long_chirp_lut[886] = 8'd 67; long_chirp_lut[887] = 8'd 4; long_chirp_lut[888] = 8'd125; long_chirp_lut[889] = 8'd250; long_chirp_lut[890] = 8'd193; long_chirp_lut[891] = 8'd 39; long_chirp_lut[892] = 8'd 17; long_chirp_lut[893] = 8'd159; long_chirp_lut[894] = 8'd254; long_chirp_lut[895] = 8'd161;
long_chirp_lut[896] = 8'd 18; long_chirp_lut[897] = 8'd 38; long_chirp_lut[898] = 8'd191; long_chirp_lut[899] = 8'd250; long_chirp_lut[900] = 8'd127; long_chirp_lut[901] = 8'd 5; long_chirp_lut[902] = 8'd 64; long_chirp_lut[903] = 8'd217; long_chirp_lut[904] = 8'd238; long_chirp_lut[905] = 8'd 95; long_chirp_lut[906] = 8'd 1; long_chirp_lut[907] = 8'd 94; long_chirp_lut[908] = 8'd237; long_chirp_lut[909] = 8'd218; long_chirp_lut[910] = 8'd 66; long_chirp_lut[911] = 8'd 4;
long_chirp_lut[912] = 8'd125; long_chirp_lut[913] = 8'd249; long_chirp_lut[914] = 8'd194; long_chirp_lut[915] = 8'd 41; long_chirp_lut[916] = 8'd 15; long_chirp_lut[917] = 8'd155; long_chirp_lut[918] = 8'd254; long_chirp_lut[919] = 8'd167; long_chirp_lut[920] = 8'd 21; long_chirp_lut[921] = 8'd 32; long_chirp_lut[922] = 8'd183; long_chirp_lut[923] = 8'd252; long_chirp_lut[924] = 8'd138; long_chirp_lut[925] = 8'd 8; long_chirp_lut[926] = 8'd 54; long_chirp_lut[927] = 8'd207;
long_chirp_lut[928] = 8'd244; long_chirp_lut[929] = 8'd110; long_chirp_lut[930] = 8'd 2; long_chirp_lut[931] = 8'd 78; long_chirp_lut[932] = 8'd227; long_chirp_lut[933] = 8'd230; long_chirp_lut[934] = 8'd 83; long_chirp_lut[935] = 8'd 1; long_chirp_lut[936] = 8'd104; long_chirp_lut[937] = 8'd241; long_chirp_lut[938] = 8'd213; long_chirp_lut[939] = 8'd 60; long_chirp_lut[940] = 8'd 6; long_chirp_lut[941] = 8'd130; long_chirp_lut[942] = 8'd250; long_chirp_lut[943] = 8'd192;
long_chirp_lut[944] = 8'd 39; long_chirp_lut[945] = 8'd 15; long_chirp_lut[946] = 8'd155; long_chirp_lut[947] = 8'd254; long_chirp_lut[948] = 8'd169; long_chirp_lut[949] = 8'd 23; long_chirp_lut[950] = 8'd 29; long_chirp_lut[951] = 8'd178; long_chirp_lut[952] = 8'd253; long_chirp_lut[953] = 8'd146; long_chirp_lut[954] = 8'd 12; long_chirp_lut[955] = 8'd 46; long_chirp_lut[956] = 8'd198; long_chirp_lut[957] = 8'd248; long_chirp_lut[958] = 8'd123; long_chirp_lut[959] = 8'd 4;
long_chirp_lut[960] = 8'd 64; long_chirp_lut[961] = 8'd216; long_chirp_lut[962] = 8'd240; long_chirp_lut[963] = 8'd101; long_chirp_lut[964] = 8'd 1; long_chirp_lut[965] = 8'd 84; long_chirp_lut[966] = 8'd230; long_chirp_lut[967] = 8'd228; long_chirp_lut[968] = 8'd 81; long_chirp_lut[969] = 8'd 1; long_chirp_lut[970] = 8'd104; long_chirp_lut[971] = 8'd241; long_chirp_lut[972] = 8'd214; long_chirp_lut[973] = 8'd 63; long_chirp_lut[974] = 8'd 4; long_chirp_lut[975] = 8'd123;
long_chirp_lut[976] = 8'd248; long_chirp_lut[977] = 8'd199; long_chirp_lut[978] = 8'd 47; long_chirp_lut[979] = 8'd 11; long_chirp_lut[980] = 8'd142; long_chirp_lut[981] = 8'd253; long_chirp_lut[982] = 8'd183; long_chirp_lut[983] = 8'd 34; long_chirp_lut[984] = 8'd 19; long_chirp_lut[985] = 8'd160; long_chirp_lut[986] = 8'd254; long_chirp_lut[987] = 8'd167; long_chirp_lut[988] = 8'd 23; long_chirp_lut[989] = 8'd 29; long_chirp_lut[990] = 8'd176; long_chirp_lut[991] = 8'd254;
long_chirp_lut[992] = 8'd151; long_chirp_lut[993] = 8'd 14; long_chirp_lut[994] = 8'd 40; long_chirp_lut[995] = 8'd191; long_chirp_lut[996] = 8'd251; long_chirp_lut[997] = 8'd135; long_chirp_lut[998] = 8'd 8; long_chirp_lut[999] = 8'd 52; long_chirp_lut[1000] = 8'd203; long_chirp_lut[1001] = 8'd247; long_chirp_lut[1002] = 8'd120; long_chirp_lut[1003] = 8'd 4; long_chirp_lut[1004] = 8'd 64; long_chirp_lut[1005] = 8'd214; long_chirp_lut[1006] = 8'd241; long_chirp_lut[1007] = 8'd106;
long_chirp_lut[1008] = 8'd 2; long_chirp_lut[1009] = 8'd 76; long_chirp_lut[1010] = 8'd224; long_chirp_lut[1011] = 8'd235; long_chirp_lut[1012] = 8'd 94; long_chirp_lut[1013] = 8'd 1; long_chirp_lut[1014] = 8'd 88; long_chirp_lut[1015] = 8'd231; long_chirp_lut[1016] = 8'd228; long_chirp_lut[1017] = 8'd 82; long_chirp_lut[1018] = 8'd 1; long_chirp_lut[1019] = 8'd 99; long_chirp_lut[1020] = 8'd237; long_chirp_lut[1021] = 8'd220; long_chirp_lut[1022] = 8'd 72; long_chirp_lut[1023] = 8'd 2;
long_chirp_lut[1024] = 8'd110; long_chirp_lut[1025] = 8'd242; long_chirp_lut[1026] = 8'd213; long_chirp_lut[1027] = 8'd 63; long_chirp_lut[1028] = 8'd 4; long_chirp_lut[1029] = 8'd119; long_chirp_lut[1030] = 8'd246; long_chirp_lut[1031] = 8'd206; long_chirp_lut[1032] = 8'd 55; long_chirp_lut[1033] = 8'd 6; long_chirp_lut[1034] = 8'd128; long_chirp_lut[1035] = 8'd249; long_chirp_lut[1036] = 8'd199; long_chirp_lut[1037] = 8'd 48; long_chirp_lut[1038] = 8'd 9; long_chirp_lut[1039] = 8'd136;
long_chirp_lut[1040] = 8'd251; long_chirp_lut[1041] = 8'd192; long_chirp_lut[1042] = 8'd 43; long_chirp_lut[1043] = 8'd 12; long_chirp_lut[1044] = 8'd143; long_chirp_lut[1045] = 8'd252; long_chirp_lut[1046] = 8'd186; long_chirp_lut[1047] = 8'd 38; long_chirp_lut[1048] = 8'd 15; long_chirp_lut[1049] = 8'd150; long_chirp_lut[1050] = 8'd253; long_chirp_lut[1051] = 8'd181; long_chirp_lut[1052] = 8'd 34; long_chirp_lut[1053] = 8'd 17; long_chirp_lut[1054] = 8'd155; long_chirp_lut[1055] = 8'd254;
long_chirp_lut[1056] = 8'd177; long_chirp_lut[1057] = 8'd 31; long_chirp_lut[1058] = 8'd 20; long_chirp_lut[1059] = 8'd159; long_chirp_lut[1060] = 8'd254; long_chirp_lut[1061] = 8'd173; long_chirp_lut[1062] = 8'd 28; long_chirp_lut[1063] = 8'd 22; long_chirp_lut[1064] = 8'd162; long_chirp_lut[1065] = 8'd254; long_chirp_lut[1066] = 8'd170; long_chirp_lut[1067] = 8'd 27; long_chirp_lut[1068] = 8'd 23; long_chirp_lut[1069] = 8'd165; long_chirp_lut[1070] = 8'd254; long_chirp_lut[1071] = 8'd168;
long_chirp_lut[1072] = 8'd 25; long_chirp_lut[1073] = 8'd 24; long_chirp_lut[1074] = 8'd166; long_chirp_lut[1075] = 8'd254; long_chirp_lut[1076] = 8'd167; long_chirp_lut[1077] = 8'd 25; long_chirp_lut[1078] = 8'd 25; long_chirp_lut[1079] = 8'd167; long_chirp_lut[1080] = 8'd255; long_chirp_lut[1081] = 8'd167; long_chirp_lut[1082] = 8'd 25; long_chirp_lut[1083] = 8'd 25; long_chirp_lut[1084] = 8'd166; long_chirp_lut[1085] = 8'd254; long_chirp_lut[1086] = 8'd167; long_chirp_lut[1087] = 8'd 25;
long_chirp_lut[1088] = 8'd 24; long_chirp_lut[1089] = 8'd165; long_chirp_lut[1090] = 8'd254; long_chirp_lut[1091] = 8'd169; long_chirp_lut[1092] = 8'd 26; long_chirp_lut[1093] = 8'd 23; long_chirp_lut[1094] = 8'd163; long_chirp_lut[1095] = 8'd254; long_chirp_lut[1096] = 8'd171; long_chirp_lut[1097] = 8'd 28; long_chirp_lut[1098] = 8'd 21; long_chirp_lut[1099] = 8'd160; long_chirp_lut[1100] = 8'd254; long_chirp_lut[1101] = 8'd174; long_chirp_lut[1102] = 8'd 30; long_chirp_lut[1103] = 8'd 19;
long_chirp_lut[1104] = 8'd157; long_chirp_lut[1105] = 8'd254; long_chirp_lut[1106] = 8'd178; long_chirp_lut[1107] = 8'd 33; long_chirp_lut[1108] = 8'd 17; long_chirp_lut[1109] = 8'd152; long_chirp_lut[1110] = 8'd253; long_chirp_lut[1111] = 8'd183; long_chirp_lut[1112] = 8'd 37; long_chirp_lut[1113] = 8'd 14; long_chirp_lut[1114] = 8'd146; long_chirp_lut[1115] = 8'd252; long_chirp_lut[1116] = 8'd189; long_chirp_lut[1117] = 8'd 42; long_chirp_lut[1118] = 8'd 11; long_chirp_lut[1119] = 8'd139;
long_chirp_lut[1120] = 8'd251; long_chirp_lut[1121] = 8'd195; long_chirp_lut[1122] = 8'd 47; long_chirp_lut[1123] = 8'd 9; long_chirp_lut[1124] = 8'd132; long_chirp_lut[1125] = 8'd249; long_chirp_lut[1126] = 8'd201; long_chirp_lut[1127] = 8'd 54; long_chirp_lut[1128] = 8'd 6; long_chirp_lut[1129] = 8'd123; long_chirp_lut[1130] = 8'd246; long_chirp_lut[1131] = 8'd209; long_chirp_lut[1132] = 8'd 61; long_chirp_lut[1133] = 8'd 4; long_chirp_lut[1134] = 8'd114; long_chirp_lut[1135] = 8'd242;
long_chirp_lut[1136] = 8'd216; long_chirp_lut[1137] = 8'd 70; long_chirp_lut[1138] = 8'd 2; long_chirp_lut[1139] = 8'd103; long_chirp_lut[1140] = 8'd237; long_chirp_lut[1141] = 8'd223; long_chirp_lut[1142] = 8'd 80; long_chirp_lut[1143] = 8'd 1; long_chirp_lut[1144] = 8'd 92; long_chirp_lut[1145] = 8'd231; long_chirp_lut[1146] = 8'd231; long_chirp_lut[1147] = 8'd 91; long_chirp_lut[1148] = 8'd 1; long_chirp_lut[1149] = 8'd 81; long_chirp_lut[1150] = 8'd224; long_chirp_lut[1151] = 8'd237;
long_chirp_lut[1152] = 8'd104; long_chirp_lut[1153] = 8'd 2; long_chirp_lut[1154] = 8'd 69; long_chirp_lut[1155] = 8'd214; long_chirp_lut[1156] = 8'd244; long_chirp_lut[1157] = 8'd117; long_chirp_lut[1158] = 8'd 5; long_chirp_lut[1159] = 8'd 56; long_chirp_lut[1160] = 8'd203; long_chirp_lut[1161] = 8'd249; long_chirp_lut[1162] = 8'd132; long_chirp_lut[1163] = 8'd 9; long_chirp_lut[1164] = 8'd 45; long_chirp_lut[1165] = 8'd191; long_chirp_lut[1166] = 8'd252; long_chirp_lut[1167] = 8'd148;
long_chirp_lut[1168] = 8'd 16; long_chirp_lut[1169] = 8'd 33; long_chirp_lut[1170] = 8'd176; long_chirp_lut[1171] = 8'd254; long_chirp_lut[1172] = 8'd164; long_chirp_lut[1173] = 8'd 25; long_chirp_lut[1174] = 8'd 23; long_chirp_lut[1175] = 8'd160; long_chirp_lut[1176] = 8'd254; long_chirp_lut[1177] = 8'd180; long_chirp_lut[1178] = 8'd 36; long_chirp_lut[1179] = 8'd 14; long_chirp_lut[1180] = 8'd142; long_chirp_lut[1181] = 8'd251; long_chirp_lut[1182] = 8'd196; long_chirp_lut[1183] = 8'd 50;
long_chirp_lut[1184] = 8'd 7; long_chirp_lut[1185] = 8'd123; long_chirp_lut[1186] = 8'd246; long_chirp_lut[1187] = 8'd212; long_chirp_lut[1188] = 8'd 66; long_chirp_lut[1189] = 8'd 2; long_chirp_lut[1190] = 8'd104; long_chirp_lut[1191] = 8'd237; long_chirp_lut[1192] = 8'd226; long_chirp_lut[1193] = 8'd 85; long_chirp_lut[1194] = 8'd 1; long_chirp_lut[1195] = 8'd 84; long_chirp_lut[1196] = 8'd225; long_chirp_lut[1197] = 8'd238; long_chirp_lut[1198] = 8'd106; long_chirp_lut[1199] = 8'd 2;
long_chirp_lut[1200] = 8'd 64; long_chirp_lut[1201] = 8'd209; long_chirp_lut[1202] = 8'd247; long_chirp_lut[1203] = 8'd128; long_chirp_lut[1204] = 8'd 8; long_chirp_lut[1205] = 8'd 46; long_chirp_lut[1206] = 8'd190; long_chirp_lut[1207] = 8'd253; long_chirp_lut[1208] = 8'd151; long_chirp_lut[1209] = 8'd 18; long_chirp_lut[1210] = 8'd 29; long_chirp_lut[1211] = 8'd169; long_chirp_lut[1212] = 8'd254; long_chirp_lut[1213] = 8'd174; long_chirp_lut[1214] = 8'd 33; long_chirp_lut[1215] = 8'd 15;
long_chirp_lut[1216] = 8'd145; long_chirp_lut[1217] = 8'd252; long_chirp_lut[1218] = 8'd196; long_chirp_lut[1219] = 8'd 51; long_chirp_lut[1220] = 8'd 6; long_chirp_lut[1221] = 8'd119; long_chirp_lut[1222] = 8'd243; long_chirp_lut[1223] = 8'd216; long_chirp_lut[1224] = 8'd 73; long_chirp_lut[1225] = 8'd 1; long_chirp_lut[1226] = 8'd 93; long_chirp_lut[1227] = 8'd230; long_chirp_lut[1228] = 8'd233; long_chirp_lut[1229] = 8'd 99; long_chirp_lut[1230] = 8'd 2; long_chirp_lut[1231] = 8'd 68;
long_chirp_lut[1232] = 8'd212; long_chirp_lut[1233] = 8'd246; long_chirp_lut[1234] = 8'd127; long_chirp_lut[1235] = 8'd 8; long_chirp_lut[1236] = 8'd 45; long_chirp_lut[1237] = 8'd188; long_chirp_lut[1238] = 8'd253; long_chirp_lut[1239] = 8'd155; long_chirp_lut[1240] = 8'd 21; long_chirp_lut[1241] = 8'd 25; long_chirp_lut[1242] = 8'd161; long_chirp_lut[1243] = 8'd254; long_chirp_lut[1244] = 8'd183; long_chirp_lut[1245] = 8'd 41; long_chirp_lut[1246] = 8'd 10; long_chirp_lut[1247] = 8'd131;
long_chirp_lut[1248] = 8'd247; long_chirp_lut[1249] = 8'd209; long_chirp_lut[1250] = 8'd 66; long_chirp_lut[1251] = 8'd 2; long_chirp_lut[1252] = 8'd100; long_chirp_lut[1253] = 8'd234; long_chirp_lut[1254] = 8'd231; long_chirp_lut[1255] = 8'd 95; long_chirp_lut[1256] = 8'd 1; long_chirp_lut[1257] = 8'd 70; long_chirp_lut[1258] = 8'd212; long_chirp_lut[1259] = 8'd246; long_chirp_lut[1260] = 8'd128; long_chirp_lut[1261] = 8'd 9; long_chirp_lut[1262] = 8'd 42; long_chirp_lut[1263] = 8'd185;
long_chirp_lut[1264] = 8'd254; long_chirp_lut[1265] = 8'd161; long_chirp_lut[1266] = 8'd 25; long_chirp_lut[1267] = 8'd 20; long_chirp_lut[1268] = 8'd153; long_chirp_lut[1269] = 8'd253; long_chirp_lut[1270] = 8'd193; long_chirp_lut[1271] = 8'd 49; long_chirp_lut[1272] = 8'd 6; long_chirp_lut[1273] = 8'd118; long_chirp_lut[1274] = 8'd242; long_chirp_lut[1275] = 8'd220; long_chirp_lut[1276] = 8'd 80; long_chirp_lut[1277] = 8'd 1; long_chirp_lut[1278] = 8'd 83; long_chirp_lut[1279] = 8'd222;
long_chirp_lut[1280] = 8'd241; long_chirp_lut[1281] = 8'd116; long_chirp_lut[1282] = 8'd 5; long_chirp_lut[1283] = 8'd 50; long_chirp_lut[1284] = 8'd193; long_chirp_lut[1285] = 8'd253; long_chirp_lut[1286] = 8'd153; long_chirp_lut[1287] = 8'd 21; long_chirp_lut[1288] = 8'd 24; long_chirp_lut[1289] = 8'd158; long_chirp_lut[1290] = 8'd253; long_chirp_lut[1291] = 8'd189; long_chirp_lut[1292] = 8'd 47; long_chirp_lut[1293] = 8'd 7; long_chirp_lut[1294] = 8'd119; long_chirp_lut[1295] = 8'd242;
long_chirp_lut[1296] = 8'd220; long_chirp_lut[1297] = 8'd 81; long_chirp_lut[1298] = 8'd 1; long_chirp_lut[1299] = 8'd 81; long_chirp_lut[1300] = 8'd220; long_chirp_lut[1301] = 8'd243; long_chirp_lut[1302] = 8'd120; long_chirp_lut[1303] = 8'd 7; long_chirp_lut[1304] = 8'd 46; long_chirp_lut[1305] = 8'd187; long_chirp_lut[1306] = 8'd254; long_chirp_lut[1307] = 8'd161; long_chirp_lut[1308] = 8'd 26; long_chirp_lut[1309] = 8'd 19; long_chirp_lut[1310] = 8'd148; long_chirp_lut[1311] = 8'd251;
long_chirp_lut[1312] = 8'd199; long_chirp_lut[1313] = 8'd 57; long_chirp_lut[1314] = 8'd 3; long_chirp_lut[1315] = 8'd105; long_chirp_lut[1316] = 8'd235; long_chirp_lut[1317] = 8'd230; long_chirp_lut[1318] = 8'd 97; long_chirp_lut[1319] = 8'd 2; long_chirp_lut[1320] = 8'd 64; long_chirp_lut[1321] = 8'd206; long_chirp_lut[1322] = 8'd250; long_chirp_lut[1323] = 8'd141; long_chirp_lut[1324] = 8'd 16; long_chirp_lut[1325] = 8'd 30; long_chirp_lut[1326] = 8'd166; long_chirp_lut[1327] = 8'd254;
long_chirp_lut[1328] = 8'd184; long_chirp_lut[1329] = 8'd 44; long_chirp_lut[1330] = 8'd 8; long_chirp_lut[1331] = 8'd121; long_chirp_lut[1332] = 8'd242; long_chirp_lut[1333] = 8'd221; long_chirp_lut[1334] = 8'd 83; long_chirp_lut[1335] = 8'd 1; long_chirp_lut[1336] = 8'd 76; long_chirp_lut[1337] = 8'd215; long_chirp_lut[1338] = 8'd246; long_chirp_lut[1339] = 8'd130; long_chirp_lut[1340] = 8'd 11; long_chirp_lut[1341] = 8'd 37; long_chirp_lut[1342] = 8'd175; long_chirp_lut[1343] = 8'd254;
long_chirp_lut[1344] = 8'd177; long_chirp_lut[1345] = 8'd 38; long_chirp_lut[1346] = 8'd 10; long_chirp_lut[1347] = 8'd127; long_chirp_lut[1348] = 8'd245; long_chirp_lut[1349] = 8'd217; long_chirp_lut[1350] = 8'd 79; long_chirp_lut[1351] = 8'd 1; long_chirp_lut[1352] = 8'd 79; long_chirp_lut[1353] = 8'd217; long_chirp_lut[1354] = 8'd245; long_chirp_lut[1355] = 8'd128; long_chirp_lut[1356] = 8'd 10; long_chirp_lut[1357] = 8'd 37; long_chirp_lut[1358] = 8'd175; long_chirp_lut[1359] = 8'd254;
long_chirp_lut[1360] = 8'd178; long_chirp_lut[1361] = 8'd 39; long_chirp_lut[1362] = 8'd 9; long_chirp_lut[1363] = 8'd124; long_chirp_lut[1364] = 8'd243; long_chirp_lut[1365] = 8'd220; long_chirp_lut[1366] = 8'd 83; long_chirp_lut[1367] = 8'd 1; long_chirp_lut[1368] = 8'd 73; long_chirp_lut[1369] = 8'd212; long_chirp_lut[1370] = 8'd247; long_chirp_lut[1371] = 8'd136; long_chirp_lut[1372] = 8'd 14; long_chirp_lut[1373] = 8'd 31; long_chirp_lut[1374] = 8'd166; long_chirp_lut[1375] = 8'd254;
long_chirp_lut[1376] = 8'd187; long_chirp_lut[1377] = 8'd 48; long_chirp_lut[1378] = 8'd 5; long_chirp_lut[1379] = 8'd112; long_chirp_lut[1380] = 8'd237; long_chirp_lut[1381] = 8'd229; long_chirp_lut[1382] = 8'd 97; long_chirp_lut[1383] = 8'd 2; long_chirp_lut[1384] = 8'd 60; long_chirp_lut[1385] = 8'd200; long_chirp_lut[1386] = 8'd252; long_chirp_lut[1387] = 8'd153; long_chirp_lut[1388] = 8'd 23; long_chirp_lut[1389] = 8'd 20; long_chirp_lut[1390] = 8'd148; long_chirp_lut[1391] = 8'd251;
long_chirp_lut[1392] = 8'd204; long_chirp_lut[1393] = 8'd 65; long_chirp_lut[1394] = 8'd 1; long_chirp_lut[1395] = 8'd 91; long_chirp_lut[1396] = 8'd225; long_chirp_lut[1397] = 8'd241; long_chirp_lut[1398] = 8'd120; long_chirp_lut[1399] = 8'd 8; long_chirp_lut[1400] = 8'd 40; long_chirp_lut[1401] = 8'd178; long_chirp_lut[1402] = 8'd254; long_chirp_lut[1403] = 8'd178; long_chirp_lut[1404] = 8'd 41; long_chirp_lut[1405] = 8'd 8; long_chirp_lut[1406] = 8'd119; long_chirp_lut[1407] = 8'd241;
long_chirp_lut[1408] = 8'd226; long_chirp_lut[1409] = 8'd 93; long_chirp_lut[1410] = 8'd 2; long_chirp_lut[1411] = 8'd 62; long_chirp_lut[1412] = 8'd201; long_chirp_lut[1413] = 8'd252; long_chirp_lut[1414] = 8'd153; long_chirp_lut[1415] = 8'd 24; long_chirp_lut[1416] = 8'd 19; long_chirp_lut[1417] = 8'd144; long_chirp_lut[1418] = 8'd250; long_chirp_lut[1419] = 8'd209; long_chirp_lut[1420] = 8'd 71; long_chirp_lut[1421] = 8'd 1; long_chirp_lut[1422] = 8'd 83; long_chirp_lut[1423] = 8'd218;
long_chirp_lut[1424] = 8'd245; long_chirp_lut[1425] = 8'd132; long_chirp_lut[1426] = 8'd 13; long_chirp_lut[1427] = 8'd 31; long_chirp_lut[1428] = 8'd164; long_chirp_lut[1429] = 8'd254; long_chirp_lut[1430] = 8'd193; long_chirp_lut[1431] = 8'd 54; long_chirp_lut[1432] = 8'd 3; long_chirp_lut[1433] = 8'd100; long_chirp_lut[1434] = 8'd230; long_chirp_lut[1435] = 8'd238; long_chirp_lut[1436] = 8'd115; long_chirp_lut[1437] = 8'd 7; long_chirp_lut[1438] = 8'd 42; long_chirp_lut[1439] = 8'd179;
long_chirp_lut[1440] = 8'd255; long_chirp_lut[1441] = 8'd179; long_chirp_lut[1442] = 8'd 43; long_chirp_lut[1443] = 8'd 7; long_chirp_lut[1444] = 8'd114; long_chirp_lut[1445] = 8'd237; long_chirp_lut[1446] = 8'd231; long_chirp_lut[1447] = 8'd102; long_chirp_lut[1448] = 8'd 4; long_chirp_lut[1449] = 8'd 52; long_chirp_lut[1450] = 8'd189; long_chirp_lut[1451] = 8'd254; long_chirp_lut[1452] = 8'd169; long_chirp_lut[1453] = 8'd 35; long_chirp_lut[1454] = 8'd 10; long_chirp_lut[1455] = 8'd123;
long_chirp_lut[1456] = 8'd242; long_chirp_lut[1457] = 8'd225; long_chirp_lut[1458] = 8'd 94; long_chirp_lut[1459] = 8'd 2; long_chirp_lut[1460] = 8'd 58; long_chirp_lut[1461] = 8'd195; long_chirp_lut[1462] = 8'd253; long_chirp_lut[1463] = 8'd163; long_chirp_lut[1464] = 8'd 31; long_chirp_lut[1465] = 8'd 12; long_chirp_lut[1466] = 8'd128; long_chirp_lut[1467] = 8'd243; long_chirp_lut[1468] = 8'd223; long_chirp_lut[1469] = 8'd 90; long_chirp_lut[1470] = 8'd 2; long_chirp_lut[1471] = 8'd 60;
long_chirp_lut[1472] = 8'd198; long_chirp_lut[1473] = 8'd253; long_chirp_lut[1474] = 8'd162; long_chirp_lut[1475] = 8'd 31; long_chirp_lut[1476] = 8'd 13; long_chirp_lut[1477] = 8'd129; long_chirp_lut[1478] = 8'd243; long_chirp_lut[1479] = 8'd223; long_chirp_lut[1480] = 8'd 91; long_chirp_lut[1481] = 8'd 2; long_chirp_lut[1482] = 8'd 59; long_chirp_lut[1483] = 8'd196; long_chirp_lut[1484] = 8'd253; long_chirp_lut[1485] = 8'd164; long_chirp_lut[1486] = 8'd 33; long_chirp_lut[1487] = 8'd 11;
long_chirp_lut[1488] = 8'd125; long_chirp_lut[1489] = 8'd242; long_chirp_lut[1490] = 8'd226; long_chirp_lut[1491] = 8'd 96; long_chirp_lut[1492] = 8'd 3; long_chirp_lut[1493] = 8'd 54; long_chirp_lut[1494] = 8'd190; long_chirp_lut[1495] = 8'd254; long_chirp_lut[1496] = 8'd171; long_chirp_lut[1497] = 8'd 38; long_chirp_lut[1498] = 8'd 8; long_chirp_lut[1499] = 8'd116; long_chirp_lut[1500] = 8'd237; long_chirp_lut[1501] = 8'd232; long_chirp_lut[1502] = 8'd106; long_chirp_lut[1503] = 8'd 5;
long_chirp_lut[1504] = 8'd 46; long_chirp_lut[1505] = 8'd181; long_chirp_lut[1506] = 8'd254; long_chirp_lut[1507] = 8'd182; long_chirp_lut[1508] = 8'd 47; long_chirp_lut[1509] = 8'd 4; long_chirp_lut[1510] = 8'd104; long_chirp_lut[1511] = 8'd230; long_chirp_lut[1512] = 8'd239; long_chirp_lut[1513] = 8'd120; long_chirp_lut[1514] = 8'd 9; long_chirp_lut[1515] = 8'd 35; long_chirp_lut[1516] = 8'd166; long_chirp_lut[1517] = 8'd253; long_chirp_lut[1518] = 8'd196; long_chirp_lut[1519] = 8'd 60;
long_chirp_lut[1520] = 8'd 1; long_chirp_lut[1521] = 8'd 87; long_chirp_lut[1522] = 8'd219; long_chirp_lut[1523] = 8'd246; long_chirp_lut[1524] = 8'd138; long_chirp_lut[1525] = 8'd 18; long_chirp_lut[1526] = 8'd 23; long_chirp_lut[1527] = 8'd147; long_chirp_lut[1528] = 8'd249; long_chirp_lut[1529] = 8'd212; long_chirp_lut[1530] = 8'd 79; long_chirp_lut[1531] = 8'd 1; long_chirp_lut[1532] = 8'd 67; long_chirp_lut[1533] = 8'd202; long_chirp_lut[1534] = 8'd252; long_chirp_lut[1535] = 8'd161;
long_chirp_lut[1536] = 8'd 31; long_chirp_lut[1537] = 8'd 11; long_chirp_lut[1538] = 8'd123; long_chirp_lut[1539] = 8'd240; long_chirp_lut[1540] = 8'd229; long_chirp_lut[1541] = 8'd103; long_chirp_lut[1542] = 8'd 5; long_chirp_lut[1543] = 8'd 45; long_chirp_lut[1544] = 8'd179; long_chirp_lut[1545] = 8'd254; long_chirp_lut[1546] = 8'd186; long_chirp_lut[1547] = 8'd 52; long_chirp_lut[1548] = 8'd 3; long_chirp_lut[1549] = 8'd 95; long_chirp_lut[1550] = 8'd224; long_chirp_lut[1551] = 8'd244;
long_chirp_lut[1552] = 8'd133; long_chirp_lut[1553] = 8'd 16; long_chirp_lut[1554] = 8'd 24; long_chirp_lut[1555] = 8'd149; long_chirp_lut[1556] = 8'd249; long_chirp_lut[1557] = 8'd213; long_chirp_lut[1558] = 8'd 80; long_chirp_lut[1559] = 8'd 1; long_chirp_lut[1560] = 8'd 64; long_chirp_lut[1561] = 8'd199; long_chirp_lut[1562] = 8'd253; long_chirp_lut[1563] = 8'd167; long_chirp_lut[1564] = 8'd 36; long_chirp_lut[1565] = 8'd 8; long_chirp_lut[1566] = 8'd114; long_chirp_lut[1567] = 8'd235;
long_chirp_lut[1568] = 8'd236; long_chirp_lut[1569] = 8'd116; long_chirp_lut[1570] = 8'd 9; long_chirp_lut[1571] = 8'd 35; long_chirp_lut[1572] = 8'd164; long_chirp_lut[1573] = 8'd253; long_chirp_lut[1574] = 8'd201; long_chirp_lut[1575] = 8'd 68; long_chirp_lut[1576] = 8'd 1; long_chirp_lut[1577] = 8'd 75; long_chirp_lut[1578] = 8'd208; long_chirp_lut[1579] = 8'd251; long_chirp_lut[1580] = 8'd157; long_chirp_lut[1581] = 8'd 30; long_chirp_lut[1582] = 8'd 11; long_chirp_lut[1583] = 8'd122;
long_chirp_lut[1584] = 8'd239; long_chirp_lut[1585] = 8'd232; long_chirp_lut[1586] = 8'd109; long_chirp_lut[1587] = 8'd 7; long_chirp_lut[1588] = 8'd 38; long_chirp_lut[1589] = 8'd169; long_chirp_lut[1590] = 8'd253; long_chirp_lut[1591] = 8'd199; long_chirp_lut[1592] = 8'd 65; long_chirp_lut[1593] = 8'd 1; long_chirp_lut[1594] = 8'd 77; long_chirp_lut[1595] = 8'd209; long_chirp_lut[1596] = 8'd251; long_chirp_lut[1597] = 8'd157; long_chirp_lut[1598] = 8'd 30; long_chirp_lut[1599] = 8'd 11;
long_chirp_lut[1600] = 8'd120; long_chirp_lut[1601] = 8'd237; long_chirp_lut[1602] = 8'd234; long_chirp_lut[1603] = 8'd113; long_chirp_lut[1604] = 8'd 8; long_chirp_lut[1605] = 8'd 35; long_chirp_lut[1606] = 8'd163; long_chirp_lut[1607] = 8'd252; long_chirp_lut[1608] = 8'd204; long_chirp_lut[1609] = 8'd 72; long_chirp_lut[1610] = 8'd 1; long_chirp_lut[1611] = 8'd 69; long_chirp_lut[1612] = 8'd201; long_chirp_lut[1613] = 8'd253; long_chirp_lut[1614] = 8'd167; long_chirp_lut[1615] = 8'd 38;
long_chirp_lut[1616] = 8'd 7; long_chirp_lut[1617] = 8'd107; long_chirp_lut[1618] = 8'd230; long_chirp_lut[1619] = 8'd241; long_chirp_lut[1620] = 8'd127; long_chirp_lut[1621] = 8'd 14; long_chirp_lut[1622] = 8'd 25; long_chirp_lut[1623] = 8'd147; long_chirp_lut[1624] = 8'd248; long_chirp_lut[1625] = 8'd218; long_chirp_lut[1626] = 8'd 89; long_chirp_lut[1627] = 8'd 2; long_chirp_lut[1628] = 8'd 52; long_chirp_lut[1629] = 8'd184; long_chirp_lut[1630] = 8'd254; long_chirp_lut[1631] = 8'd187;
long_chirp_lut[1632] = 8'd 55; long_chirp_lut[1633] = 8'd 2; long_chirp_lut[1634] = 8'd 85; long_chirp_lut[1635] = 8'd214; long_chirp_lut[1636] = 8'd250; long_chirp_lut[1637] = 8'd153; long_chirp_lut[1638] = 8'd 28; long_chirp_lut[1639] = 8'd 11; long_chirp_lut[1640] = 8'd120; long_chirp_lut[1641] = 8'd237; long_chirp_lut[1642] = 8'd235; long_chirp_lut[1643] = 8'd117; long_chirp_lut[1644] = 8'd 10; long_chirp_lut[1645] = 8'd 30; long_chirp_lut[1646] = 8'd155; long_chirp_lut[1647] = 8'd250;
long_chirp_lut[1648] = 8'd213; long_chirp_lut[1649] = 8'd 84; long_chirp_lut[1650] = 8'd 2; long_chirp_lut[1651] = 8'd 55; long_chirp_lut[1652] = 8'd186; long_chirp_lut[1653] = 8'd254; long_chirp_lut[1654] = 8'd186; long_chirp_lut[1655] = 8'd 55; long_chirp_lut[1656] = 8'd 2; long_chirp_lut[1657] = 8'd 83; long_chirp_lut[1658] = 8'd212; long_chirp_lut[1659] = 8'd251; long_chirp_lut[1660] = 8'd157; long_chirp_lut[1661] = 8'd 32; long_chirp_lut[1662] = 8'd 9; long_chirp_lut[1663] = 8'd113;
long_chirp_lut[1664] = 8'd233; long_chirp_lut[1665] = 8'd240; long_chirp_lut[1666] = 8'd127; long_chirp_lut[1667] = 8'd 15; long_chirp_lut[1668] = 8'd 23; long_chirp_lut[1669] = 8'd143; long_chirp_lut[1670] = 8'd246; long_chirp_lut[1671] = 8'd223; long_chirp_lut[1672] = 8'd 98; long_chirp_lut[1673] = 8'd 4; long_chirp_lut[1674] = 8'd 42; long_chirp_lut[1675] = 8'd171; long_chirp_lut[1676] = 8'd253; long_chirp_lut[1677] = 8'd202; long_chirp_lut[1678] = 8'd 72; long_chirp_lut[1679] = 8'd 1;
long_chirp_lut[1680] = 8'd 64; long_chirp_lut[1681] = 8'd195; long_chirp_lut[1682] = 8'd254; long_chirp_lut[1683] = 8'd179; long_chirp_lut[1684] = 8'd 50; long_chirp_lut[1685] = 8'd 2; long_chirp_lut[1686] = 8'd 88; long_chirp_lut[1687] = 8'd215; long_chirp_lut[1688] = 8'd250; long_chirp_lut[1689] = 8'd155; long_chirp_lut[1690] = 8'd 31; long_chirp_lut[1691] = 8'd 9; long_chirp_lut[1692] = 8'd112; long_chirp_lut[1693] = 8'd231; long_chirp_lut[1694] = 8'd241; long_chirp_lut[1695] = 8'd132;
long_chirp_lut[1696] = 8'd 18; long_chirp_lut[1697] = 8'd 19; long_chirp_lut[1698] = 8'd135; long_chirp_lut[1699] = 8'd243; long_chirp_lut[1700] = 8'd229; long_chirp_lut[1701] = 8'd109; long_chirp_lut[1702] = 8'd 8; long_chirp_lut[1703] = 8'd 33; long_chirp_lut[1704] = 8'd157; long_chirp_lut[1705] = 8'd250; long_chirp_lut[1706] = 8'd215; long_chirp_lut[1707] = 8'd 88; long_chirp_lut[1708] = 8'd 3; long_chirp_lut[1709] = 8'd 48; long_chirp_lut[1710] = 8'd176; long_chirp_lut[1711] = 8'd254;
long_chirp_lut[1712] = 8'd199; long_chirp_lut[1713] = 8'd 70; long_chirp_lut[1714] = 8'd 1; long_chirp_lut[1715] = 8'd 64; long_chirp_lut[1716] = 8'd193; long_chirp_lut[1717] = 8'd254; long_chirp_lut[1718] = 8'd183; long_chirp_lut[1719] = 8'd 54; long_chirp_lut[1720] = 8'd 1; long_chirp_lut[1721] = 8'd 80; long_chirp_lut[1722] = 8'd208; long_chirp_lut[1723] = 8'd252; long_chirp_lut[1724] = 8'd167; long_chirp_lut[1725] = 8'd 41; long_chirp_lut[1726] = 8'd 4; long_chirp_lut[1727] = 8'd 96;
long_chirp_lut[1728] = 8'd220; long_chirp_lut[1729] = 8'd248; long_chirp_lut[1730] = 8'd151; long_chirp_lut[1731] = 8'd 30; long_chirp_lut[1732] = 8'd 9; long_chirp_lut[1733] = 8'd111; long_chirp_lut[1734] = 8'd230; long_chirp_lut[1735] = 8'd243; long_chirp_lut[1736] = 8'd137; long_chirp_lut[1737] = 8'd 21; long_chirp_lut[1738] = 8'd 15; long_chirp_lut[1739] = 8'd125; long_chirp_lut[1740] = 8'd237; long_chirp_lut[1741] = 8'd236; long_chirp_lut[1742] = 8'd123; long_chirp_lut[1743] = 8'd 14;
long_chirp_lut[1744] = 8'd 22; long_chirp_lut[1745] = 8'd138; long_chirp_lut[1746] = 8'd243; long_chirp_lut[1747] = 8'd229; long_chirp_lut[1748] = 8'd111; long_chirp_lut[1749] = 8'd 9; long_chirp_lut[1750] = 8'd 29; long_chirp_lut[1751] = 8'd150; long_chirp_lut[1752] = 8'd247; long_chirp_lut[1753] = 8'd222; long_chirp_lut[1754] = 8'd100; long_chirp_lut[1755] = 8'd 6; long_chirp_lut[1756] = 8'd 36; long_chirp_lut[1757] = 8'd159; long_chirp_lut[1758] = 8'd250; long_chirp_lut[1759] = 8'd216;
long_chirp_lut[1760] = 8'd 91; long_chirp_lut[1761] = 8'd 4; long_chirp_lut[1762] = 8'd 42; long_chirp_lut[1763] = 8'd168; long_chirp_lut[1764] = 8'd252; long_chirp_lut[1765] = 8'd209; long_chirp_lut[1766] = 8'd 83; long_chirp_lut[1767] = 8'd 2; long_chirp_lut[1768] = 8'd 48; long_chirp_lut[1769] = 8'd175; long_chirp_lut[1770] = 8'd253; long_chirp_lut[1771] = 8'd204; long_chirp_lut[1772] = 8'd 77; long_chirp_lut[1773] = 8'd 1; long_chirp_lut[1774] = 8'd 54; long_chirp_lut[1775] = 8'd181;
long_chirp_lut[1776] = 8'd254; long_chirp_lut[1777] = 8'd199; long_chirp_lut[1778] = 8'd 72; long_chirp_lut[1779] = 8'd 1; long_chirp_lut[1780] = 8'd 58; long_chirp_lut[1781] = 8'd185; long_chirp_lut[1782] = 8'd254; long_chirp_lut[1783] = 8'd196; long_chirp_lut[1784] = 8'd 68; long_chirp_lut[1785] = 8'd 1; long_chirp_lut[1786] = 8'd 61; long_chirp_lut[1787] = 8'd188; long_chirp_lut[1788] = 8'd254; long_chirp_lut[1789] = 8'd193; long_chirp_lut[1790] = 8'd 66; long_chirp_lut[1791] = 8'd 1;
long_chirp_lut[1792] = 8'd 63; long_chirp_lut[1793] = 8'd190; long_chirp_lut[1794] = 8'd254; long_chirp_lut[1795] = 8'd191; long_chirp_lut[1796] = 8'd 64; long_chirp_lut[1797] = 8'd 1; long_chirp_lut[1798] = 8'd 64; long_chirp_lut[1799] = 8'd191; long_chirp_lut[1800] = 8'd255; long_chirp_lut[1801] = 8'd191; long_chirp_lut[1802] = 8'd 64; long_chirp_lut[1803] = 8'd 1; long_chirp_lut[1804] = 8'd 64; long_chirp_lut[1805] = 8'd191; long_chirp_lut[1806] = 8'd254; long_chirp_lut[1807] = 8'd192;
long_chirp_lut[1808] = 8'd 65; long_chirp_lut[1809] = 8'd 1; long_chirp_lut[1810] = 8'd 62; long_chirp_lut[1811] = 8'd189; long_chirp_lut[1812] = 8'd254; long_chirp_lut[1813] = 8'd194; long_chirp_lut[1814] = 8'd 67; long_chirp_lut[1815] = 8'd 1; long_chirp_lut[1816] = 8'd 60; long_chirp_lut[1817] = 8'd186; long_chirp_lut[1818] = 8'd254; long_chirp_lut[1819] = 8'd197; long_chirp_lut[1820] = 8'd 71; long_chirp_lut[1821] = 8'd 1; long_chirp_lut[1822] = 8'd 56; long_chirp_lut[1823] = 8'd182;
long_chirp_lut[1824] = 8'd254; long_chirp_lut[1825] = 8'd201; long_chirp_lut[1826] = 8'd 75; long_chirp_lut[1827] = 8'd 1; long_chirp_lut[1828] = 8'd 52; long_chirp_lut[1829] = 8'd177; long_chirp_lut[1830] = 8'd253; long_chirp_lut[1831] = 8'd206; long_chirp_lut[1832] = 8'd 81; long_chirp_lut[1833] = 8'd 2; long_chirp_lut[1834] = 8'd 46; long_chirp_lut[1835] = 8'd171; long_chirp_lut[1836] = 8'd252; long_chirp_lut[1837] = 8'd212; long_chirp_lut[1838] = 8'd 88; long_chirp_lut[1839] = 8'd 4;
long_chirp_lut[1840] = 8'd 40; long_chirp_lut[1841] = 8'd162; long_chirp_lut[1842] = 8'd250; long_chirp_lut[1843] = 8'd218; long_chirp_lut[1844] = 8'd 97; long_chirp_lut[1845] = 8'd 6; long_chirp_lut[1846] = 8'd 34; long_chirp_lut[1847] = 8'd153; long_chirp_lut[1848] = 8'd247; long_chirp_lut[1849] = 8'd225; long_chirp_lut[1850] = 8'd107; long_chirp_lut[1851] = 8'd 9; long_chirp_lut[1852] = 8'd 27; long_chirp_lut[1853] = 8'd142; long_chirp_lut[1854] = 8'd243; long_chirp_lut[1855] = 8'd232;
long_chirp_lut[1856] = 8'd119; long_chirp_lut[1857] = 8'd 14; long_chirp_lut[1858] = 8'd 20; long_chirp_lut[1859] = 8'd130; long_chirp_lut[1860] = 8'd237; long_chirp_lut[1861] = 8'd239; long_chirp_lut[1862] = 8'd132; long_chirp_lut[1863] = 8'd 21; long_chirp_lut[1864] = 8'd 13; long_chirp_lut[1865] = 8'd116; long_chirp_lut[1866] = 8'd230; long_chirp_lut[1867] = 8'd245; long_chirp_lut[1868] = 8'd146; long_chirp_lut[1869] = 8'd 30; long_chirp_lut[1870] = 8'd 8; long_chirp_lut[1871] = 8'd101;
long_chirp_lut[1872] = 8'd220; long_chirp_lut[1873] = 8'd250; long_chirp_lut[1874] = 8'd162; long_chirp_lut[1875] = 8'd 41; long_chirp_lut[1876] = 8'd 3; long_chirp_lut[1877] = 8'd 85; long_chirp_lut[1878] = 8'd208; long_chirp_lut[1879] = 8'd253; long_chirp_lut[1880] = 8'd178; long_chirp_lut[1881] = 8'd 54; long_chirp_lut[1882] = 8'd 1; long_chirp_lut[1883] = 8'd 69; long_chirp_lut[1884] = 8'd193; long_chirp_lut[1885] = 8'd254; long_chirp_lut[1886] = 8'd194; long_chirp_lut[1887] = 8'd 70;
long_chirp_lut[1888] = 8'd 1; long_chirp_lut[1889] = 8'd 53; long_chirp_lut[1890] = 8'd176; long_chirp_lut[1891] = 8'd253; long_chirp_lut[1892] = 8'd210; long_chirp_lut[1893] = 8'd 88; long_chirp_lut[1894] = 8'd 4; long_chirp_lut[1895] = 8'd 37; long_chirp_lut[1896] = 8'd157; long_chirp_lut[1897] = 8'd248; long_chirp_lut[1898] = 8'd225; long_chirp_lut[1899] = 8'd109; long_chirp_lut[1900] = 8'd 11; long_chirp_lut[1901] = 8'd 23; long_chirp_lut[1902] = 8'd135; long_chirp_lut[1903] = 8'd239;
long_chirp_lut[1904] = 8'd238; long_chirp_lut[1905] = 8'd132; long_chirp_lut[1906] = 8'd 22; long_chirp_lut[1907] = 8'd 12; long_chirp_lut[1908] = 8'd112; long_chirp_lut[1909] = 8'd226; long_chirp_lut[1910] = 8'd247; long_chirp_lut[1911] = 8'd155; long_chirp_lut[1912] = 8'd 37; long_chirp_lut[1913] = 8'd 4; long_chirp_lut[1914] = 8'd 88; long_chirp_lut[1915] = 8'd209; long_chirp_lut[1916] = 8'd253; long_chirp_lut[1917] = 8'd179; long_chirp_lut[1918] = 8'd 57; long_chirp_lut[1919] = 8'd 1;
long_chirp_lut[1920] = 8'd 64; long_chirp_lut[1921] = 8'd187; long_chirp_lut[1922] = 8'd254; long_chirp_lut[1923] = 8'd202; long_chirp_lut[1924] = 8'd 80; long_chirp_lut[1925] = 8'd 3; long_chirp_lut[1926] = 8'd 42; long_chirp_lut[1927] = 8'd162; long_chirp_lut[1928] = 8'd249; long_chirp_lut[1929] = 8'd223; long_chirp_lut[1930] = 8'd107; long_chirp_lut[1931] = 8'd 11; long_chirp_lut[1932] = 8'd 23; long_chirp_lut[1933] = 8'd133; long_chirp_lut[1934] = 8'd238; long_chirp_lut[1935] = 8'd240;
long_chirp_lut[1936] = 8'd137; long_chirp_lut[1937] = 8'd 25; long_chirp_lut[1938] = 8'd 9; long_chirp_lut[1939] = 8'd103; long_chirp_lut[1940] = 8'd220; long_chirp_lut[1941] = 8'd251; long_chirp_lut[1942] = 8'd167; long_chirp_lut[1943] = 8'd 47; long_chirp_lut[1944] = 8'd 2; long_chirp_lut[1945] = 8'd 73; long_chirp_lut[1946] = 8'd195; long_chirp_lut[1947] = 8'd254; long_chirp_lut[1948] = 8'd196; long_chirp_lut[1949] = 8'd 74; long_chirp_lut[1950] = 8'd 2; long_chirp_lut[1951] = 8'd 46;
long_chirp_lut[1952] = 8'd166; long_chirp_lut[1953] = 8'd250; long_chirp_lut[1954] = 8'd221; long_chirp_lut[1955] = 8'd106; long_chirp_lut[1956] = 8'd 10; long_chirp_lut[1957] = 8'd 23; long_chirp_lut[1958] = 8'd132; long_chirp_lut[1959] = 8'd237; long_chirp_lut[1960] = 8'd241; long_chirp_lut[1961] = 8'd141; long_chirp_lut[1962] = 8'd 28; long_chirp_lut[1963] = 8'd 7; long_chirp_lut[1964] = 8'd 96; long_chirp_lut[1965] = 8'd214; long_chirp_lut[1966] = 8'd252; long_chirp_lut[1967] = 8'd176;
long_chirp_lut[1968] = 8'd 55; long_chirp_lut[1969] = 8'd 1; long_chirp_lut[1970] = 8'd 62; long_chirp_lut[1971] = 8'd184; long_chirp_lut[1972] = 8'd254; long_chirp_lut[1973] = 8'd208; long_chirp_lut[1974] = 8'd 89; long_chirp_lut[1975] = 8'd 5; long_chirp_lut[1976] = 8'd 33; long_chirp_lut[1977] = 8'd147; long_chirp_lut[1978] = 8'd243; long_chirp_lut[1979] = 8'd234; long_chirp_lut[1980] = 8'd127; long_chirp_lut[1981] = 8'd 21; long_chirp_lut[1982] = 8'd 11; long_chirp_lut[1983] = 8'd107;
long_chirp_lut[1984] = 8'd222; long_chirp_lut[1985] = 8'd250; long_chirp_lut[1986] = 8'd167; long_chirp_lut[1987] = 8'd 48; long_chirp_lut[1988] = 8'd 1; long_chirp_lut[1989] = 8'd 69; long_chirp_lut[1990] = 8'd189; long_chirp_lut[1991] = 8'd254; long_chirp_lut[1992] = 8'd204; long_chirp_lut[1993] = 8'd 85; long_chirp_lut[1994] = 8'd 4; long_chirp_lut[1995] = 8'd 35; long_chirp_lut[1996] = 8'd149; long_chirp_lut[1997] = 8'd244; long_chirp_lut[1998] = 8'd234; long_chirp_lut[1999] = 8'd128;
long_chirp_lut[2000] = 8'd 21; long_chirp_lut[2001] = 8'd 11; long_chirp_lut[2002] = 8'd105; long_chirp_lut[2003] = 8'd220; long_chirp_lut[2004] = 8'd251; long_chirp_lut[2005] = 8'd171; long_chirp_lut[2006] = 8'd 52; long_chirp_lut[2007] = 8'd 1; long_chirp_lut[2008] = 8'd 63; long_chirp_lut[2009] = 8'd183; long_chirp_lut[2010] = 8'd253; long_chirp_lut[2011] = 8'd211; long_chirp_lut[2012] = 8'd 94; long_chirp_lut[2013] = 8'd 7; long_chirp_lut[2014] = 8'd 28; long_chirp_lut[2015] = 8'd138;
long_chirp_lut[2016] = 8'd239; long_chirp_lut[2017] = 8'd240; long_chirp_lut[2018] = 8'd141; long_chirp_lut[2019] = 8'd 30; long_chirp_lut[2020] = 8'd 6; long_chirp_lut[2021] = 8'd 90; long_chirp_lut[2022] = 8'd208; long_chirp_lut[2023] = 8'd254; long_chirp_lut[2024] = 8'd187; long_chirp_lut[2025] = 8'd 68; long_chirp_lut[2026] = 8'd 1; long_chirp_lut[2027] = 8'd 47; long_chirp_lut[2028] = 8'd164; long_chirp_lut[2029] = 8'd249; long_chirp_lut[2030] = 8'd226; long_chirp_lut[2031] = 8'd116;
long_chirp_lut[2032] = 8'd 16; long_chirp_lut[2033] = 8'd 15; long_chirp_lut[2034] = 8'd114; long_chirp_lut[2035] = 8'd224; long_chirp_lut[2036] = 8'd250; long_chirp_lut[2037] = 8'd167; long_chirp_lut[2038] = 8'd 49; long_chirp_lut[2039] = 8'd 1; long_chirp_lut[2040] = 8'd 64; long_chirp_lut[2041] = 8'd183; long_chirp_lut[2042] = 8'd253; long_chirp_lut[2043] = 8'd213; long_chirp_lut[2044] = 8'd 97; long_chirp_lut[2045] = 8'd 8; long_chirp_lut[2046] = 8'd 24; long_chirp_lut[2047] = 8'd131;
long_chirp_lut[2048] = 8'd235; long_chirp_lut[2049] = 8'd244; long_chirp_lut[2050] = 8'd151; long_chirp_lut[2051] = 8'd 38; long_chirp_lut[2052] = 8'd 3; long_chirp_lut[2053] = 8'd 77; long_chirp_lut[2054] = 8'd195; long_chirp_lut[2055] = 8'd254; long_chirp_lut[2056] = 8'd202; long_chirp_lut[2057] = 8'd 85; long_chirp_lut[2058] = 8'd 5; long_chirp_lut[2059] = 8'd 32; long_chirp_lut[2060] = 8'd142; long_chirp_lut[2061] = 8'd240; long_chirp_lut[2062] = 8'd240; long_chirp_lut[2063] = 8'd142;
long_chirp_lut[2064] = 8'd 31; long_chirp_lut[2065] = 8'd 5; long_chirp_lut[2066] = 8'd 85; long_chirp_lut[2067] = 8'd202; long_chirp_lut[2068] = 8'd254; long_chirp_lut[2069] = 8'd197; long_chirp_lut[2070] = 8'd 79; long_chirp_lut[2071] = 8'd 3; long_chirp_lut[2072] = 8'd 35; long_chirp_lut[2073] = 8'd147; long_chirp_lut[2074] = 8'd242; long_chirp_lut[2075] = 8'd238; long_chirp_lut[2076] = 8'd138; long_chirp_lut[2077] = 8'd 29; long_chirp_lut[2078] = 8'd 5; long_chirp_lut[2079] = 8'd 87;
long_chirp_lut[2080] = 8'd203; long_chirp_lut[2081] = 8'd254; long_chirp_lut[2082] = 8'd196; long_chirp_lut[2083] = 8'd 79; long_chirp_lut[2084] = 8'd 3; long_chirp_lut[2085] = 8'd 35; long_chirp_lut[2086] = 8'd146; long_chirp_lut[2087] = 8'd241; long_chirp_lut[2088] = 8'd239; long_chirp_lut[2089] = 8'd141; long_chirp_lut[2090] = 8'd 31; long_chirp_lut[2091] = 8'd 4; long_chirp_lut[2092] = 8'd 83; long_chirp_lut[2093] = 8'd200; long_chirp_lut[2094] = 8'd254; long_chirp_lut[2095] = 8'd201;
long_chirp_lut[2096] = 8'd 84; long_chirp_lut[2097] = 8'd 5; long_chirp_lut[2098] = 8'd 30; long_chirp_lut[2099] = 8'd139; long_chirp_lut[2100] = 8'd237; long_chirp_lut[2101] = 8'd243; long_chirp_lut[2102] = 8'd150; long_chirp_lut[2103] = 8'd 38; long_chirp_lut[2104] = 8'd 2; long_chirp_lut[2105] = 8'd 73; long_chirp_lut[2106] = 8'd190; long_chirp_lut[2107] = 8'd254; long_chirp_lut[2108] = 8'd210; long_chirp_lut[2109] = 8'd 96; long_chirp_lut[2110] = 8'd 9; long_chirp_lut[2111] = 8'd 22;
long_chirp_lut[2112] = 8'd125; long_chirp_lut[2113] = 8'd230; long_chirp_lut[2114] = 8'd248; long_chirp_lut[2115] = 8'd164; long_chirp_lut[2116] = 8'd 50; long_chirp_lut[2117] = 8'd 1; long_chirp_lut[2118] = 8'd 59; long_chirp_lut[2119] = 8'd175; long_chirp_lut[2120] = 8'd251; long_chirp_lut[2121] = 8'd223; long_chirp_lut[2122] = 8'd114; long_chirp_lut[2123] = 8'd 17; long_chirp_lut[2124] = 8'd 13; long_chirp_lut[2125] = 8'd105; long_chirp_lut[2126] = 8'd216; long_chirp_lut[2127] = 8'd253;
long_chirp_lut[2128] = 8'd184; long_chirp_lut[2129] = 8'd 68; long_chirp_lut[2130] = 8'd 2; long_chirp_lut[2131] = 8'd 41; long_chirp_lut[2132] = 8'd153; long_chirp_lut[2133] = 8'd243; long_chirp_lut[2134] = 8'd237; long_chirp_lut[2135] = 8'd139; long_chirp_lut[2136] = 8'd 31; long_chirp_lut[2137] = 8'd 4; long_chirp_lut[2138] = 8'd 80; long_chirp_lut[2139] = 8'd195; long_chirp_lut[2140] = 8'd254; long_chirp_lut[2141] = 8'd207; long_chirp_lut[2142] = 8'd 94; long_chirp_lut[2143] = 8'd 8;
long_chirp_lut[2144] = 8'd 22; long_chirp_lut[2145] = 8'd123; long_chirp_lut[2146] = 8'd228; long_chirp_lut[2147] = 8'd249; long_chirp_lut[2148] = 8'd169; long_chirp_lut[2149] = 8'd 55; long_chirp_lut[2150] = 8'd 1; long_chirp_lut[2151] = 8'd 52; long_chirp_lut[2152] = 8'd166; long_chirp_lut[2153] = 8'd248; long_chirp_lut[2154] = 8'd231; long_chirp_lut[2155] = 8'd128; long_chirp_lut[2156] = 8'd 25; long_chirp_lut[2157] = 8'd 7; long_chirp_lut[2158] = 8'd 88; long_chirp_lut[2159] = 8'd202;
long_chirp_lut[2160] = 8'd255; long_chirp_lut[2161] = 8'd202; long_chirp_lut[2162] = 8'd 88; long_chirp_lut[2163] = 8'd 7; long_chirp_lut[2164] = 8'd 25; long_chirp_lut[2165] = 8'd127; long_chirp_lut[2166] = 8'd230; long_chirp_lut[2167] = 8'd249; long_chirp_lut[2168] = 8'd168; long_chirp_lut[2169] = 8'd 54; long_chirp_lut[2170] = 8'd 1; long_chirp_lut[2171] = 8'd 51; long_chirp_lut[2172] = 8'd164; long_chirp_lut[2173] = 8'd247; long_chirp_lut[2174] = 8'd232; long_chirp_lut[2175] = 8'd132;
long_chirp_lut[2176] = 8'd 28; long_chirp_lut[2177] = 8'd 5; long_chirp_lut[2178] = 8'd 83; long_chirp_lut[2179] = 8'd197; long_chirp_lut[2180] = 8'd254; long_chirp_lut[2181] = 8'd209; long_chirp_lut[2182] = 8'd 97; long_chirp_lut[2183] = 8'd 10; long_chirp_lut[2184] = 8'd 19; long_chirp_lut[2185] = 8'd116; long_chirp_lut[2186] = 8'd222; long_chirp_lut[2187] = 8'd252; long_chirp_lut[2188] = 8'd180; long_chirp_lut[2189] = 8'd 66; long_chirp_lut[2190] = 8'd 2; long_chirp_lut[2191] = 8'd 39;
long_chirp_lut[2192] = 8'd148; long_chirp_lut[2193] = 8'd241; long_chirp_lut[2194] = 8'd241; long_chirp_lut[2195] = 8'd150; long_chirp_lut[2196] = 8'd 41; long_chirp_lut[2197] = 8'd 1; long_chirp_lut[2198] = 8'd 64; long_chirp_lut[2199] = 8'd178; long_chirp_lut[2200] = 8'd251; long_chirp_lut[2201] = 8'd225; long_chirp_lut[2202] = 8'd120; long_chirp_lut[2203] = 8'd 21; long_chirp_lut[2204] = 8'd 8; long_chirp_lut[2205] = 8'd 91; long_chirp_lut[2206] = 8'd203; long_chirp_lut[2207] = 8'd254;
long_chirp_lut[2208] = 8'd204; long_chirp_lut[2209] = 8'd 93; long_chirp_lut[2210] = 8'd 9; long_chirp_lut[2211] = 8'd 20; long_chirp_lut[2212] = 8'd117; long_chirp_lut[2213] = 8'd223; long_chirp_lut[2214] = 8'd252; long_chirp_lut[2215] = 8'd182; long_chirp_lut[2216] = 8'd 68; long_chirp_lut[2217] = 8'd 2; long_chirp_lut[2218] = 8'd 36; long_chirp_lut[2219] = 8'd143; long_chirp_lut[2220] = 8'd237; long_chirp_lut[2221] = 8'd244; long_chirp_lut[2222] = 8'd158; long_chirp_lut[2223] = 8'd 48;
long_chirp_lut[2224] = 8'd 1; long_chirp_lut[2225] = 8'd 54; long_chirp_lut[2226] = 8'd166; long_chirp_lut[2227] = 8'd247; long_chirp_lut[2228] = 8'd233; long_chirp_lut[2229] = 8'd136; long_chirp_lut[2230] = 8'd 31; long_chirp_lut[2231] = 8'd 3; long_chirp_lut[2232] = 8'd 73; long_chirp_lut[2233] = 8'd186; long_chirp_lut[2234] = 8'd253; long_chirp_lut[2235] = 8'd220; long_chirp_lut[2236] = 8'd115; long_chirp_lut[2237] = 8'd 19; long_chirp_lut[2238] = 8'd 9; long_chirp_lut[2239] = 8'd 92;
long_chirp_lut[2240] = 8'd203; long_chirp_lut[2241] = 8'd254; long_chirp_lut[2242] = 8'd206; long_chirp_lut[2243] = 8'd 96; long_chirp_lut[2244] = 8'd 10; long_chirp_lut[2245] = 8'd 17; long_chirp_lut[2246] = 8'd111; long_chirp_lut[2247] = 8'd217; long_chirp_lut[2248] = 8'd253; long_chirp_lut[2249] = 8'd191; long_chirp_lut[2250] = 8'd 79; long_chirp_lut[2251] = 8'd 5; long_chirp_lut[2252] = 8'd 27; long_chirp_lut[2253] = 8'd127; long_chirp_lut[2254] = 8'd228; long_chirp_lut[2255] = 8'd250;
long_chirp_lut[2256] = 8'd177; long_chirp_lut[2257] = 8'd 65; long_chirp_lut[2258] = 8'd 2; long_chirp_lut[2259] = 8'd 37; long_chirp_lut[2260] = 8'd142; long_chirp_lut[2261] = 8'd236; long_chirp_lut[2262] = 8'd246; long_chirp_lut[2263] = 8'd163; long_chirp_lut[2264] = 8'd 53; long_chirp_lut[2265] = 8'd 1; long_chirp_lut[2266] = 8'd 46; long_chirp_lut[2267] = 8'd155; long_chirp_lut[2268] = 8'd242; long_chirp_lut[2269] = 8'd241; long_chirp_lut[2270] = 8'd151; long_chirp_lut[2271] = 8'd 44;
long_chirp_lut[2272] = 8'd 1; long_chirp_lut[2273] = 8'd 56; long_chirp_lut[2274] = 8'd166; long_chirp_lut[2275] = 8'd247; long_chirp_lut[2276] = 8'd235; long_chirp_lut[2277] = 8'd141; long_chirp_lut[2278] = 8'd 36; long_chirp_lut[2279] = 8'd 2; long_chirp_lut[2280] = 8'd 64; long_chirp_lut[2281] = 8'd175; long_chirp_lut[2282] = 8'd250; long_chirp_lut[2283] = 8'd230; long_chirp_lut[2284] = 8'd132; long_chirp_lut[2285] = 8'd 31; long_chirp_lut[2286] = 8'd 3; long_chirp_lut[2287] = 8'd 71;
long_chirp_lut[2288] = 8'd182; long_chirp_lut[2289] = 8'd251; long_chirp_lut[2290] = 8'd226; long_chirp_lut[2291] = 8'd125; long_chirp_lut[2292] = 8'd 26; long_chirp_lut[2293] = 8'd 5; long_chirp_lut[2294] = 8'd 77; long_chirp_lut[2295] = 8'd187; long_chirp_lut[2296] = 8'd253; long_chirp_lut[2297] = 8'd222; long_chirp_lut[2298] = 8'd120; long_chirp_lut[2299] = 8'd 23; long_chirp_lut[2300] = 8'd 6; long_chirp_lut[2301] = 8'd 81; long_chirp_lut[2302] = 8'd191; long_chirp_lut[2303] = 8'd253;
long_chirp_lut[2304] = 8'd220; long_chirp_lut[2305] = 8'd117; long_chirp_lut[2306] = 8'd 22; long_chirp_lut[2307] = 8'd 7; long_chirp_lut[2308] = 8'd 83; long_chirp_lut[2309] = 8'd193; long_chirp_lut[2310] = 8'd253; long_chirp_lut[2311] = 8'd219; long_chirp_lut[2312] = 8'd115; long_chirp_lut[2313] = 8'd 21; long_chirp_lut[2314] = 8'd 7; long_chirp_lut[2315] = 8'd 84; long_chirp_lut[2316] = 8'd193; long_chirp_lut[2317] = 8'd253; long_chirp_lut[2318] = 8'd219; long_chirp_lut[2319] = 8'd116;
long_chirp_lut[2320] = 8'd 21; long_chirp_lut[2321] = 8'd 7; long_chirp_lut[2322] = 8'd 83; long_chirp_lut[2323] = 8'd192; long_chirp_lut[2324] = 8'd253; long_chirp_lut[2325] = 8'd220; long_chirp_lut[2326] = 8'd118; long_chirp_lut[2327] = 8'd 23; long_chirp_lut[2328] = 8'd 6; long_chirp_lut[2329] = 8'd 80; long_chirp_lut[2330] = 8'd189; long_chirp_lut[2331] = 8'd253; long_chirp_lut[2332] = 8'd223; long_chirp_lut[2333] = 8'd122; long_chirp_lut[2334] = 8'd 25; long_chirp_lut[2335] = 8'd 5;
long_chirp_lut[2336] = 8'd 76; long_chirp_lut[2337] = 8'd185; long_chirp_lut[2338] = 8'd252; long_chirp_lut[2339] = 8'd226; long_chirp_lut[2340] = 8'd128; long_chirp_lut[2341] = 8'd 29; long_chirp_lut[2342] = 8'd 3; long_chirp_lut[2343] = 8'd 70; long_chirp_lut[2344] = 8'd179; long_chirp_lut[2345] = 8'd250; long_chirp_lut[2346] = 8'd231; long_chirp_lut[2347] = 8'd135; long_chirp_lut[2348] = 8'd 34; long_chirp_lut[2349] = 8'd 2; long_chirp_lut[2350] = 8'd 62; long_chirp_lut[2351] = 8'd171;
long_chirp_lut[2352] = 8'd247; long_chirp_lut[2353] = 8'd236; long_chirp_lut[2354] = 8'd144; long_chirp_lut[2355] = 8'd 41; long_chirp_lut[2356] = 8'd 1; long_chirp_lut[2357] = 8'd 54; long_chirp_lut[2358] = 8'd161; long_chirp_lut[2359] = 8'd244; long_chirp_lut[2360] = 8'd241; long_chirp_lut[2361] = 8'd155; long_chirp_lut[2362] = 8'd 49; long_chirp_lut[2363] = 8'd 1; long_chirp_lut[2364] = 8'd 45; long_chirp_lut[2365] = 8'd149; long_chirp_lut[2366] = 8'd238; long_chirp_lut[2367] = 8'd246;
long_chirp_lut[2368] = 8'd168; long_chirp_lut[2369] = 8'd 60; long_chirp_lut[2370] = 8'd 2; long_chirp_lut[2371] = 8'd 35; long_chirp_lut[2372] = 8'd135; long_chirp_lut[2373] = 8'd230; long_chirp_lut[2374] = 8'd251; long_chirp_lut[2375] = 8'd182; long_chirp_lut[2376] = 8'd 73; long_chirp_lut[2377] = 8'd 4; long_chirp_lut[2378] = 8'd 25; long_chirp_lut[2379] = 8'd119; long_chirp_lut[2380] = 8'd220; long_chirp_lut[2381] = 8'd254; long_chirp_lut[2382] = 8'd196; long_chirp_lut[2383] = 8'd 89;
long_chirp_lut[2384] = 8'd 10; long_chirp_lut[2385] = 8'd 15; long_chirp_lut[2386] = 8'd102; long_chirp_lut[2387] = 8'd207; long_chirp_lut[2388] = 8'd254; long_chirp_lut[2389] = 8'd211; long_chirp_lut[2390] = 8'd107; long_chirp_lut[2391] = 8'd 18; long_chirp_lut[2392] = 8'd 8; long_chirp_lut[2393] = 8'd 83; long_chirp_lut[2394] = 8'd190; long_chirp_lut[2395] = 8'd252; long_chirp_lut[2396] = 8'd225; long_chirp_lut[2397] = 8'd128; long_chirp_lut[2398] = 8'd 30; long_chirp_lut[2399] = 8'd 2;
long_chirp_lut[2400] = 8'd 64; long_chirp_lut[2401] = 8'd171; long_chirp_lut[2402] = 8'd247; long_chirp_lut[2403] = 8'd238; long_chirp_lut[2404] = 8'd150; long_chirp_lut[2405] = 8'd 46; long_chirp_lut[2406] = 8'd 1; long_chirp_lut[2407] = 8'd 45; long_chirp_lut[2408] = 8'd148; long_chirp_lut[2409] = 8'd237; long_chirp_lut[2410] = 8'd247; long_chirp_lut[2411] = 8'd173; long_chirp_lut[2412] = 8'd 66; long_chirp_lut[2413] = 8'd 3; long_chirp_lut[2414] = 8'd 28; long_chirp_lut[2415] = 8'd123;
long_chirp_lut[2416] = 8'd222; long_chirp_lut[2417] = 8'd253; long_chirp_lut[2418] = 8'd196; long_chirp_lut[2419] = 8'd 90; long_chirp_lut[2420] = 8'd 11; long_chirp_lut[2421] = 8'd 14; long_chirp_lut[2422] = 8'd 97; long_chirp_lut[2423] = 8'd201; long_chirp_lut[2424] = 8'd254; long_chirp_lut[2425] = 8'd218; long_chirp_lut[2426] = 8'd118; long_chirp_lut[2427] = 8'd 25; long_chirp_lut[2428] = 8'd 4; long_chirp_lut[2429] = 8'd 70; long_chirp_lut[2430] = 8'd176; long_chirp_lut[2431] = 8'd248;
long_chirp_lut[2432] = 8'd236; long_chirp_lut[2433] = 8'd148; long_chirp_lut[2434] = 8'd 45; long_chirp_lut[2435] = 8'd 1; long_chirp_lut[2436] = 8'd 45; long_chirp_lut[2437] = 8'd146; long_chirp_lut[2438] = 8'd235; long_chirp_lut[2439] = 8'd249; long_chirp_lut[2440] = 8'd178; long_chirp_lut[2441] = 8'd 72; long_chirp_lut[2442] = 8'd 5; long_chirp_lut[2443] = 8'd 23; long_chirp_lut[2444] = 8'd114; long_chirp_lut[2445] = 8'd214; long_chirp_lut[2446] = 8'd254; long_chirp_lut[2447] = 8'd206;
long_chirp_lut[2448] = 8'd104; long_chirp_lut[2449] = 8'd 18; long_chirp_lut[2450] = 8'd 8; long_chirp_lut[2451] = 8'd 81; long_chirp_lut[2452] = 8'd186; long_chirp_lut[2453] = 8'd251; long_chirp_lut[2454] = 8'd231; long_chirp_lut[2455] = 8'd139; long_chirp_lut[2456] = 8'd 39; long_chirp_lut[2457] = 8'd 1; long_chirp_lut[2458] = 8'd 49; long_chirp_lut[2459] = 8'd152; long_chirp_lut[2460] = 8'd237; long_chirp_lut[2461] = 8'd248; long_chirp_lut[2462] = 8'd175; long_chirp_lut[2463] = 8'd 70;
long_chirp_lut[2464] = 8'd 4; long_chirp_lut[2465] = 8'd 23; long_chirp_lut[2466] = 8'd114; long_chirp_lut[2467] = 8'd213; long_chirp_lut[2468] = 8'd254; long_chirp_lut[2469] = 8'd209; long_chirp_lut[2470] = 8'd107; long_chirp_lut[2471] = 8'd 20; long_chirp_lut[2472] = 8'd 6; long_chirp_lut[2473] = 8'd 75; long_chirp_lut[2474] = 8'd180; long_chirp_lut[2475] = 8'd249; long_chirp_lut[2476] = 8'd235; long_chirp_lut[2477] = 8'd148; long_chirp_lut[2478] = 8'd 47; long_chirp_lut[2479] = 8'd 1;
long_chirp_lut[2480] = 8'd 40; long_chirp_lut[2481] = 8'd139; long_chirp_lut[2482] = 8'd230; long_chirp_lut[2483] = 8'd251; long_chirp_lut[2484] = 8'd189; long_chirp_lut[2485] = 8'd 84; long_chirp_lut[2486] = 8'd 9; long_chirp_lut[2487] = 8'd 14; long_chirp_lut[2488] = 8'd 96; long_chirp_lut[2489] = 8'd199; long_chirp_lut[2490] = 8'd253; long_chirp_lut[2491] = 8'd223; long_chirp_lut[2492] = 8'd129; long_chirp_lut[2493] = 8'd 33; long_chirp_lut[2494] = 8'd 1; long_chirp_lut[2495] = 8'd 54;
long_chirp_lut[2496] = 8'd157; long_chirp_lut[2497] = 8'd239; long_chirp_lut[2498] = 8'd247; long_chirp_lut[2499] = 8'd174; long_chirp_lut[2500] = 8'd 71; long_chirp_lut[2501] = 8'd 5; long_chirp_lut[2502] = 8'd 21; long_chirp_lut[2503] = 8'd109; long_chirp_lut[2504] = 8'd209; long_chirp_lut[2505] = 8'd254; long_chirp_lut[2506] = 8'd215; long_chirp_lut[2507] = 8'd117; long_chirp_lut[2508] = 8'd 26; long_chirp_lut[2509] = 8'd 3; long_chirp_lut[2510] = 8'd 62; long_chirp_lut[2511] = 8'd165;
long_chirp_lut[2512] = 8'd243; long_chirp_lut[2513] = 8'd244; long_chirp_lut[2514] = 8'd167; long_chirp_lut[2515] = 8'd 64; long_chirp_lut[2516] = 8'd 3; long_chirp_lut[2517] = 8'd 25; long_chirp_lut[2518] = 8'd114; long_chirp_lut[2519] = 8'd212; long_chirp_lut[2520] = 8'd255; long_chirp_lut[2521] = 8'd212; long_chirp_lut[2522] = 8'd114; long_chirp_lut[2523] = 8'd 25; long_chirp_lut[2524] = 8'd 3; long_chirp_lut[2525] = 8'd 64; long_chirp_lut[2526] = 8'd166; long_chirp_lut[2527] = 8'd243;
long_chirp_lut[2528] = 8'd244; long_chirp_lut[2529] = 8'd168; long_chirp_lut[2530] = 8'd 66; long_chirp_lut[2531] = 8'd 4; long_chirp_lut[2532] = 8'd 23; long_chirp_lut[2533] = 8'd111; long_chirp_lut[2534] = 8'd210; long_chirp_lut[2535] = 8'd254; long_chirp_lut[2536] = 8'd216; long_chirp_lut[2537] = 8'd120; long_chirp_lut[2538] = 8'd 28; long_chirp_lut[2539] = 8'd 2; long_chirp_lut[2540] = 8'd 58; long_chirp_lut[2541] = 8'd159; long_chirp_lut[2542] = 8'd240; long_chirp_lut[2543] = 8'd247;
long_chirp_lut[2544] = 8'd177; long_chirp_lut[2545] = 8'd 74; long_chirp_lut[2546] = 8'd 6; long_chirp_lut[2547] = 8'd 17; long_chirp_lut[2548] = 8'd100; long_chirp_lut[2549] = 8'd200; long_chirp_lut[2550] = 8'd253; long_chirp_lut[2551] = 8'd225; long_chirp_lut[2552] = 8'd133; long_chirp_lut[2553] = 8'd 38; long_chirp_lut[2554] = 8'd 1; long_chirp_lut[2555] = 8'd 46; long_chirp_lut[2556] = 8'd143; long_chirp_lut[2557] = 8'd231; long_chirp_lut[2558] = 8'd252; long_chirp_lut[2559] = 8'd192;
long_chirp_lut[2560] = 8'd 91; long_chirp_lut[2561] = 8'd 13; long_chirp_lut[2562] = 8'd 9; long_chirp_lut[2563] = 8'd 81; long_chirp_lut[2564] = 8'd183; long_chirp_lut[2565] = 8'd249; long_chirp_lut[2566] = 8'd237; long_chirp_lut[2567] = 8'd155; long_chirp_lut[2568] = 8'd 55; long_chirp_lut[2569] = 8'd 2; long_chirp_lut[2570] = 8'd 29; long_chirp_lut[2571] = 8'd119; long_chirp_lut[2572] = 8'd215; long_chirp_lut[2573] = 8'd254; long_chirp_lut[2574] = 8'd213; long_chirp_lut[2575] = 8'd117;
long_chirp_lut[2576] = 8'd 28; long_chirp_lut[2577] = 8'd 2; long_chirp_lut[2578] = 8'd 56; long_chirp_lut[2579] = 8'd156; long_chirp_lut[2580] = 8'd237; long_chirp_lut[2581] = 8'd249; long_chirp_lut[2582] = 8'd183; long_chirp_lut[2583] = 8'd 82; long_chirp_lut[2584] = 8'd 10; long_chirp_lut[2585] = 8'd 12; long_chirp_lut[2586] = 8'd 88; long_chirp_lut[2587] = 8'd188; long_chirp_lut[2588] = 8'd250; long_chirp_lut[2589] = 8'd235; long_chirp_lut[2590] = 8'd151; long_chirp_lut[2591] = 8'd 53;
long_chirp_lut[2592] = 8'd 2; long_chirp_lut[2593] = 8'd 30; long_chirp_lut[2594] = 8'd119; long_chirp_lut[2595] = 8'd214; long_chirp_lut[2596] = 8'd254; long_chirp_lut[2597] = 8'd215; long_chirp_lut[2598] = 8'd120; long_chirp_lut[2599] = 8'd 30; long_chirp_lut[2600] = 8'd 1; long_chirp_lut[2601] = 8'd 52; long_chirp_lut[2602] = 8'd149; long_chirp_lut[2603] = 8'd234; long_chirp_lut[2604] = 8'd251; long_chirp_lut[2605] = 8'd191; long_chirp_lut[2606] = 8'd 92; long_chirp_lut[2607] = 8'd 14;
long_chirp_lut[2608] = 8'd 8; long_chirp_lut[2609] = 8'd 76; long_chirp_lut[2610] = 8'd176; long_chirp_lut[2611] = 8'd246; long_chirp_lut[2612] = 8'd242; long_chirp_lut[2613] = 8'd167; long_chirp_lut[2614] = 8'd 67; long_chirp_lut[2615] = 8'd 5; long_chirp_lut[2616] = 8'd 19; long_chirp_lut[2617] = 8'd100; long_chirp_lut[2618] = 8'd198; long_chirp_lut[2619] = 8'd253; long_chirp_lut[2620] = 8'd229; long_chirp_lut[2621] = 8'd143; long_chirp_lut[2622] = 8'd 47; long_chirp_lut[2623] = 8'd 1;
long_chirp_lut[2624] = 8'd 33; long_chirp_lut[2625] = 8'd123; long_chirp_lut[2626] = 8'd216; long_chirp_lut[2627] = 8'd254; long_chirp_lut[2628] = 8'd214; long_chirp_lut[2629] = 8'd121; long_chirp_lut[2630] = 8'd 31; long_chirp_lut[2631] = 8'd 1; long_chirp_lut[2632] = 8'd 48; long_chirp_lut[2633] = 8'd144; long_chirp_lut[2634] = 8'd230; long_chirp_lut[2635] = 8'd253; long_chirp_lut[2636] = 8'd199; long_chirp_lut[2637] = 8'd101; long_chirp_lut[2638] = 8'd 20; long_chirp_lut[2639] = 8'd 4;
long_chirp_lut[2640] = 8'd 64; long_chirp_lut[2641] = 8'd162; long_chirp_lut[2642] = 8'd240; long_chirp_lut[2643] = 8'd248; long_chirp_lut[2644] = 8'd183; long_chirp_lut[2645] = 8'd 84; long_chirp_lut[2646] = 8'd 12; long_chirp_lut[2647] = 8'd 9; long_chirp_lut[2648] = 8'd 79; long_chirp_lut[2649] = 8'd178; long_chirp_lut[2650] = 8'd246; long_chirp_lut[2651] = 8'd243; long_chirp_lut[2652] = 8'd169; long_chirp_lut[2653] = 8'd 71; long_chirp_lut[2654] = 8'd 6; long_chirp_lut[2655] = 8'd 15;
long_chirp_lut[2656] = 8'd 92; long_chirp_lut[2657] = 8'd190; long_chirp_lut[2658] = 8'd250; long_chirp_lut[2659] = 8'd236; long_chirp_lut[2660] = 8'd157; long_chirp_lut[2661] = 8'd 60; long_chirp_lut[2662] = 8'd 3; long_chirp_lut[2663] = 8'd 22; long_chirp_lut[2664] = 8'd104; long_chirp_lut[2665] = 8'd200; long_chirp_lut[2666] = 8'd253; long_chirp_lut[2667] = 8'd230; long_chirp_lut[2668] = 8'd146; long_chirp_lut[2669] = 8'd 51; long_chirp_lut[2670] = 8'd 2; long_chirp_lut[2671] = 8'd 27;
long_chirp_lut[2672] = 8'd113; long_chirp_lut[2673] = 8'd207; long_chirp_lut[2674] = 8'd254; long_chirp_lut[2675] = 8'd225; long_chirp_lut[2676] = 8'd138; long_chirp_lut[2677] = 8'd 45; long_chirp_lut[2678] = 8'd 1; long_chirp_lut[2679] = 8'd 32; long_chirp_lut[2680] = 8'd120; long_chirp_lut[2681] = 8'd212; long_chirp_lut[2682] = 8'd254; long_chirp_lut[2683] = 8'd221; long_chirp_lut[2684] = 8'd132; long_chirp_lut[2685] = 8'd 41; long_chirp_lut[2686] = 8'd 1; long_chirp_lut[2687] = 8'd 36;
long_chirp_lut[2688] = 8'd125; long_chirp_lut[2689] = 8'd216; long_chirp_lut[2690] = 8'd254; long_chirp_lut[2691] = 8'd218; long_chirp_lut[2692] = 8'd129; long_chirp_lut[2693] = 8'd 38; long_chirp_lut[2694] = 8'd 1; long_chirp_lut[2695] = 8'd 37; long_chirp_lut[2696] = 8'd127; long_chirp_lut[2697] = 8'd217; long_chirp_lut[2698] = 8'd254; long_chirp_lut[2699] = 8'd217; long_chirp_lut[2700] = 8'd128; long_chirp_lut[2701] = 8'd 38; long_chirp_lut[2702] = 8'd 1; long_chirp_lut[2703] = 8'd 38;
long_chirp_lut[2704] = 8'd127; long_chirp_lut[2705] = 8'd217; long_chirp_lut[2706] = 8'd254; long_chirp_lut[2707] = 8'd218; long_chirp_lut[2708] = 8'd129; long_chirp_lut[2709] = 8'd 39; long_chirp_lut[2710] = 8'd 1; long_chirp_lut[2711] = 8'd 36; long_chirp_lut[2712] = 8'd125; long_chirp_lut[2713] = 8'd215; long_chirp_lut[2714] = 8'd254; long_chirp_lut[2715] = 8'd220; long_chirp_lut[2716] = 8'd132; long_chirp_lut[2717] = 8'd 42; long_chirp_lut[2718] = 8'd 1; long_chirp_lut[2719] = 8'd 33;
long_chirp_lut[2720] = 8'd120; long_chirp_lut[2721] = 8'd211; long_chirp_lut[2722] = 8'd254; long_chirp_lut[2723] = 8'd224; long_chirp_lut[2724] = 8'd138; long_chirp_lut[2725] = 8'd 46; long_chirp_lut[2726] = 8'd 1; long_chirp_lut[2727] = 8'd 29; long_chirp_lut[2728] = 8'd113; long_chirp_lut[2729] = 8'd206; long_chirp_lut[2730] = 8'd253; long_chirp_lut[2731] = 8'd229; long_chirp_lut[2732] = 8'd146; long_chirp_lut[2733] = 8'd 53; long_chirp_lut[2734] = 8'd 2; long_chirp_lut[2735] = 8'd 23;
long_chirp_lut[2736] = 8'd104; long_chirp_lut[2737] = 8'd198; long_chirp_lut[2738] = 8'd252; long_chirp_lut[2739] = 8'd235; long_chirp_lut[2740] = 8'd157; long_chirp_lut[2741] = 8'd 62; long_chirp_lut[2742] = 8'd 5; long_chirp_lut[2743] = 8'd 17; long_chirp_lut[2744] = 8'd 92; long_chirp_lut[2745] = 8'd187; long_chirp_lut[2746] = 8'd249; long_chirp_lut[2747] = 8'd241; long_chirp_lut[2748] = 8'd169; long_chirp_lut[2749] = 8'd 74; long_chirp_lut[2750] = 8'd 9; long_chirp_lut[2751] = 8'd 11;
long_chirp_lut[2752] = 8'd 79; long_chirp_lut[2753] = 8'd174; long_chirp_lut[2754] = 8'd243; long_chirp_lut[2755] = 8'd247; long_chirp_lut[2756] = 8'd183; long_chirp_lut[2757] = 8'd 88; long_chirp_lut[2758] = 8'd 15; long_chirp_lut[2759] = 8'd 5; long_chirp_lut[2760] = 8'd 64; long_chirp_lut[2761] = 8'd158; long_chirp_lut[2762] = 8'd235; long_chirp_lut[2763] = 8'd252; long_chirp_lut[2764] = 8'd199; long_chirp_lut[2765] = 8'd106; long_chirp_lut[2766] = 8'd 25; long_chirp_lut[2767] = 8'd 2;
long_chirp_lut[2768] = 8'd 48; long_chirp_lut[2769] = 8'd139; long_chirp_lut[2770] = 8'd224; long_chirp_lut[2771] = 8'd254; long_chirp_lut[2772] = 8'd214; long_chirp_lut[2773] = 8'd126; long_chirp_lut[2774] = 8'd 39; long_chirp_lut[2775] = 8'd 1; long_chirp_lut[2776] = 8'd 33; long_chirp_lut[2777] = 8'd118; long_chirp_lut[2778] = 8'd208; long_chirp_lut[2779] = 8'd254; long_chirp_lut[2780] = 8'd229; long_chirp_lut[2781] = 8'd149; long_chirp_lut[2782] = 8'd 57; long_chirp_lut[2783] = 8'd 3;
long_chirp_lut[2784] = 8'd 19; long_chirp_lut[2785] = 8'd 94; long_chirp_lut[2786] = 8'd188; long_chirp_lut[2787] = 8'd248; long_chirp_lut[2788] = 8'd242; long_chirp_lut[2789] = 8'd173; long_chirp_lut[2790] = 8'd 79; long_chirp_lut[2791] = 8'd 11; long_chirp_lut[2792] = 8'd 8; long_chirp_lut[2793] = 8'd 70; long_chirp_lut[2794] = 8'd163; long_chirp_lut[2795] = 8'd237; long_chirp_lut[2796] = 8'd251; long_chirp_lut[2797] = 8'd197; long_chirp_lut[2798] = 8'd106; long_chirp_lut[2799] = 8'd 26;
long_chirp_lut[2800] = 8'd 1; long_chirp_lut[2801] = 8'd 46; long_chirp_lut[2802] = 8'd135; long_chirp_lut[2803] = 8'd220; long_chirp_lut[2804] = 8'd254; long_chirp_lut[2805] = 8'd220; long_chirp_lut[2806] = 8'd136; long_chirp_lut[2807] = 8'd 47; long_chirp_lut[2808] = 8'd 2; long_chirp_lut[2809] = 8'd 25; long_chirp_lut[2810] = 8'd104; long_chirp_lut[2811] = 8'd195; long_chirp_lut[2812] = 8'd250; long_chirp_lut[2813] = 8'd239; long_chirp_lut[2814] = 8'd167; long_chirp_lut[2815] = 8'd 74;
long_chirp_lut[2816] = 8'd 10; long_chirp_lut[2817] = 8'd 9; long_chirp_lut[2818] = 8'd 72; long_chirp_lut[2819] = 8'd165; long_chirp_lut[2820] = 8'd237; long_chirp_lut[2821] = 8'd251; long_chirp_lut[2822] = 8'd199; long_chirp_lut[2823] = 8'd108; long_chirp_lut[2824] = 8'd 28; long_chirp_lut[2825] = 8'd 1; long_chirp_lut[2826] = 8'd 42; long_chirp_lut[2827] = 8'd129; long_chirp_lut[2828] = 8'd215; long_chirp_lut[2829] = 8'd254; long_chirp_lut[2830] = 8'd226; long_chirp_lut[2831] = 8'd145;
long_chirp_lut[2832] = 8'd 55; long_chirp_lut[2833] = 8'd 3; long_chirp_lut[2834] = 8'd 18; long_chirp_lut[2835] = 8'd 91; long_chirp_lut[2836] = 8'd183; long_chirp_lut[2837] = 8'd246; long_chirp_lut[2838] = 8'd246; long_chirp_lut[2839] = 8'd183; long_chirp_lut[2840] = 8'd 91; long_chirp_lut[2841] = 8'd 18; long_chirp_lut[2842] = 8'd 3; long_chirp_lut[2843] = 8'd 54; long_chirp_lut[2844] = 8'd143; long_chirp_lut[2845] = 8'd224; long_chirp_lut[2846] = 8'd254; long_chirp_lut[2847] = 8'd217;
long_chirp_lut[2848] = 8'd133; long_chirp_lut[2849] = 8'd 46; long_chirp_lut[2850] = 8'd 2; long_chirp_lut[2851] = 8'd 23; long_chirp_lut[2852] = 8'd100; long_chirp_lut[2853] = 8'd191; long_chirp_lut[2854] = 8'd249; long_chirp_lut[2855] = 8'd243; long_chirp_lut[2856] = 8'd177; long_chirp_lut[2857] = 8'd 85; long_chirp_lut[2858] = 8'd 15; long_chirp_lut[2859] = 8'd 4; long_chirp_lut[2860] = 8'd 58; long_chirp_lut[2861] = 8'd147; long_chirp_lut[2862] = 8'd227; long_chirp_lut[2863] = 8'd254;
long_chirp_lut[2864] = 8'd216; long_chirp_lut[2865] = 8'd132; long_chirp_lut[2866] = 8'd 45; long_chirp_lut[2867] = 8'd 2; long_chirp_lut[2868] = 8'd 23; long_chirp_lut[2869] = 8'd 99; long_chirp_lut[2870] = 8'd189; long_chirp_lut[2871] = 8'd248; long_chirp_lut[2872] = 8'd244; long_chirp_lut[2873] = 8'd180; long_chirp_lut[2874] = 8'd 89; long_chirp_lut[2875] = 8'd 18; long_chirp_lut[2876] = 8'd 3; long_chirp_lut[2877] = 8'd 53; long_chirp_lut[2878] = 8'd141; long_chirp_lut[2879] = 8'd222;
long_chirp_lut[2880] = 8'd255; long_chirp_lut[2881] = 8'd222; long_chirp_lut[2882] = 8'd141; long_chirp_lut[2883] = 8'd 53; long_chirp_lut[2884] = 8'd 3; long_chirp_lut[2885] = 8'd 17; long_chirp_lut[2886] = 8'd 88; long_chirp_lut[2887] = 8'd178; long_chirp_lut[2888] = 8'd243; long_chirp_lut[2889] = 8'd249; long_chirp_lut[2890] = 8'd193; long_chirp_lut[2891] = 8'd103; long_chirp_lut[2892] = 8'd 26; long_chirp_lut[2893] = 8'd 1; long_chirp_lut[2894] = 8'd 40; long_chirp_lut[2895] = 8'd123;
long_chirp_lut[2896] = 8'd209; long_chirp_lut[2897] = 8'd253; long_chirp_lut[2898] = 8'd234; long_chirp_lut[2899] = 8'd160; long_chirp_lut[2900] = 8'd 71; long_chirp_lut[2901] = 8'd 9; long_chirp_lut[2902] = 8'd 8; long_chirp_lut[2903] = 8'd 67; long_chirp_lut[2904] = 8'd157; long_chirp_lut[2905] = 8'd231; long_chirp_lut[2906] = 8'd254; long_chirp_lut[2907] = 8'd213; long_chirp_lut[2908] = 8'd129; long_chirp_lut[2909] = 8'd 44; long_chirp_lut[2910] = 8'd 2; long_chirp_lut[2911] = 8'd 22;
long_chirp_lut[2912] = 8'd 96; long_chirp_lut[2913] = 8'd185; long_chirp_lut[2914] = 8'd246; long_chirp_lut[2915] = 8'd247; long_chirp_lut[2916] = 8'd189; long_chirp_lut[2917] = 8'd100; long_chirp_lut[2918] = 8'd 25; long_chirp_lut[2919] = 8'd 1; long_chirp_lut[2920] = 8'd 40; long_chirp_lut[2921] = 8'd123; long_chirp_lut[2922] = 8'd208; long_chirp_lut[2923] = 8'd253; long_chirp_lut[2924] = 8'd235; long_chirp_lut[2925] = 8'd164; long_chirp_lut[2926] = 8'd 75; long_chirp_lut[2927] = 8'd 12;
long_chirp_lut[2928] = 8'd 6; long_chirp_lut[2929] = 8'd 60; long_chirp_lut[2930] = 8'd148; long_chirp_lut[2931] = 8'd225; long_chirp_lut[2932] = 8'd254; long_chirp_lut[2933] = 8'd221; long_chirp_lut[2934] = 8'd141; long_chirp_lut[2935] = 8'd 55; long_chirp_lut[2936] = 8'd 4; long_chirp_lut[2937] = 8'd 14; long_chirp_lut[2938] = 8'd 80; long_chirp_lut[2939] = 8'd169; long_chirp_lut[2940] = 8'd237; long_chirp_lut[2941] = 8'd252; long_chirp_lut[2942] = 8'd206; long_chirp_lut[2943] = 8'd121;
long_chirp_lut[2944] = 8'd 39; long_chirp_lut[2945] = 8'd 1; long_chirp_lut[2946] = 8'd 24; long_chirp_lut[2947] = 8'd 98; long_chirp_lut[2948] = 8'd186; long_chirp_lut[2949] = 8'd246; long_chirp_lut[2950] = 8'd247; long_chirp_lut[2951] = 8'd191; long_chirp_lut[2952] = 8'd104; long_chirp_lut[2953] = 8'd 28; long_chirp_lut[2954] = 8'd 1; long_chirp_lut[2955] = 8'd 35; long_chirp_lut[2956] = 8'd114; long_chirp_lut[2957] = 8'd200; long_chirp_lut[2958] = 8'd250; long_chirp_lut[2959] = 8'd242;
long_chirp_lut[2960] = 8'd178; long_chirp_lut[2961] = 8'd 90; long_chirp_lut[2962] = 8'd 20; long_chirp_lut[2963] = 8'd 2; long_chirp_lut[2964] = 8'd 45; long_chirp_lut[2965] = 8'd127; long_chirp_lut[2966] = 8'd210; long_chirp_lut[2967] = 8'd253; long_chirp_lut[2968] = 8'd236; long_chirp_lut[2969] = 8'd167; long_chirp_lut[2970] = 8'd 79; long_chirp_lut[2971] = 8'd 14; long_chirp_lut[2972] = 8'd 4; long_chirp_lut[2973] = 8'd 53; long_chirp_lut[2974] = 8'd137; long_chirp_lut[2975] = 8'd217;
long_chirp_lut[2976] = 8'd254; long_chirp_lut[2977] = 8'd231; long_chirp_lut[2978] = 8'd158; long_chirp_lut[2979] = 8'd 71; long_chirp_lut[2980] = 8'd 11; long_chirp_lut[2981] = 8'd 6; long_chirp_lut[2982] = 8'd 59; long_chirp_lut[2983] = 8'd144; long_chirp_lut[2984] = 8'd222; long_chirp_lut[2985] = 8'd254; long_chirp_lut[2986] = 8'd227; long_chirp_lut[2987] = 8'd153; long_chirp_lut[2988] = 8'd 66; long_chirp_lut[2989] = 8'd 9; long_chirp_lut[2990] = 8'd 8; long_chirp_lut[2991] = 8'd 63;
long_chirp_lut[2992] = 8'd148; long_chirp_lut[2993] = 8'd224; long_chirp_lut[2994] = 8'd254; long_chirp_lut[2995] = 8'd225; long_chirp_lut[2996] = 8'd150; long_chirp_lut[2997] = 8'd 64; long_chirp_lut[2998] = 8'd 8; long_chirp_lut[2999] = 8'd 8; long_chirp_lut[3000] = 8'd 64; long_chirp_lut[3001] = 8'd150; long_chirp_lut[3002] = 8'd225; long_chirp_lut[3003] = 8'd254; long_chirp_lut[3004] = 8'd225; long_chirp_lut[3005] = 8'd150; long_chirp_lut[3006] = 8'd 65; long_chirp_lut[3007] = 8'd 8;
long_chirp_lut[3008] = 8'd 8; long_chirp_lut[3009] = 8'd 63; long_chirp_lut[3010] = 8'd148; long_chirp_lut[3011] = 8'd223; long_chirp_lut[3012] = 8'd254; long_chirp_lut[3013] = 8'd227; long_chirp_lut[3014] = 8'd153; long_chirp_lut[3015] = 8'd 68; long_chirp_lut[3016] = 8'd 10; long_chirp_lut[3017] = 8'd 6; long_chirp_lut[3018] = 8'd 59; long_chirp_lut[3019] = 8'd143; long_chirp_lut[3020] = 8'd220; long_chirp_lut[3021] = 8'd254; long_chirp_lut[3022] = 8'd230; long_chirp_lut[3023] = 8'd159;
long_chirp_lut[3024] = 8'd 73; long_chirp_lut[3025] = 8'd 13; long_chirp_lut[3026] = 8'd 4; long_chirp_lut[3027] = 8'd 53; long_chirp_lut[3028] = 8'd135; long_chirp_lut[3029] = 8'd214; long_chirp_lut[3030] = 8'd253; long_chirp_lut[3031] = 8'd235; long_chirp_lut[3032] = 8'd168; long_chirp_lut[3033] = 8'd 82; long_chirp_lut[3034] = 8'd 17; long_chirp_lut[3035] = 8'd 2; long_chirp_lut[3036] = 8'd 45; long_chirp_lut[3037] = 8'd124; long_chirp_lut[3038] = 8'd206; long_chirp_lut[3039] = 8'd251;
long_chirp_lut[3040] = 8'd241; long_chirp_lut[3041] = 8'd179; long_chirp_lut[3042] = 8'd 94; long_chirp_lut[3043] = 8'd 24; long_chirp_lut[3044] = 8'd 1; long_chirp_lut[3045] = 8'd 35; long_chirp_lut[3046] = 8'd111; long_chirp_lut[3047] = 8'd194; long_chirp_lut[3048] = 8'd247; long_chirp_lut[3049] = 8'd247; long_chirp_lut[3050] = 8'd193; long_chirp_lut[3051] = 8'd109; long_chirp_lut[3052] = 8'd 34; long_chirp_lut[3053] = 8'd 1; long_chirp_lut[3054] = 8'd 24; long_chirp_lut[3055] = 8'd 94;
long_chirp_lut[3056] = 8'd179; long_chirp_lut[3057] = 8'd241; long_chirp_lut[3058] = 8'd252; long_chirp_lut[3059] = 8'd207; long_chirp_lut[3060] = 8'd128; long_chirp_lut[3061] = 8'd 48; long_chirp_lut[3062] = 8'd 3; long_chirp_lut[3063] = 8'd 14; long_chirp_lut[3064] = 8'd 76; long_chirp_lut[3065] = 8'd160; long_chirp_lut[3066] = 8'd230; long_chirp_lut[3067] = 8'd254; long_chirp_lut[3068] = 8'd223; long_chirp_lut[3069] = 8'd149; long_chirp_lut[3070] = 8'd 66; long_chirp_lut[3071] = 8'd 10;
long_chirp_lut[3072] = 8'd 6; long_chirp_lut[3073] = 8'd 56; long_chirp_lut[3074] = 8'd137; long_chirp_lut[3075] = 8'd214; long_chirp_lut[3076] = 8'd253; long_chirp_lut[3077] = 8'd237; long_chirp_lut[3078] = 8'd172; long_chirp_lut[3079] = 8'd 88; long_chirp_lut[3080] = 8'd 21; long_chirp_lut[3081] = 8'd 1; long_chirp_lut[3082] = 8'd 36; long_chirp_lut[3083] = 8'd111; long_chirp_lut[3084] = 8'd193; long_chirp_lut[3085] = 8'd247; long_chirp_lut[3086] = 8'd248; long_chirp_lut[3087] = 8'd197;
long_chirp_lut[3088] = 8'd115; long_chirp_lut[3089] = 8'd 39; long_chirp_lut[3090] = 8'd 2; long_chirp_lut[3091] = 8'd 19; long_chirp_lut[3092] = 8'd 83; long_chirp_lut[3093] = 8'd167; long_chirp_lut[3094] = 8'd233; long_chirp_lut[3095] = 8'd254; long_chirp_lut[3096] = 8'd220; long_chirp_lut[3097] = 8'd146; long_chirp_lut[3098] = 8'd 64; long_chirp_lut[3099] = 8'd 9; long_chirp_lut[3100] = 8'd 6; long_chirp_lut[3101] = 8'd 55; long_chirp_lut[3102] = 8'd135; long_chirp_lut[3103] = 8'd212;
long_chirp_lut[3104] = 8'd253; long_chirp_lut[3105] = 8'd240; long_chirp_lut[3106] = 8'd178; long_chirp_lut[3107] = 8'd 96; long_chirp_lut[3108] = 8'd 26; long_chirp_lut[3109] = 8'd 1; long_chirp_lut[3110] = 8'd 29; long_chirp_lut[3111] = 8'd100; long_chirp_lut[3112] = 8'd182; long_chirp_lut[3113] = 8'd241; long_chirp_lut[3114] = 8'd252; long_chirp_lut[3115] = 8'd209; long_chirp_lut[3116] = 8'd132; long_chirp_lut[3117] = 8'd 53; long_chirp_lut[3118] = 8'd 5; long_chirp_lut[3119] = 8'd 10;
long_chirp_lut[3120] = 8'd 64; long_chirp_lut[3121] = 8'd145; long_chirp_lut[3122] = 8'd219; long_chirp_lut[3123] = 8'd254; long_chirp_lut[3124] = 8'd235; long_chirp_lut[3125] = 8'd171; long_chirp_lut[3126] = 8'd 89; long_chirp_lut[3127] = 8'd 23; long_chirp_lut[3128] = 8'd 1; long_chirp_lut[3129] = 8'd 32; long_chirp_lut[3130] = 8'd104; long_chirp_lut[3131] = 8'd185; long_chirp_lut[3132] = 8'd242; long_chirp_lut[3133] = 8'd251; long_chirp_lut[3134] = 8'd209; long_chirp_lut[3135] = 8'd132;
long_chirp_lut[3136] = 8'd 53; long_chirp_lut[3137] = 8'd 6; long_chirp_lut[3138] = 8'd 9; long_chirp_lut[3139] = 8'd 62; long_chirp_lut[3140] = 8'd142; long_chirp_lut[3141] = 8'd216; long_chirp_lut[3142] = 8'd253; long_chirp_lut[3143] = 8'd238; long_chirp_lut[3144] = 8'd177; long_chirp_lut[3145] = 8'd 95; long_chirp_lut[3146] = 8'd 27; long_chirp_lut[3147] = 8'd 1; long_chirp_lut[3148] = 8'd 27; long_chirp_lut[3149] = 8'd 95; long_chirp_lut[3150] = 8'd176; long_chirp_lut[3151] = 8'd237;
long_chirp_lut[3152] = 8'd253; long_chirp_lut[3153] = 8'd217; long_chirp_lut[3154] = 8'd144; long_chirp_lut[3155] = 8'd 64; long_chirp_lut[3156] = 8'd 10; long_chirp_lut[3157] = 8'd 5; long_chirp_lut[3158] = 8'd 49; long_chirp_lut[3159] = 8'd126; long_chirp_lut[3160] = 8'd203; long_chirp_lut[3161] = 8'd250; long_chirp_lut[3162] = 8'd246; long_chirp_lut[3163] = 8'd194; long_chirp_lut[3164] = 8'd115; long_chirp_lut[3165] = 8'd 41; long_chirp_lut[3166] = 8'd 2; long_chirp_lut[3167] = 8'd 15;
long_chirp_lut[3168] = 8'd 73; long_chirp_lut[3169] = 8'd154; long_chirp_lut[3170] = 8'd224; long_chirp_lut[3171] = 8'd254; long_chirp_lut[3172] = 8'd233; long_chirp_lut[3173] = 8'd170; long_chirp_lut[3174] = 8'd 89; long_chirp_lut[3175] = 8'd 24; long_chirp_lut[3176] = 8'd 1; long_chirp_lut[3177] = 8'd 29; long_chirp_lut[3178] = 8'd 97; long_chirp_lut[3179] = 8'd177; long_chirp_lut[3180] = 8'd237; long_chirp_lut[3181] = 8'd254; long_chirp_lut[3182] = 8'd219; long_chirp_lut[3183] = 8'd148;
long_chirp_lut[3184] = 8'd 68; long_chirp_lut[3185] = 8'd 13; long_chirp_lut[3186] = 8'd 3; long_chirp_lut[3187] = 8'd 43; long_chirp_lut[3188] = 8'd117; long_chirp_lut[3189] = 8'd195; long_chirp_lut[3190] = 8'd246; long_chirp_lut[3191] = 8'd250; long_chirp_lut[3192] = 8'd204; long_chirp_lut[3193] = 8'd128; long_chirp_lut[3194] = 8'd 52; long_chirp_lut[3195] = 8'd 6; long_chirp_lut[3196] = 8'd 8; long_chirp_lut[3197] = 8'd 58; long_chirp_lut[3198] = 8'd135; long_chirp_lut[3199] = 8'd209;
long_chirp_lut[3200] = 8'd251; long_chirp_lut[3201] = 8'd244; long_chirp_lut[3202] = 8'd191; long_chirp_lut[3203] = 8'd113; long_chirp_lut[3204] = 8'd 41; long_chirp_lut[3205] = 8'd 3; long_chirp_lut[3206] = 8'd 14; long_chirp_lut[3207] = 8'd 70; long_chirp_lut[3208] = 8'd148; long_chirp_lut[3209] = 8'd219; long_chirp_lut[3210] = 8'd253; long_chirp_lut[3211] = 8'd239; long_chirp_lut[3212] = 8'd180; long_chirp_lut[3213] = 8'd101; long_chirp_lut[3214] = 8'd 33; long_chirp_lut[3215] = 8'd 1;
long_chirp_lut[3216] = 8'd 19; long_chirp_lut[3217] = 8'd 79; long_chirp_lut[3218] = 8'd158; long_chirp_lut[3219] = 8'd225; long_chirp_lut[3220] = 8'd254; long_chirp_lut[3221] = 8'd234; long_chirp_lut[3222] = 8'd172; long_chirp_lut[3223] = 8'd 93; long_chirp_lut[3224] = 8'd 28; long_chirp_lut[3225] = 8'd 1; long_chirp_lut[3226] = 8'd 23; long_chirp_lut[3227] = 8'd 85; long_chirp_lut[3228] = 8'd164; long_chirp_lut[3229] = 8'd229; long_chirp_lut[3230] = 8'd254; long_chirp_lut[3231] = 8'd231;
long_chirp_lut[3232] = 8'd168; long_chirp_lut[3233] = 8'd 89; long_chirp_lut[3234] = 8'd 25; long_chirp_lut[3235] = 8'd 1; long_chirp_lut[3236] = 8'd 25; long_chirp_lut[3237] = 8'd 88; long_chirp_lut[3238] = 8'd167; long_chirp_lut[3239] = 8'd230; long_chirp_lut[3240] = 8'd255; long_chirp_lut[3241] = 8'd230; long_chirp_lut[3242] = 8'd167; long_chirp_lut[3243] = 8'd 88; long_chirp_lut[3244] = 8'd 25; long_chirp_lut[3245] = 8'd 1; long_chirp_lut[3246] = 8'd 24; long_chirp_lut[3247] = 8'd 87;
long_chirp_lut[3248] = 8'd166; long_chirp_lut[3249] = 8'd229; long_chirp_lut[3250] = 8'd254; long_chirp_lut[3251] = 8'd232; long_chirp_lut[3252] = 8'd169; long_chirp_lut[3253] = 8'd 91; long_chirp_lut[3254] = 8'd 27; long_chirp_lut[3255] = 8'd 1; long_chirp_lut[3256] = 8'd 22; long_chirp_lut[3257] = 8'd 83; long_chirp_lut[3258] = 8'd161; long_chirp_lut[3259] = 8'd226; long_chirp_lut[3260] = 8'd254; long_chirp_lut[3261] = 8'd235; long_chirp_lut[3262] = 8'd175; long_chirp_lut[3263] = 8'd 98;
long_chirp_lut[3264] = 8'd 31; long_chirp_lut[3265] = 8'd 1; long_chirp_lut[3266] = 8'd 18; long_chirp_lut[3267] = 8'd 76; long_chirp_lut[3268] = 8'd153; long_chirp_lut[3269] = 8'd220; long_chirp_lut[3270] = 8'd253; long_chirp_lut[3271] = 8'd240; long_chirp_lut[3272] = 8'd184; long_chirp_lut[3273] = 8'd108; long_chirp_lut[3274] = 8'd 39; long_chirp_lut[3275] = 8'd 3; long_chirp_lut[3276] = 8'd 13; long_chirp_lut[3277] = 8'd 65; long_chirp_lut[3278] = 8'd141; long_chirp_lut[3279] = 8'd211;
long_chirp_lut[3280] = 8'd251; long_chirp_lut[3281] = 8'd245; long_chirp_lut[3282] = 8'd196; long_chirp_lut[3283] = 8'd122; long_chirp_lut[3284] = 8'd 50; long_chirp_lut[3285] = 8'd 6; long_chirp_lut[3286] = 8'd 7; long_chirp_lut[3287] = 8'd 52; long_chirp_lut[3288] = 8'd125; long_chirp_lut[3289] = 8'd199; long_chirp_lut[3290] = 8'd246; long_chirp_lut[3291] = 8'd251; long_chirp_lut[3292] = 8'd210; long_chirp_lut[3293] = 8'd139; long_chirp_lut[3294] = 8'd 65; long_chirp_lut[3295] = 8'd 13;
long_chirp_lut[3296] = 8'd 2; long_chirp_lut[3297] = 8'd 38; long_chirp_lut[3298] = 8'd105; long_chirp_lut[3299] = 8'd181; long_chirp_lut[3300] = 8'd237; long_chirp_lut[3301] = 8'd254; long_chirp_lut[3302] = 8'd225; long_chirp_lut[3303] = 8'd161; long_chirp_lut[3304] = 8'd 84; long_chirp_lut[3305] = 8'd 24; long_chirp_lut[3306] = 8'd 1; long_chirp_lut[3307] = 8'd 23; long_chirp_lut[3308] = 8'd 83; long_chirp_lut[3309] = 8'd159; long_chirp_lut[3310] = 8'd224; long_chirp_lut[3311] = 8'd254;
long_chirp_lut[3312] = 8'd239; long_chirp_lut[3313] = 8'd184; long_chirp_lut[3314] = 8'd109; long_chirp_lut[3315] = 8'd 41; long_chirp_lut[3316] = 8'd 3; long_chirp_lut[3317] = 8'd 10; long_chirp_lut[3318] = 8'd 59; long_chirp_lut[3319] = 8'd132; long_chirp_lut[3320] = 8'd203; long_chirp_lut[3321] = 8'd248; long_chirp_lut[3322] = 8'd250; long_chirp_lut[3323] = 8'd208; long_chirp_lut[3324] = 8'd138; long_chirp_lut[3325] = 8'd 64; long_chirp_lut[3326] = 8'd 13; long_chirp_lut[3327] = 8'd 2;
long_chirp_lut[3328] = 8'd 35; long_chirp_lut[3329] = 8'd101; long_chirp_lut[3330] = 8'd176; long_chirp_lut[3331] = 8'd234; long_chirp_lut[3332] = 8'd254; long_chirp_lut[3333] = 8'd230; long_chirp_lut[3334] = 8'd170; long_chirp_lut[3335] = 8'd 95; long_chirp_lut[3336] = 8'd 31; long_chirp_lut[3337] = 8'd 1; long_chirp_lut[3338] = 8'd 15; long_chirp_lut[3339] = 8'd 69; long_chirp_lut[3340] = 8'd142; long_chirp_lut[3341] = 8'd211; long_chirp_lut[3342] = 8'd250; long_chirp_lut[3343] = 8'd247;
long_chirp_lut[3344] = 8'd202; long_chirp_lut[3345] = 8'd132; long_chirp_lut[3346] = 8'd 60; long_chirp_lut[3347] = 8'd 11; long_chirp_lut[3348] = 8'd 3; long_chirp_lut[3349] = 8'd 38; long_chirp_lut[3350] = 8'd104; long_chirp_lut[3351] = 8'd178; long_chirp_lut[3352] = 8'd235; long_chirp_lut[3353] = 8'd254; long_chirp_lut[3354] = 8'd231; long_chirp_lut[3355] = 8'd171; long_chirp_lut[3356] = 8'd 97; long_chirp_lut[3357] = 8'd 33; long_chirp_lut[3358] = 8'd 2; long_chirp_lut[3359] = 8'd 13;
long_chirp_lut[3360] = 8'd 64; long_chirp_lut[3361] = 8'd136; long_chirp_lut[3362] = 8'd206; long_chirp_lut[3363] = 8'd248; long_chirp_lut[3364] = 8'd250; long_chirp_lut[3365] = 8'd209; long_chirp_lut[3366] = 8'd141; long_chirp_lut[3367] = 8'd 69; long_chirp_lut[3368] = 8'd 16; long_chirp_lut[3369] = 8'd 1; long_chirp_lut[3370] = 8'd 29; long_chirp_lut[3371] = 8'd 90; long_chirp_lut[3372] = 8'd164; long_chirp_lut[3373] = 8'd226; long_chirp_lut[3374] = 8'd254; long_chirp_lut[3375] = 8'd240;
long_chirp_lut[3376] = 8'd187; long_chirp_lut[3377] = 8'd115; long_chirp_lut[3378] = 8'd 47; long_chirp_lut[3379] = 8'd 6; long_chirp_lut[3380] = 8'd 6; long_chirp_lut[3381] = 8'd 46; long_chirp_lut[3382] = 8'd114; long_chirp_lut[3383] = 8'd186; long_chirp_lut[3384] = 8'd239; long_chirp_lut[3385] = 8'd254; long_chirp_lut[3386] = 8'd227; long_chirp_lut[3387] = 8'd167; long_chirp_lut[3388] = 8'd 94; long_chirp_lut[3389] = 8'd 32; long_chirp_lut[3390] = 8'd 2; long_chirp_lut[3391] = 8'd 13;
long_chirp_lut[3392] = 8'd 63; long_chirp_lut[3393] = 8'd134; long_chirp_lut[3394] = 8'd203; long_chirp_lut[3395] = 8'd247; long_chirp_lut[3396] = 8'd251; long_chirp_lut[3397] = 8'd215; long_chirp_lut[3398] = 8'd150; long_chirp_lut[3399] = 8'd 77; long_chirp_lut[3400] = 8'd 21; long_chirp_lut[3401] = 8'd 1; long_chirp_lut[3402] = 8'd 21; long_chirp_lut[3403] = 8'd 77; long_chirp_lut[3404] = 8'd149; long_chirp_lut[3405] = 8'd214; long_chirp_lut[3406] = 8'd251; long_chirp_lut[3407] = 8'd247;
long_chirp_lut[3408] = 8'd204; long_chirp_lut[3409] = 8'd136; long_chirp_lut[3410] = 8'd 66; long_chirp_lut[3411] = 8'd 15; long_chirp_lut[3412] = 8'd 1; long_chirp_lut[3413] = 8'd 28; long_chirp_lut[3414] = 8'd 88; long_chirp_lut[3415] = 8'd160; long_chirp_lut[3416] = 8'd222; long_chirp_lut[3417] = 8'd253; long_chirp_lut[3418] = 8'd244; long_chirp_lut[3419] = 8'd197; long_chirp_lut[3420] = 8'd128; long_chirp_lut[3421] = 8'd 58; long_chirp_lut[3422] = 8'd 12; long_chirp_lut[3423] = 8'd 2;
long_chirp_lut[3424] = 8'd 33; long_chirp_lut[3425] = 8'd 94; long_chirp_lut[3426] = 8'd166; long_chirp_lut[3427] = 8'd226; long_chirp_lut[3428] = 8'd254; long_chirp_lut[3429] = 8'd241; long_chirp_lut[3430] = 8'd193; long_chirp_lut[3431] = 8'd123; long_chirp_lut[3432] = 8'd 55; long_chirp_lut[3433] = 8'd 10; long_chirp_lut[3434] = 8'd 3; long_chirp_lut[3435] = 8'd 35; long_chirp_lut[3436] = 8'd 96; long_chirp_lut[3437] = 8'd168; long_chirp_lut[3438] = 8'd227; long_chirp_lut[3439] = 8'd254;
long_chirp_lut[3440] = 8'd241; long_chirp_lut[3441] = 8'd192; long_chirp_lut[3442] = 8'd123; long_chirp_lut[3443] = 8'd 55; long_chirp_lut[3444] = 8'd 10; long_chirp_lut[3445] = 8'd 2; long_chirp_lut[3446] = 8'd 34; long_chirp_lut[3447] = 8'd 94; long_chirp_lut[3448] = 8'd166; long_chirp_lut[3449] = 8'd225; long_chirp_lut[3450] = 8'd253; long_chirp_lut[3451] = 8'd243; long_chirp_lut[3452] = 8'd196; long_chirp_lut[3453] = 8'd128; long_chirp_lut[3454] = 8'd 60; long_chirp_lut[3455] = 8'd 13;
long_chirp_lut[3456] = 8'd 2; long_chirp_lut[3457] = 8'd 30; long_chirp_lut[3458] = 8'd 88; long_chirp_lut[3459] = 8'd159; long_chirp_lut[3460] = 8'd220; long_chirp_lut[3461] = 8'd252; long_chirp_lut[3462] = 8'd246; long_chirp_lut[3463] = 8'd203; long_chirp_lut[3464] = 8'd137; long_chirp_lut[3465] = 8'd 68; long_chirp_lut[3466] = 8'd 17; long_chirp_lut[3467] = 8'd 1; long_chirp_lut[3468] = 8'd 23; long_chirp_lut[3469] = 8'd 78; long_chirp_lut[3470] = 8'd148; long_chirp_lut[3471] = 8'd211;
long_chirp_lut[3472] = 8'd249; long_chirp_lut[3473] = 8'd250; long_chirp_lut[3474] = 8'd213; long_chirp_lut[3475] = 8'd150; long_chirp_lut[3476] = 8'd 80; long_chirp_lut[3477] = 8'd 25; long_chirp_lut[3478] = 8'd 1; long_chirp_lut[3479] = 8'd 15; long_chirp_lut[3480] = 8'd 64; long_chirp_lut[3481] = 8'd132; long_chirp_lut[3482] = 8'd198; long_chirp_lut[3483] = 8'd243; long_chirp_lut[3484] = 8'd253; long_chirp_lut[3485] = 8'd225; long_chirp_lut[3486] = 8'd167; long_chirp_lut[3487] = 8'd 98;
long_chirp_lut[3488] = 8'd 37; long_chirp_lut[3489] = 8'd 4; long_chirp_lut[3490] = 8'd 8; long_chirp_lut[3491] = 8'd 48; long_chirp_lut[3492] = 8'd112; long_chirp_lut[3493] = 8'd180; long_chirp_lut[3494] = 8'd233; long_chirp_lut[3495] = 8'd254; long_chirp_lut[3496] = 8'd238; long_chirp_lut[3497] = 8'd188; long_chirp_lut[3498] = 8'd120; long_chirp_lut[3499] = 8'd 55; long_chirp_lut[3500] = 8'd 11; long_chirp_lut[3501] = 8'd 2; long_chirp_lut[3502] = 8'd 30; long_chirp_lut[3503] = 8'd 87;
long_chirp_lut[3504] = 8'd157; long_chirp_lut[3505] = 8'd217; long_chirp_lut[3506] = 8'd251; long_chirp_lut[3507] = 8'd248; long_chirp_lut[3508] = 8'd210; long_chirp_lut[3509] = 8'd147; long_chirp_lut[3510] = 8'd 79; long_chirp_lut[3511] = 8'd 25; long_chirp_lut[3512] = 8'd 1; long_chirp_lut[3513] = 8'd 14; long_chirp_lut[3514] = 8'd 61; long_chirp_lut[3515] = 8'd127; long_chirp_lut[3516] = 8'd193; long_chirp_lut[3517] = 8'd240; long_chirp_lut[3518] = 8'd254; long_chirp_lut[3519] = 8'd231;
long_chirp_lut[3520] = 8'd178; long_chirp_lut[3521] = 8'd110; long_chirp_lut[3522] = 8'd 47; long_chirp_lut[3523] = 8'd 8; long_chirp_lut[3524] = 8'd 3; long_chirp_lut[3525] = 8'd 35; long_chirp_lut[3526] = 8'd 93; long_chirp_lut[3527] = 8'd162; long_chirp_lut[3528] = 8'd220; long_chirp_lut[3529] = 8'd252; long_chirp_lut[3530] = 8'd247; long_chirp_lut[3531] = 8'd209; long_chirp_lut[3532] = 8'd146; long_chirp_lut[3533] = 8'd 79; long_chirp_lut[3534] = 8'd 25; long_chirp_lut[3535] = 8'd 1;
long_chirp_lut[3536] = 8'd 13; long_chirp_lut[3537] = 8'd 58; long_chirp_lut[3538] = 8'd123; long_chirp_lut[3539] = 8'd189; long_chirp_lut[3540] = 8'd237; long_chirp_lut[3541] = 8'd254; long_chirp_lut[3542] = 8'd235; long_chirp_lut[3543] = 8'd185; long_chirp_lut[3544] = 8'd119; long_chirp_lut[3545] = 8'd 55; long_chirp_lut[3546] = 8'd 12; long_chirp_lut[3547] = 8'd 1; long_chirp_lut[3548] = 8'd 27; long_chirp_lut[3549] = 8'd 81; long_chirp_lut[3550] = 8'd148; long_chirp_lut[3551] = 8'd209;
long_chirp_lut[3552] = 8'd247; long_chirp_lut[3553] = 8'd252; long_chirp_lut[3554] = 8'd221; long_chirp_lut[3555] = 8'd164; long_chirp_lut[3556] = 8'd 97; long_chirp_lut[3557] = 8'd 38; long_chirp_lut[3558] = 8'd 5; long_chirp_lut[3559] = 8'd 5; long_chirp_lut[3560] = 8'd 40; long_chirp_lut[3561] = 8'd100; long_chirp_lut[3562] = 8'd167; long_chirp_lut[3563] = 8'd223; long_chirp_lut[3564] = 8'd252; long_chirp_lut[3565] = 8'd247; long_chirp_lut[3566] = 8'd209; long_chirp_lut[3567] = 8'd148;
long_chirp_lut[3568] = 8'd 81; long_chirp_lut[3569] = 8'd 27; long_chirp_lut[3570] = 8'd 2; long_chirp_lut[3571] = 8'd 11; long_chirp_lut[3572] = 8'd 52; long_chirp_lut[3573] = 8'd114; long_chirp_lut[3574] = 8'd180; long_chirp_lut[3575] = 8'd231; long_chirp_lut[3576] = 8'd254; long_chirp_lut[3577] = 8'd242; long_chirp_lut[3578] = 8'd199; long_chirp_lut[3579] = 8'd136; long_chirp_lut[3580] = 8'd 71; long_chirp_lut[3581] = 8'd 21; long_chirp_lut[3582] = 8'd 1; long_chirp_lut[3583] = 8'd 15;
long_chirp_lut[3584] = 8'd 60; long_chirp_lut[3585] = 8'd123; long_chirp_lut[3586] = 8'd188; long_chirp_lut[3587] = 8'd236; long_chirp_lut[3588] = 8'd254; long_chirp_lut[3589] = 8'd239; long_chirp_lut[3590] = 8'd193; long_chirp_lut[3591] = 8'd129; long_chirp_lut[3592] = 8'd 65; long_chirp_lut[3593] = 8'd 18; long_chirp_lut[3594] = 8'd 1; long_chirp_lut[3595] = 8'd 17; long_chirp_lut[3596] = 8'd 64; long_chirp_lut[3597] = 8'd127; long_chirp_lut[3598] = 8'd191; long_chirp_lut[3599] = 8'd237;
end
// Short PLFM chirp LUT (0.5us, 30MHz to 10MHz)
initial begin
short_chirp_lut[ 0] = 8'd255; short_chirp_lut[ 1] = 8'd129; short_chirp_lut[ 2] = 8'd 1; short_chirp_lut[ 3] = 8'd118; short_chirp_lut[ 4] = 8'd253; short_chirp_lut[ 5] = 8'd155; short_chirp_lut[ 6] = 8'd 7; short_chirp_lut[ 7] = 8'd 75;
short_chirp_lut[ 8] = 8'd235; short_chirp_lut[ 9] = 8'd210; short_chirp_lut[10] = 8'd 46; short_chirp_lut[11] = 8'd 17; short_chirp_lut[12] = 8'd167; short_chirp_lut[13] = 8'd254; short_chirp_lut[14] = 8'd145; short_chirp_lut[15] = 8'd 10;
short_chirp_lut[16] = 8'd 49; short_chirp_lut[17] = 8'd201; short_chirp_lut[18] = 8'd248; short_chirp_lut[19] = 8'd129; short_chirp_lut[20] = 8'd 8; short_chirp_lut[21] = 8'd 45; short_chirp_lut[22] = 8'd187; short_chirp_lut[23] = 8'd254;
short_chirp_lut[24] = 8'd167; short_chirp_lut[25] = 8'd 34; short_chirp_lut[26] = 8'd 10; short_chirp_lut[27] = 8'd118; short_chirp_lut[28] = 8'd235; short_chirp_lut[29] = 8'd238; short_chirp_lut[30] = 8'd127; short_chirp_lut[31] = 8'd 18;
short_chirp_lut[32] = 8'd 15; short_chirp_lut[33] = 8'd118; short_chirp_lut[34] = 8'd228; short_chirp_lut[35] = 8'd249; short_chirp_lut[36] = 8'd167; short_chirp_lut[37] = 8'd 54; short_chirp_lut[38] = 8'd 1; short_chirp_lut[39] = 8'd 45;
short_chirp_lut[40] = 8'd150; short_chirp_lut[41] = 8'd237; short_chirp_lut[42] = 8'd248; short_chirp_lut[43] = 8'd180; short_chirp_lut[44] = 8'd 80; short_chirp_lut[45] = 8'd 10; short_chirp_lut[46] = 8'd 10; short_chirp_lut[47] = 8'd 75;
short_chirp_lut[48] = 8'd167; short_chirp_lut[49] = 8'd237; short_chirp_lut[50] = 8'd253; short_chirp_lut[51] = 8'd210; short_chirp_lut[52] = 8'd132; short_chirp_lut[53] = 8'd 54; short_chirp_lut[54] = 8'd 7; short_chirp_lut[55] = 8'd 6;
short_chirp_lut[56] = 8'd 49; short_chirp_lut[57] = 8'd118; short_chirp_lut[58] = 8'd187; short_chirp_lut[59] = 8'd237;
end
@@ -0,0 +1,130 @@
`timescale 1ns / 1ps
module chirp_memory_loader_param #(
parameter LONG_I_FILE_SEG0 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg0_i.mem",
parameter LONG_Q_FILE_SEG0 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg0_q.mem",
parameter LONG_I_FILE_SEG1 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg1_i.mem",
parameter LONG_Q_FILE_SEG1 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg1_q.mem",
parameter LONG_I_FILE_SEG2 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg2_i.mem",
parameter LONG_Q_FILE_SEG2 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg2_q.mem",
parameter LONG_I_FILE_SEG3 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg3_i.mem",
parameter LONG_Q_FILE_SEG3 = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/long_chirp_seg3_q.mem",
parameter SHORT_I_FILE = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/short_chirp_i.mem",
parameter SHORT_Q_FILE = "C:/Users/dell/Desktop/ASUS/RADAR_V5/Firmware/FPGA/PLFM_RADAR_Xilinx_ISE_V2/Python/mem_files/fpga_mem_files/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 [9:0] sample_addr,
output reg [15:0] ref_i,
output reg [15:0] ref_q,
output reg mem_ready
);
// Memory declarations - now 4096 samples for 4 segments
(* 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:1023];
(* ram_style = "block" *) reg [15:0] short_chirp_q [0:1023];
// Initialize memory
integer i;
reg [799:0] debug_msg;
initial begin
if (DEBUG) begin
$display("[MEM] Starting memory initialization for 4 long chirp segments");
end
// === LOAD LONG CHIRP - 4 SEGMENTS ===
// Segment 0 (addresses 0-1023)
$readmemh(LONG_I_FILE_SEG0, long_chirp_i, 0, 1023);
$readmemh(LONG_Q_FILE_SEG0, long_chirp_q, 0, 1023);
if (DEBUG) $display("[MEM] Loaded long chirp segment 0 (0-1023)");
// Segment 1 (addresses 1024-2047)
$readmemh(LONG_I_FILE_SEG1, long_chirp_i, 1024, 2047);
$readmemh(LONG_Q_FILE_SEG1, long_chirp_q, 1024, 2047);
if (DEBUG) $display("[MEM] Loaded long chirp segment 1 (1024-2047)");
// Segment 2 (addresses 2048-3071)
$readmemh(LONG_I_FILE_SEG2, long_chirp_i, 2048, 3071);
$readmemh(LONG_Q_FILE_SEG2, long_chirp_q, 2048, 3071);
if (DEBUG) $display("[MEM] Loaded long chirp segment 2 (2048-3071)");
// Segment 3 (addresses 3072-4095)
$readmemh(LONG_I_FILE_SEG3, long_chirp_i, 3072, 4095);
$readmemh(LONG_Q_FILE_SEG3, long_chirp_q, 3072, 4095);
if (DEBUG) $display("[MEM] Loaded long chirp segment 3 (3072-4095)");
// === LOAD SHORT CHIRP ===
// Load first 50 samples (0-49)
$readmemh(SHORT_I_FILE, short_chirp_i);
$readmemh(SHORT_Q_FILE, short_chirp_q);
if (DEBUG) $display("[MEM] Loaded short chirp (0-49)");
// Zero pad remaining 974 samples (50-1023)
for (i = 50; i < 1024; i = i + 1) begin
short_chirp_i[i] = 16'h0000;
short_chirp_q[i] = 16'h0000;
end
if (DEBUG) $display("[MEM] Zero-padded short chirp from 50-1023");
// === 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[1023]: I=%h Q=%h", long_chirp_i[1023], long_chirp_q[1023]);
$display(" Long[1024]: I=%h Q=%h", long_chirp_i[1024], long_chirp_q[1024]);
$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[3071]: I=%h Q=%h", long_chirp_i[3071], long_chirp_q[3071]);
$display(" Long[3072]: I=%h Q=%h", long_chirp_i[3072], long_chirp_q[3072]);
$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
end
// Memory access logic
reg [11:0] long_addr;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
ref_i <= 16'd0;
ref_q <= 16'd0;
mem_ready <= 1'b0;
end else begin
if (mem_request) begin
if (use_long_chirp) begin
// Direct addressing for 4 segments
long_addr = {segment_select, sample_addr}; // segment_select[1:0] + sample_addr[9:0]
ref_i <= long_chirp_i[long_addr];
ref_q <= long_chirp_q[long_addr];
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
end else begin
// Short chirp (0-1023)
ref_i <= short_chirp_i[sample_addr];
ref_q <= short_chirp_q[sample_addr];
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
end
mem_ready <= 1'b1;
end else begin
mem_ready <= 1'b0;
end
end
end
endmodule
@@ -0,0 +1,300 @@
module cic_decimator_4x_enhanced (
input wire clk, // 400MHz input clock
input wire reset_n,
input wire signed [17:0] data_in, // 18-bit input
input wire data_valid,
output reg signed [17:0] data_out, // 18-bit output
output reg data_out_valid, // Valid at 100MHz
// Enhanced monitoring outputs
output reg saturation_detected, // Latched saturation indicator
output reg [7:0] max_value_monitor, // For gain control
input wire reset_monitors // Clear saturation and max value
);
parameter STAGES = 5;
parameter DECIMATION = 4;
parameter COMB_DELAY = 1;
// Increased bit width for 18-bit input with headroom
reg signed [35:0] integrator [0:STAGES-1]; // 36-bit for better dynamic range
reg signed [35:0] comb [0:STAGES-1];
reg signed [35:0] comb_delay [0:STAGES-1][0:COMB_DELAY-1];
// Enhanced control and monitoring
reg [1:0] decimation_counter;
reg data_valid_delayed;
reg data_valid_comb;
reg [7:0] output_counter;
reg [35:0] max_integrator_value;
reg overflow_detected;
reg overflow_latched; // Latched overflow indicator
// Diagnostic registers
reg [7:0] saturation_event_count;
reg [31:0] sample_count;
// Temporary signals for calculations
reg signed [35:0] abs_integrator_value;
reg signed [35:0] temp_scaled_output;
reg signed [17:0] temp_output; // Temporary output for proper range checking
integer i, j;
// Initialize
initial begin
for (i = 0; i < STAGES; i = i + 1) begin
integrator[i] = 0;
comb[i] = 0;
for (j = 0; j < COMB_DELAY; j = j + 1) begin
comb_delay[i][j] = 0;
end
end
decimation_counter = 0;
data_valid_delayed = 0;
data_valid_comb = 0;
output_counter = 0;
max_integrator_value = 0;
overflow_detected = 0;
overflow_latched = 0;
saturation_detected = 0;
saturation_event_count = 0;
sample_count = 0;
max_value_monitor = 0;
data_out = 0;
data_out_valid = 0;
abs_integrator_value = 0;
temp_scaled_output = 0;
temp_output = 0;
end
// Enhanced integrator section with proper saturation monitoring
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
for (i = 0; i < STAGES; i = i + 1) begin
integrator[i] <= 0;
end
decimation_counter <= 0;
data_valid_delayed <= 0;
data_valid_comb <= 0;
max_integrator_value <= 0;
overflow_detected <= 0;
sample_count <= 0;
abs_integrator_value <= 0;
if (reset_monitors) begin
overflow_latched <= 0;
saturation_detected <= 0;
saturation_event_count <= 0;
max_value_monitor <= 0;
end
end else if (data_valid) begin
sample_count <= sample_count + 1;
// First integrator stage with enhanced saturation detection
if (integrator[0] + $signed({{18{data_in[17]}}, data_in}) > (2**35 - 1)) begin
integrator[0] <= (2**35 - 1);
overflow_detected <= 1'b1;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
saturation_event_count <= saturation_event_count + 1;
$display("CIC_SATURATION: Positive overflow at sample %0d", sample_count);
end else if (integrator[0] + $signed({{18{data_in[17]}}, data_in}) < -(2**35)) begin
integrator[0] <= -(2**35);
overflow_detected <= 1'b1;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
saturation_event_count <= saturation_event_count + 1;
$display("CIC_SATURATION: Negative overflow at sample %0d", sample_count);
end else begin
integrator[0] <= integrator[0] + $signed({{18{data_in[17]}}, data_in});
overflow_detected <= 1'b0; // Only clear immediate detection, not latched
end
// Calculate absolute value for monitoring
abs_integrator_value <= (integrator[0][35]) ? -integrator[0] : integrator[0];
// Track maximum integrator value for gain monitoring (absolute value)
if (abs_integrator_value > max_integrator_value) begin
max_integrator_value <= abs_integrator_value;
max_value_monitor <= abs_integrator_value[31:24]; // Fixed: use the calculated absolute value
end
// Remaining integrator stages with saturation protection
for (i = 1; i < STAGES; i = i + 1) begin
if (integrator[i] + integrator[i-1] > (2**35 - 1)) begin
integrator[i] <= (2**35 - 1);
overflow_detected <= 1'b1;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else if (integrator[i] + integrator[i-1] < -(2**35)) begin
integrator[i] <= -(2**35);
overflow_detected <= 1'b1;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else begin
integrator[i] <= integrator[i] + integrator[i-1];
end
end
// Enhanced decimation control
if (decimation_counter == DECIMATION - 1) begin
decimation_counter <= 0;
data_valid_delayed <= 1;
output_counter <= output_counter + 1;
/*// Debug output for first few samples
if (output_counter < 10) begin
$display("CIC_DECIM: sample=%0d, integrator[%0d]=%h, max_val=%h, sat=%b",
output_counter, STAGES-1, integrator[STAGES-1],
max_integrator_value, saturation_detected);
end
*/
end else begin
decimation_counter <= decimation_counter + 1;
data_valid_delayed <= 0;
end
end else begin
data_valid_delayed <= 0;
overflow_detected <= 1'b0; // Clear immediate detection when no data
end
// Monitor control - clear latched saturation on reset_monitors
if (reset_monitors) begin
overflow_latched <= 0;
saturation_detected <= 0;
max_integrator_value <= 0;
max_value_monitor <= 0;
saturation_event_count <= 0;
end
end
// Pipeline the valid signal for comb section
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
data_valid_comb <= 0;
end else begin
data_valid_comb <= data_valid_delayed;
end
end
// Enhanced comb section with FIXED scaling and saturation monitoring
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
for (i = 0; i < STAGES; i = i + 1) begin
comb[i] <= 0;
for (j = 0; j < COMB_DELAY; j = j + 1) begin
comb_delay[i][j] <= 0;
end
end
data_out <= 0;
data_out_valid <= 0;
temp_scaled_output <= 0;
temp_output <= 0;
end else if (data_valid_comb) begin
// Enhanced comb processing with saturation check
for (i = 0; i < STAGES; i = i + 1) begin
if (i == 0) begin
// Check for comb stage saturation
if (integrator[STAGES-1] - comb_delay[0][COMB_DELAY-1] > (2**35 - 1)) begin
comb[0] <= (2**35 - 1);
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else if (integrator[STAGES-1] - comb_delay[0][COMB_DELAY-1] < -(2**35)) begin
comb[0] <= -(2**35);
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else begin
comb[0] <= integrator[STAGES-1] - comb_delay[0][COMB_DELAY-1];
end
// Update delay line for first stage
for (j = COMB_DELAY-1; j > 0; j = j - 1) begin
comb_delay[0][j] <= comb_delay[0][j-1];
end
comb_delay[0][0] <= integrator[STAGES-1];
end else begin
// Check for comb stage saturation
if (comb[i-1] - comb_delay[i][COMB_DELAY-1] > (2**35 - 1)) begin
comb[i] <= (2**35 - 1);
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else if (comb[i-1] - comb_delay[i][COMB_DELAY-1] < -(2**35)) begin
comb[i] <= -(2**35);
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
end else begin
comb[i] <= comb[i-1] - comb_delay[i][COMB_DELAY-1];
end
// Update delay line
for (j = COMB_DELAY-1; j > 0; j = j - 1) begin
comb_delay[i][j] <= comb_delay[i][j-1];
end
comb_delay[i][0] <= comb[i-1];
end
end
// FIXED: Use proper scaling for 5 stages and decimation by 4
// Gain = (4^5) = 1024 = 2^10, so scale by 2^10 to normalize
temp_scaled_output <= comb[STAGES-1] >>> 10;
// FIXED: Extract 18-bit output properly
temp_output <= temp_scaled_output[17:0];
// FIXED: Proper saturation detection for 18-bit signed range
// Check if the 18-bit truncated value matches the intended value
if (temp_scaled_output > 131071) begin // 2^17 - 1
data_out <= 131071;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
saturation_event_count <= saturation_event_count + 1;
$display("CIC_OUTPUT_SAT: TRUE Positive saturation, raw=%h, scaled=%h, temp_out=%d, final_out=%d",
comb[STAGES-1], temp_scaled_output, temp_output, 131071);
end else if (temp_scaled_output < -131072) begin // -2^17
data_out <= -131072;
overflow_latched <= 1'b1;
saturation_detected <= 1'b1;
saturation_event_count <= saturation_event_count + 1;
$display("CIC_OUTPUT_SAT: TRUE Negative saturation, raw=%h, scaled=%h, temp_out=%d, final_out=%d",
comb[STAGES-1], temp_scaled_output, temp_output, -131072);
end else begin
// FIXED: Use the properly truncated 18-bit value
data_out <= temp_output;
overflow_latched <= 1'b0;
saturation_detected <= 1'b0;
if (output_counter < 20) begin
//$display("CIC_OUTPUT_GOOD: raw=%h, scaled=%h, temp_out=%d, final_out=%d",
// comb[STAGES-1], temp_scaled_output, temp_output, data_out);
end
end
data_out_valid <= 1;
// Debug output for first samples
if (output_counter < 10) begin
// $display("CIC_DEBUG: sample=%0d, raw=%h, scaled=%h, out=%d, sat=%b",
// output_counter, comb[STAGES-1], temp_scaled_output, data_out, saturation_detected);
end
end else begin
data_out_valid <= 0;
end
end
// Continuous monitoring of saturation status
always @(posedge clk) begin
if (overflow_detected && sample_count < 100) begin
$display("CIC_OVERFLOW: Immediate detection at sample %0d", sample_count);
end
end
// Clear saturation on external reset
always @(posedge reset_monitors) begin
if (reset_monitors) begin
overflow_latched <= 0;
saturation_detected <= 0;
saturation_event_count <= 0;
//$display("CIC_MONITORS: All monitors reset");
end
end
endmodule
@@ -0,0 +1,26 @@
module dac_interface_enhanced (
input wire clk_120m,
input wire reset_n,
input wire [7:0] chirp_data,
input wire chirp_valid,
output reg [7:0] dac_data,
output wire dac_clk,
output wire dac_sleep
);
// Register DAC data to meet timing
always @(posedge clk_120m or negedge reset_n) begin
if (!reset_n) begin
dac_data <= 8'd128; // Center value
end else if (chirp_valid) begin
dac_data <= chirp_data;
end else begin
dac_data <= 8'd128; // Default to center when no chirp
end
end
// DAC clock is same as input clock (120MHz)
assign dac_clk = clk_120m;
assign dac_sleep = 1'b0;
endmodule
+425
View File
@@ -0,0 +1,425 @@
`timescale 1ns / 1ps
module ddc_400m_enhanced (
input wire clk_400m, // 400MHz clock from ADC DCO
input wire clk_100m, // 100MHz system clock
input wire reset_n,
input wire mixers_enable,
input wire [7:0] adc_data, // ADC data at 400MHz
input wire adc_data_valid_i, // Valid at 400MHz
input wire adc_data_valid_q,
output wire signed [17:0] baseband_i,
output wire signed [17:0] baseband_q,
output wire baseband_valid_i,
output wire baseband_valid_q,
output wire [1:0] ddc_status,
// Enhanced interfaces
output wire [7:0] ddc_diagnostics,
output wire mixer_saturation,
output wire filter_overflow,
input wire bypass_mode, // Test mode
input wire [1:0] test_mode,
input wire [15:0] test_phase_inc,
input wire force_saturation,
input wire reset_monitors,
output wire [31:0] debug_sample_count,
output wire [17:0] debug_internal_i,
output wire [17:0] debug_internal_q
);
// Parameters for numerical precision
parameter ADC_WIDTH = 8;
parameter NCO_WIDTH = 16;
parameter MIXER_WIDTH = 18;
parameter OUTPUT_WIDTH = 18;
// IF frequency parameters
parameter IF_FREQ = 120000000;
parameter FS = 400000000;
parameter PHASE_WIDTH = 32;
// Internal signals
wire signed [15:0] sin_out, cos_out;
wire nco_ready;
wire cic_valid;
wire fir_valid;
wire [17:0] cic_i_out, cic_q_out;
wire signed [17:0] fir_i_out, fir_q_out;
// Diagnostic registers
reg [2:0] saturation_count;
reg overflow_detected;
reg [7:0] error_counter;
// CDC synchronization for control signals
reg mixers_enable_sync;
reg bypass_mode_sync;
// Debug monitoring signals
reg [31:0] sample_counter;
wire signed [17:0] debug_mixed_i_trunc;
wire signed [17:0] debug_mixed_q_trunc;
// Real-time status monitoring
reg [7:0] signal_power_i, signal_power_q;
// Enhanced saturation injection for testing
reg force_saturation_sync;
// Internal mixing signals
reg signed [MIXER_WIDTH-1:0] adc_signed;
reg signed [MIXER_WIDTH + NCO_WIDTH -1:0] mixed_i, mixed_q;
reg mixed_valid;
reg mixer_overflow_i, mixer_overflow_q;
// Output stage registers
reg signed [17:0] baseband_i_reg, baseband_q_reg;
reg baseband_valid_reg;
// ============================================================================
// Phase Dithering Signals
// ============================================================================
wire [7:0] phase_dither_bits;
wire [31:0] phase_inc_dithered;
// ============================================================================
// Debug Signal Assignments
// ============================================================================
assign debug_internal_i = mixed_i[25:8];
assign debug_internal_q = mixed_q[25:8];
assign debug_sample_count = sample_counter;
assign debug_mixed_i_trunc = mixed_i[25:8];
assign debug_mixed_q_trunc = mixed_q[25:8];
// ============================================================================
// Clock Domain Crossing for Control Signals
// ============================================================================
always @(posedge clk_400m or negedge reset_n) begin
if (!reset_n) begin
mixers_enable_sync <= 1'b0;
bypass_mode_sync <= 1'b0;
force_saturation_sync <= 1'b0;
end else begin
mixers_enable_sync <= mixers_enable;
bypass_mode_sync <= bypass_mode;
force_saturation_sync <= force_saturation;
end
end
// ============================================================================
// Sample Counter and Debug Monitoring
// ============================================================================
always @(posedge clk_400m or negedge reset_n) begin
if (!reset_n || reset_monitors) begin
sample_counter <= 0;
saturation_count <= 0;
error_counter <= 0;
end else if (adc_data_valid_i && adc_data_valid_q ) begin
sample_counter <= sample_counter + 1;
end
end
// ============================================================================
// Enhanced Phase Dithering Instance
// ============================================================================
lfsr_dither_enhanced #(
.DITHER_WIDTH(8)
) phase_dither_gen (
.clk(clk_400m),
.reset_n(reset_n),
.enable(nco_ready),
.dither_out(phase_dither_bits)
);
// ============================================================================
// Phase Increment Calculation with Dithering
// ============================================================================
// Calculate phase increment for 120MHz IF at 400MHz sampling
localparam PHASE_INC_120MHZ = 32'h4CCCCCCD;
// Apply dithering to reduce spurious tones
assign phase_inc_dithered = PHASE_INC_120MHZ + {24'b0, phase_dither_bits};
// ============================================================================
// Enhanced NCO with Diagnostics
// ============================================================================
nco_400m_enhanced nco_core (
.clk_400m(clk_400m),
.reset_n(reset_n),
.frequency_tuning_word(phase_inc_dithered),
.phase_valid(mixers_enable),
.phase_offset(16'h0000),
.sin_out(sin_out),
.cos_out(cos_out),
.dds_ready(nco_ready)
);
// ============================================================================
// Enhanced Mixing Stage with AGC
// ============================================================================
always @(posedge clk_400m or negedge reset_n) begin
if (!reset_n) begin
adc_signed <= 0;
mixed_i <= 0;
mixed_q <= 0;
mixed_valid <= 0;
mixer_overflow_i <= 0;
mixer_overflow_q <= 0;
saturation_count <= 0;
overflow_detected <= 0;
end else if (nco_ready && adc_data_valid_i && adc_data_valid_q) begin
// Convert ADC data to signed with extended precision
adc_signed <= {1'b0, adc_data, {(MIXER_WIDTH-ADC_WIDTH-1){1'b0}}} -
{1'b0, {ADC_WIDTH{1'b1}}, {(MIXER_WIDTH-ADC_WIDTH-1){1'b0}}} / 2;
// Force saturation for testing
if (force_saturation_sync) begin
mixed_i <= 34'h1FFFFFFFF; // Force positive saturation
mixed_q <= 34'h200000000; // Force negative saturation
mixer_overflow_i <= 1'b1;
mixer_overflow_q <= 1'b1;
end else begin
// Normal mixing
mixed_i <= $signed(adc_signed) * $signed(cos_out);
mixed_q <= $signed(adc_signed) * $signed(sin_out);
// Enhanced overflow detection with counting
mixer_overflow_i <= (mixed_i > (2**(MIXER_WIDTH+NCO_WIDTH-2)-1)) ||
(mixed_i < -(2**(MIXER_WIDTH+NCO_WIDTH-2)));
mixer_overflow_q <= (mixed_q > (2**(MIXER_WIDTH+NCO_WIDTH-2)-1)) ||
(mixed_q < -(2**(MIXER_WIDTH+NCO_WIDTH-2)));
end
mixed_valid <= 1;
if (mixer_overflow_i || mixer_overflow_q) begin
saturation_count <= saturation_count + 1;
overflow_detected <= 1'b1;
end else begin
overflow_detected <= 1'b0;
end
end else begin
mixed_valid <= 0;
mixer_overflow_i <= 0;
mixer_overflow_q <= 0;
overflow_detected <= 1'b0;
end
end
// ============================================================================
// Enhanced CIC Decimators
// ============================================================================
wire cic_valid_i, cic_valid_q;
cic_decimator_4x_enhanced cic_i_inst (
.clk(clk_400m),
.reset_n(reset_n),
.data_in(mixed_i[33:16]),
.data_valid(mixed_valid),
.data_out(cic_i_out),
.data_out_valid(cic_valid_i)
);
cic_decimator_4x_enhanced cic_q_inst (
.clk(clk_400m),
.reset_n(reset_n),
.data_in(mixed_q[33:16]),
.data_valid(mixed_valid),
.data_out(cic_q_out),
.data_out_valid(cic_valid_q)
);
assign cic_valid = cic_valid_i & cic_valid_q;
cdc_adc_to_processing #(
.WIDTH(18),
.STAGES(3)
)CDC_FIR_i(
.src_clk(clk_400m),
.dst_clk(clk_100m),
.reset_n(reset_n),
.src_data(cic_i_out),
.src_valid(cic_valid_i),
.dst_data(fir_d_in_i),
.dst_valid(fir_in_valid_i)
);
cdc_adc_to_processing #(
.WIDTH(18),
.STAGES(3)
)CDC_FIR_q(
.src_clk(clk_400m),
.dst_clk(clk_100m),
.reset_n(reset_n),
.src_data(cic_q_out),
.src_valid(cic_valid_q),
.dst_data(fir_d_in_q),
.dst_valid(fir_in_valid_q)
);
// ============================================================================
// Enhanced FIR Filters with FIXED valid signal handling
// ============================================================================
wire fir_in_valid_i, fir_in_valid_q;
wire fir_valid_i, fir_valid_q;
wire fir_i_ready, fir_q_ready;
wire [17:0] fir_d_in_i, fir_d_in_q;
// FIR I channel
fir_lowpass_parallel_enhanced fir_i_inst (
.clk(clk_100m),
.reset_n(reset_n),
.data_in(fir_d_in_i), // Use synchronized data
.data_valid(fir_in_valid_i), // Use synchronized valid
.data_out(fir_i_out),
.data_out_valid(fir_valid_i),
.fir_ready(fir_i_ready),
.filter_overflow()
);
// FIR Q channel
fir_lowpass_parallel_enhanced fir_q_inst (
.clk(clk_100m),
.reset_n(reset_n),
.data_in(fir_d_in_q), // Use synchronized data
.data_valid(fir_in_valid_q), // Use synchronized valid
.data_out(fir_q_out),
.data_out_valid(fir_valid_q),
.fir_ready(fir_q_ready),
.filter_overflow()
);
assign fir_valid = fir_valid_i & fir_valid_q;
// ============================================================================
// Enhanced Output Stage
// ============================================================================
always @(negedge clk_100m or negedge reset_n) begin
if (!reset_n) begin
baseband_i_reg <= 0;
baseband_q_reg <= 0;
baseband_valid_reg <= 0;
end else if (fir_valid) begin
baseband_i_reg <= fir_i_out;
baseband_q_reg <= fir_q_out;
baseband_valid_reg <= 1;
end else begin
baseband_valid_reg <= 0;
end
end
// ============================================================================
// Output Assignments
// ============================================================================
assign baseband_i = baseband_i_reg;
assign baseband_q = baseband_q_reg;
assign baseband_valid_i = baseband_valid_reg;
assign baseband_valid_q = baseband_valid_reg;
assign ddc_status = {mixer_overflow_i | mixer_overflow_q, nco_ready};
assign mixer_saturation = overflow_detected;
assign ddc_diagnostics = {saturation_count, error_counter[4:0]};
// ============================================================================
// Enhanced Debug and Monitoring
// ============================================================================
reg [31:0] debug_cic_count, debug_fir_count, debug_bb_count;
always @(posedge clk_100m) begin
if (fir_valid_i && debug_fir_count < 20) begin
debug_fir_count <= debug_fir_count + 1;
$display("FIR_OUTPUT: fir_i=%6d, fir_q=%6d", fir_i_out, fir_q_out);
end
if (adc_data_valid_i && adc_data_valid_q && debug_bb_count < 20) begin
debug_bb_count <= debug_bb_count + 1;
$display("BASEBAND_OUT: i=%6d, q=%6d, count=%0d",
baseband_i, baseband_q, debug_bb_count);
end
end
// In ddc_400m.v, add these debug signals:
// Debug monitoring
reg [31:0] debug_adc_count = 0;
reg [31:0] debug_baseband_count = 0;
always @(posedge clk_400m) begin
if (adc_data_valid_i && adc_data_valid_q && debug_adc_count < 10) begin
debug_adc_count <= debug_adc_count + 1;
$display("DDC_ADC: data=%0d, count=%0d, time=%t",
adc_data, debug_adc_count, $time);
end
end
always @(posedge clk_100m) begin
if (baseband_valid_i && baseband_valid_q && debug_baseband_count < 10) begin
debug_baseband_count <= debug_baseband_count + 1;
$display("DDC_BASEBAND: i=%0d, q=%0d, count=%0d, time=%t",
baseband_i, baseband_q, debug_baseband_count, $time);
end
end
endmodule
// ============================================================================
// Enhanced Phase Dithering Module
// ============================================================================
`timescale 1ns / 1ps
module lfsr_dither_enhanced #(
parameter DITHER_WIDTH = 8 // Increased for better dithering
)(
input wire clk,
input wire reset_n,
input wire enable,
output wire [DITHER_WIDTH-1:0] dither_out
);
reg [DITHER_WIDTH-1:0] lfsr_reg;
reg [15:0] cycle_counter;
reg lock_detected;
// Polynomial for better randomness: x^8 + x^6 + x^5 + x^4 + 1
wire feedback;
generate
if (DITHER_WIDTH == 4) begin
assign feedback = lfsr_reg[3] ^ lfsr_reg[2];
end else if (DITHER_WIDTH == 8) begin
assign feedback = lfsr_reg[7] ^ lfsr_reg[5] ^ lfsr_reg[4] ^ lfsr_reg[3];
end else begin
assign feedback = lfsr_reg[DITHER_WIDTH-1] ^ lfsr_reg[DITHER_WIDTH-2];
end
endgenerate
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
lfsr_reg <= {DITHER_WIDTH{1'b1}}; // Non-zero initial state
cycle_counter <= 0;
lock_detected <= 0;
end else if (enable) begin
lfsr_reg <= {lfsr_reg[DITHER_WIDTH-2:0], feedback};
cycle_counter <= cycle_counter + 1;
// Detect LFSR lock after sufficient cycles
if (cycle_counter > (2**DITHER_WIDTH * 8)) begin
lock_detected <= 1'b1;
end
end
end
assign dither_out = lfsr_reg;
endmodule
+55
View File
@@ -0,0 +1,55 @@
`timescale 1ns / 1ps
// ddc_input_interface.v
module ddc_input_interface (
input wire clk, // 100MHz
input wire reset_n,
// DDC Input (18-bit)
input wire signed [17:0] ddc_i,
input wire signed [17:0] ddc_q,
input wire valid_i,
input wire valid_q,
// Scaled output (16-bit)
output reg signed [15:0] adc_i,
output reg signed [15:0] adc_q,
output reg adc_valid,
// Status
output wire data_sync_error
);
// Synchronize valid signals
reg valid_i_reg, valid_q_reg;
reg valid_sync;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
valid_i_reg <= 1'b0;
valid_q_reg <= 1'b0;
valid_sync <= 1'b0;
adc_valid <= 1'b0;
end else begin
valid_i_reg <= valid_i;
valid_q_reg <= valid_q;
// Require both I and Q valid simultaneously
valid_sync <= valid_i_reg && valid_q_reg;
adc_valid <= valid_sync;
end
end
// Scale 18-bit to 16-bit with rounding
// Option: Keep most significant 16 bits with rounding
always @(posedge clk) begin
if (valid_sync) begin
// Round to nearest: add 0.5 LSB before truncation
adc_i <= ddc_i[17:2] + ddc_i[1]; // Rounding
adc_q <= ddc_q[17:2] + ddc_q[1]; // Rounding
end
end
// Error detection
assign data_sync_error = (valid_i_reg ^ valid_q_reg);
endmodule
+305
View File
@@ -0,0 +1,305 @@
`timescale 1ns / 1ps
module doppler_processor_optimized #(
parameter DOPPLER_FFT_SIZE = 32,
parameter RANGE_BINS = 64,
parameter CHIRPS_PER_FRAME = 32,
parameter WINDOW_TYPE = 0, // 0=Hamming, 1=Rectangular
parameter DATA_WIDTH = 16
)(
input wire clk,
input wire reset_n,
input wire [31:0] range_data,
input wire data_valid,
input wire new_chirp_frame,
output reg [31:0] doppler_output,
output reg doppler_valid,
output reg [4:0] doppler_bin,
output reg [5:0] range_bin,
output wire processing_active,
output wire frame_complete,
output reg [3:0] status
);
// ==============================================
// Window Coefficients (Simple Implementation)
// ==============================================
reg [DATA_WIDTH-1:0] window_coeff [0:31];
// Generate window coefficients
integer w;
initial begin
if (WINDOW_TYPE == 0) begin
// Pre-calculated Hamming window (Q15 format)
window_coeff[0] = 16'h0800; window_coeff[1] = 16'h0862;
window_coeff[2] = 16'h09CB; window_coeff[3] = 16'h0C3B;
window_coeff[4] = 16'h0FB2; window_coeff[5] = 16'h142F;
window_coeff[6] = 16'h19B2; window_coeff[7] = 16'h2039;
window_coeff[8] = 16'h27C4; window_coeff[9] = 16'h3050;
window_coeff[10] = 16'h39DB; window_coeff[11] = 16'h4462;
window_coeff[12] = 16'h4FE3; window_coeff[13] = 16'h5C5A;
window_coeff[14] = 16'h69C4; window_coeff[15] = 16'h781D;
window_coeff[16] = 16'h7FFF; // Peak
window_coeff[17] = 16'h781D; window_coeff[18] = 16'h69C4;
window_coeff[19] = 16'h5C5A; window_coeff[20] = 16'h4FE3;
window_coeff[21] = 16'h4462; window_coeff[22] = 16'h39DB;
window_coeff[23] = 16'h3050; window_coeff[24] = 16'h27C4;
window_coeff[25] = 16'h2039; window_coeff[26] = 16'h19B2;
window_coeff[27] = 16'h142F; window_coeff[28] = 16'h0FB2;
window_coeff[29] = 16'h0C3B; window_coeff[30] = 16'h09CB;
window_coeff[31] = 16'h0862;
end else begin
// Rectangular window (all ones)
for (w = 0; w < 32; w = w + 1) begin
window_coeff[w] = 16'h7FFF;
end
end
end
// ==============================================
// Memory Declaration - FIXED SIZE
// ==============================================
localparam MEM_DEPTH = RANGE_BINS * CHIRPS_PER_FRAME;
(* ram_style = "block" *) reg [DATA_WIDTH-1:0] doppler_i_mem [0:MEM_DEPTH-1];
(* ram_style = "block" *) reg [DATA_WIDTH-1:0] doppler_q_mem [0:MEM_DEPTH-1];
// ==============================================
// Control Registers
// ==============================================
reg [5:0] write_range_bin; // Changed to match RANGE_BINS width
reg [4:0] write_chirp_index; // Changed to match CHIRPS_PER_FRAME width
reg [5:0] read_range_bin;
reg [4:0] read_doppler_index; // Changed name for clarity
reg frame_buffer_full;
reg [9:0] chirps_received; // Enough for up to 1024 chirps
reg [1:0] chirp_state; // Track chirp accumulation state
// ==============================================
// FFT Interface
// ==============================================
reg fft_start;
wire fft_ready;
reg [DATA_WIDTH-1:0] fft_input_i;
reg [DATA_WIDTH-1:0] fft_input_q;
reg signed [31:0] mult_i, mult_q; // 32-bit to avoid overflow
reg fft_input_valid;
reg fft_input_last;
wire [DATA_WIDTH-1:0] fft_output_i;
wire [DATA_WIDTH-1:0] fft_output_q;
wire fft_output_valid;
wire fft_output_last;
// ==============================================
// Addressing
// ==============================================
wire [10:0] mem_write_addr;
wire [10:0] mem_read_addr;
// Proper address calculation using parameters
assign mem_write_addr = (write_chirp_index * RANGE_BINS) + write_range_bin;
assign mem_read_addr = (read_doppler_index * RANGE_BINS) + read_range_bin;
// Alternative organization (choose one):
// If you want range-major organization (all chirps for one range bin together):
// assign mem_write_addr = (write_range_bin * CHIRPS_PER_FRAME) + write_chirp_index;
// assign mem_read_addr = (read_range_bin * CHIRPS_PER_FRAME) + read_doppler_index;
// ==============================================
// State Machine
// ==============================================
reg [2:0] state;
localparam S_IDLE = 3'b000;
localparam S_ACCUMULATE = 3'b001;
localparam S_LOAD_FFT = 3'b010;
localparam S_FFT_WAIT = 3'b011;
localparam S_OUTPUT = 3'b100;
// Frame sync detection
reg new_chirp_frame_d1;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) new_chirp_frame_d1 <= 0;
else new_chirp_frame_d1 <= new_chirp_frame;
end
wire frame_start_pulse = new_chirp_frame & ~new_chirp_frame_d1;
// ==============================================
// Main State Machine - FIXED
// ==============================================
reg [5:0] fft_sample_counter;
reg [9:0] processing_timeout;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
state <= S_IDLE;
write_range_bin <= 0;
write_chirp_index <= 0;
read_range_bin <= 0;
read_doppler_index <= 0;
frame_buffer_full <= 0;
doppler_valid <= 0;
fft_start <= 0;
fft_input_valid <= 0;
fft_input_last <= 0;
fft_sample_counter <= 0;
processing_timeout <= 0;
status <= 0;
chirps_received <= 0;
chirp_state <= 0;
end else begin
doppler_valid <= 0;
fft_input_valid <= 0;
fft_input_last <= 0;
if (processing_timeout > 0) begin
processing_timeout <= processing_timeout - 1;
end
case (state)
S_IDLE: begin
if (frame_start_pulse) begin
// Start new frame
write_chirp_index <= 0;
write_range_bin <= 0;
frame_buffer_full <= 0;
chirps_received <= 0;
//chirp_state <= 1; // Start accumulating
end
if (data_valid && !frame_buffer_full) begin
state <= S_ACCUMULATE;
write_range_bin <= 0;
end
end
S_ACCUMULATE: begin
if (data_valid) begin
// Store with proper addressing
doppler_i_mem[mem_write_addr] <= range_data[15:0];
doppler_q_mem[mem_write_addr] <= range_data[31:16];
// Debug output to see what's being written
// $display("Time=%t: Write addr=%d (chirp=%d, range=%d), Data=%h",
// $time, mem_write_addr, write_chirp_index, write_range_bin, range_data);
// Increment range bin
if (write_range_bin < RANGE_BINS - 1) begin
write_range_bin <= write_range_bin + 1;
end else begin
// Completed one chirp
write_range_bin <= 0;
write_chirp_index <= write_chirp_index + 1;
chirps_received <= chirps_received + 1;
// Check if frame is complete
if (write_chirp_index >= CHIRPS_PER_FRAME - 1) begin
frame_buffer_full <= 1;
chirp_state <= 0; // Stop accumulating
// Could automatically start processing here:
state <= S_LOAD_FFT;
read_range_bin <= 0;
read_doppler_index <= 0;
fft_sample_counter <= 0;
fft_start <= 1;
end
end
end
end
// [Rest of S_LOAD_FFT, S_FFT_WAIT, S_OUTPUT states remain similar]
// But with fixed addressing in S_LOAD_FFT:
S_LOAD_FFT: begin
fft_start <= 0;
if (fft_sample_counter < DOPPLER_FFT_SIZE) begin
// Use correct addressing for reading
mult_i <= $signed(doppler_i_mem[mem_read_addr]) *
$signed(window_coeff[read_doppler_index]);
mult_q <= $signed(doppler_q_mem[mem_read_addr]) *
$signed(window_coeff[read_doppler_index]);
// Round instead of truncate
fft_input_i <= (mult_i + (1 << 14)) >>> 15; // Round to nearest
fft_input_q <= (mult_q + (1 << 14)) >>> 15;
fft_input_valid <= 1;
if (fft_sample_counter == DOPPLER_FFT_SIZE - 1) begin
fft_input_last <= 1;
end
// Increment chirp index for next sample
read_doppler_index <= read_doppler_index + 1;
fft_sample_counter <= fft_sample_counter + 1;
end else begin
state <= S_FFT_WAIT;
fft_sample_counter <= 0;
processing_timeout <= 100;
end
end
S_FFT_WAIT: begin
if (fft_output_valid) begin
doppler_output <= {fft_output_q[15:0], fft_output_i[15:0]};
doppler_bin <= fft_sample_counter;
range_bin <= read_range_bin;
doppler_valid <= 1;
fft_sample_counter <= fft_sample_counter + 1;
if (fft_output_last) begin
state <= S_OUTPUT;
fft_sample_counter <= 0;
end
end
if (processing_timeout == 0) begin
state <= S_OUTPUT;
end
end
S_OUTPUT: begin
if (read_range_bin < RANGE_BINS - 1) begin
read_range_bin <= read_range_bin + 1;
read_doppler_index <= 0;
state <= S_LOAD_FFT;
fft_start <= 1;
end else begin
state <= S_IDLE;
frame_buffer_full <= 0;
end
end
endcase
status <= {state, frame_buffer_full};
end
end
// ==============================================
// FFT Module
// ==============================================
xfft_32 fft_inst (
.aclk(clk),
.aresetn(reset_n),
.s_axis_config_tdata(8'h01),
.s_axis_config_tvalid(fft_start),
.s_axis_config_tready(fft_ready),
.s_axis_data_tdata({fft_input_q, fft_input_i}),
.s_axis_data_tvalid(fft_input_valid),
.s_axis_data_tlast(fft_input_last),
.m_axis_data_tdata({fft_output_q, fft_output_i}),
.m_axis_data_tvalid(fft_output_valid),
.m_axis_data_tlast(fft_output_last),
.m_axis_data_tready(1'b1)
);
// ==============================================
// Status Outputs
// ==============================================
assign processing_active = (state != S_IDLE);
assign frame_complete = (state == S_IDLE && frame_buffer_full == 0);
endmodule
+26
View File
@@ -0,0 +1,26 @@
module edge_detector_enhanced (
input wire clk,
input wire reset_n,
input wire signal_in,
output wire rising_falling_edge
);
reg signal_in_prev;
reg signal_in_prev2;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
signal_in_prev <= 1'b0;
signal_in_prev2 <= 1'b0;
end else begin
signal_in_prev <= signal_in;
signal_in_prev2 <= signal_in_prev;
end
end
// Rising edge: was low, now high (with synchronization) signal_in_prev & ~signal_in_prev2;
//Falling edge: was high, now low (with synchronization) falling_edge = ~signal_in_prev & signal_in_prev2
assign rising_falling_edge = (signal_in_prev & ~signal_in_prev2)|(~signal_in_prev & signal_in_prev2);
endmodule
+124
View File
@@ -0,0 +1,124 @@
`timescale 1ns / 1ps
module fft_1024_forward_enhanced (
input wire clk,
input wire reset_n,
input wire [15:0] data_i,
input wire [15:0] data_q,
input wire data_valid,
output wire [15:0] fft_i,
output wire [15:0] fft_q,
output wire fft_valid
);
// ========== MATCH YOUR FFT IP CONFIGURATION ==========
wire [15:0] s_axis_config_tdata; // 16-bit for your IP
wire s_axis_config_tvalid;
wire s_axis_config_tready;
wire [31:0] s_axis_data_tdata; // 32-bit for your IP {Q[15:0],I[15:0]}
wire s_axis_data_tvalid;
wire s_axis_data_tready;
wire s_axis_data_tlast;
wire [31:0] m_axis_data_tdata; // 32-bit for your IP
wire m_axis_data_tvalid;
wire m_axis_data_tready;
wire m_axis_data_tlast;
// Configuration: 16-bit, bit 0 = 1 for forward FFT...
assign s_axis_config_tdata = 16'h0001;
assign s_axis_config_tvalid = 1'b1; // Keep valid until accepted
assign s_axis_data_tdata = {data_q, data_i}; // {Q, I}
assign s_axis_data_tvalid = data_valid;
// Frame counter for tlast
reg [9:0] sample_count;
reg frame_active;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
sample_count <= 0;
frame_active <= 0;
end else begin
if (data_valid && !frame_active) begin
frame_active <= 1'b1;
sample_count <= 0;
end
if (frame_active && data_valid) begin
if (sample_count == 1023) begin
sample_count <= 0;
frame_active <= 0;
end else begin
sample_count <= sample_count + 1;
end
end
end
end
assign s_axis_data_tlast = (sample_count == 1023) && data_valid;
// Output: Extract from 64-bit output
// Assuming output format is also {Q[31:0], I[31:0]}
assign fft_i = m_axis_data_tdata[15:0]; // Lower 16 bits = I
assign fft_q = m_axis_data_tdata[31:16]; // Upper 16 bits = Q
assign fft_valid = m_axis_data_tvalid;
assign m_axis_data_tready = 1'b1;
// ========== DEBUG ==========
/*
reg [31:0] debug_counter = 0;
always @(posedge clk) begin
debug_counter <= debug_counter + 1;
// Monitor first 2000 cycles
if (debug_counter < 2000) begin
// Configuration
if (s_axis_config_tvalid && s_axis_config_tready) begin
$display("[FFT_CORRECTED @%d] CONFIG ACCEPTED! tdata=%h",
debug_counter, s_axis_config_tdata);
end
// Data input
if (s_axis_data_tvalid && s_axis_data_tready && debug_counter < 1050) begin
$display("[FFT_CORRECTED @%d] Data in: I=%h Q=%h count=%d tlast=%b",
debug_counter, data_i, data_q, sample_count, s_axis_data_tlast);
end
// Data output
if (m_axis_data_tvalid && debug_counter < 3000) begin
$display("[FFT_CORRECTED @%d] FFT OUT: I=%h Q=%h",
debug_counter, fft_i, fft_q);
end
// Stuck detection
if (debug_counter == 100 && !s_axis_config_tready) begin
$display("[FFT_CORRECTED] WARNING: config_tready still 0 after 100 cycles");
end
end
end
*/
// ========== FFT IP INSTANCE ==========
// This must match the name in your project
FFT_enhanced fft_forward_inst (
.aclk(clk),
.aresetn(reset_n), // Active-low reset
// Configuration (16-bit)
.s_axis_config_tdata(s_axis_config_tdata),
.s_axis_config_tvalid(s_axis_config_tvalid),
.s_axis_config_tready(s_axis_config_tready),
// Data input (64-bit)
.s_axis_data_tdata(s_axis_data_tdata),
.s_axis_data_tvalid(s_axis_data_tvalid),
.s_axis_data_tready(s_axis_data_tready),
.s_axis_data_tlast(s_axis_data_tlast),
// Data output (64-bit)
.m_axis_data_tdata(m_axis_data_tdata),
.m_axis_data_tvalid(m_axis_data_tvalid),
.m_axis_data_tlast(m_axis_data_tlast)
);
endmodule
+97
View File
@@ -0,0 +1,97 @@
`timescale 1ns / 1ps
module fft_1024_inverse_enhanced (
input wire clk,
input wire reset_n,
input wire [15:0] data_i,
input wire [15:0] data_q,
input wire data_valid,
output wire [15:0] ifft_i,
output wire [15:0] ifft_q,
output wire ifft_valid
);
// ========== MATCH YOUR FFT IP CONFIGURATION ==========
wire [15:0] s_axis_config_tdata; // 16-bit
wire s_axis_config_tvalid;
wire s_axis_config_tready;
wire [31:0] s_axis_data_tdata; // 32-bit for your IP {Q[15:0],I[15:0]}
wire s_axis_data_tvalid;
wire s_axis_data_tready;
wire s_axis_data_tlast;
wire [31:0] m_axis_data_tdata; // 32-bit
wire m_axis_data_tvalid;
wire m_axis_data_tready;
wire m_axis_data_tlast;
// Configuration: bit 0 = 0 for inverse FFT
assign s_axis_config_tdata = 16'h0000;
assign s_axis_config_tvalid = 1'b1;
assign s_axis_data_tdata = {data_q, data_i};
assign s_axis_data_tvalid = data_valid;
// Frame counter
reg [9:0] sample_count;
reg frame_active;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
sample_count <= 0;
frame_active <= 0;
end else begin
if (data_valid && !frame_active) begin
frame_active <= 1'b1;
sample_count <= 0;
end
if (frame_active && data_valid) begin
if (sample_count == 1023) begin
sample_count <= 0;
frame_active <= 0;
end else begin
sample_count <= sample_count + 1;
end
end
end
end
assign s_axis_data_tlast = (sample_count == 1023) && data_valid;
// Output
assign ifft_i = m_axis_data_tdata[15:0]; // I = lower 16 bits
assign ifft_q = m_axis_data_tdata[31:16]; // Q = upper 16 bits
assign ifft_valid = m_axis_data_tvalid;
assign m_axis_data_tready = 1'b1;
// Debug
reg [31:0] debug_counter;
always @(posedge clk) begin
debug_counter <= debug_counter + 1;
if (debug_counter < 1000) begin
if (s_axis_config_tvalid && s_axis_config_tready) begin
$display("[IFFT_CORRECTED @%d] CONFIG ACCEPTED!", debug_counter);
end
end
end
// IFFT IP instance
FFT_enhanced ifft_inverse_inst ( // Same IP core, different configuration
.aclk(clk),
.aresetn(reset_n),
.s_axis_config_tdata(s_axis_config_tdata),
.s_axis_config_tvalid(s_axis_config_tvalid),
.s_axis_config_tready(s_axis_config_tready),
.s_axis_data_tdata(s_axis_data_tdata),
.s_axis_data_tvalid(s_axis_data_tvalid),
.s_axis_data_tready(s_axis_data_tready),
.s_axis_data_tlast(s_axis_data_tlast),
.m_axis_data_tdata(m_axis_data_tdata),
.m_axis_data_tvalid(m_axis_data_tvalid),
.m_axis_data_tlast(m_axis_data_tlast)
);
endmodule
+124
View File
@@ -0,0 +1,124 @@
`timescale 1ns / 1ps
module fir_lowpass_parallel_enhanced (
input wire clk,
input wire reset_n,
input wire signed [17:0] data_in,
input wire data_valid,
output reg signed [17:0] data_out,
output reg data_out_valid,
output wire fir_ready,
output wire filter_overflow
);
parameter TAPS = 32;
parameter COEFF_WIDTH = 18;
parameter DATA_WIDTH = 18;
parameter ACCUM_WIDTH = 36;
// Filter coefficients
reg signed [COEFF_WIDTH-1:0] coeff [0:TAPS-1];
// Parallel delay line
reg signed [DATA_WIDTH-1:0] delay_line [0:TAPS-1];
// Parallel multiply-accumulate structure
wire signed [DATA_WIDTH+COEFF_WIDTH-1:0] mult_result [0:TAPS-1];
// Wires for parallel addition (combinatorial)
wire signed [ACCUM_WIDTH-1:0] sum_stage1_0, sum_stage1_1, sum_stage1_2, sum_stage1_3;
wire signed [ACCUM_WIDTH-1:0] sum_stage2_0, sum_stage2_1;
wire signed [ACCUM_WIDTH-1:0] sum_stage3;
// Registered accumulator
reg signed [ACCUM_WIDTH-1:0] accumulator_reg;
// Initialize coefficients
initial begin
// Proper low-pass filter coefficients
coeff[ 0] = 18'sh00AD; coeff[ 1] = 18'sh00CE; coeff[ 2] = 18'sh3FD87; coeff[ 3] = 18'sh02A6;
coeff[ 4] = 18'sh00E0; coeff[ 5] = 18'sh3F8C0; coeff[ 6] = 18'sh0A45; coeff[ 7] = 18'sh3FD82;
coeff[ 8] = 18'sh3F0B5; coeff[ 9] = 18'sh1CAD; coeff[10] = 18'sh3EE59; coeff[11] = 18'sh3E821;
coeff[12] = 18'sh4841; coeff[13] = 18'sh3B340; coeff[14] = 18'sh3E299; coeff[15] = 18'sh1FFFF;
coeff[16] = 18'sh1FFFF; coeff[17] = 18'sh3E299; coeff[18] = 18'sh3B340; coeff[19] = 18'sh4841;
coeff[20] = 18'sh3E821; coeff[21] = 18'sh3EE59; coeff[22] = 18'sh1CAD; coeff[23] = 18'sh3F0B5;
coeff[24] = 18'sh3FD82; coeff[25] = 18'sh0A45; coeff[26] = 18'sh3F8C0; coeff[27] = 18'sh00E0;
coeff[28] = 18'sh02A6; coeff[29] = 18'sh3FD87; coeff[30] = 18'sh00CE; coeff[31] = 18'sh00AD;
end
// Generate parallel multipliers
genvar k;
generate
for (k = 0; k < TAPS; k = k + 1) begin : mult_gen
assign mult_result[k] = delay_line[k] * coeff[k];
end
endgenerate
// COMBINATORIAL PARALLEL ADDITION TREE
// Stage 1: Group of 8
assign sum_stage1_0 = mult_result[0] + mult_result[1] + mult_result[2] + mult_result[3] +
mult_result[4] + mult_result[5] + mult_result[6] + mult_result[7];
assign sum_stage1_1 = mult_result[8] + mult_result[9] + mult_result[10] + mult_result[11] +
mult_result[12] + mult_result[13] + mult_result[14] + mult_result[15];
assign sum_stage1_2 = mult_result[16] + mult_result[17] + mult_result[18] + mult_result[19] +
mult_result[20] + mult_result[21] + mult_result[22] + mult_result[23];
assign sum_stage1_3 = mult_result[24] + mult_result[25] + mult_result[26] + mult_result[27] +
mult_result[28] + mult_result[29] + mult_result[30] + mult_result[31];
// Stage 2: Combine groups of 2
assign sum_stage2_0 = sum_stage1_0 + sum_stage1_1;
assign sum_stage2_1 = sum_stage1_2 + sum_stage1_3;
// Stage 3: Final sum
assign sum_stage3 = sum_stage2_0 + sum_stage2_1;
integer i;
// SINGLE-CYCLE PIPELINE PROCESSING
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
// Reset delay line
for (i = 0; i < TAPS; i = i + 1) begin
delay_line[i] <= 0;
end
accumulator_reg <= 0;
data_out <= 0;
data_out_valid <= 0;
end else begin
// Always shift in new data when valid
if (data_valid) begin
// Shift delay line
for (i = TAPS-1; i > 0; i = i - 1) begin
delay_line[i] <= delay_line[i-1];
end
delay_line[0] <= data_in;
// Register the combinatorial sum
accumulator_reg <= sum_stage3;
// Output with 1-cycle latency
data_out_valid <= 1'b1;
end else begin
data_out_valid <= 1'b0;
end
// Output saturation logic (registered)
if (accumulator_reg > (2**(ACCUM_WIDTH-2)-1)) begin
data_out <= (2**(DATA_WIDTH-1))-1;
end else if (accumulator_reg < -(2**(ACCUM_WIDTH-2))) begin
data_out <= -(2**(DATA_WIDTH-1));
end else begin
// Round and truncate (keep middle bits)
data_out <= accumulator_reg[ACCUM_WIDTH-2:DATA_WIDTH-1];
end
end
end
// Always ready to accept new data
assign fir_ready = 1'b1;
// Overflow detection (simplified)
assign filter_overflow = (accumulator_reg > (2**(ACCUM_WIDTH-2)-1)) ||
(accumulator_reg < -(2**(ACCUM_WIDTH-2)));
endmodule
@@ -0,0 +1,137 @@
`timescale 1ns / 1ps
// frequency_matched_filter_conjugate.v
module frequency_matched_filter (
input wire clk,
input wire reset_n,
// Input from Forward FFT (16-bit Q15)
input wire signed [15:0] fft_real_in,
input wire signed [15:0] fft_imag_in,
input wire fft_valid_in,
// Reference Chirp (16-bit Q15) - assumed to be FFT of transmitted chirp
input wire signed [15:0] ref_chirp_real,
input wire signed [15:0] ref_chirp_imag,
// Output (16-bit Q15) - FFT(input) ? conj(FFT(reference))
output wire signed [15:0] filtered_real,
output wire signed [15:0] filtered_imag,
output wire filtered_valid,
output wire [1:0] state
);
// Complex multiplication: (a + jb) ? (c - jd) = (ac + bd) + j(bc - ad)
// Note: We use CONJUGATE of reference for matched filter
// Pipeline registers
reg signed [15:0] a_reg, b_reg, c_reg, d_reg;
reg valid_p1;
reg signed [31:0] ac_reg, bd_reg, bc_reg, ad_reg;
reg valid_p2;
reg signed [31:0] real_sum, imag_sum;
reg valid_p3;
reg signed [15:0] real_out, imag_out;
reg valid_out;
// Address counter
reg [9:0] addr_counter;
// ========== PIPELINE STAGE 1: REGISTER INPUTS ==========
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
a_reg <= 16'd0; b_reg <= 16'd0;
c_reg <= 16'd0; d_reg <= 16'd0;
valid_p1 <= 1'b0;
end else begin
if (fft_valid_in) begin
a_reg <= fft_real_in; // a
b_reg <= fft_imag_in; // b
c_reg <= ref_chirp_real; // c
d_reg <= ref_chirp_imag; // d
end
valid_p1 <= fft_valid_in;
end
end
// ========== PIPELINE STAGE 2: MULTIPLICATIONS ==========
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
ac_reg <= 32'd0; bd_reg <= 32'd0;
bc_reg <= 32'd0; ad_reg <= 32'd0;
valid_p2 <= 1'b0;
end else begin
// Q15 ? Q15 = Q30
ac_reg <= a_reg * c_reg; // ac
bd_reg <= b_reg * d_reg; // bd
bc_reg <= b_reg * c_reg; // bc
ad_reg <= a_reg * d_reg; // ad
valid_p2 <= valid_p1;
end
end
// ========== PIPELINE STAGE 3: ADDITIONS ==========
// For conjugate multiplication: (ac + bd) + j(bc - ad)
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
real_sum <= 32'd0;
imag_sum <= 32'd0;
valid_p3 <= 1'b0;
end else begin
real_sum <= ac_reg + bd_reg; // ac + bd
imag_sum <= bc_reg - ad_reg; // bc - ad
valid_p3 <= valid_p2;
end
end
// ========== PIPELINE STAGE 4: SATURATION ==========
function automatic signed [15:0] saturate_and_scale;
input signed [31:0] q30_value;
reg signed [15:0] result;
reg signed [31:0] rounded;
begin
// Round to nearest: add 0.5 LSB (bit 14)
rounded = q30_value + (1 << 14);
// Check for overflow
if (rounded > 32'sh3FFF8000) begin // > 32767.5 in Q30
result = 16'h7FFF;
end else if (rounded < 32'shC0008000) begin // < -32768.5 in Q30
result = 16'h8000;
end else begin
// Take bits [30:15] for Q15
result = rounded[30:15];
end
saturate_and_scale = result;
end
endfunction
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
real_out <= 16'd0;
imag_out <= 16'd0;
valid_out <= 1'b0;
end else begin
if (valid_p3) begin
real_out <= saturate_and_scale(real_sum);
imag_out <= saturate_and_scale(imag_sum);
end
valid_out <= valid_p3;
end
end
// ========== OUTPUT ASSIGNMENTS ==========
assign filtered_real = real_out;
assign filtered_imag = imag_out;
assign filtered_valid = valid_out;
// Simple state output
assign state = {valid_out, valid_p3};
endmodule
+107
View File
@@ -0,0 +1,107 @@
`timescale 1ns / 1ps
// latency_buffer_2159_fixed.v
module latency_buffer_2159 #(
parameter DATA_WIDTH = 32,
parameter LATENCY = 3187
) (
input wire clk,
input wire reset_n,
input wire [DATA_WIDTH-1:0] data_in,
input wire valid_in,
output wire [DATA_WIDTH-1:0] data_out,
output wire valid_out
);
// ========== FIXED PARAMETERS ==========
localparam ADDR_WIDTH = 12; // Enough for 4096 entries (>2159)
// ========== FIXED LOGIC ==========
(* ram_style = "block" *) reg [DATA_WIDTH-1:0] bram [0:4095];
reg [ADDR_WIDTH-1:0] write_ptr;
reg [ADDR_WIDTH-1:0] read_ptr;
reg valid_out_reg;
// Delay counter to track when LATENCY cycles have passed
reg [ADDR_WIDTH-1:0] delay_counter;
reg buffer_has_data; // Flag when buffer has accumulated LATENCY samples
// ========== FIXED INITIALIZATION ==========
integer k;
initial begin
for (k = 0; k < 4096; k = k + 1) begin
bram[k] = {DATA_WIDTH{1'b0}};
end
write_ptr = 0;
read_ptr = 0;
valid_out_reg = 0;
delay_counter = 0;
buffer_has_data = 0;
end
// ========== FIXED STATE MACHINE ==========
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
write_ptr <= 0;
read_ptr <= 0;
valid_out_reg <= 0;
delay_counter <= 0;
buffer_has_data <= 0;
end else begin
// Default: no valid output
valid_out_reg <= 0;
// ===== WRITE SIDE =====
if (valid_in) begin
// Store data
bram[write_ptr] <= data_in;
// Increment write pointer (wrap at 4095)
if (write_ptr == 4095) begin
write_ptr <= 0;
end else begin
write_ptr <= write_ptr + 1;
end
// Count how many samples we've written
if (delay_counter < LATENCY) begin
delay_counter <= delay_counter + 1;
// When we've written LATENCY samples, buffer is "primed"
if (delay_counter == LATENCY - 1) begin
buffer_has_data <= 1'b1;
// $display("[LAT_BUF] Buffer now has %d samples (primed)", LATENCY);
end
end
end
// ===== READ SIDE =====
// Only start reading after we have LATENCY samples in buffer
if (buffer_has_data && valid_in) begin
// Read pointer follows write pointer with LATENCY delay
// Calculate: read_ptr = (write_ptr - LATENCY) mod 4096
// Handle wrap-around correctly
if (write_ptr >= LATENCY) begin
read_ptr <= write_ptr - LATENCY;
end else begin
// Wrap around: 4096 + write_ptr - LATENCY
read_ptr <= 4096 + write_ptr - LATENCY;
end
// Output is valid
valid_out_reg <= 1'b1;
//$display("[LAT_BUF] Reading: write_ptr=%d, read_ptr=%d, data=%h",
// write_ptr, read_ptr, bram[read_ptr]);
end
end
end
// ========== OUTPUTS ==========
assign data_out = bram[read_ptr];
assign valid_out = valid_out_reg;
endmodule
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+45
View File
@@ -0,0 +1,45 @@
`timescale 1ns / 1ps
module lvds_to_cmos_400m (
// ADC Physical Interface (LVDS Inputs)
input wire clk_400m_p, // Data Clock Output P (400MHz LVDS, 2.5V)
input wire clk_400m_n, // Data Clock Output N (400MHz LVDS, 2.5V)
input wire reset_n, // Active-low reset
// CMOS Output Interface (400MHz Domain)
output reg clk_400m_cmos // ADC data clock (CMOS, 3.3V)
);
// LVDS to single-ended conversion
wire clk_400m_se; // Single-ended DCO from ADC
// IBUFDS for DCO clock (LVDS to CMOS conversion)
IBUFDS #(
.DIFF_TERM("FALSE"), // DISABLE internal termination (using external 100O)
.IOSTANDARD("LVDS_25") // 2.5V LVDS standard
) ibufds_dco (
.O(clk_400m_se), // Single-ended 400MHz clock
.I(clk_400m_p),
.IB(clk_400m_n)
);
// Optional: Global clock buffer for better clock distribution
wire clk_400m_buffered;
BUFG bufg_dco (
.I(clk_400m_se),
.O(clk_400m_buffered)
);
// Main processing: Capture on rising edge only
always @(posedge clk_400m_buffered or negedge reset_n) begin
if (!reset_n) begin
// Reset state
clk_400m_cmos <= 1'b0;
end else begin
// Output buffered DCO clock
clk_400m_cmos <= clk_400m_buffered;
end
end
endmodule
@@ -0,0 +1,410 @@
`timescale 1ns / 1ps
// matched_filter_multi_segment.v
module matched_filter_multi_segment (
input wire clk, // 100MHz
input wire reset_n,
// Input from DDC (100 MSPS)
input wire signed [17:0] ddc_i,
input wire signed [17:0] ddc_q,
input wire ddc_valid,
// Chirp control (from sequence controller)
input wire use_long_chirp, //
input wire [5:0] chirp_counter, //
// Microcontroller sync signals
input wire mc_new_chirp, // Toggle for new chirp (32)
input wire mc_new_elevation, // Toggle for new elevation (32)
input wire mc_new_azimuth, // Toggle for new azimuth (50)
input wire [15:0] long_chirp_real,
input wire [15:0] long_chirp_imag,
input wire [15:0] short_chirp_real,
input wire [15:0] short_chirp_imag,
// Memory system interface
output reg [1:0] segment_request,
output wire [9:0] sample_addr_out, // Tell memory which sample we need
output reg mem_request,
input wire mem_ready,
// Output: Pulse compressed
output wire signed [15:0] pc_i_w,
output wire signed [15:0] pc_q_w,
output wire pc_valid_w,
// Status
output reg [3:0] status
);
// ========== FIXED PARAMETERS ==========
parameter BUFFER_SIZE = 1024;
parameter LONG_CHIRP_SAMPLES = 3000; // Still 3000 samples total
parameter SHORT_CHIRP_SAMPLES = 50; // 0.5µs @ 100MHz
parameter OVERLAP_SAMPLES = 128; // Standard for 1024-pt FFT
parameter SEGMENT_ADVANCE = BUFFER_SIZE - OVERLAP_SAMPLES; // 896 samples
parameter DEBUG = 1; // Debug output control
// Calculate segments needed with overlap
// For 3072 samples with 128 overlap:
// Segments = ceil((3072 - 128) / 896) = ceil(2944/896) = 4
parameter LONG_SEGMENTS = 4; // Now exactly 4 segments!
parameter SHORT_SEGMENTS = 1; // 50 samples padded to 1024
// ========== FIXED INTERNAL SIGNALS ==========
reg signed [31:0] pc_i, pc_q;
reg pc_valid;
// Dual buffer for overlap-save
reg signed [15:0] input_buffer_i [0:BUFFER_SIZE-1];
reg signed [15:0] input_buffer_q [0:BUFFER_SIZE-1];
reg [10:0] buffer_write_ptr;
reg [10:0] buffer_read_ptr;
reg buffer_has_data;
reg buffer_processing;
reg [15:0] chirp_samples_collected;
// State machine
reg [3:0] state;
localparam ST_IDLE = 0;
localparam ST_COLLECT_DATA = 1;
localparam ST_ZERO_PAD = 2;
localparam ST_WAIT_REF = 3;
localparam ST_PROCESSING = 4;
localparam ST_WAIT_FFT = 5;
localparam ST_OUTPUT = 6;
localparam ST_NEXT_SEGMENT = 7;
// Segment tracking
reg [2:0] current_segment; // 0-3
reg [2:0] total_segments;
reg segment_done;
reg chirp_complete;
// Microcontroller sync detection
reg mc_new_chirp_prev, mc_new_elevation_prev, mc_new_azimuth_prev;
wire chirp_start_pulse = mc_new_chirp && !mc_new_chirp_prev;
wire elevation_change_pulse = mc_new_elevation && !mc_new_elevation_prev;
wire azimuth_change_pulse = mc_new_azimuth && !mc_new_azimuth_prev;
// Processing chain signals
wire [15:0] fft_pc_i, fft_pc_q;
wire fft_pc_valid;
wire [3:0] fft_chain_state;
// Buffer for FFT input
reg [15:0] fft_input_i, fft_input_q;
reg fft_input_valid;
reg fft_start;
// ========== SAMPLE ADDRESS OUTPUT ==========
assign sample_addr_out = buffer_read_ptr;
// ========== MICROCONTROLLER SYNC ==========
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
mc_new_chirp_prev <= 1'b0;
mc_new_elevation_prev <= 1'b0;
mc_new_azimuth_prev <= 1'b0;
end else begin
mc_new_chirp_prev <= mc_new_chirp;
mc_new_elevation_prev <= mc_new_elevation;
mc_new_azimuth_prev <= mc_new_azimuth;
end
end
// ========== BUFFER INITIALIZATION ==========
integer buf_init;
initial begin
for (buf_init = 0; buf_init < BUFFER_SIZE; buf_init = buf_init + 1) begin
input_buffer_i[buf_init] = 16'd0;
input_buffer_q[buf_init] = 16'd0;
end
end
// ========== FIXED STATE MACHINE WITH OVERLAP-SAVE ==========
integer i;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
state <= ST_IDLE;
buffer_write_ptr <= 0;
buffer_read_ptr <= 0;
buffer_has_data <= 0;
buffer_processing <= 0;
current_segment <= 0;
segment_done <= 0;
segment_request <= 0;
mem_request <= 0;
pc_valid <= 0;
status <= 0;
chirp_samples_collected <= 0;
chirp_complete <= 0;
fft_input_valid <= 0;
fft_start <= 0;
end else begin
pc_valid <= 0;
mem_request <= 0;
fft_input_valid <= 0;
case (state)
ST_IDLE: begin
// Reset for new chirp
buffer_write_ptr <= 0;
buffer_read_ptr <= 0;
buffer_has_data <= 0;
buffer_processing <= 0;
current_segment <= 0;
segment_done <= 0;
chirp_samples_collected <= 0;
chirp_complete <= 0;
// Wait for chirp start from microcontroller
if (chirp_start_pulse) begin
state <= ST_COLLECT_DATA;
total_segments <= use_long_chirp ? LONG_SEGMENTS[2:0] : SHORT_SEGMENTS[2:0];
$display("[MULTI_SEG_FIXED] Starting %s chirp, segments: %d",
use_long_chirp ? "LONG" : "SHORT",
use_long_chirp ? LONG_SEGMENTS : SHORT_SEGMENTS);
$display("[MULTI_SEG_FIXED] Overlap: %d samples, Advance: %d samples",
OVERLAP_SAMPLES, SEGMENT_ADVANCE);
end
end
ST_COLLECT_DATA: begin
// Collect samples for current segment with overlap-save
if (ddc_valid) begin
// Store in buffer
input_buffer_i[buffer_write_ptr] <= ddc_i[17:2] + ddc_i[1];
input_buffer_q[buffer_write_ptr] <= ddc_q[17:2] + ddc_q[1];
buffer_write_ptr <= buffer_write_ptr + 1;
chirp_samples_collected <= chirp_samples_collected + 1;
// Debug: Show first few samples
if (chirp_samples_collected < 10 && buffer_write_ptr < 10) begin
$display("[MULTI_SEG_FIXED] Store[%0d]: I=%h Q=%h",
buffer_write_ptr,
ddc_i[17:2] + ddc_i[1],
ddc_q[17:2] + ddc_q[1]);
end
// Check conditions based on chirp type
if (use_long_chirp) begin
// LONG CHIRP: Process when we have SEGMENT_ADVANCE new samples
// (buffer contains overlap from previous segment + new data)
// Check if we have enough NEW data to process
if (buffer_write_ptr >= SEGMENT_ADVANCE) begin
buffer_has_data <= 1;
state <= ST_WAIT_REF;
segment_request <= current_segment[1:0]; // Use lower 2 bits
mem_request <= 1;
$display("[MULTI_SEG_FIXED] Segment %d ready: %d samples collected",
current_segment, chirp_samples_collected);
end
// Check if end of chirp reached
if (chirp_samples_collected >= LONG_CHIRP_SAMPLES - 1) begin
chirp_complete <= 1;
$display("[MULTI_SEG_FIXED] End of long chirp reached");
end
end else begin
// SHORT CHIRP: Only 50 samples, then zero-pad
if (chirp_samples_collected >= SHORT_CHIRP_SAMPLES - 1) begin
state <= ST_ZERO_PAD;
$display("[MULTI_SEG_FIXED] Short chirp: collected %d samples, starting zero-pad",
chirp_samples_collected + 1);
end
end
end
end
ST_ZERO_PAD: begin
// For short chirp: zero-pad remaining buffer
input_buffer_i[buffer_write_ptr] <= 16'd0;
input_buffer_q[buffer_write_ptr] <= 16'd0;
buffer_write_ptr <= buffer_write_ptr + 1;
if (buffer_write_ptr >= BUFFER_SIZE - 1) begin
// Done zero-padding
buffer_has_data <= 1;
buffer_write_ptr <= 0;
state <= ST_WAIT_REF;
segment_request <= 0; // Only one segment for short chirp
mem_request <= 1;
$display("[MULTI_SEG_FIXED] Zero-pad complete, buffer full");
end
end
ST_WAIT_REF: begin
// Wait for memory to provide reference coefficients
if (mem_ready) begin
// Start processing
buffer_processing <= 1;
buffer_read_ptr <= 0;
fft_start <= 1;
state <= ST_PROCESSING;
$display("[MULTI_SEG_FIXED] Reference ready, starting processing segment %d",
current_segment);
end
end
ST_PROCESSING: begin
// Feed data to FFT chain
if ((buffer_processing) && (buffer_read_ptr < BUFFER_SIZE)) begin
// 1. Feed ADC data to FFT
fft_input_i <= input_buffer_i[buffer_read_ptr];
fft_input_q <= input_buffer_q[buffer_read_ptr];
fft_input_valid <= 1;
// 2. Request corresponding reference sample
mem_request <= 1'b1;
// Debug every 100 samples
if (buffer_read_ptr % 100 == 0) begin
$display("[MULTI_SEG_FIXED] Processing[%0d]: ADC I=%h Q=%h",
buffer_read_ptr,
input_buffer_i[buffer_read_ptr],
input_buffer_q[buffer_read_ptr]);
end
buffer_read_ptr <= buffer_read_ptr + 1;
end else if (buffer_read_ptr >= BUFFER_SIZE) begin
// Done feeding buffer
fft_input_valid <= 0;
mem_request <= 0;
buffer_processing <= 0;
buffer_has_data <= 0;
state <= ST_WAIT_FFT; // CRITICAL: Wait for FFT completion
$display("[MULTI_SEG_FIXED] Finished feeding %d samples to FFT, waiting...",
BUFFER_SIZE);
end
end
ST_WAIT_FFT: begin
// Wait for the processing chain to complete (2159 cycles latency)
if (fft_pc_valid) begin
state <= ST_OUTPUT;
$display("[MULTI_SEG_FIXED] FFT processing complete for segment %d",
current_segment);
end
end
ST_OUTPUT: begin
// Store FFT output
pc_i <= fft_pc_i;
pc_q <= fft_pc_q;
pc_valid <= 1;
segment_done <= 1;
$display("[MULTI_SEG_FIXED] Output segment %d: I=%h Q=%h",
current_segment, fft_pc_i, fft_pc_q);
// Check if we need more segments
if (current_segment < total_segments - 1 || !chirp_complete) begin
state <= ST_NEXT_SEGMENT;
end else begin
// All segments complete
state <= ST_IDLE;
$display("[MULTI_SEG_FIXED] All %d segments complete",
total_segments);
end
end
ST_NEXT_SEGMENT: begin
// Prepare for next segment with OVERLAP-SAVE
current_segment <= current_segment + 1;
segment_done <= 0;
if (use_long_chirp) begin
// OVERLAP-SAVE: Keep last OVERLAP_SAMPLES for next segment
// Shift data in buffer to preserve overlap
for (i = 0; i < OVERLAP_SAMPLES; i = i + 1) begin
input_buffer_i[i] <= input_buffer_i[i + SEGMENT_ADVANCE];
input_buffer_q[i] <= input_buffer_q[i + SEGMENT_ADVANCE];
end
// Start writing after the overlap
buffer_write_ptr <= OVERLAP_SAMPLES;
$display("[MULTI_SEG_FIXED] Overlap-save: kept %d samples, write_ptr=%d",
OVERLAP_SAMPLES, OVERLAP_SAMPLES);
end else begin
// Short chirp: only one segment
buffer_write_ptr <= 0;
end
// Continue collecting or finish
if (!chirp_complete) begin
state <= ST_COLLECT_DATA;
$display("[MULTI_SEG_FIXED] Starting segment %d/%d",
current_segment + 1, total_segments);
end else begin
state <= ST_IDLE;
end
end
endcase
// Update status
status <= {state[2:0], use_long_chirp};
end
end
// ========== PROCESSING CHAIN INSTANTIATION ==========
matched_filter_processing_chain m_f_p_c(
.clk(clk),
.reset_n(reset_n),
// Input ADC Data
.adc_data_i(fft_input_i),
.adc_data_q(fft_input_q),
.adc_valid(fft_input_valid),// && buffer_processing),
// Chirp Selection
.chirp_counter(chirp_counter),
// Reference Chirp Memory Interfaces
.long_chirp_real(long_chirp_real),
.long_chirp_imag(long_chirp_imag),
.short_chirp_real(short_chirp_real),
.short_chirp_imag(short_chirp_imag),
// Output
.range_profile_i(fft_pc_i),
.range_profile_q(fft_pc_q),
.range_profile_valid(fft_pc_valid),
// Status
.chain_state(fft_chain_state)
);
// ========== DEBUG MONITOR ==========
reg [31:0] dbg_cycles;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
dbg_cycles <= 0;
end else begin
dbg_cycles <= dbg_cycles + 1;
// Monitor state transitions
if (dbg_cycles % 1000 == 0 && state != ST_IDLE) begin
$display("[MULTI_SEG_MONITOR @%0d] state=%0d, segment=%0d/%0d, samples=%0d",
dbg_cycles, state, current_segment, total_segments,
chirp_samples_collected);
end
end
end
// ========== OUTPUT CONNECTIONS ==========
assign pc_i_w = fft_pc_i;
assign pc_q_w = fft_pc_q;
assign pc_valid_w = fft_pc_valid;
endmodule
+117
View File
@@ -0,0 +1,117 @@
`timescale 1ns / 1ps
module nco_400m_enhanced (
input wire clk_400m,
input wire reset_n,
input wire [31:0] frequency_tuning_word,
input wire phase_valid,
input wire [15:0] phase_offset,
output reg signed [15:0] sin_out,
output reg signed [15:0] cos_out,
output reg dds_ready
);
// Phase accumulator with registered outputs for better timing
reg [31:0] phase_accumulator;
reg [31:0] phase_accumulator_reg;
reg [31:0] phase_with_offset;
reg phase_valid_delayed;
// Use only the top 8 bits for LUT addressing (256-entry LUT equivalent)
wire [7:0] lut_address = phase_with_offset[31:24];
// Quarter-wave sine LUT (0-90 degrees only)
reg [15:0] sin_lut [0:63]; // 64 entries for 0-90 degrees
// Initialize sine LUT
integer lut_init_i;
initial begin
for (lut_init_i = 0; lut_init_i < 64; lut_init_i = lut_init_i + 1) begin
sin_lut[lut_init_i] = 16'h0000;
end
// Initialize quarter-wave sine LUT (0-90 degrees)
sin_lut[0] = 16'h0000; sin_lut[1] = 16'h0324; sin_lut[2] = 16'h0647; sin_lut[3] = 16'h096A;
sin_lut[4] = 16'h0C8B; sin_lut[5] = 16'h0FA9; sin_lut[6] = 16'h12C4; sin_lut[7] = 16'h15DB;
sin_lut[8] = 16'h18EC; sin_lut[9] = 16'h1BF8; sin_lut[10] = 16'h1EFC; sin_lut[11] = 16'h21F8;
sin_lut[12] = 16'h24EB; sin_lut[13] = 16'h27D4; sin_lut[14] = 16'h2AB1; sin_lut[15] = 16'h2D82;
sin_lut[16] = 16'h3045; sin_lut[17] = 16'h32F9; sin_lut[18] = 16'h359D; sin_lut[19] = 16'h3830;
sin_lut[20] = 16'h3AB1; sin_lut[21] = 16'h3D1E; sin_lut[22] = 16'h3F76; sin_lut[23] = 16'h41B8;
sin_lut[24] = 16'h43E3; sin_lut[25] = 16'h45F5; sin_lut[26] = 16'h47EE; sin_lut[27] = 16'h49CD;
sin_lut[28] = 16'h4B90; sin_lut[29] = 16'h4D37; sin_lut[30] = 16'h4EC1; sin_lut[31] = 16'h502D;
sin_lut[32] = 16'h517A; sin_lut[33] = 16'h52A8; sin_lut[34] = 16'h53B6; sin_lut[35] = 16'h54A4;
sin_lut[36] = 16'h5572; sin_lut[37] = 16'h561F; sin_lut[38] = 16'h56AA; sin_lut[39] = 16'h5715;
sin_lut[40] = 16'h575E; sin_lut[41] = 16'h5785; sin_lut[42] = 16'h578B; sin_lut[43] = 16'h576E;
sin_lut[44] = 16'h5730; sin_lut[45] = 16'h56D0; sin_lut[46] = 16'h564E; sin_lut[47] = 16'h55AB;
sin_lut[48] = 16'h54E7; sin_lut[49] = 16'h5403; sin_lut[50] = 16'h52FE; sin_lut[51] = 16'h51DA;
sin_lut[52] = 16'h5096; sin_lut[53] = 16'h4F34; sin_lut[54] = 16'h4DB4; sin_lut[55] = 16'h4C17;
sin_lut[56] = 16'h4A5E; sin_lut[57] = 16'h4889; sin_lut[58] = 16'h4699; sin_lut[59] = 16'h448F;
sin_lut[60] = 16'h426B; sin_lut[61] = 16'h402F; sin_lut[62] = 16'h3DDB; sin_lut[63] = 16'h3B71;
end
// Quadrant determination
wire [1:0] quadrant = lut_address[7:6]; // 00: Q1, 01: Q2, 10: Q3, 11: Q4
wire [5:0] lut_index = (quadrant[1] ? ~lut_address[5:0] : lut_address[5:0]); // Mirror for Q2/Q3
// Sine and cosine calculation with quadrant mapping
wire [15:0] sin_abs = sin_lut[lut_index];
wire [15:0] cos_abs = sin_lut[63 - lut_index]; // Cosine is phase-shifted sine
// Pipeline stage for better timing
always @(posedge clk_400m or negedge reset_n) begin
if (!reset_n) begin
phase_accumulator <= 32'h00000000;
phase_accumulator_reg <= 32'h00000000;
phase_with_offset <= 32'h00000000;
phase_valid_delayed <= 1'b0;
dds_ready <= 1'b0;
sin_out <= 16'h0000;
cos_out <= 16'h7FFF;
end else begin
phase_valid_delayed <= phase_valid;
if (phase_valid) begin
// Update phase accumulator with dithered frequency tuning word
phase_accumulator <= phase_accumulator + frequency_tuning_word;
phase_accumulator_reg <= phase_accumulator;
// Apply phase offset
phase_with_offset <= phase_accumulator + {phase_offset, 16'b0};
dds_ready <= 1'b1;
end else begin
dds_ready <= 1'b0;
end
// Generate outputs with one cycle delay for pipelining
if (phase_valid_delayed) begin
// Calculate sine and cosine with proper quadrant signs
case (quadrant)
2'b00: begin // Quadrant I: sin+, cos+
sin_out <= sin_abs;
cos_out <= cos_abs;
end
2'b01: begin // Quadrant II: sin+, cos-
sin_out <= sin_abs;
cos_out <= -cos_abs;
end
2'b10: begin // Quadrant III: sin-, cos-
sin_out <= -sin_abs;
cos_out <= -cos_abs;
end
2'b11: begin // Quadrant IV: sin-, cos+
sin_out <= -sin_abs;
cos_out <= cos_abs;
end
endcase
end
end
end
// Add this to ensure LUT is properly loaded:
initial begin
// Wait a small amount of time for LUT initialization
#10;
$display("NCO: Sine LUT initialized with %0d entries", 64);
end
endmodule
+801
View File
@@ -0,0 +1,801 @@
`timescale 1ns / 1ps
module plfm_chirp_controller_enhanced (
input wire clk_120m,
input wire clk_100m,
input wire reset_n,
input wire new_chirp,
input wire new_elevation,
input wire new_azimuth,
input wire mixers_enable,
output reg [7:0] chirp_data,
output reg chirp_valid,
output wire new_chirp_frame,
output reg chirp_done,
output reg rf_switch_ctrl,
output wire rx_mixer_en,
output wire tx_mixer_en,
output wire adar_tx_load_1,
output wire adar_rx_load_1,
output wire adar_tx_load_2,
output wire adar_rx_load_2,
output wire adar_tx_load_3,
output wire adar_rx_load_3,
output wire adar_tx_load_4,
output wire adar_rx_load_4,
output reg adar_tr_1,
output reg adar_tr_2,
output reg adar_tr_3,
output reg adar_tr_4,
output reg [5:0] chirp_counter,
output reg [5:0] elevation_counter,
output reg [5:0] azimuth_counter
);
// Chirp parameters
parameter F_START = 30000000; // 30 MHz (starting frequency)
parameter F_END = 10000000; // 10 MHz (ending frequency)
parameter FS = 120000000; // 120 MHz
// Timing parameters
parameter T1_SAMPLES = 3600; // 30us at 120MHz
parameter T1_RADAR_LISTENING = 16440; //137us at 120MHz
parameter T2_SAMPLES = 60; // 0.5us at 120MHz
parameter T2_RADAR_LISTENING = 20940; //174.5us at 120MHz
parameter GUARD_SAMPLES = 21048; // 175.4us at 120MHz
// Chirp and beam parameters
parameter CHIRP_MAX = 32;
parameter ELEVATION_MAX = 31;
parameter AZIMUTH_MAX = 50;
// State parameters
parameter IDLE = 3'b000;
parameter LONG_CHIRP = 3'b001;
parameter LONG_LISTEN = 3'b010;
parameter GUARD_TIME = 3'b011;
parameter SHORT_CHIRP = 3'b100;
parameter SHORT_LISTEN = 3'b101;
parameter DONE = 3'b110;
reg [2:0] current_state;
reg [2:0] next_state;
// Control registers
reg [15:0] sample_counter;
// Edge detection for input signals
wire chirp__toggling, elevation__toggling, azimuth__toggling;
// LUTs for chirp waveforms
reg [7:0] long_chirp_lut [0:3599]; // T1_SAMPLES-1
reg [7:0] short_chirp_lut [0:59]; // T2_SAMPLES-1
// Edge detection
assign chirp__toggling = new_chirp;
assign elevation__toggling = new_elevation;
assign azimuth__toggling = new_azimuth;
assign new_chirp_frame = (current_state == IDLE && next_state == LONG_CHIRP);
// Mixers Enabling
assign rx_mixer_en = mixers_enable;
assign tx_mixer_en = mixers_enable;
// ADTR1000 pull to ground tx and rx load pins if not used
assign adar_tx_load_1 = 1'b0;
assign adar_rx_load_1 = 1'b0;
assign adar_tx_load_2 = 1'b0;
assign adar_rx_load_2 = 1'b0;
assign adar_tx_load_3 = 1'b0;
assign adar_rx_load_3 = 1'b0;
assign adar_tx_load_4 = 1'b0;
assign adar_rx_load_4 = 1'b0;
// LUT Initialization - Complete short chirp LUT
// Long PLFM chirp LUT (30us, 30MHz to 10MHz)
initial begin
long_chirp_lut[ 0] = 8'd255; long_chirp_lut[ 1] = 8'd237; long_chirp_lut[ 2] = 8'd191; long_chirp_lut[ 3] = 8'd127; long_chirp_lut[ 4] = 8'd 64; long_chirp_lut[ 5] = 8'd 17; long_chirp_lut[ 6] = 8'd 1; long_chirp_lut[ 7] = 8'd 18;
long_chirp_lut[ 8] = 8'd 65; long_chirp_lut[ 9] = 8'd129; long_chirp_lut[ 10] = 8'd193; long_chirp_lut[ 11] = 8'd239; long_chirp_lut[ 12] = 8'd254; long_chirp_lut[ 13] = 8'd236; long_chirp_lut[ 14] = 8'd188; long_chirp_lut[ 15] = 8'd123;
long_chirp_lut[ 16] = 8'd 60; long_chirp_lut[ 17] = 8'd 15; long_chirp_lut[ 18] = 8'd 1; long_chirp_lut[ 19] = 8'd 21; long_chirp_lut[ 20] = 8'd 71; long_chirp_lut[ 21] = 8'd136; long_chirp_lut[ 22] = 8'd199; long_chirp_lut[ 23] = 8'd242;
long_chirp_lut[ 24] = 8'd254; long_chirp_lut[ 25] = 8'd231; long_chirp_lut[ 26] = 8'd180; long_chirp_lut[ 27] = 8'd114; long_chirp_lut[ 28] = 8'd 52; long_chirp_lut[ 29] = 8'd 11; long_chirp_lut[ 30] = 8'd 2; long_chirp_lut[ 31] = 8'd 27;
long_chirp_lut[ 32] = 8'd 81; long_chirp_lut[ 33] = 8'd148; long_chirp_lut[ 34] = 8'd209; long_chirp_lut[ 35] = 8'd247; long_chirp_lut[ 36] = 8'd252; long_chirp_lut[ 37] = 8'd223; long_chirp_lut[ 38] = 8'd167; long_chirp_lut[ 39] = 8'd100;
long_chirp_lut[ 40] = 8'd 40; long_chirp_lut[ 41] = 8'd 5; long_chirp_lut[ 42] = 8'd 5; long_chirp_lut[ 43] = 8'd 38; long_chirp_lut[ 44] = 8'd 97; long_chirp_lut[ 45] = 8'd164; long_chirp_lut[ 46] = 8'd221; long_chirp_lut[ 47] = 8'd252;
long_chirp_lut[ 48] = 8'd247; long_chirp_lut[ 49] = 8'd209; long_chirp_lut[ 50] = 8'd148; long_chirp_lut[ 51] = 8'd 81; long_chirp_lut[ 52] = 8'd 27; long_chirp_lut[ 53] = 8'd 1; long_chirp_lut[ 54] = 8'd 12; long_chirp_lut[ 55] = 8'd 55;
long_chirp_lut[ 56] = 8'd119; long_chirp_lut[ 57] = 8'd185; long_chirp_lut[ 58] = 8'd235; long_chirp_lut[ 59] = 8'd254; long_chirp_lut[ 60] = 8'd237; long_chirp_lut[ 61] = 8'd189; long_chirp_lut[ 62] = 8'd123; long_chirp_lut[ 63] = 8'd 58;
long_chirp_lut[ 64] = 8'd 13; long_chirp_lut[ 65] = 8'd 1; long_chirp_lut[ 66] = 8'd 25; long_chirp_lut[ 67] = 8'd 79; long_chirp_lut[ 68] = 8'd146; long_chirp_lut[ 69] = 8'd209; long_chirp_lut[ 70] = 8'd247; long_chirp_lut[ 71] = 8'd252;
long_chirp_lut[ 72] = 8'd220; long_chirp_lut[ 73] = 8'd162; long_chirp_lut[ 74] = 8'd 93; long_chirp_lut[ 75] = 8'd 35; long_chirp_lut[ 76] = 8'd 3; long_chirp_lut[ 77] = 8'd 8; long_chirp_lut[ 78] = 8'd 47; long_chirp_lut[ 79] = 8'd110;
long_chirp_lut[ 80] = 8'd178; long_chirp_lut[ 81] = 8'd231; long_chirp_lut[ 82] = 8'd254; long_chirp_lut[ 83] = 8'd240; long_chirp_lut[ 84] = 8'd193; long_chirp_lut[ 85] = 8'd127; long_chirp_lut[ 86] = 8'd 61; long_chirp_lut[ 87] = 8'd 14;
long_chirp_lut[ 88] = 8'd 1; long_chirp_lut[ 89] = 8'd 25; long_chirp_lut[ 90] = 8'd 79; long_chirp_lut[ 91] = 8'd147; long_chirp_lut[ 92] = 8'd210; long_chirp_lut[ 93] = 8'd248; long_chirp_lut[ 94] = 8'd251; long_chirp_lut[ 95] = 8'd217;
long_chirp_lut[ 96] = 8'd157; long_chirp_lut[ 97] = 8'd 87; long_chirp_lut[ 98] = 8'd 30; long_chirp_lut[ 99] = 8'd 2; long_chirp_lut[ 100] = 8'd 11; long_chirp_lut[ 101] = 8'd 55; long_chirp_lut[ 102] = 8'd120; long_chirp_lut[ 103] = 8'd188;
long_chirp_lut[ 104] = 8'd238; long_chirp_lut[ 105] = 8'd254; long_chirp_lut[ 106] = 8'd233; long_chirp_lut[ 107] = 8'd180; long_chirp_lut[ 108] = 8'd112; long_chirp_lut[ 109] = 8'd 48; long_chirp_lut[ 110] = 8'd 8; long_chirp_lut[ 111] = 8'd 4;
long_chirp_lut[ 112] = 8'd 37; long_chirp_lut[ 113] = 8'd 98; long_chirp_lut[ 114] = 8'd167; long_chirp_lut[ 115] = 8'd225; long_chirp_lut[ 116] = 8'd253; long_chirp_lut[ 117] = 8'd243; long_chirp_lut[ 118] = 8'd198; long_chirp_lut[ 119] = 8'd132;
long_chirp_lut[ 120] = 8'd 64; long_chirp_lut[ 121] = 8'd 15; long_chirp_lut[ 122] = 8'd 1; long_chirp_lut[ 123] = 8'd 25; long_chirp_lut[ 124] = 8'd 80; long_chirp_lut[ 125] = 8'd150; long_chirp_lut[ 126] = 8'd213; long_chirp_lut[ 127] = 8'd250;
long_chirp_lut[ 128] = 8'd249; long_chirp_lut[ 129] = 8'd211; long_chirp_lut[ 130] = 8'd148; long_chirp_lut[ 131] = 8'd 78; long_chirp_lut[ 132] = 8'd 23; long_chirp_lut[ 133] = 8'd 1; long_chirp_lut[ 134] = 8'd 17; long_chirp_lut[ 135] = 8'd 68;
long_chirp_lut[ 136] = 8'd137; long_chirp_lut[ 137] = 8'd203; long_chirp_lut[ 138] = 8'd246; long_chirp_lut[ 139] = 8'd252; long_chirp_lut[ 140] = 8'd220; long_chirp_lut[ 141] = 8'd159; long_chirp_lut[ 142] = 8'd 88; long_chirp_lut[ 143] = 8'd 30;
long_chirp_lut[ 144] = 8'd 2; long_chirp_lut[ 145] = 8'd 13; long_chirp_lut[ 146] = 8'd 60; long_chirp_lut[ 147] = 8'd128; long_chirp_lut[ 148] = 8'd196; long_chirp_lut[ 149] = 8'd243; long_chirp_lut[ 150] = 8'd253; long_chirp_lut[ 151] = 8'd225;
long_chirp_lut[ 152] = 8'd166; long_chirp_lut[ 153] = 8'd 94; long_chirp_lut[ 154] = 8'd 34; long_chirp_lut[ 155] = 8'd 2; long_chirp_lut[ 156] = 8'd 10; long_chirp_lut[ 157] = 8'd 55; long_chirp_lut[ 158] = 8'd123; long_chirp_lut[ 159] = 8'd192;
long_chirp_lut[ 160] = 8'd241; long_chirp_lut[ 161] = 8'd254; long_chirp_lut[ 162] = 8'd227; long_chirp_lut[ 163] = 8'd168; long_chirp_lut[ 164] = 8'd 96; long_chirp_lut[ 165] = 8'd 35; long_chirp_lut[ 166] = 8'd 3; long_chirp_lut[ 167] = 8'd 10;
long_chirp_lut[ 168] = 8'd 55; long_chirp_lut[ 169] = 8'd123; long_chirp_lut[ 170] = 8'd193; long_chirp_lut[ 171] = 8'd241; long_chirp_lut[ 172] = 8'd254; long_chirp_lut[ 173] = 8'd226; long_chirp_lut[ 174] = 8'd166; long_chirp_lut[ 175] = 8'd 94;
long_chirp_lut[ 176] = 8'd 33; long_chirp_lut[ 177] = 8'd 2; long_chirp_lut[ 178] = 8'd 12; long_chirp_lut[ 179] = 8'd 58; long_chirp_lut[ 180] = 8'd128; long_chirp_lut[ 181] = 8'd197; long_chirp_lut[ 182] = 8'd244; long_chirp_lut[ 183] = 8'd253;
long_chirp_lut[ 184] = 8'd222; long_chirp_lut[ 185] = 8'd160; long_chirp_lut[ 186] = 8'd 88; long_chirp_lut[ 187] = 8'd 28; long_chirp_lut[ 188] = 8'd 1; long_chirp_lut[ 189] = 8'd 15; long_chirp_lut[ 190] = 8'd 66; long_chirp_lut[ 191] = 8'd136;
long_chirp_lut[ 192] = 8'd204; long_chirp_lut[ 193] = 8'd247; long_chirp_lut[ 194] = 8'd251; long_chirp_lut[ 195] = 8'd214; long_chirp_lut[ 196] = 8'd149; long_chirp_lut[ 197] = 8'd 77; long_chirp_lut[ 198] = 8'd 21; long_chirp_lut[ 199] = 8'd 1;
long_chirp_lut[ 200] = 8'd 21; long_chirp_lut[ 201] = 8'd 77; long_chirp_lut[ 202] = 8'd150; long_chirp_lut[ 203] = 8'd215; long_chirp_lut[ 204] = 8'd251; long_chirp_lut[ 205] = 8'd247; long_chirp_lut[ 206] = 8'd203; long_chirp_lut[ 207] = 8'd134;
long_chirp_lut[ 208] = 8'd 63; long_chirp_lut[ 209] = 8'd 13; long_chirp_lut[ 210] = 8'd 2; long_chirp_lut[ 211] = 8'd 32; long_chirp_lut[ 212] = 8'd 94; long_chirp_lut[ 213] = 8'd167; long_chirp_lut[ 214] = 8'd227; long_chirp_lut[ 215] = 8'd254;
long_chirp_lut[ 216] = 8'd239; long_chirp_lut[ 217] = 8'd186; long_chirp_lut[ 218] = 8'd114; long_chirp_lut[ 219] = 8'd 46; long_chirp_lut[ 220] = 8'd 6; long_chirp_lut[ 221] = 8'd 6; long_chirp_lut[ 222] = 8'd 47; long_chirp_lut[ 223] = 8'd115;
long_chirp_lut[ 224] = 8'd187; long_chirp_lut[ 225] = 8'd240; long_chirp_lut[ 226] = 8'd254; long_chirp_lut[ 227] = 8'd226; long_chirp_lut[ 228] = 8'd164; long_chirp_lut[ 229] = 8'd 90; long_chirp_lut[ 230] = 8'd 29; long_chirp_lut[ 231] = 8'd 1;
long_chirp_lut[ 232] = 8'd 16; long_chirp_lut[ 233] = 8'd 69; long_chirp_lut[ 234] = 8'd141; long_chirp_lut[ 235] = 8'd209; long_chirp_lut[ 236] = 8'd250; long_chirp_lut[ 237] = 8'd248; long_chirp_lut[ 238] = 8'd206; long_chirp_lut[ 239] = 8'd136;
long_chirp_lut[ 240] = 8'd 64; long_chirp_lut[ 241] = 8'd 13; long_chirp_lut[ 242] = 8'd 2; long_chirp_lut[ 243] = 8'd 33; long_chirp_lut[ 244] = 8'd 97; long_chirp_lut[ 245] = 8'd171; long_chirp_lut[ 246] = 8'd231; long_chirp_lut[ 247] = 8'd254;
long_chirp_lut[ 248] = 8'd235; long_chirp_lut[ 249] = 8'd178; long_chirp_lut[ 250] = 8'd104; long_chirp_lut[ 251] = 8'd 38; long_chirp_lut[ 252] = 8'd 3; long_chirp_lut[ 253] = 8'd 11; long_chirp_lut[ 254] = 8'd 60; long_chirp_lut[ 255] = 8'd132;
long_chirp_lut[ 256] = 8'd202; long_chirp_lut[ 257] = 8'd247; long_chirp_lut[ 258] = 8'd250; long_chirp_lut[ 259] = 8'd211; long_chirp_lut[ 260] = 8'd142; long_chirp_lut[ 261] = 8'd 69; long_chirp_lut[ 262] = 8'd 15; long_chirp_lut[ 263] = 8'd 1;
long_chirp_lut[ 264] = 8'd 31; long_chirp_lut[ 265] = 8'd 95; long_chirp_lut[ 266] = 8'd170; long_chirp_lut[ 267] = 8'd230; long_chirp_lut[ 268] = 8'd254; long_chirp_lut[ 269] = 8'd234; long_chirp_lut[ 270] = 8'd176; long_chirp_lut[ 271] = 8'd101;
long_chirp_lut[ 272] = 8'd 35; long_chirp_lut[ 273] = 8'd 2; long_chirp_lut[ 274] = 8'd 13; long_chirp_lut[ 275] = 8'd 64; long_chirp_lut[ 276] = 8'd138; long_chirp_lut[ 277] = 8'd208; long_chirp_lut[ 278] = 8'd250; long_chirp_lut[ 279] = 8'd248;
long_chirp_lut[ 280] = 8'd203; long_chirp_lut[ 281] = 8'd132; long_chirp_lut[ 282] = 8'd 59; long_chirp_lut[ 283] = 8'd 10; long_chirp_lut[ 284] = 8'd 3; long_chirp_lut[ 285] = 8'd 41; long_chirp_lut[ 286] = 8'd109; long_chirp_lut[ 287] = 8'd184;
long_chirp_lut[ 288] = 8'd239; long_chirp_lut[ 289] = 8'd254; long_chirp_lut[ 290] = 8'd224; long_chirp_lut[ 291] = 8'd159; long_chirp_lut[ 292] = 8'd 83; long_chirp_lut[ 293] = 8'd 23; long_chirp_lut[ 294] = 8'd 1; long_chirp_lut[ 295] = 8'd 24;
long_chirp_lut[ 296] = 8'd 84; long_chirp_lut[ 297] = 8'd161; long_chirp_lut[ 298] = 8'd225; long_chirp_lut[ 299] = 8'd254; long_chirp_lut[ 300] = 8'd237; long_chirp_lut[ 301] = 8'd181; long_chirp_lut[ 302] = 8'd105; long_chirp_lut[ 303] = 8'd 38;
long_chirp_lut[ 304] = 8'd 2; long_chirp_lut[ 305] = 8'd 13; long_chirp_lut[ 306] = 8'd 65; long_chirp_lut[ 307] = 8'd139; long_chirp_lut[ 308] = 8'd210; long_chirp_lut[ 309] = 8'd251; long_chirp_lut[ 310] = 8'd246; long_chirp_lut[ 311] = 8'd199;
long_chirp_lut[ 312] = 8'd125; long_chirp_lut[ 313] = 8'd 52; long_chirp_lut[ 314] = 8'd 7; long_chirp_lut[ 315] = 8'd 6; long_chirp_lut[ 316] = 8'd 50; long_chirp_lut[ 317] = 8'd122; long_chirp_lut[ 318] = 8'd196; long_chirp_lut[ 319] = 8'd245;
long_chirp_lut[ 320] = 8'd251; long_chirp_lut[ 321] = 8'd211; long_chirp_lut[ 322] = 8'd141; long_chirp_lut[ 323] = 8'd 65; long_chirp_lut[ 324] = 8'd 13; long_chirp_lut[ 325] = 8'd 3; long_chirp_lut[ 326] = 8'd 39; long_chirp_lut[ 327] = 8'd108;
long_chirp_lut[ 328] = 8'd184; long_chirp_lut[ 329] = 8'd240; long_chirp_lut[ 330] = 8'd253; long_chirp_lut[ 331] = 8'd220; long_chirp_lut[ 332] = 8'd153; long_chirp_lut[ 333] = 8'd 76; long_chirp_lut[ 334] = 8'd 18; long_chirp_lut[ 335] = 8'd 1;
long_chirp_lut[ 336] = 8'd 31; long_chirp_lut[ 337] = 8'd 98; long_chirp_lut[ 338] = 8'd175; long_chirp_lut[ 339] = 8'd235; long_chirp_lut[ 340] = 8'd254; long_chirp_lut[ 341] = 8'd226; long_chirp_lut[ 342] = 8'd161; long_chirp_lut[ 343] = 8'd 83;
long_chirp_lut[ 344] = 8'd 22; long_chirp_lut[ 345] = 8'd 1; long_chirp_lut[ 346] = 8'd 27; long_chirp_lut[ 347] = 8'd 91; long_chirp_lut[ 348] = 8'd169; long_chirp_lut[ 349] = 8'd232; long_chirp_lut[ 350] = 8'd254; long_chirp_lut[ 351] = 8'd229;
long_chirp_lut[ 352] = 8'd166; long_chirp_lut[ 353] = 8'd 87; long_chirp_lut[ 354] = 8'd 24; long_chirp_lut[ 355] = 8'd 1; long_chirp_lut[ 356] = 8'd 25; long_chirp_lut[ 357] = 8'd 88; long_chirp_lut[ 358] = 8'd167; long_chirp_lut[ 359] = 8'd230;
long_chirp_lut[ 360] = 8'd255; long_chirp_lut[ 361] = 8'd230; long_chirp_lut[ 362] = 8'd167; long_chirp_lut[ 363] = 8'd 88; long_chirp_lut[ 364] = 8'd 25; long_chirp_lut[ 365] = 8'd 1; long_chirp_lut[ 366] = 8'd 25; long_chirp_lut[ 367] = 8'd 89;
long_chirp_lut[ 368] = 8'd168; long_chirp_lut[ 369] = 8'd231; long_chirp_lut[ 370] = 8'd254; long_chirp_lut[ 371] = 8'd229; long_chirp_lut[ 372] = 8'd164; long_chirp_lut[ 373] = 8'd 85; long_chirp_lut[ 374] = 8'd 23; long_chirp_lut[ 375] = 8'd 1;
long_chirp_lut[ 376] = 8'd 28; long_chirp_lut[ 377] = 8'd 93; long_chirp_lut[ 378] = 8'd172; long_chirp_lut[ 379] = 8'd234; long_chirp_lut[ 380] = 8'd254; long_chirp_lut[ 381] = 8'd225; long_chirp_lut[ 382] = 8'd158; long_chirp_lut[ 383] = 8'd 79;
long_chirp_lut[ 384] = 8'd 19; long_chirp_lut[ 385] = 8'd 1; long_chirp_lut[ 386] = 8'd 33; long_chirp_lut[ 387] = 8'd101; long_chirp_lut[ 388] = 8'd180; long_chirp_lut[ 389] = 8'd239; long_chirp_lut[ 390] = 8'd253; long_chirp_lut[ 391] = 8'd219;
long_chirp_lut[ 392] = 8'd148; long_chirp_lut[ 393] = 8'd 70; long_chirp_lut[ 394] = 8'd 14; long_chirp_lut[ 395] = 8'd 3; long_chirp_lut[ 396] = 8'd 41; long_chirp_lut[ 397] = 8'd113; long_chirp_lut[ 398] = 8'd191; long_chirp_lut[ 399] = 8'd244;
long_chirp_lut[ 400] = 8'd251; long_chirp_lut[ 401] = 8'd209; long_chirp_lut[ 402] = 8'd135; long_chirp_lut[ 403] = 8'd 58; long_chirp_lut[ 404] = 8'd 8; long_chirp_lut[ 405] = 8'd 6; long_chirp_lut[ 406] = 8'd 52; long_chirp_lut[ 407] = 8'd128;
long_chirp_lut[ 408] = 8'd204; long_chirp_lut[ 409] = 8'd250; long_chirp_lut[ 410] = 8'd246; long_chirp_lut[ 411] = 8'd195; long_chirp_lut[ 412] = 8'd117; long_chirp_lut[ 413] = 8'd 43; long_chirp_lut[ 414] = 8'd 3; long_chirp_lut[ 415] = 8'd 13;
long_chirp_lut[ 416] = 8'd 68; long_chirp_lut[ 417] = 8'd148; long_chirp_lut[ 418] = 8'd219; long_chirp_lut[ 419] = 8'd254; long_chirp_lut[ 420] = 8'd237; long_chirp_lut[ 421] = 8'd177; long_chirp_lut[ 422] = 8'd 97; long_chirp_lut[ 423] = 8'd 29;
long_chirp_lut[ 424] = 8'd 1; long_chirp_lut[ 425] = 8'd 24; long_chirp_lut[ 426] = 8'd 89; long_chirp_lut[ 427] = 8'd170; long_chirp_lut[ 428] = 8'd233; long_chirp_lut[ 429] = 8'd254; long_chirp_lut[ 430] = 8'd224; long_chirp_lut[ 431] = 8'd154;
long_chirp_lut[ 432] = 8'd 73; long_chirp_lut[ 433] = 8'd 15; long_chirp_lut[ 434] = 8'd 2; long_chirp_lut[ 435] = 8'd 41; long_chirp_lut[ 436] = 8'd115; long_chirp_lut[ 437] = 8'd194; long_chirp_lut[ 438] = 8'd246; long_chirp_lut[ 439] = 8'd250;
long_chirp_lut[ 440] = 8'd203; long_chirp_lut[ 441] = 8'd126; long_chirp_lut[ 442] = 8'd 49; long_chirp_lut[ 443] = 8'd 5; long_chirp_lut[ 444] = 8'd 10; long_chirp_lut[ 445] = 8'd 64; long_chirp_lut[ 446] = 8'd144; long_chirp_lut[ 447] = 8'd217;
long_chirp_lut[ 448] = 8'd253; long_chirp_lut[ 449] = 8'd237; long_chirp_lut[ 450] = 8'd176; long_chirp_lut[ 451] = 8'd 95; long_chirp_lut[ 452] = 8'd 27; long_chirp_lut[ 453] = 8'd 1; long_chirp_lut[ 454] = 8'd 27; long_chirp_lut[ 455] = 8'd 95;
long_chirp_lut[ 456] = 8'd177; long_chirp_lut[ 457] = 8'd238; long_chirp_lut[ 458] = 8'd253; long_chirp_lut[ 459] = 8'd216; long_chirp_lut[ 460] = 8'd142; long_chirp_lut[ 461] = 8'd 62; long_chirp_lut[ 462] = 8'd 9; long_chirp_lut[ 463] = 8'd 6;
long_chirp_lut[ 464] = 8'd 53; long_chirp_lut[ 465] = 8'd132; long_chirp_lut[ 466] = 8'd209; long_chirp_lut[ 467] = 8'd251; long_chirp_lut[ 468] = 8'd242; long_chirp_lut[ 469] = 8'd185; long_chirp_lut[ 470] = 8'd104; long_chirp_lut[ 471] = 8'd 32;
long_chirp_lut[ 472] = 8'd 1; long_chirp_lut[ 473] = 8'd 23; long_chirp_lut[ 474] = 8'd 89; long_chirp_lut[ 475] = 8'd171; long_chirp_lut[ 476] = 8'd235; long_chirp_lut[ 477] = 8'd254; long_chirp_lut[ 478] = 8'd219; long_chirp_lut[ 479] = 8'd145;
long_chirp_lut[ 480] = 8'd 64; long_chirp_lut[ 481] = 8'd 10; long_chirp_lut[ 482] = 8'd 5; long_chirp_lut[ 483] = 8'd 53; long_chirp_lut[ 484] = 8'd132; long_chirp_lut[ 485] = 8'd209; long_chirp_lut[ 486] = 8'd252; long_chirp_lut[ 487] = 8'd241;
long_chirp_lut[ 488] = 8'd182; long_chirp_lut[ 489] = 8'd100; long_chirp_lut[ 490] = 8'd 29; long_chirp_lut[ 491] = 8'd 1; long_chirp_lut[ 492] = 8'd 26; long_chirp_lut[ 493] = 8'd 96; long_chirp_lut[ 494] = 8'd178; long_chirp_lut[ 495] = 8'd240;
long_chirp_lut[ 496] = 8'd253; long_chirp_lut[ 497] = 8'd212; long_chirp_lut[ 498] = 8'd135; long_chirp_lut[ 499] = 8'd 55; long_chirp_lut[ 500] = 8'd 6; long_chirp_lut[ 501] = 8'd 9; long_chirp_lut[ 502] = 8'd 64; long_chirp_lut[ 503] = 8'd146;
long_chirp_lut[ 504] = 8'd220; long_chirp_lut[ 505] = 8'd254; long_chirp_lut[ 506] = 8'd233; long_chirp_lut[ 507] = 8'd167; long_chirp_lut[ 508] = 8'd 83; long_chirp_lut[ 509] = 8'd 19; long_chirp_lut[ 510] = 8'd 2; long_chirp_lut[ 511] = 8'd 39;
long_chirp_lut[ 512] = 8'd115; long_chirp_lut[ 513] = 8'd197; long_chirp_lut[ 514] = 8'd248; long_chirp_lut[ 515] = 8'd247; long_chirp_lut[ 516] = 8'd193; long_chirp_lut[ 517] = 8'd111; long_chirp_lut[ 518] = 8'd 36; long_chirp_lut[ 519] = 8'd 1;
long_chirp_lut[ 520] = 8'd 21; long_chirp_lut[ 521] = 8'd 88; long_chirp_lut[ 522] = 8'd172; long_chirp_lut[ 523] = 8'd237; long_chirp_lut[ 524] = 8'd253; long_chirp_lut[ 525] = 8'd214; long_chirp_lut[ 526] = 8'd137; long_chirp_lut[ 527] = 8'd 56;
long_chirp_lut[ 528] = 8'd 6; long_chirp_lut[ 529] = 8'd 10; long_chirp_lut[ 530] = 8'd 66; long_chirp_lut[ 531] = 8'd149; long_chirp_lut[ 532] = 8'd223; long_chirp_lut[ 533] = 8'd254; long_chirp_lut[ 534] = 8'd230; long_chirp_lut[ 535] = 8'd160;
long_chirp_lut[ 536] = 8'd 76; long_chirp_lut[ 537] = 8'd 14; long_chirp_lut[ 538] = 8'd 3; long_chirp_lut[ 539] = 8'd 48; long_chirp_lut[ 540] = 8'd127; long_chirp_lut[ 541] = 8'd207; long_chirp_lut[ 542] = 8'd252; long_chirp_lut[ 543] = 8'd241;
long_chirp_lut[ 544] = 8'd179; long_chirp_lut[ 545] = 8'd 94; long_chirp_lut[ 546] = 8'd 24; long_chirp_lut[ 547] = 8'd 1; long_chirp_lut[ 548] = 8'd 34; long_chirp_lut[ 549] = 8'd109; long_chirp_lut[ 550] = 8'd193; long_chirp_lut[ 551] = 8'd247;
long_chirp_lut[ 552] = 8'd247; long_chirp_lut[ 553] = 8'd194; long_chirp_lut[ 554] = 8'd111; long_chirp_lut[ 555] = 8'd 35; long_chirp_lut[ 556] = 8'd 1; long_chirp_lut[ 557] = 8'd 24; long_chirp_lut[ 558] = 8'd 94; long_chirp_lut[ 559] = 8'd179;
long_chirp_lut[ 560] = 8'd241; long_chirp_lut[ 561] = 8'd251; long_chirp_lut[ 562] = 8'd206; long_chirp_lut[ 563] = 8'd124; long_chirp_lut[ 564] = 8'd 45; long_chirp_lut[ 565] = 8'd 2; long_chirp_lut[ 566] = 8'd 17; long_chirp_lut[ 567] = 8'd 82;
long_chirp_lut[ 568] = 8'd168; long_chirp_lut[ 569] = 8'd235; long_chirp_lut[ 570] = 8'd253; long_chirp_lut[ 571] = 8'd214; long_chirp_lut[ 572] = 8'd135; long_chirp_lut[ 573] = 8'd 53; long_chirp_lut[ 574] = 8'd 4; long_chirp_lut[ 575] = 8'd 13;
long_chirp_lut[ 576] = 8'd 73; long_chirp_lut[ 577] = 8'd159; long_chirp_lut[ 578] = 8'd230; long_chirp_lut[ 579] = 8'd254; long_chirp_lut[ 580] = 8'd220; long_chirp_lut[ 581] = 8'd143; long_chirp_lut[ 582] = 8'd 59; long_chirp_lut[ 583] = 8'd 6;
long_chirp_lut[ 584] = 8'd 10; long_chirp_lut[ 585] = 8'd 68; long_chirp_lut[ 586] = 8'd153; long_chirp_lut[ 587] = 8'd227; long_chirp_lut[ 588] = 8'd254; long_chirp_lut[ 589] = 8'd223; long_chirp_lut[ 590] = 8'd148; long_chirp_lut[ 591] = 8'd 63;
long_chirp_lut[ 592] = 8'd 8; long_chirp_lut[ 593] = 8'd 8; long_chirp_lut[ 594] = 8'd 65; long_chirp_lut[ 595] = 8'd150; long_chirp_lut[ 596] = 8'd225; long_chirp_lut[ 597] = 8'd254; long_chirp_lut[ 598] = 8'd225; long_chirp_lut[ 599] = 8'd150;
long_chirp_lut[ 600] = 8'd 64; long_chirp_lut[ 601] = 8'd 8; long_chirp_lut[ 602] = 8'd 8; long_chirp_lut[ 603] = 8'd 64; long_chirp_lut[ 604] = 8'd150; long_chirp_lut[ 605] = 8'd225; long_chirp_lut[ 606] = 8'd254; long_chirp_lut[ 607] = 8'd224;
long_chirp_lut[ 608] = 8'd148; long_chirp_lut[ 609] = 8'd 63; long_chirp_lut[ 610] = 8'd 8; long_chirp_lut[ 611] = 8'd 9; long_chirp_lut[ 612] = 8'd 66; long_chirp_lut[ 613] = 8'd153; long_chirp_lut[ 614] = 8'd227; long_chirp_lut[ 615] = 8'd254;
long_chirp_lut[ 616] = 8'd222; long_chirp_lut[ 617] = 8'd144; long_chirp_lut[ 618] = 8'd 59; long_chirp_lut[ 619] = 8'd 6; long_chirp_lut[ 620] = 8'd 11; long_chirp_lut[ 621] = 8'd 71; long_chirp_lut[ 622] = 8'd158; long_chirp_lut[ 623] = 8'd231;
long_chirp_lut[ 624] = 8'd254; long_chirp_lut[ 625] = 8'd217; long_chirp_lut[ 626] = 8'd137; long_chirp_lut[ 627] = 8'd 53; long_chirp_lut[ 628] = 8'd 4; long_chirp_lut[ 629] = 8'd 14; long_chirp_lut[ 630] = 8'd 79; long_chirp_lut[ 631] = 8'd167;
long_chirp_lut[ 632] = 8'd236; long_chirp_lut[ 633] = 8'd253; long_chirp_lut[ 634] = 8'd210; long_chirp_lut[ 635] = 8'd127; long_chirp_lut[ 636] = 8'd 45; long_chirp_lut[ 637] = 8'd 2; long_chirp_lut[ 638] = 8'd 20; long_chirp_lut[ 639] = 8'd 90;
long_chirp_lut[ 640] = 8'd178; long_chirp_lut[ 641] = 8'd242; long_chirp_lut[ 642] = 8'd250; long_chirp_lut[ 643] = 8'd200; long_chirp_lut[ 644] = 8'd114; long_chirp_lut[ 645] = 8'd 35; long_chirp_lut[ 646] = 8'd 1; long_chirp_lut[ 647] = 8'd 28;
long_chirp_lut[ 648] = 8'd104; long_chirp_lut[ 649] = 8'd191; long_chirp_lut[ 650] = 8'd247; long_chirp_lut[ 651] = 8'd246; long_chirp_lut[ 652] = 8'd186; long_chirp_lut[ 653] = 8'd 98; long_chirp_lut[ 654] = 8'd 24; long_chirp_lut[ 655] = 8'd 1;
long_chirp_lut[ 656] = 8'd 39; long_chirp_lut[ 657] = 8'd121; long_chirp_lut[ 658] = 8'd206; long_chirp_lut[ 659] = 8'd252; long_chirp_lut[ 660] = 8'd237; long_chirp_lut[ 661] = 8'd169; long_chirp_lut[ 662] = 8'd 80; long_chirp_lut[ 663] = 8'd 14;
long_chirp_lut[ 664] = 8'd 4; long_chirp_lut[ 665] = 8'd 55; long_chirp_lut[ 666] = 8'd141; long_chirp_lut[ 667] = 8'd221; long_chirp_lut[ 668] = 8'd254; long_chirp_lut[ 669] = 8'd225; long_chirp_lut[ 670] = 8'd148; long_chirp_lut[ 671] = 8'd 60;
long_chirp_lut[ 672] = 8'd 6; long_chirp_lut[ 673] = 8'd 12; long_chirp_lut[ 674] = 8'd 75; long_chirp_lut[ 675] = 8'd164; long_chirp_lut[ 676] = 8'd235; long_chirp_lut[ 677] = 8'd253; long_chirp_lut[ 678] = 8'd208; long_chirp_lut[ 679] = 8'd123;
long_chirp_lut[ 680] = 8'd 40; long_chirp_lut[ 681] = 8'd 1; long_chirp_lut[ 682] = 8'd 25; long_chirp_lut[ 683] = 8'd100; long_chirp_lut[ 684] = 8'd189; long_chirp_lut[ 685] = 8'd247; long_chirp_lut[ 686] = 8'd246; long_chirp_lut[ 687] = 8'd185;
long_chirp_lut[ 688] = 8'd 96; long_chirp_lut[ 689] = 8'd 22; long_chirp_lut[ 690] = 8'd 2; long_chirp_lut[ 691] = 8'd 44; long_chirp_lut[ 692] = 8'd129; long_chirp_lut[ 693] = 8'd213; long_chirp_lut[ 694] = 8'd254; long_chirp_lut[ 695] = 8'd231;
long_chirp_lut[ 696] = 8'd157; long_chirp_lut[ 697] = 8'd 67; long_chirp_lut[ 698] = 8'd 8; long_chirp_lut[ 699] = 8'd 9; long_chirp_lut[ 700] = 8'd 71; long_chirp_lut[ 701] = 8'd160; long_chirp_lut[ 702] = 8'd234; long_chirp_lut[ 703] = 8'd253;
long_chirp_lut[ 704] = 8'd209; long_chirp_lut[ 705] = 8'd123; long_chirp_lut[ 706] = 8'd 40; long_chirp_lut[ 707] = 8'd 1; long_chirp_lut[ 708] = 8'd 26; long_chirp_lut[ 709] = 8'd103; long_chirp_lut[ 710] = 8'd193; long_chirp_lut[ 711] = 8'd249;
long_chirp_lut[ 712] = 8'd243; long_chirp_lut[ 713] = 8'd178; long_chirp_lut[ 714] = 8'd 88; long_chirp_lut[ 715] = 8'd 17; long_chirp_lut[ 716] = 8'd 3; long_chirp_lut[ 717] = 8'd 53; long_chirp_lut[ 718] = 8'd141; long_chirp_lut[ 719] = 8'd222;
long_chirp_lut[ 720] = 8'd255; long_chirp_lut[ 721] = 8'd222; long_chirp_lut[ 722] = 8'd141; long_chirp_lut[ 723] = 8'd 53; long_chirp_lut[ 724] = 8'd 3; long_chirp_lut[ 725] = 8'd 18; long_chirp_lut[ 726] = 8'd 89; long_chirp_lut[ 727] = 8'd180;
long_chirp_lut[ 728] = 8'd244; long_chirp_lut[ 729] = 8'd248; long_chirp_lut[ 730] = 8'd189; long_chirp_lut[ 731] = 8'd 99; long_chirp_lut[ 732] = 8'd 23; long_chirp_lut[ 733] = 8'd 2; long_chirp_lut[ 734] = 8'd 45; long_chirp_lut[ 735] = 8'd132;
long_chirp_lut[ 736] = 8'd216; long_chirp_lut[ 737] = 8'd254; long_chirp_lut[ 738] = 8'd227; long_chirp_lut[ 739] = 8'd147; long_chirp_lut[ 740] = 8'd 58; long_chirp_lut[ 741] = 8'd 4; long_chirp_lut[ 742] = 8'd 15; long_chirp_lut[ 743] = 8'd 85;
long_chirp_lut[ 744] = 8'd177; long_chirp_lut[ 745] = 8'd243; long_chirp_lut[ 746] = 8'd249; long_chirp_lut[ 747] = 8'd191; long_chirp_lut[ 748] = 8'd100; long_chirp_lut[ 749] = 8'd 23; long_chirp_lut[ 750] = 8'd 2; long_chirp_lut[ 751] = 8'd 46;
long_chirp_lut[ 752] = 8'd133; long_chirp_lut[ 753] = 8'd217; long_chirp_lut[ 754] = 8'd254; long_chirp_lut[ 755] = 8'd224; long_chirp_lut[ 756] = 8'd143; long_chirp_lut[ 757] = 8'd 54; long_chirp_lut[ 758] = 8'd 3; long_chirp_lut[ 759] = 8'd 18;
long_chirp_lut[ 760] = 8'd 91; long_chirp_lut[ 761] = 8'd183; long_chirp_lut[ 762] = 8'd246; long_chirp_lut[ 763] = 8'd246; long_chirp_lut[ 764] = 8'd183; long_chirp_lut[ 765] = 8'd 91; long_chirp_lut[ 766] = 8'd 18; long_chirp_lut[ 767] = 8'd 3;
long_chirp_lut[ 768] = 8'd 55; long_chirp_lut[ 769] = 8'd145; long_chirp_lut[ 770] = 8'd226; long_chirp_lut[ 771] = 8'd254; long_chirp_lut[ 772] = 8'd215; long_chirp_lut[ 773] = 8'd129; long_chirp_lut[ 774] = 8'd 42; long_chirp_lut[ 775] = 8'd 1;
long_chirp_lut[ 776] = 8'd 28; long_chirp_lut[ 777] = 8'd108; long_chirp_lut[ 778] = 8'd199; long_chirp_lut[ 779] = 8'd251; long_chirp_lut[ 780] = 8'd237; long_chirp_lut[ 781] = 8'd165; long_chirp_lut[ 782] = 8'd 72; long_chirp_lut[ 783] = 8'd 9;
long_chirp_lut[ 784] = 8'd 10; long_chirp_lut[ 785] = 8'd 74; long_chirp_lut[ 786] = 8'd167; long_chirp_lut[ 787] = 8'd239; long_chirp_lut[ 788] = 8'd250; long_chirp_lut[ 789] = 8'd195; long_chirp_lut[ 790] = 8'd104; long_chirp_lut[ 791] = 8'd 25;
long_chirp_lut[ 792] = 8'd 2; long_chirp_lut[ 793] = 8'd 47; long_chirp_lut[ 794] = 8'd136; long_chirp_lut[ 795] = 8'd220; long_chirp_lut[ 796] = 8'd254; long_chirp_lut[ 797] = 8'd220; long_chirp_lut[ 798] = 8'd135; long_chirp_lut[ 799] = 8'd 46;
long_chirp_lut[ 800] = 8'd 1; long_chirp_lut[ 801] = 8'd 26; long_chirp_lut[ 802] = 8'd106; long_chirp_lut[ 803] = 8'd197; long_chirp_lut[ 804] = 8'd251; long_chirp_lut[ 805] = 8'd237; long_chirp_lut[ 806] = 8'd163; long_chirp_lut[ 807] = 8'd 70;
long_chirp_lut[ 808] = 8'd 8; long_chirp_lut[ 809] = 8'd 11; long_chirp_lut[ 810] = 8'd 79; long_chirp_lut[ 811] = 8'd173; long_chirp_lut[ 812] = 8'd242; long_chirp_lut[ 813] = 8'd248; long_chirp_lut[ 814] = 8'd188; long_chirp_lut[ 815] = 8'd 94;
long_chirp_lut[ 816] = 8'd 19; long_chirp_lut[ 817] = 8'd 3; long_chirp_lut[ 818] = 8'd 57; long_chirp_lut[ 819] = 8'd149; long_chirp_lut[ 820] = 8'd229; long_chirp_lut[ 821] = 8'd254; long_chirp_lut[ 822] = 8'd208; long_chirp_lut[ 823] = 8'd118;
long_chirp_lut[ 824] = 8'd 33; long_chirp_lut[ 825] = 8'd 1; long_chirp_lut[ 826] = 8'd 39; long_chirp_lut[ 827] = 8'd126; long_chirp_lut[ 828] = 8'd214; long_chirp_lut[ 829] = 8'd254; long_chirp_lut[ 830] = 8'd224; long_chirp_lut[ 831] = 8'd139;
long_chirp_lut[ 832] = 8'd 48; long_chirp_lut[ 833] = 8'd 2; long_chirp_lut[ 834] = 8'd 25; long_chirp_lut[ 835] = 8'd106; long_chirp_lut[ 836] = 8'd199; long_chirp_lut[ 837] = 8'd252; long_chirp_lut[ 838] = 8'd235; long_chirp_lut[ 839] = 8'd158;
long_chirp_lut[ 840] = 8'd 64; long_chirp_lut[ 841] = 8'd 5; long_chirp_lut[ 842] = 8'd 15; long_chirp_lut[ 843] = 8'd 88; long_chirp_lut[ 844] = 8'd183; long_chirp_lut[ 845] = 8'd247; long_chirp_lut[ 846] = 8'd243; long_chirp_lut[ 847] = 8'd174;
long_chirp_lut[ 848] = 8'd 79; long_chirp_lut[ 849] = 8'd 11; long_chirp_lut[ 850] = 8'd 9; long_chirp_lut[ 851] = 8'd 74; long_chirp_lut[ 852] = 8'd169; long_chirp_lut[ 853] = 8'd241; long_chirp_lut[ 854] = 8'd249; long_chirp_lut[ 855] = 8'd187;
long_chirp_lut[ 856] = 8'd 92; long_chirp_lut[ 857] = 8'd 17; long_chirp_lut[ 858] = 8'd 5; long_chirp_lut[ 859] = 8'd 62; long_chirp_lut[ 860] = 8'd157; long_chirp_lut[ 861] = 8'd235; long_chirp_lut[ 862] = 8'd252; long_chirp_lut[ 863] = 8'd198;
long_chirp_lut[ 864] = 8'd104; long_chirp_lut[ 865] = 8'd 23; long_chirp_lut[ 866] = 8'd 2; long_chirp_lut[ 867] = 8'd 53; long_chirp_lut[ 868] = 8'd146; long_chirp_lut[ 869] = 8'd229; long_chirp_lut[ 870] = 8'd253; long_chirp_lut[ 871] = 8'd206;
long_chirp_lut[ 872] = 8'd113; long_chirp_lut[ 873] = 8'd 29; long_chirp_lut[ 874] = 8'd 1; long_chirp_lut[ 875] = 8'd 46; long_chirp_lut[ 876] = 8'd138; long_chirp_lut[ 877] = 8'd224; long_chirp_lut[ 878] = 8'd254; long_chirp_lut[ 879] = 8'd211;
long_chirp_lut[ 880] = 8'd120; long_chirp_lut[ 881] = 8'd 33; long_chirp_lut[ 882] = 8'd 1; long_chirp_lut[ 883] = 8'd 42; long_chirp_lut[ 884] = 8'd132; long_chirp_lut[ 885] = 8'd220; long_chirp_lut[ 886] = 8'd254; long_chirp_lut[ 887] = 8'd215;
long_chirp_lut[ 888] = 8'd125; long_chirp_lut[ 889] = 8'd 36; long_chirp_lut[ 890] = 8'd 1; long_chirp_lut[ 891] = 8'd 39; long_chirp_lut[ 892] = 8'd129; long_chirp_lut[ 893] = 8'd218; long_chirp_lut[ 894] = 8'd254; long_chirp_lut[ 895] = 8'd217;
long_chirp_lut[ 896] = 8'd127; long_chirp_lut[ 897] = 8'd 38; long_chirp_lut[ 898] = 8'd 1; long_chirp_lut[ 899] = 8'd 38; long_chirp_lut[ 900] = 8'd127; long_chirp_lut[ 901] = 8'd217; long_chirp_lut[ 902] = 8'd254; long_chirp_lut[ 903] = 8'd217;
long_chirp_lut[ 904] = 8'd127; long_chirp_lut[ 905] = 8'd 37; long_chirp_lut[ 906] = 8'd 1; long_chirp_lut[ 907] = 8'd 38; long_chirp_lut[ 908] = 8'd129; long_chirp_lut[ 909] = 8'd218; long_chirp_lut[ 910] = 8'd254; long_chirp_lut[ 911] = 8'd216;
long_chirp_lut[ 912] = 8'd125; long_chirp_lut[ 913] = 8'd 36; long_chirp_lut[ 914] = 8'd 1; long_chirp_lut[ 915] = 8'd 41; long_chirp_lut[ 916] = 8'd132; long_chirp_lut[ 917] = 8'd221; long_chirp_lut[ 918] = 8'd254; long_chirp_lut[ 919] = 8'd212;
long_chirp_lut[ 920] = 8'd120; long_chirp_lut[ 921] = 8'd 32; long_chirp_lut[ 922] = 8'd 1; long_chirp_lut[ 923] = 8'd 45; long_chirp_lut[ 924] = 8'd138; long_chirp_lut[ 925] = 8'd225; long_chirp_lut[ 926] = 8'd254; long_chirp_lut[ 927] = 8'd207;
long_chirp_lut[ 928] = 8'd113; long_chirp_lut[ 929] = 8'd 27; long_chirp_lut[ 930] = 8'd 2; long_chirp_lut[ 931] = 8'd 51; long_chirp_lut[ 932] = 8'd146; long_chirp_lut[ 933] = 8'd230; long_chirp_lut[ 934] = 8'd253; long_chirp_lut[ 935] = 8'd200;
long_chirp_lut[ 936] = 8'd104; long_chirp_lut[ 937] = 8'd 22; long_chirp_lut[ 938] = 8'd 3; long_chirp_lut[ 939] = 8'd 60; long_chirp_lut[ 940] = 8'd157; long_chirp_lut[ 941] = 8'd236; long_chirp_lut[ 942] = 8'd250; long_chirp_lut[ 943] = 8'd190;
long_chirp_lut[ 944] = 8'd 92; long_chirp_lut[ 945] = 8'd 15; long_chirp_lut[ 946] = 8'd 6; long_chirp_lut[ 947] = 8'd 71; long_chirp_lut[ 948] = 8'd169; long_chirp_lut[ 949] = 8'd243; long_chirp_lut[ 950] = 8'd246; long_chirp_lut[ 951] = 8'd178;
long_chirp_lut[ 952] = 8'd 79; long_chirp_lut[ 953] = 8'd 9; long_chirp_lut[ 954] = 8'd 12; long_chirp_lut[ 955] = 8'd 84; long_chirp_lut[ 956] = 8'd183; long_chirp_lut[ 957] = 8'd248; long_chirp_lut[ 958] = 8'd240; long_chirp_lut[ 959] = 8'd162;
long_chirp_lut[ 960] = 8'd 64; long_chirp_lut[ 961] = 8'd 4; long_chirp_lut[ 962] = 8'd 20; long_chirp_lut[ 963] = 8'd101; long_chirp_lut[ 964] = 8'd199; long_chirp_lut[ 965] = 8'd253; long_chirp_lut[ 966] = 8'd230; long_chirp_lut[ 967] = 8'd144;
long_chirp_lut[ 968] = 8'd 48; long_chirp_lut[ 969] = 8'd 1; long_chirp_lut[ 970] = 8'd 31; long_chirp_lut[ 971] = 8'd121; long_chirp_lut[ 972] = 8'd214; long_chirp_lut[ 973] = 8'd254; long_chirp_lut[ 974] = 8'd216; long_chirp_lut[ 975] = 8'd123;
long_chirp_lut[ 976] = 8'd 33; long_chirp_lut[ 977] = 8'd 1; long_chirp_lut[ 978] = 8'd 47; long_chirp_lut[ 979] = 8'd143; long_chirp_lut[ 980] = 8'd229; long_chirp_lut[ 981] = 8'd253; long_chirp_lut[ 982] = 8'd198; long_chirp_lut[ 983] = 8'd100;
long_chirp_lut[ 984] = 8'd 19; long_chirp_lut[ 985] = 8'd 5; long_chirp_lut[ 986] = 8'd 67; long_chirp_lut[ 987] = 8'd167; long_chirp_lut[ 988] = 8'd242; long_chirp_lut[ 989] = 8'd246; long_chirp_lut[ 990] = 8'd176; long_chirp_lut[ 991] = 8'd 76;
long_chirp_lut[ 992] = 8'd 8; long_chirp_lut[ 993] = 8'd 14; long_chirp_lut[ 994] = 8'd 92; long_chirp_lut[ 995] = 8'd191; long_chirp_lut[ 996] = 8'd251; long_chirp_lut[ 997] = 8'd234; long_chirp_lut[ 998] = 8'd149; long_chirp_lut[ 999] = 8'd 52;
long_chirp_lut[1000] = 8'd 1; long_chirp_lut[1001] = 8'd 30; long_chirp_lut[1002] = 8'd120; long_chirp_lut[1003] = 8'd215; long_chirp_lut[1004] = 8'd254; long_chirp_lut[1005] = 8'd214; long_chirp_lut[1006] = 8'd119; long_chirp_lut[1007] = 8'd 30;
long_chirp_lut[1008] = 8'd 2; long_chirp_lut[1009] = 8'd 53; long_chirp_lut[1010] = 8'd151; long_chirp_lut[1011] = 8'd235; long_chirp_lut[1012] = 8'd250; long_chirp_lut[1013] = 8'd188; long_chirp_lut[1014] = 8'd 88; long_chirp_lut[1015] = 8'd 12;
long_chirp_lut[1016] = 8'd 10; long_chirp_lut[1017] = 8'd 82; long_chirp_lut[1018] = 8'd183; long_chirp_lut[1019] = 8'd249; long_chirp_lut[1020] = 8'd237; long_chirp_lut[1021] = 8'd156; long_chirp_lut[1022] = 8'd 56; long_chirp_lut[1023] = 8'd 2;
long_chirp_lut[1024] = 8'd 28; long_chirp_lut[1025] = 8'd117; long_chirp_lut[1026] = 8'd213; long_chirp_lut[1027] = 8'd254; long_chirp_lut[1028] = 8'd215; long_chirp_lut[1029] = 8'd119; long_chirp_lut[1030] = 8'd 29; long_chirp_lut[1031] = 8'd 2;
long_chirp_lut[1032] = 8'd 55; long_chirp_lut[1033] = 8'd155; long_chirp_lut[1034] = 8'd237; long_chirp_lut[1035] = 8'd249; long_chirp_lut[1036] = 8'd183; long_chirp_lut[1037] = 8'd 81; long_chirp_lut[1038] = 8'd 9; long_chirp_lut[1039] = 8'd 13;
long_chirp_lut[1040] = 8'd 91; long_chirp_lut[1041] = 8'd192; long_chirp_lut[1042] = 8'd252; long_chirp_lut[1043] = 8'd231; long_chirp_lut[1044] = 8'd143; long_chirp_lut[1045] = 8'd 46; long_chirp_lut[1046] = 8'd 1; long_chirp_lut[1047] = 8'd 38;
long_chirp_lut[1048] = 8'd133; long_chirp_lut[1049] = 8'd225; long_chirp_lut[1050] = 8'd253; long_chirp_lut[1051] = 8'd200; long_chirp_lut[1052] = 8'd100; long_chirp_lut[1053] = 8'd 17; long_chirp_lut[1054] = 8'd 6; long_chirp_lut[1055] = 8'd 74;
long_chirp_lut[1056] = 8'd177; long_chirp_lut[1057] = 8'd247; long_chirp_lut[1058] = 8'd240; long_chirp_lut[1059] = 8'd159; long_chirp_lut[1060] = 8'd 58; long_chirp_lut[1061] = 8'd 2; long_chirp_lut[1062] = 8'd 28; long_chirp_lut[1063] = 8'd120;
long_chirp_lut[1064] = 8'd216; long_chirp_lut[1065] = 8'd254; long_chirp_lut[1066] = 8'd210; long_chirp_lut[1067] = 8'd111; long_chirp_lut[1068] = 8'd 23; long_chirp_lut[1069] = 8'd 4; long_chirp_lut[1070] = 8'd 66; long_chirp_lut[1071] = 8'd168;
long_chirp_lut[1072] = 8'd244; long_chirp_lut[1073] = 8'd243; long_chirp_lut[1074] = 8'd166; long_chirp_lut[1075] = 8'd 64; long_chirp_lut[1076] = 8'd 3; long_chirp_lut[1077] = 8'd 25; long_chirp_lut[1078] = 8'd114; long_chirp_lut[1079] = 8'd212;
long_chirp_lut[1080] = 8'd255; long_chirp_lut[1081] = 8'd212; long_chirp_lut[1082] = 8'd114; long_chirp_lut[1083] = 8'd 25; long_chirp_lut[1084] = 8'd 3; long_chirp_lut[1085] = 8'd 64; long_chirp_lut[1086] = 8'd167; long_chirp_lut[1087] = 8'd244;
long_chirp_lut[1088] = 8'd243; long_chirp_lut[1089] = 8'd165; long_chirp_lut[1090] = 8'd 62; long_chirp_lut[1091] = 8'd 3; long_chirp_lut[1092] = 8'd 26; long_chirp_lut[1093] = 8'd117; long_chirp_lut[1094] = 8'd215; long_chirp_lut[1095] = 8'd254;
long_chirp_lut[1096] = 8'd209; long_chirp_lut[1097] = 8'd109; long_chirp_lut[1098] = 8'd 21; long_chirp_lut[1099] = 8'd 5; long_chirp_lut[1100] = 8'd 71; long_chirp_lut[1101] = 8'd174; long_chirp_lut[1102] = 8'd247; long_chirp_lut[1103] = 8'd239;
long_chirp_lut[1104] = 8'd157; long_chirp_lut[1105] = 8'd 54; long_chirp_lut[1106] = 8'd 1; long_chirp_lut[1107] = 8'd 33; long_chirp_lut[1108] = 8'd129; long_chirp_lut[1109] = 8'd223; long_chirp_lut[1110] = 8'd253; long_chirp_lut[1111] = 8'd199;
long_chirp_lut[1112] = 8'd 96; long_chirp_lut[1113] = 8'd 14; long_chirp_lut[1114] = 8'd 9; long_chirp_lut[1115] = 8'd 84; long_chirp_lut[1116] = 8'd189; long_chirp_lut[1117] = 8'd251; long_chirp_lut[1118] = 8'd230; long_chirp_lut[1119] = 8'd139;
long_chirp_lut[1120] = 8'd 40; long_chirp_lut[1121] = 8'd 1; long_chirp_lut[1122] = 8'd 47; long_chirp_lut[1123] = 8'd148; long_chirp_lut[1124] = 8'd235; long_chirp_lut[1125] = 8'd249; long_chirp_lut[1126] = 8'd180; long_chirp_lut[1127] = 8'd 75;
long_chirp_lut[1128] = 8'd 6; long_chirp_lut[1129] = 8'd 20; long_chirp_lut[1130] = 8'd107; long_chirp_lut[1131] = 8'd209; long_chirp_lut[1132] = 8'd254; long_chirp_lut[1133] = 8'd213; long_chirp_lut[1134] = 8'd114; long_chirp_lut[1135] = 8'd 23;
long_chirp_lut[1136] = 8'd 4; long_chirp_lut[1137] = 8'd 70; long_chirp_lut[1138] = 8'd175; long_chirp_lut[1139] = 8'd248; long_chirp_lut[1140] = 8'd237; long_chirp_lut[1141] = 8'd152; long_chirp_lut[1142] = 8'd 49; long_chirp_lut[1143] = 8'd 1;
long_chirp_lut[1144] = 8'd 39; long_chirp_lut[1145] = 8'd139; long_chirp_lut[1146] = 8'd231; long_chirp_lut[1147] = 8'd251; long_chirp_lut[1148] = 8'd186; long_chirp_lut[1149] = 8'd 81; long_chirp_lut[1150] = 8'd 8; long_chirp_lut[1151] = 8'd 18;
long_chirp_lut[1152] = 8'd104; long_chirp_lut[1153] = 8'd206; long_chirp_lut[1154] = 8'd254; long_chirp_lut[1155] = 8'd214; long_chirp_lut[1156] = 8'd114; long_chirp_lut[1157] = 8'd 23; long_chirp_lut[1158] = 8'd 5; long_chirp_lut[1159] = 8'd 72;
long_chirp_lut[1160] = 8'd178; long_chirp_lut[1161] = 8'd249; long_chirp_lut[1162] = 8'd235; long_chirp_lut[1163] = 8'd146; long_chirp_lut[1164] = 8'd 45; long_chirp_lut[1165] = 8'd 1; long_chirp_lut[1166] = 8'd 45; long_chirp_lut[1167] = 8'd148;
long_chirp_lut[1168] = 8'd236; long_chirp_lut[1169] = 8'd248; long_chirp_lut[1170] = 8'd176; long_chirp_lut[1171] = 8'd 70; long_chirp_lut[1172] = 8'd 4; long_chirp_lut[1173] = 8'd 25; long_chirp_lut[1174] = 8'd118; long_chirp_lut[1175] = 8'd218;
long_chirp_lut[1176] = 8'd254; long_chirp_lut[1177] = 8'd201; long_chirp_lut[1178] = 8'd 97; long_chirp_lut[1179] = 8'd 14; long_chirp_lut[1180] = 8'd 11; long_chirp_lut[1181] = 8'd 90; long_chirp_lut[1182] = 8'd196; long_chirp_lut[1183] = 8'd253;
long_chirp_lut[1184] = 8'd222; long_chirp_lut[1185] = 8'd123; long_chirp_lut[1186] = 8'd 28; long_chirp_lut[1187] = 8'd 3; long_chirp_lut[1188] = 8'd 66; long_chirp_lut[1189] = 8'd173; long_chirp_lut[1190] = 8'd247; long_chirp_lut[1191] = 8'd237;
long_chirp_lut[1192] = 8'd148; long_chirp_lut[1193] = 8'd 45; long_chirp_lut[1194] = 8'd 1; long_chirp_lut[1195] = 8'd 46; long_chirp_lut[1196] = 8'd150; long_chirp_lut[1197] = 8'd238; long_chirp_lut[1198] = 8'd247; long_chirp_lut[1199] = 8'd171;
long_chirp_lut[1200] = 8'd 64; long_chirp_lut[1201] = 8'd 2; long_chirp_lut[1202] = 8'd 30; long_chirp_lut[1203] = 8'd128; long_chirp_lut[1204] = 8'd225; long_chirp_lut[1205] = 8'd252; long_chirp_lut[1206] = 8'd190; long_chirp_lut[1207] = 8'd 83;
long_chirp_lut[1208] = 8'd 8; long_chirp_lut[1209] = 8'd 18; long_chirp_lut[1210] = 8'd107; long_chirp_lut[1211] = 8'd211; long_chirp_lut[1212] = 8'd254; long_chirp_lut[1213] = 8'd207; long_chirp_lut[1214] = 8'd102; long_chirp_lut[1215] = 8'd 15;
long_chirp_lut[1216] = 8'd 10; long_chirp_lut[1217] = 8'd 89; long_chirp_lut[1218] = 8'd196; long_chirp_lut[1219] = 8'd254; long_chirp_lut[1220] = 8'd220; long_chirp_lut[1221] = 8'd119; long_chirp_lut[1222] = 8'd 25; long_chirp_lut[1223] = 8'd 4;
long_chirp_lut[1224] = 8'd 73; long_chirp_lut[1225] = 8'd182; long_chirp_lut[1226] = 8'd251; long_chirp_lut[1227] = 8'd230; long_chirp_lut[1228] = 8'd135; long_chirp_lut[1229] = 8'd 35; long_chirp_lut[1230] = 8'd 2; long_chirp_lut[1231] = 8'd 60;
long_chirp_lut[1232] = 8'd168; long_chirp_lut[1233] = 8'd246; long_chirp_lut[1234] = 8'd238; long_chirp_lut[1235] = 8'd149; long_chirp_lut[1236] = 8'd 45; long_chirp_lut[1237] = 8'd 1; long_chirp_lut[1238] = 8'd 49; long_chirp_lut[1239] = 8'd155;
long_chirp_lut[1240] = 8'd241; long_chirp_lut[1241] = 8'd244; long_chirp_lut[1242] = 8'd161; long_chirp_lut[1243] = 8'd 54; long_chirp_lut[1244] = 8'd 1; long_chirp_lut[1245] = 8'd 41; long_chirp_lut[1246] = 8'd144; long_chirp_lut[1247] = 8'd236;
long_chirp_lut[1248] = 8'd247; long_chirp_lut[1249] = 8'd171; long_chirp_lut[1250] = 8'd 62; long_chirp_lut[1251] = 8'd 2; long_chirp_lut[1252] = 8'd 34; long_chirp_lut[1253] = 8'd135; long_chirp_lut[1254] = 8'd231; long_chirp_lut[1255] = 8'd250;
long_chirp_lut[1256] = 8'd179; long_chirp_lut[1257] = 8'd 70; long_chirp_lut[1258] = 8'd 3; long_chirp_lut[1259] = 8'd 29; long_chirp_lut[1260] = 8'd127; long_chirp_lut[1261] = 8'd226; long_chirp_lut[1262] = 8'd252; long_chirp_lut[1263] = 8'd185;
long_chirp_lut[1264] = 8'd 76; long_chirp_lut[1265] = 8'd 5; long_chirp_lut[1266] = 8'd 25; long_chirp_lut[1267] = 8'd122; long_chirp_lut[1268] = 8'd223; long_chirp_lut[1269] = 8'd253; long_chirp_lut[1270] = 8'd189; long_chirp_lut[1271] = 8'd 80;
long_chirp_lut[1272] = 8'd 6; long_chirp_lut[1273] = 8'd 23; long_chirp_lut[1274] = 8'd118; long_chirp_lut[1275] = 8'd220; long_chirp_lut[1276] = 8'd253; long_chirp_lut[1277] = 8'd192; long_chirp_lut[1278] = 8'd 83; long_chirp_lut[1279] = 8'd 7;
long_chirp_lut[1280] = 8'd 21; long_chirp_lut[1281] = 8'd116; long_chirp_lut[1282] = 8'd219; long_chirp_lut[1283] = 8'd253; long_chirp_lut[1284] = 8'd193; long_chirp_lut[1285] = 8'd 84; long_chirp_lut[1286] = 8'd 7; long_chirp_lut[1287] = 8'd 21;
long_chirp_lut[1288] = 8'd115; long_chirp_lut[1289] = 8'd219; long_chirp_lut[1290] = 8'd253; long_chirp_lut[1291] = 8'd193; long_chirp_lut[1292] = 8'd 83; long_chirp_lut[1293] = 8'd 7; long_chirp_lut[1294] = 8'd 22; long_chirp_lut[1295] = 8'd117;
long_chirp_lut[1296] = 8'd220; long_chirp_lut[1297] = 8'd253; long_chirp_lut[1298] = 8'd191; long_chirp_lut[1299] = 8'd 81; long_chirp_lut[1300] = 8'd 6; long_chirp_lut[1301] = 8'd 23; long_chirp_lut[1302] = 8'd120; long_chirp_lut[1303] = 8'd222;
long_chirp_lut[1304] = 8'd253; long_chirp_lut[1305] = 8'd187; long_chirp_lut[1306] = 8'd 77; long_chirp_lut[1307] = 8'd 5; long_chirp_lut[1308] = 8'd 26; long_chirp_lut[1309] = 8'd125; long_chirp_lut[1310] = 8'd226; long_chirp_lut[1311] = 8'd251;
long_chirp_lut[1312] = 8'd182; long_chirp_lut[1313] = 8'd 71; long_chirp_lut[1314] = 8'd 3; long_chirp_lut[1315] = 8'd 31; long_chirp_lut[1316] = 8'd132; long_chirp_lut[1317] = 8'd230; long_chirp_lut[1318] = 8'd250; long_chirp_lut[1319] = 8'd175;
long_chirp_lut[1320] = 8'd 64; long_chirp_lut[1321] = 8'd 2; long_chirp_lut[1322] = 8'd 36; long_chirp_lut[1323] = 8'd141; long_chirp_lut[1324] = 8'd235; long_chirp_lut[1325] = 8'd247; long_chirp_lut[1326] = 8'd166; long_chirp_lut[1327] = 8'd 56;
long_chirp_lut[1328] = 8'd 1; long_chirp_lut[1329] = 8'd 44; long_chirp_lut[1330] = 8'd151; long_chirp_lut[1331] = 8'd241; long_chirp_lut[1332] = 8'd242; long_chirp_lut[1333] = 8'd155; long_chirp_lut[1334] = 8'd 46; long_chirp_lut[1335] = 8'd 1;
long_chirp_lut[1336] = 8'd 53; long_chirp_lut[1337] = 8'd163; long_chirp_lut[1338] = 8'd246; long_chirp_lut[1339] = 8'd236; long_chirp_lut[1340] = 8'd142; long_chirp_lut[1341] = 8'd 37; long_chirp_lut[1342] = 8'd 2; long_chirp_lut[1343] = 8'd 65;
long_chirp_lut[1344] = 8'd177; long_chirp_lut[1345] = 8'd250; long_chirp_lut[1346] = 8'd228; long_chirp_lut[1347] = 8'd127; long_chirp_lut[1348] = 8'd 27; long_chirp_lut[1349] = 8'd 5; long_chirp_lut[1350] = 8'd 79; long_chirp_lut[1351] = 8'd191;
long_chirp_lut[1352] = 8'd253; long_chirp_lut[1353] = 8'd217; long_chirp_lut[1354] = 8'd111; long_chirp_lut[1355] = 8'd 17; long_chirp_lut[1356] = 8'd 10; long_chirp_lut[1357] = 8'd 96; long_chirp_lut[1358] = 8'd206; long_chirp_lut[1359] = 8'd254;
long_chirp_lut[1360] = 8'd203; long_chirp_lut[1361] = 8'd 92; long_chirp_lut[1362] = 8'd 9; long_chirp_lut[1363] = 8'd 19; long_chirp_lut[1364] = 8'd115; long_chirp_lut[1365] = 8'd220; long_chirp_lut[1366] = 8'd253; long_chirp_lut[1367] = 8'd186;
long_chirp_lut[1368] = 8'd 73; long_chirp_lut[1369] = 8'd 3; long_chirp_lut[1370] = 8'd 31; long_chirp_lut[1371] = 8'd136; long_chirp_lut[1372] = 8'd233; long_chirp_lut[1373] = 8'd247; long_chirp_lut[1374] = 8'd166; long_chirp_lut[1375] = 8'd 54;
long_chirp_lut[1376] = 8'd 1; long_chirp_lut[1377] = 8'd 48; long_chirp_lut[1378] = 8'd158; long_chirp_lut[1379] = 8'd244; long_chirp_lut[1380] = 8'd237; long_chirp_lut[1381] = 8'd143; long_chirp_lut[1382] = 8'd 36; long_chirp_lut[1383] = 8'd 2;
long_chirp_lut[1384] = 8'd 68; long_chirp_lut[1385] = 8'd182; long_chirp_lut[1386] = 8'd252; long_chirp_lut[1387] = 8'd223; long_chirp_lut[1388] = 8'd117; long_chirp_lut[1389] = 8'd 20; long_chirp_lut[1390] = 8'd 9; long_chirp_lut[1391] = 8'd 93;
long_chirp_lut[1392] = 8'd204; long_chirp_lut[1393] = 8'd254; long_chirp_lut[1394] = 8'd203; long_chirp_lut[1395] = 8'd 91; long_chirp_lut[1396] = 8'd 8; long_chirp_lut[1397] = 8'd 21; long_chirp_lut[1398] = 8'd120; long_chirp_lut[1399] = 8'd225;
long_chirp_lut[1400] = 8'd251; long_chirp_lut[1401] = 8'd178; long_chirp_lut[1402] = 8'd 64; long_chirp_lut[1403] = 8'd 1; long_chirp_lut[1404] = 8'd 41; long_chirp_lut[1405] = 8'd150; long_chirp_lut[1406] = 8'd241; long_chirp_lut[1407] = 8'd241;
long_chirp_lut[1408] = 8'd148; long_chirp_lut[1409] = 8'd 39; long_chirp_lut[1410] = 8'd 2; long_chirp_lut[1411] = 8'd 66; long_chirp_lut[1412] = 8'd180; long_chirp_lut[1413] = 8'd252; long_chirp_lut[1414] = 8'd222; long_chirp_lut[1415] = 8'd116;
long_chirp_lut[1416] = 8'd 19; long_chirp_lut[1417] = 8'd 10; long_chirp_lut[1418] = 8'd 97; long_chirp_lut[1419] = 8'd209; long_chirp_lut[1420] = 8'd254; long_chirp_lut[1421] = 8'd197; long_chirp_lut[1422] = 8'd 83; long_chirp_lut[1423] = 8'd 5;
long_chirp_lut[1424] = 8'd 28; long_chirp_lut[1425] = 8'd132; long_chirp_lut[1426] = 8'd232; long_chirp_lut[1427] = 8'd247; long_chirp_lut[1428] = 8'd164; long_chirp_lut[1429] = 8'd 51; long_chirp_lut[1430] = 8'd 1; long_chirp_lut[1431] = 8'd 54;
long_chirp_lut[1432] = 8'd168; long_chirp_lut[1433] = 8'd249; long_chirp_lut[1434] = 8'd230; long_chirp_lut[1435] = 8'd127; long_chirp_lut[1436] = 8'd 25; long_chirp_lut[1437] = 8'd 7; long_chirp_lut[1438] = 8'd 88; long_chirp_lut[1439] = 8'd202;
long_chirp_lut[1440] = 8'd255; long_chirp_lut[1441] = 8'd202; long_chirp_lut[1442] = 8'd 88; long_chirp_lut[1443] = 8'd 7; long_chirp_lut[1444] = 8'd 25; long_chirp_lut[1445] = 8'd128; long_chirp_lut[1446] = 8'd231; long_chirp_lut[1447] = 8'd248;
long_chirp_lut[1448] = 8'd166; long_chirp_lut[1449] = 8'd 52; long_chirp_lut[1450] = 8'd 1; long_chirp_lut[1451] = 8'd 55; long_chirp_lut[1452] = 8'd169; long_chirp_lut[1453] = 8'd249; long_chirp_lut[1454] = 8'd228; long_chirp_lut[1455] = 8'd123;
long_chirp_lut[1456] = 8'd 22; long_chirp_lut[1457] = 8'd 8; long_chirp_lut[1458] = 8'd 94; long_chirp_lut[1459] = 8'd207; long_chirp_lut[1460] = 8'd254; long_chirp_lut[1461] = 8'd195; long_chirp_lut[1462] = 8'd 80; long_chirp_lut[1463] = 8'd 4;
long_chirp_lut[1464] = 8'd 31; long_chirp_lut[1465] = 8'd139; long_chirp_lut[1466] = 8'd237; long_chirp_lut[1467] = 8'd243; long_chirp_lut[1468] = 8'd153; long_chirp_lut[1469] = 8'd 41; long_chirp_lut[1470] = 8'd 2; long_chirp_lut[1471] = 8'd 68;
long_chirp_lut[1472] = 8'd184; long_chirp_lut[1473] = 8'd253; long_chirp_lut[1474] = 8'd216; long_chirp_lut[1475] = 8'd105; long_chirp_lut[1476] = 8'd 13; long_chirp_lut[1477] = 8'd 17; long_chirp_lut[1478] = 8'd114; long_chirp_lut[1479] = 8'd223;
long_chirp_lut[1480] = 8'd251; long_chirp_lut[1481] = 8'd175; long_chirp_lut[1482] = 8'd 59; long_chirp_lut[1483] = 8'd 1; long_chirp_lut[1484] = 8'd 50; long_chirp_lut[1485] = 8'd164; long_chirp_lut[1486] = 8'd248; long_chirp_lut[1487] = 8'd230;
long_chirp_lut[1488] = 8'd125; long_chirp_lut[1489] = 8'd 22; long_chirp_lut[1490] = 8'd 9; long_chirp_lut[1491] = 8'd 96; long_chirp_lut[1492] = 8'd210; long_chirp_lut[1493] = 8'd254; long_chirp_lut[1494] = 8'd190; long_chirp_lut[1495] = 8'd 73;
long_chirp_lut[1496] = 8'd 2; long_chirp_lut[1497] = 8'd 38; long_chirp_lut[1498] = 8'd150; long_chirp_lut[1499] = 8'd243; long_chirp_lut[1500] = 8'd237; long_chirp_lut[1501] = 8'd139; long_chirp_lut[1502] = 8'd 30; long_chirp_lut[1503] = 8'd 5;
long_chirp_lut[1504] = 8'd 84; long_chirp_lut[1505] = 8'd201; long_chirp_lut[1506] = 8'd254; long_chirp_lut[1507] = 8'd200; long_chirp_lut[1508] = 8'd 83; long_chirp_lut[1509] = 8'd 4; long_chirp_lut[1510] = 8'd 31; long_chirp_lut[1511] = 8'd141;
long_chirp_lut[1512] = 8'd239; long_chirp_lut[1513] = 8'd241; long_chirp_lut[1514] = 8'd146; long_chirp_lut[1515] = 8'd 35; long_chirp_lut[1516] = 8'd 3; long_chirp_lut[1517] = 8'd 79; long_chirp_lut[1518] = 8'd196; long_chirp_lut[1519] = 8'd254;
long_chirp_lut[1520] = 8'd203; long_chirp_lut[1521] = 8'd 87; long_chirp_lut[1522] = 8'd 5; long_chirp_lut[1523] = 8'd 29; long_chirp_lut[1524] = 8'd138; long_chirp_lut[1525] = 8'd238; long_chirp_lut[1526] = 8'd242; long_chirp_lut[1527] = 8'd147;
long_chirp_lut[1528] = 8'd 35; long_chirp_lut[1529] = 8'd 3; long_chirp_lut[1530] = 8'd 79; long_chirp_lut[1531] = 8'd197; long_chirp_lut[1532] = 8'd254; long_chirp_lut[1533] = 8'd202; long_chirp_lut[1534] = 8'd 85; long_chirp_lut[1535] = 8'd 5;
long_chirp_lut[1536] = 8'd 31; long_chirp_lut[1537] = 8'd142; long_chirp_lut[1538] = 8'd240; long_chirp_lut[1539] = 8'd240; long_chirp_lut[1540] = 8'd142; long_chirp_lut[1541] = 8'd 32; long_chirp_lut[1542] = 8'd 5; long_chirp_lut[1543] = 8'd 85;
long_chirp_lut[1544] = 8'd202; long_chirp_lut[1545] = 8'd254; long_chirp_lut[1546] = 8'd195; long_chirp_lut[1547] = 8'd 77; long_chirp_lut[1548] = 8'd 3; long_chirp_lut[1549] = 8'd 38; long_chirp_lut[1550] = 8'd151; long_chirp_lut[1551] = 8'd244;
long_chirp_lut[1552] = 8'd235; long_chirp_lut[1553] = 8'd131; long_chirp_lut[1554] = 8'd 24; long_chirp_lut[1555] = 8'd 8; long_chirp_lut[1556] = 8'd 97; long_chirp_lut[1557] = 8'd213; long_chirp_lut[1558] = 8'd253; long_chirp_lut[1559] = 8'd183;
long_chirp_lut[1560] = 8'd 64; long_chirp_lut[1561] = 8'd 1; long_chirp_lut[1562] = 8'd 49; long_chirp_lut[1563] = 8'd167; long_chirp_lut[1564] = 8'd250; long_chirp_lut[1565] = 8'd224; long_chirp_lut[1566] = 8'd114; long_chirp_lut[1567] = 8'd 15;
long_chirp_lut[1568] = 8'd 16; long_chirp_lut[1569] = 8'd116; long_chirp_lut[1570] = 8'd226; long_chirp_lut[1571] = 8'd249; long_chirp_lut[1572] = 8'd164; long_chirp_lut[1573] = 8'd 47; long_chirp_lut[1574] = 8'd 1; long_chirp_lut[1575] = 8'd 68;
long_chirp_lut[1576] = 8'd187; long_chirp_lut[1577] = 8'd254; long_chirp_lut[1578] = 8'd208; long_chirp_lut[1579] = 8'd 90; long_chirp_lut[1580] = 8'd 6; long_chirp_lut[1581] = 8'd 30; long_chirp_lut[1582] = 8'd141; long_chirp_lut[1583] = 8'd240;
long_chirp_lut[1584] = 8'd239; long_chirp_lut[1585] = 8'd138; long_chirp_lut[1586] = 8'd 28; long_chirp_lut[1587] = 8'd 7; long_chirp_lut[1588] = 8'd 94; long_chirp_lut[1589] = 8'd211; long_chirp_lut[1590] = 8'd253; long_chirp_lut[1591] = 8'd183;
long_chirp_lut[1592] = 8'd 63; long_chirp_lut[1593] = 8'd 1; long_chirp_lut[1594] = 8'd 52; long_chirp_lut[1595] = 8'd171; long_chirp_lut[1596] = 8'd251; long_chirp_lut[1597] = 8'd220; long_chirp_lut[1598] = 8'd105; long_chirp_lut[1599] = 8'd 11;
long_chirp_lut[1600] = 8'd 21; long_chirp_lut[1601] = 8'd128; long_chirp_lut[1602] = 8'd234; long_chirp_lut[1603] = 8'd244; long_chirp_lut[1604] = 8'd149; long_chirp_lut[1605] = 8'd 35; long_chirp_lut[1606] = 8'd 4; long_chirp_lut[1607] = 8'd 85;
long_chirp_lut[1608] = 8'd204; long_chirp_lut[1609] = 8'd254; long_chirp_lut[1610] = 8'd189; long_chirp_lut[1611] = 8'd 69; long_chirp_lut[1612] = 8'd 1; long_chirp_lut[1613] = 8'd 48; long_chirp_lut[1614] = 8'd167; long_chirp_lut[1615] = 8'd250;
long_chirp_lut[1616] = 8'd222; long_chirp_lut[1617] = 8'd107; long_chirp_lut[1618] = 8'd 11; long_chirp_lut[1619] = 8'd 21; long_chirp_lut[1620] = 8'd127; long_chirp_lut[1621] = 8'd234; long_chirp_lut[1622] = 8'd243; long_chirp_lut[1623] = 8'd147;
long_chirp_lut[1624] = 8'd 33; long_chirp_lut[1625] = 8'd 5; long_chirp_lut[1626] = 8'd 89; long_chirp_lut[1627] = 8'd208; long_chirp_lut[1628] = 8'd254; long_chirp_lut[1629] = 8'd184; long_chirp_lut[1630] = 8'd 62; long_chirp_lut[1631] = 8'd 1;
long_chirp_lut[1632] = 8'd 55; long_chirp_lut[1633] = 8'd176; long_chirp_lut[1634] = 8'd252; long_chirp_lut[1635] = 8'd214; long_chirp_lut[1636] = 8'd 96; long_chirp_lut[1637] = 8'd 7; long_chirp_lut[1638] = 8'd 28; long_chirp_lut[1639] = 8'd141;
long_chirp_lut[1640] = 8'd241; long_chirp_lut[1641] = 8'd237; long_chirp_lut[1642] = 8'd132; long_chirp_lut[1643] = 8'd 23; long_chirp_lut[1644] = 8'd 10; long_chirp_lut[1645] = 8'd106; long_chirp_lut[1646] = 8'd221; long_chirp_lut[1647] = 8'd250;
long_chirp_lut[1648] = 8'd166; long_chirp_lut[1649] = 8'd 46; long_chirp_lut[1650] = 8'd 2; long_chirp_lut[1651] = 8'd 74; long_chirp_lut[1652] = 8'd196; long_chirp_lut[1653] = 8'd254; long_chirp_lut[1654] = 8'd195; long_chirp_lut[1655] = 8'd 73;
long_chirp_lut[1656] = 8'd 2; long_chirp_lut[1657] = 8'd 47; long_chirp_lut[1658] = 8'd167; long_chirp_lut[1659] = 8'd251; long_chirp_lut[1660] = 8'd220; long_chirp_lut[1661] = 8'd103; long_chirp_lut[1662] = 8'd 9; long_chirp_lut[1663] = 8'd 25;
long_chirp_lut[1664] = 8'd137; long_chirp_lut[1665] = 8'd240; long_chirp_lut[1666] = 8'd238; long_chirp_lut[1667] = 8'd133; long_chirp_lut[1668] = 8'd 23; long_chirp_lut[1669] = 8'd 11; long_chirp_lut[1670] = 8'd107; long_chirp_lut[1671] = 8'd223;
long_chirp_lut[1672] = 8'd249; long_chirp_lut[1673] = 8'd162; long_chirp_lut[1674] = 8'd 42; long_chirp_lut[1675] = 8'd 3; long_chirp_lut[1676] = 8'd 80; long_chirp_lut[1677] = 8'd202; long_chirp_lut[1678] = 8'd254; long_chirp_lut[1679] = 8'd187;
long_chirp_lut[1680] = 8'd 64; long_chirp_lut[1681] = 8'd 1; long_chirp_lut[1682] = 8'd 57; long_chirp_lut[1683] = 8'd179; long_chirp_lut[1684] = 8'd253; long_chirp_lut[1685] = 8'd209; long_chirp_lut[1686] = 8'd 88; long_chirp_lut[1687] = 8'd 4;
long_chirp_lut[1688] = 8'd 37; long_chirp_lut[1689] = 8'd155; long_chirp_lut[1690] = 8'd247; long_chirp_lut[1691] = 8'd226; long_chirp_lut[1692] = 8'd112; long_chirp_lut[1693] = 8'd 12; long_chirp_lut[1694] = 8'd 22; long_chirp_lut[1695] = 8'd132;
long_chirp_lut[1696] = 8'd238; long_chirp_lut[1697] = 8'd239; long_chirp_lut[1698] = 8'd135; long_chirp_lut[1699] = 8'd 23; long_chirp_lut[1700] = 8'd 11; long_chirp_lut[1701] = 8'd109; long_chirp_lut[1702] = 8'd225; long_chirp_lut[1703] = 8'd248;
long_chirp_lut[1704] = 8'd157; long_chirp_lut[1705] = 8'd 37; long_chirp_lut[1706] = 8'd 4; long_chirp_lut[1707] = 8'd 88; long_chirp_lut[1708] = 8'd210; long_chirp_lut[1709] = 8'd253; long_chirp_lut[1710] = 8'd176; long_chirp_lut[1711] = 8'd 53;
long_chirp_lut[1712] = 8'd 1; long_chirp_lut[1713] = 8'd 70; long_chirp_lut[1714] = 8'd194; long_chirp_lut[1715] = 8'd254; long_chirp_lut[1716] = 8'd193; long_chirp_lut[1717] = 8'd 69; long_chirp_lut[1718] = 8'd 1; long_chirp_lut[1719] = 8'd 54;
long_chirp_lut[1720] = 8'd178; long_chirp_lut[1721] = 8'd253; long_chirp_lut[1722] = 8'd208; long_chirp_lut[1723] = 8'd 85; long_chirp_lut[1724] = 8'd 3; long_chirp_lut[1725] = 8'd 41; long_chirp_lut[1726] = 8'd162; long_chirp_lut[1727] = 8'd250;
long_chirp_lut[1728] = 8'd220; long_chirp_lut[1729] = 8'd101; long_chirp_lut[1730] = 8'd 8; long_chirp_lut[1731] = 8'd 30; long_chirp_lut[1732] = 8'd146; long_chirp_lut[1733] = 8'd245; long_chirp_lut[1734] = 8'd230; long_chirp_lut[1735] = 8'd116;
long_chirp_lut[1736] = 8'd 13; long_chirp_lut[1737] = 8'd 21; long_chirp_lut[1738] = 8'd132; long_chirp_lut[1739] = 8'd239; long_chirp_lut[1740] = 8'd237; long_chirp_lut[1741] = 8'd130; long_chirp_lut[1742] = 8'd 20; long_chirp_lut[1743] = 8'd 14;
long_chirp_lut[1744] = 8'd119; long_chirp_lut[1745] = 8'd232; long_chirp_lut[1746] = 8'd243; long_chirp_lut[1747] = 8'd142; long_chirp_lut[1748] = 8'd 27; long_chirp_lut[1749] = 8'd 9; long_chirp_lut[1750] = 8'd107; long_chirp_lut[1751] = 8'd225;
long_chirp_lut[1752] = 8'd247; long_chirp_lut[1753] = 8'd153; long_chirp_lut[1754] = 8'd 34; long_chirp_lut[1755] = 8'd 6; long_chirp_lut[1756] = 8'd 97; long_chirp_lut[1757] = 8'd218; long_chirp_lut[1758] = 8'd250; long_chirp_lut[1759] = 8'd162;
long_chirp_lut[1760] = 8'd 40; long_chirp_lut[1761] = 8'd 4; long_chirp_lut[1762] = 8'd 88; long_chirp_lut[1763] = 8'd212; long_chirp_lut[1764] = 8'd252; long_chirp_lut[1765] = 8'd171; long_chirp_lut[1766] = 8'd 46; long_chirp_lut[1767] = 8'd 2;
long_chirp_lut[1768] = 8'd 81; long_chirp_lut[1769] = 8'd206; long_chirp_lut[1770] = 8'd253; long_chirp_lut[1771] = 8'd177; long_chirp_lut[1772] = 8'd 52; long_chirp_lut[1773] = 8'd 1; long_chirp_lut[1774] = 8'd 75; long_chirp_lut[1775] = 8'd201;
long_chirp_lut[1776] = 8'd254; long_chirp_lut[1777] = 8'd182; long_chirp_lut[1778] = 8'd 56; long_chirp_lut[1779] = 8'd 1; long_chirp_lut[1780] = 8'd 71; long_chirp_lut[1781] = 8'd197; long_chirp_lut[1782] = 8'd254; long_chirp_lut[1783] = 8'd186;
long_chirp_lut[1784] = 8'd 60; long_chirp_lut[1785] = 8'd 1; long_chirp_lut[1786] = 8'd 67; long_chirp_lut[1787] = 8'd194; long_chirp_lut[1788] = 8'd254; long_chirp_lut[1789] = 8'd189; long_chirp_lut[1790] = 8'd 62; long_chirp_lut[1791] = 8'd 1;
long_chirp_lut[1792] = 8'd 65; long_chirp_lut[1793] = 8'd192; long_chirp_lut[1794] = 8'd254; long_chirp_lut[1795] = 8'd191; long_chirp_lut[1796] = 8'd 64; long_chirp_lut[1797] = 8'd 1; long_chirp_lut[1798] = 8'd 64; long_chirp_lut[1799] = 8'd191;
long_chirp_lut[1800] = 8'd255; long_chirp_lut[1801] = 8'd191; long_chirp_lut[1802] = 8'd 64; long_chirp_lut[1803] = 8'd 1; long_chirp_lut[1804] = 8'd 64; long_chirp_lut[1805] = 8'd191; long_chirp_lut[1806] = 8'd254; long_chirp_lut[1807] = 8'd190;
long_chirp_lut[1808] = 8'd 63; long_chirp_lut[1809] = 8'd 1; long_chirp_lut[1810] = 8'd 66; long_chirp_lut[1811] = 8'd193; long_chirp_lut[1812] = 8'd254; long_chirp_lut[1813] = 8'd188; long_chirp_lut[1814] = 8'd 61; long_chirp_lut[1815] = 8'd 1;
long_chirp_lut[1816] = 8'd 68; long_chirp_lut[1817] = 8'd196; long_chirp_lut[1818] = 8'd254; long_chirp_lut[1819] = 8'd185; long_chirp_lut[1820] = 8'd 58; long_chirp_lut[1821] = 8'd 1; long_chirp_lut[1822] = 8'd 72; long_chirp_lut[1823] = 8'd199;
long_chirp_lut[1824] = 8'd254; long_chirp_lut[1825] = 8'd181; long_chirp_lut[1826] = 8'd 54; long_chirp_lut[1827] = 8'd 1; long_chirp_lut[1828] = 8'd 77; long_chirp_lut[1829] = 8'd204; long_chirp_lut[1830] = 8'd253; long_chirp_lut[1831] = 8'd175;
long_chirp_lut[1832] = 8'd 48; long_chirp_lut[1833] = 8'd 2; long_chirp_lut[1834] = 8'd 83; long_chirp_lut[1835] = 8'd209; long_chirp_lut[1836] = 8'd252; long_chirp_lut[1837] = 8'd168; long_chirp_lut[1838] = 8'd 42; long_chirp_lut[1839] = 8'd 4;
long_chirp_lut[1840] = 8'd 91; long_chirp_lut[1841] = 8'd216; long_chirp_lut[1842] = 8'd250; long_chirp_lut[1843] = 8'd159; long_chirp_lut[1844] = 8'd 36; long_chirp_lut[1845] = 8'd 6; long_chirp_lut[1846] = 8'd100; long_chirp_lut[1847] = 8'd222;
long_chirp_lut[1848] = 8'd247; long_chirp_lut[1849] = 8'd150; long_chirp_lut[1850] = 8'd 29; long_chirp_lut[1851] = 8'd 9; long_chirp_lut[1852] = 8'd111; long_chirp_lut[1853] = 8'd229; long_chirp_lut[1854] = 8'd243; long_chirp_lut[1855] = 8'd138;
long_chirp_lut[1856] = 8'd 22; long_chirp_lut[1857] = 8'd 14; long_chirp_lut[1858] = 8'd123; long_chirp_lut[1859] = 8'd236; long_chirp_lut[1860] = 8'd237; long_chirp_lut[1861] = 8'd125; long_chirp_lut[1862] = 8'd 15; long_chirp_lut[1863] = 8'd 21;
long_chirp_lut[1864] = 8'd137; long_chirp_lut[1865] = 8'd243; long_chirp_lut[1866] = 8'd230; long_chirp_lut[1867] = 8'd111; long_chirp_lut[1868] = 8'd 9; long_chirp_lut[1869] = 8'd 30; long_chirp_lut[1870] = 8'd151; long_chirp_lut[1871] = 8'd248;
long_chirp_lut[1872] = 8'd220; long_chirp_lut[1873] = 8'd 96; long_chirp_lut[1874] = 8'd 4; long_chirp_lut[1875] = 8'd 41; long_chirp_lut[1876] = 8'd167; long_chirp_lut[1877] = 8'd252; long_chirp_lut[1878] = 8'd208; long_chirp_lut[1879] = 8'd 80;
long_chirp_lut[1880] = 8'd 1; long_chirp_lut[1881] = 8'd 54; long_chirp_lut[1882] = 8'd183; long_chirp_lut[1883] = 8'd254; long_chirp_lut[1884] = 8'd193; long_chirp_lut[1885] = 8'd 64; long_chirp_lut[1886] = 8'd 1; long_chirp_lut[1887] = 8'd 70;
long_chirp_lut[1888] = 8'd199; long_chirp_lut[1889] = 8'd254; long_chirp_lut[1890] = 8'd176; long_chirp_lut[1891] = 8'd 48; long_chirp_lut[1892] = 8'd 3; long_chirp_lut[1893] = 8'd 88; long_chirp_lut[1894] = 8'd215; long_chirp_lut[1895] = 8'd250;
long_chirp_lut[1896] = 8'd157; long_chirp_lut[1897] = 8'd 33; long_chirp_lut[1898] = 8'd 8; long_chirp_lut[1899] = 8'd109; long_chirp_lut[1900] = 8'd229; long_chirp_lut[1901] = 8'd243; long_chirp_lut[1902] = 8'd135; long_chirp_lut[1903] = 8'd 19;
long_chirp_lut[1904] = 8'd 18; long_chirp_lut[1905] = 8'd132; long_chirp_lut[1906] = 8'd241; long_chirp_lut[1907] = 8'd231; long_chirp_lut[1908] = 8'd112; long_chirp_lut[1909] = 8'd 9; long_chirp_lut[1910] = 8'd 31; long_chirp_lut[1911] = 8'd155;
long_chirp_lut[1912] = 8'd250; long_chirp_lut[1913] = 8'd215; long_chirp_lut[1914] = 8'd 88; long_chirp_lut[1915] = 8'd 2; long_chirp_lut[1916] = 8'd 50; long_chirp_lut[1917] = 8'd179; long_chirp_lut[1918] = 8'd254; long_chirp_lut[1919] = 8'd195;
long_chirp_lut[1920] = 8'd 64; long_chirp_lut[1921] = 8'd 1; long_chirp_lut[1922] = 8'd 72; long_chirp_lut[1923] = 8'd202; long_chirp_lut[1924] = 8'd253; long_chirp_lut[1925] = 8'd171; long_chirp_lut[1926] = 8'd 42; long_chirp_lut[1927] = 8'd 4;
long_chirp_lut[1928] = 8'd 98; long_chirp_lut[1929] = 8'd223; long_chirp_lut[1930] = 8'd246; long_chirp_lut[1931] = 8'd143; long_chirp_lut[1932] = 8'd 23; long_chirp_lut[1933] = 8'd 15; long_chirp_lut[1934] = 8'd127; long_chirp_lut[1935] = 8'd240;
long_chirp_lut[1936] = 8'd233; long_chirp_lut[1937] = 8'd113; long_chirp_lut[1938] = 8'd 9; long_chirp_lut[1939] = 8'd 32; long_chirp_lut[1940] = 8'd157; long_chirp_lut[1941] = 8'd251; long_chirp_lut[1942] = 8'd212; long_chirp_lut[1943] = 8'd 83;
long_chirp_lut[1944] = 8'd 2; long_chirp_lut[1945] = 8'd 55; long_chirp_lut[1946] = 8'd186; long_chirp_lut[1947] = 8'd254; long_chirp_lut[1948] = 8'd186; long_chirp_lut[1949] = 8'd 55; long_chirp_lut[1950] = 8'd 2; long_chirp_lut[1951] = 8'd 84;
long_chirp_lut[1952] = 8'd213; long_chirp_lut[1953] = 8'd250; long_chirp_lut[1954] = 8'd155; long_chirp_lut[1955] = 8'd 30; long_chirp_lut[1956] = 8'd 10; long_chirp_lut[1957] = 8'd117; long_chirp_lut[1958] = 8'd235; long_chirp_lut[1959] = 8'd237;
long_chirp_lut[1960] = 8'd120; long_chirp_lut[1961] = 8'd 11; long_chirp_lut[1962] = 8'd 28; long_chirp_lut[1963] = 8'd153; long_chirp_lut[1964] = 8'd250; long_chirp_lut[1965] = 8'd214; long_chirp_lut[1966] = 8'd 85; long_chirp_lut[1967] = 8'd 2;
long_chirp_lut[1968] = 8'd 55; long_chirp_lut[1969] = 8'd187; long_chirp_lut[1970] = 8'd254; long_chirp_lut[1971] = 8'd184; long_chirp_lut[1972] = 8'd 52; long_chirp_lut[1973] = 8'd 2; long_chirp_lut[1974] = 8'd 89; long_chirp_lut[1975] = 8'd218;
long_chirp_lut[1976] = 8'd248; long_chirp_lut[1977] = 8'd147; long_chirp_lut[1978] = 8'd 25; long_chirp_lut[1979] = 8'd 14; long_chirp_lut[1980] = 8'd127; long_chirp_lut[1981] = 8'd241; long_chirp_lut[1982] = 8'd230; long_chirp_lut[1983] = 8'd107;
long_chirp_lut[1984] = 8'd 7; long_chirp_lut[1985] = 8'd 38; long_chirp_lut[1986] = 8'd167; long_chirp_lut[1987] = 8'd253; long_chirp_lut[1988] = 8'd201; long_chirp_lut[1989] = 8'd 69; long_chirp_lut[1990] = 8'd 1; long_chirp_lut[1991] = 8'd 72;
long_chirp_lut[1992] = 8'd204; long_chirp_lut[1993] = 8'd252; long_chirp_lut[1994] = 8'd163; long_chirp_lut[1995] = 8'd 35; long_chirp_lut[1996] = 8'd 8; long_chirp_lut[1997] = 8'd113; long_chirp_lut[1998] = 8'd234; long_chirp_lut[1999] = 8'd237;
long_chirp_lut[2000] = 8'd120; long_chirp_lut[2001] = 8'd 11; long_chirp_lut[2002] = 8'd 30; long_chirp_lut[2003] = 8'd157; long_chirp_lut[2004] = 8'd251; long_chirp_lut[2005] = 8'd209; long_chirp_lut[2006] = 8'd 77; long_chirp_lut[2007] = 8'd 1;
long_chirp_lut[2008] = 8'd 65; long_chirp_lut[2009] = 8'd199; long_chirp_lut[2010] = 8'd253; long_chirp_lut[2011] = 8'd169; long_chirp_lut[2012] = 8'd 38; long_chirp_lut[2013] = 8'd 7; long_chirp_lut[2014] = 8'd109; long_chirp_lut[2015] = 8'd232;
long_chirp_lut[2016] = 8'd239; long_chirp_lut[2017] = 8'd122; long_chirp_lut[2018] = 8'd 11; long_chirp_lut[2019] = 8'd 30; long_chirp_lut[2020] = 8'd157; long_chirp_lut[2021] = 8'd251; long_chirp_lut[2022] = 8'd208; long_chirp_lut[2023] = 8'd 75;
long_chirp_lut[2024] = 8'd 1; long_chirp_lut[2025] = 8'd 68; long_chirp_lut[2026] = 8'd201; long_chirp_lut[2027] = 8'd253; long_chirp_lut[2028] = 8'd164; long_chirp_lut[2029] = 8'd 35; long_chirp_lut[2030] = 8'd 9; long_chirp_lut[2031] = 8'd116;
long_chirp_lut[2032] = 8'd236; long_chirp_lut[2033] = 8'd235; long_chirp_lut[2034] = 8'd114; long_chirp_lut[2035] = 8'd 8; long_chirp_lut[2036] = 8'd 36; long_chirp_lut[2037] = 8'd167; long_chirp_lut[2038] = 8'd253; long_chirp_lut[2039] = 8'd199;
long_chirp_lut[2040] = 8'd 64; long_chirp_lut[2041] = 8'd 1; long_chirp_lut[2042] = 8'd 80; long_chirp_lut[2043] = 8'd213; long_chirp_lut[2044] = 8'd249; long_chirp_lut[2045] = 8'd149; long_chirp_lut[2046] = 8'd 24; long_chirp_lut[2047] = 8'd 16;
long_chirp_lut[2048] = 8'd133; long_chirp_lut[2049] = 8'd244; long_chirp_lut[2050] = 8'd224; long_chirp_lut[2051] = 8'd 95; long_chirp_lut[2052] = 8'd 3; long_chirp_lut[2053] = 8'd 52; long_chirp_lut[2054] = 8'd186; long_chirp_lut[2055] = 8'd254;
long_chirp_lut[2056] = 8'd179; long_chirp_lut[2057] = 8'd 45; long_chirp_lut[2058] = 8'd 5; long_chirp_lut[2059] = 8'd103; long_chirp_lut[2060] = 8'd229; long_chirp_lut[2061] = 8'd240; long_chirp_lut[2062] = 8'd123; long_chirp_lut[2063] = 8'd 11;
long_chirp_lut[2064] = 8'd 31; long_chirp_lut[2065] = 8'd161; long_chirp_lut[2066] = 8'd252; long_chirp_lut[2067] = 8'd202; long_chirp_lut[2068] = 8'd 67; long_chirp_lut[2069] = 8'd 1; long_chirp_lut[2070] = 8'd 79; long_chirp_lut[2071] = 8'd212;
long_chirp_lut[2072] = 8'd249; long_chirp_lut[2073] = 8'd147; long_chirp_lut[2074] = 8'd 23; long_chirp_lut[2075] = 8'd 18; long_chirp_lut[2076] = 8'd138; long_chirp_lut[2077] = 8'd246; long_chirp_lut[2078] = 8'd219; long_chirp_lut[2079] = 8'd 87;
long_chirp_lut[2080] = 8'd 1; long_chirp_lut[2081] = 8'd 60; long_chirp_lut[2082] = 8'd196; long_chirp_lut[2083] = 8'd253; long_chirp_lut[2084] = 8'd166; long_chirp_lut[2085] = 8'd 35; long_chirp_lut[2086] = 8'd 9; long_chirp_lut[2087] = 8'd120;
long_chirp_lut[2088] = 8'd239; long_chirp_lut[2089] = 8'd230; long_chirp_lut[2090] = 8'd104; long_chirp_lut[2091] = 8'd 4; long_chirp_lut[2092] = 8'd 47; long_chirp_lut[2093] = 8'd182; long_chirp_lut[2094] = 8'd254; long_chirp_lut[2095] = 8'd181;
long_chirp_lut[2096] = 8'd 46; long_chirp_lut[2097] = 8'd 5; long_chirp_lut[2098] = 8'd106; long_chirp_lut[2099] = 8'd232; long_chirp_lut[2100] = 8'd237; long_chirp_lut[2101] = 8'd116; long_chirp_lut[2102] = 8'd 8; long_chirp_lut[2103] = 8'd 38;
long_chirp_lut[2104] = 8'd171; long_chirp_lut[2105] = 8'd254; long_chirp_lut[2106] = 8'd190; long_chirp_lut[2107] = 8'd 54; long_chirp_lut[2108] = 8'd 3; long_chirp_lut[2109] = 8'd 96; long_chirp_lut[2110] = 8'd226; long_chirp_lut[2111] = 8'd242;
long_chirp_lut[2112] = 8'd125; long_chirp_lut[2113] = 8'd 11; long_chirp_lut[2114] = 8'd 33; long_chirp_lut[2115] = 8'd164; long_chirp_lut[2116] = 8'd253; long_chirp_lut[2117] = 8'd196; long_chirp_lut[2118] = 8'd 59; long_chirp_lut[2119] = 8'd 2;
long_chirp_lut[2120] = 8'd 91; long_chirp_lut[2121] = 8'd223; long_chirp_lut[2122] = 8'd243; long_chirp_lut[2123] = 8'd129; long_chirp_lut[2124] = 8'd 13; long_chirp_lut[2125] = 8'd 31; long_chirp_lut[2126] = 8'd162; long_chirp_lut[2127] = 8'd253;
long_chirp_lut[2128] = 8'd198; long_chirp_lut[2129] = 8'd 60; long_chirp_lut[2130] = 8'd 2; long_chirp_lut[2131] = 8'd 90; long_chirp_lut[2132] = 8'd223; long_chirp_lut[2133] = 8'd243; long_chirp_lut[2134] = 8'd128; long_chirp_lut[2135] = 8'd 12;
long_chirp_lut[2136] = 8'd 31; long_chirp_lut[2137] = 8'd163; long_chirp_lut[2138] = 8'd253; long_chirp_lut[2139] = 8'd195; long_chirp_lut[2140] = 8'd 58; long_chirp_lut[2141] = 8'd 2; long_chirp_lut[2142] = 8'd 94; long_chirp_lut[2143] = 8'd225;
long_chirp_lut[2144] = 8'd242; long_chirp_lut[2145] = 8'd123; long_chirp_lut[2146] = 8'd 10; long_chirp_lut[2147] = 8'd 35; long_chirp_lut[2148] = 8'd169; long_chirp_lut[2149] = 8'd254; long_chirp_lut[2150] = 8'd189; long_chirp_lut[2151] = 8'd 52;
long_chirp_lut[2152] = 8'd 4; long_chirp_lut[2153] = 8'd102; long_chirp_lut[2154] = 8'd231; long_chirp_lut[2155] = 8'd237; long_chirp_lut[2156] = 8'd114; long_chirp_lut[2157] = 8'd 7; long_chirp_lut[2158] = 8'd 43; long_chirp_lut[2159] = 8'd179;
long_chirp_lut[2160] = 8'd255; long_chirp_lut[2161] = 8'd179; long_chirp_lut[2162] = 8'd 42; long_chirp_lut[2163] = 8'd 7; long_chirp_lut[2164] = 8'd115; long_chirp_lut[2165] = 8'd238; long_chirp_lut[2166] = 8'd230; long_chirp_lut[2167] = 8'd100;
long_chirp_lut[2168] = 8'd 3; long_chirp_lut[2169] = 8'd 54; long_chirp_lut[2170] = 8'd193; long_chirp_lut[2171] = 8'd254; long_chirp_lut[2172] = 8'd164; long_chirp_lut[2173] = 8'd 31; long_chirp_lut[2174] = 8'd 13; long_chirp_lut[2175] = 8'd132;
long_chirp_lut[2176] = 8'd245; long_chirp_lut[2177] = 8'd218; long_chirp_lut[2178] = 8'd 83; long_chirp_lut[2179] = 8'd 1; long_chirp_lut[2180] = 8'd 71; long_chirp_lut[2181] = 8'd209; long_chirp_lut[2182] = 8'd250; long_chirp_lut[2183] = 8'd144;
long_chirp_lut[2184] = 8'd 19; long_chirp_lut[2185] = 8'd 24; long_chirp_lut[2186] = 8'd153; long_chirp_lut[2187] = 8'd252; long_chirp_lut[2188] = 8'd201; long_chirp_lut[2189] = 8'd 62; long_chirp_lut[2190] = 8'd 2; long_chirp_lut[2191] = 8'd 93;
long_chirp_lut[2192] = 8'd226; long_chirp_lut[2193] = 8'd241; long_chirp_lut[2194] = 8'd119; long_chirp_lut[2195] = 8'd 8; long_chirp_lut[2196] = 8'd 41; long_chirp_lut[2197] = 8'd178; long_chirp_lut[2198] = 8'd254; long_chirp_lut[2199] = 8'd178;
long_chirp_lut[2200] = 8'd 40; long_chirp_lut[2201] = 8'd 8; long_chirp_lut[2202] = 8'd120; long_chirp_lut[2203] = 8'd241; long_chirp_lut[2204] = 8'd225; long_chirp_lut[2205] = 8'd 91; long_chirp_lut[2206] = 8'd 1; long_chirp_lut[2207] = 8'd 65;
long_chirp_lut[2208] = 8'd204; long_chirp_lut[2209] = 8'd251; long_chirp_lut[2210] = 8'd148; long_chirp_lut[2211] = 8'd 20; long_chirp_lut[2212] = 8'd 23; long_chirp_lut[2213] = 8'd153; long_chirp_lut[2214] = 8'd252; long_chirp_lut[2215] = 8'd200;
long_chirp_lut[2216] = 8'd 60; long_chirp_lut[2217] = 8'd 2; long_chirp_lut[2218] = 8'd 97; long_chirp_lut[2219] = 8'd229; long_chirp_lut[2220] = 8'd237; long_chirp_lut[2221] = 8'd112; long_chirp_lut[2222] = 8'd 5; long_chirp_lut[2223] = 8'd 48;
long_chirp_lut[2224] = 8'd187; long_chirp_lut[2225] = 8'd254; long_chirp_lut[2226] = 8'd166; long_chirp_lut[2227] = 8'd 31; long_chirp_lut[2228] = 8'd 14; long_chirp_lut[2229] = 8'd136; long_chirp_lut[2230] = 8'd247; long_chirp_lut[2231] = 8'd212;
long_chirp_lut[2232] = 8'd 73; long_chirp_lut[2233] = 8'd 1; long_chirp_lut[2234] = 8'd 83; long_chirp_lut[2235] = 8'd220; long_chirp_lut[2236] = 8'd243; long_chirp_lut[2237] = 8'd124; long_chirp_lut[2238] = 8'd 9; long_chirp_lut[2239] = 8'd 39;
long_chirp_lut[2240] = 8'd178; long_chirp_lut[2241] = 8'd254; long_chirp_lut[2242] = 8'd175; long_chirp_lut[2243] = 8'd 37; long_chirp_lut[2244] = 8'd 10; long_chirp_lut[2245] = 8'd128; long_chirp_lut[2246] = 8'd245; long_chirp_lut[2247] = 8'd217;
long_chirp_lut[2248] = 8'd 79; long_chirp_lut[2249] = 8'd 1; long_chirp_lut[2250] = 8'd 79; long_chirp_lut[2251] = 8'd217; long_chirp_lut[2252] = 8'd245; long_chirp_lut[2253] = 8'd127; long_chirp_lut[2254] = 8'd 10; long_chirp_lut[2255] = 8'd 38;
long_chirp_lut[2256] = 8'd177; long_chirp_lut[2257] = 8'd254; long_chirp_lut[2258] = 8'd175; long_chirp_lut[2259] = 8'd 37; long_chirp_lut[2260] = 8'd 11; long_chirp_lut[2261] = 8'd130; long_chirp_lut[2262] = 8'd246; long_chirp_lut[2263] = 8'd215;
long_chirp_lut[2264] = 8'd 76; long_chirp_lut[2265] = 8'd 1; long_chirp_lut[2266] = 8'd 83; long_chirp_lut[2267] = 8'd221; long_chirp_lut[2268] = 8'd242; long_chirp_lut[2269] = 8'd121; long_chirp_lut[2270] = 8'd 8; long_chirp_lut[2271] = 8'd 44;
long_chirp_lut[2272] = 8'd184; long_chirp_lut[2273] = 8'd254; long_chirp_lut[2274] = 8'd166; long_chirp_lut[2275] = 8'd 30; long_chirp_lut[2276] = 8'd 16; long_chirp_lut[2277] = 8'd141; long_chirp_lut[2278] = 8'd250; long_chirp_lut[2279] = 8'd206;
long_chirp_lut[2280] = 8'd 64; long_chirp_lut[2281] = 8'd 2; long_chirp_lut[2282] = 8'd 97; long_chirp_lut[2283] = 8'd230; long_chirp_lut[2284] = 8'd235; long_chirp_lut[2285] = 8'd105; long_chirp_lut[2286] = 8'd 3; long_chirp_lut[2287] = 8'd 57;
long_chirp_lut[2288] = 8'd199; long_chirp_lut[2289] = 8'd251; long_chirp_lut[2290] = 8'd148; long_chirp_lut[2291] = 8'd 19; long_chirp_lut[2292] = 8'd 26; long_chirp_lut[2293] = 8'd161; long_chirp_lut[2294] = 8'd254; long_chirp_lut[2295] = 8'd187;
long_chirp_lut[2296] = 8'd 46; long_chirp_lut[2297] = 8'd 7; long_chirp_lut[2298] = 8'd120; long_chirp_lut[2299] = 8'd243; long_chirp_lut[2300] = 8'd220; long_chirp_lut[2301] = 8'd 81; long_chirp_lut[2302] = 8'd 1; long_chirp_lut[2303] = 8'd 81;
long_chirp_lut[2304] = 8'd220; long_chirp_lut[2305] = 8'd242; long_chirp_lut[2306] = 8'd119; long_chirp_lut[2307] = 8'd 7; long_chirp_lut[2308] = 8'd 47; long_chirp_lut[2309] = 8'd189; long_chirp_lut[2310] = 8'd253; long_chirp_lut[2311] = 8'd158;
long_chirp_lut[2312] = 8'd 24; long_chirp_lut[2313] = 8'd 21; long_chirp_lut[2314] = 8'd153; long_chirp_lut[2315] = 8'd253; long_chirp_lut[2316] = 8'd193; long_chirp_lut[2317] = 8'd 50; long_chirp_lut[2318] = 8'd 5; long_chirp_lut[2319] = 8'd116;
long_chirp_lut[2320] = 8'd241; long_chirp_lut[2321] = 8'd222; long_chirp_lut[2322] = 8'd 83; long_chirp_lut[2323] = 8'd 1; long_chirp_lut[2324] = 8'd 80; long_chirp_lut[2325] = 8'd220; long_chirp_lut[2326] = 8'd242; long_chirp_lut[2327] = 8'd118;
long_chirp_lut[2328] = 8'd 6; long_chirp_lut[2329] = 8'd 49; long_chirp_lut[2330] = 8'd193; long_chirp_lut[2331] = 8'd253; long_chirp_lut[2332] = 8'd153; long_chirp_lut[2333] = 8'd 20; long_chirp_lut[2334] = 8'd 25; long_chirp_lut[2335] = 8'd161;
long_chirp_lut[2336] = 8'd254; long_chirp_lut[2337] = 8'd185; long_chirp_lut[2338] = 8'd 42; long_chirp_lut[2339] = 8'd 9; long_chirp_lut[2340] = 8'd127; long_chirp_lut[2341] = 8'd246; long_chirp_lut[2342] = 8'd212; long_chirp_lut[2343] = 8'd 70;
long_chirp_lut[2344] = 8'd 1; long_chirp_lut[2345] = 8'd 95; long_chirp_lut[2346] = 8'd231; long_chirp_lut[2347] = 8'd234; long_chirp_lut[2348] = 8'd100; long_chirp_lut[2349] = 8'd 2; long_chirp_lut[2350] = 8'd 66; long_chirp_lut[2351] = 8'd209;
long_chirp_lut[2352] = 8'd247; long_chirp_lut[2353] = 8'd131; long_chirp_lut[2354] = 8'd 10; long_chirp_lut[2355] = 8'd 41; long_chirp_lut[2356] = 8'd183; long_chirp_lut[2357] = 8'd254; long_chirp_lut[2358] = 8'd161; long_chirp_lut[2359] = 8'd 25;
long_chirp_lut[2360] = 8'd 21; long_chirp_lut[2361] = 8'd155; long_chirp_lut[2362] = 8'd253; long_chirp_lut[2363] = 8'd188; long_chirp_lut[2364] = 8'd 45; long_chirp_lut[2365] = 8'd 8; long_chirp_lut[2366] = 8'd127; long_chirp_lut[2367] = 8'd246;
long_chirp_lut[2368] = 8'd212; long_chirp_lut[2369] = 8'd 68; long_chirp_lut[2370] = 8'd 2; long_chirp_lut[2371] = 8'd 99; long_chirp_lut[2372] = 8'd233; long_chirp_lut[2373] = 8'd230; long_chirp_lut[2374] = 8'd 93; long_chirp_lut[2375] = 8'd 1;
long_chirp_lut[2376] = 8'd 73; long_chirp_lut[2377] = 8'd216; long_chirp_lut[2378] = 8'd243; long_chirp_lut[2379] = 8'd119; long_chirp_lut[2380] = 8'd 6; long_chirp_lut[2381] = 8'd 51; long_chirp_lut[2382] = 8'd196; long_chirp_lut[2383] = 8'd252;
long_chirp_lut[2384] = 8'd145; long_chirp_lut[2385] = 8'd 15; long_chirp_lut[2386] = 8'd 33; long_chirp_lut[2387] = 8'd174; long_chirp_lut[2388] = 8'd254; long_chirp_lut[2389] = 8'd169; long_chirp_lut[2390] = 8'd 29; long_chirp_lut[2391] = 8'd 18;
long_chirp_lut[2392] = 8'd151; long_chirp_lut[2393] = 8'd253; long_chirp_lut[2394] = 8'd190; long_chirp_lut[2395] = 8'd 46; long_chirp_lut[2396] = 8'd 8; long_chirp_lut[2397] = 8'd128; long_chirp_lut[2398] = 8'd247; long_chirp_lut[2399] = 8'd209;
long_chirp_lut[2400] = 8'd 64; long_chirp_lut[2401] = 8'd 2; long_chirp_lut[2402] = 8'd106; long_chirp_lut[2403] = 8'd238; long_chirp_lut[2404] = 8'd225; long_chirp_lut[2405] = 8'd 84; long_chirp_lut[2406] = 8'd 1; long_chirp_lut[2407] = 8'd 85;
long_chirp_lut[2408] = 8'd226; long_chirp_lut[2409] = 8'd237; long_chirp_lut[2410] = 8'd104; long_chirp_lut[2411] = 8'd 2; long_chirp_lut[2412] = 8'd 66; long_chirp_lut[2413] = 8'd212; long_chirp_lut[2414] = 8'd246; long_chirp_lut[2415] = 8'd123;
long_chirp_lut[2416] = 8'd 7; long_chirp_lut[2417] = 8'd 50; long_chirp_lut[2418] = 8'd196; long_chirp_lut[2419] = 8'd251; long_chirp_lut[2420] = 8'd142; long_chirp_lut[2421] = 8'd 14; long_chirp_lut[2422] = 8'd 36; long_chirp_lut[2423] = 8'd180;
long_chirp_lut[2424] = 8'd254; long_chirp_lut[2425] = 8'd160; long_chirp_lut[2426] = 8'd 23; long_chirp_lut[2427] = 8'd 25; long_chirp_lut[2428] = 8'd164; long_chirp_lut[2429] = 8'd254; long_chirp_lut[2430] = 8'd176; long_chirp_lut[2431] = 8'd 33;
long_chirp_lut[2432] = 8'd 16; long_chirp_lut[2433] = 8'd148; long_chirp_lut[2434] = 8'd252; long_chirp_lut[2435] = 8'd191; long_chirp_lut[2436] = 8'd 45; long_chirp_lut[2437] = 8'd 9; long_chirp_lut[2438] = 8'd132; long_chirp_lut[2439] = 8'd249;
long_chirp_lut[2440] = 8'd203; long_chirp_lut[2441] = 8'd 56; long_chirp_lut[2442] = 8'd 5; long_chirp_lut[2443] = 8'd117; long_chirp_lut[2444] = 8'd244; long_chirp_lut[2445] = 8'd214; long_chirp_lut[2446] = 8'd 69; long_chirp_lut[2447] = 8'd 2;
long_chirp_lut[2448] = 8'd104; long_chirp_lut[2449] = 8'd237; long_chirp_lut[2450] = 8'd224; long_chirp_lut[2451] = 8'd 81; long_chirp_lut[2452] = 8'd 1; long_chirp_lut[2453] = 8'd 91; long_chirp_lut[2454] = 8'd231; long_chirp_lut[2455] = 8'd231;
long_chirp_lut[2456] = 8'd 92; long_chirp_lut[2457] = 8'd 1; long_chirp_lut[2458] = 8'd 80; long_chirp_lut[2459] = 8'd223; long_chirp_lut[2460] = 8'd237; long_chirp_lut[2461] = 8'd103; long_chirp_lut[2462] = 8'd 2; long_chirp_lut[2463] = 8'd 70;
long_chirp_lut[2464] = 8'd216; long_chirp_lut[2465] = 8'd242; long_chirp_lut[2466] = 8'd114; long_chirp_lut[2467] = 8'd 4; long_chirp_lut[2468] = 8'd 61; long_chirp_lut[2469] = 8'd209; long_chirp_lut[2470] = 8'd246; long_chirp_lut[2471] = 8'd123;
long_chirp_lut[2472] = 8'd 6; long_chirp_lut[2473] = 8'd 54; long_chirp_lut[2474] = 8'd201; long_chirp_lut[2475] = 8'd249; long_chirp_lut[2476] = 8'd132; long_chirp_lut[2477] = 8'd 9; long_chirp_lut[2478] = 8'd 47; long_chirp_lut[2479] = 8'd195;
long_chirp_lut[2480] = 8'd251; long_chirp_lut[2481] = 8'd139; long_chirp_lut[2482] = 8'd 11; long_chirp_lut[2483] = 8'd 42; long_chirp_lut[2484] = 8'd189; long_chirp_lut[2485] = 8'd252; long_chirp_lut[2486] = 8'd146; long_chirp_lut[2487] = 8'd 14;
long_chirp_lut[2488] = 8'd 37; long_chirp_lut[2489] = 8'd183; long_chirp_lut[2490] = 8'd253; long_chirp_lut[2491] = 8'd152; long_chirp_lut[2492] = 8'd 17; long_chirp_lut[2493] = 8'd 33; long_chirp_lut[2494] = 8'd178; long_chirp_lut[2495] = 8'd254;
long_chirp_lut[2496] = 8'd157; long_chirp_lut[2497] = 8'd 19; long_chirp_lut[2498] = 8'd 30; long_chirp_lut[2499] = 8'd174; long_chirp_lut[2500] = 8'd254; long_chirp_lut[2501] = 8'd160; long_chirp_lut[2502] = 8'd 21; long_chirp_lut[2503] = 8'd 28;
long_chirp_lut[2504] = 8'd171; long_chirp_lut[2505] = 8'd254; long_chirp_lut[2506] = 8'd163; long_chirp_lut[2507] = 8'd 23; long_chirp_lut[2508] = 8'd 26; long_chirp_lut[2509] = 8'd169; long_chirp_lut[2510] = 8'd254; long_chirp_lut[2511] = 8'd165;
long_chirp_lut[2512] = 8'd 24; long_chirp_lut[2513] = 8'd 25; long_chirp_lut[2514] = 8'd167; long_chirp_lut[2515] = 8'd254; long_chirp_lut[2516] = 8'd166; long_chirp_lut[2517] = 8'd 25; long_chirp_lut[2518] = 8'd 25; long_chirp_lut[2519] = 8'd167;
long_chirp_lut[2520] = 8'd255; long_chirp_lut[2521] = 8'd167; long_chirp_lut[2522] = 8'd 25; long_chirp_lut[2523] = 8'd 25; long_chirp_lut[2524] = 8'd167; long_chirp_lut[2525] = 8'd254; long_chirp_lut[2526] = 8'd166; long_chirp_lut[2527] = 8'd 24;
long_chirp_lut[2528] = 8'd 25; long_chirp_lut[2529] = 8'd168; long_chirp_lut[2530] = 8'd254; long_chirp_lut[2531] = 8'd165; long_chirp_lut[2532] = 8'd 23; long_chirp_lut[2533] = 8'd 27; long_chirp_lut[2534] = 8'd170; long_chirp_lut[2535] = 8'd254;
long_chirp_lut[2536] = 8'd162; long_chirp_lut[2537] = 8'd 22; long_chirp_lut[2538] = 8'd 28; long_chirp_lut[2539] = 8'd173; long_chirp_lut[2540] = 8'd254; long_chirp_lut[2541] = 8'd159; long_chirp_lut[2542] = 8'd 20; long_chirp_lut[2543] = 8'd 31;
long_chirp_lut[2544] = 8'd177; long_chirp_lut[2545] = 8'd254; long_chirp_lut[2546] = 8'd155; long_chirp_lut[2547] = 8'd 17; long_chirp_lut[2548] = 8'd 34; long_chirp_lut[2549] = 8'd181; long_chirp_lut[2550] = 8'd253; long_chirp_lut[2551] = 8'd150;
long_chirp_lut[2552] = 8'd 15; long_chirp_lut[2553] = 8'd 38; long_chirp_lut[2554] = 8'd186; long_chirp_lut[2555] = 8'd252; long_chirp_lut[2556] = 8'd143; long_chirp_lut[2557] = 8'd 12; long_chirp_lut[2558] = 8'd 43; long_chirp_lut[2559] = 8'd192;
long_chirp_lut[2560] = 8'd251; long_chirp_lut[2561] = 8'd136; long_chirp_lut[2562] = 8'd 9; long_chirp_lut[2563] = 8'd 48; long_chirp_lut[2564] = 8'd199; long_chirp_lut[2565] = 8'd249; long_chirp_lut[2566] = 8'd128; long_chirp_lut[2567] = 8'd 6;
long_chirp_lut[2568] = 8'd 55; long_chirp_lut[2569] = 8'd206; long_chirp_lut[2570] = 8'd246; long_chirp_lut[2571] = 8'd119; long_chirp_lut[2572] = 8'd 4; long_chirp_lut[2573] = 8'd 63; long_chirp_lut[2574] = 8'd213; long_chirp_lut[2575] = 8'd242;
long_chirp_lut[2576] = 8'd110; long_chirp_lut[2577] = 8'd 2; long_chirp_lut[2578] = 8'd 72; long_chirp_lut[2579] = 8'd220; long_chirp_lut[2580] = 8'd237; long_chirp_lut[2581] = 8'd 99; long_chirp_lut[2582] = 8'd 1; long_chirp_lut[2583] = 8'd 82;
long_chirp_lut[2584] = 8'd228; long_chirp_lut[2585] = 8'd231; long_chirp_lut[2586] = 8'd 88; long_chirp_lut[2587] = 8'd 1; long_chirp_lut[2588] = 8'd 94; long_chirp_lut[2589] = 8'd235; long_chirp_lut[2590] = 8'd224; long_chirp_lut[2591] = 8'd 76;
long_chirp_lut[2592] = 8'd 2; long_chirp_lut[2593] = 8'd106; long_chirp_lut[2594] = 8'd241; long_chirp_lut[2595] = 8'd214; long_chirp_lut[2596] = 8'd 64; long_chirp_lut[2597] = 8'd 4; long_chirp_lut[2598] = 8'd120; long_chirp_lut[2599] = 8'd247;
long_chirp_lut[2600] = 8'd203; long_chirp_lut[2601] = 8'd 52; long_chirp_lut[2602] = 8'd 8; long_chirp_lut[2603] = 8'd135; long_chirp_lut[2604] = 8'd251; long_chirp_lut[2605] = 8'd191; long_chirp_lut[2606] = 8'd 40; long_chirp_lut[2607] = 8'd 14;
long_chirp_lut[2608] = 8'd151; long_chirp_lut[2609] = 8'd254; long_chirp_lut[2610] = 8'd176; long_chirp_lut[2611] = 8'd 29; long_chirp_lut[2612] = 8'd 23; long_chirp_lut[2613] = 8'd167; long_chirp_lut[2614] = 8'd254; long_chirp_lut[2615] = 8'd160;
long_chirp_lut[2616] = 8'd 19; long_chirp_lut[2617] = 8'd 34; long_chirp_lut[2618] = 8'd183; long_chirp_lut[2619] = 8'd253; long_chirp_lut[2620] = 8'd142; long_chirp_lut[2621] = 8'd 11; long_chirp_lut[2622] = 8'd 47; long_chirp_lut[2623] = 8'd199;
long_chirp_lut[2624] = 8'd248; long_chirp_lut[2625] = 8'd123; long_chirp_lut[2626] = 8'd 4; long_chirp_lut[2627] = 8'd 63; long_chirp_lut[2628] = 8'd214; long_chirp_lut[2629] = 8'd241; long_chirp_lut[2630] = 8'd104; long_chirp_lut[2631] = 8'd 1;
long_chirp_lut[2632] = 8'd 81; long_chirp_lut[2633] = 8'd228; long_chirp_lut[2634] = 8'd230; long_chirp_lut[2635] = 8'd 84; long_chirp_lut[2636] = 8'd 1; long_chirp_lut[2637] = 8'd101; long_chirp_lut[2638] = 8'd240; long_chirp_lut[2639] = 8'd216;
long_chirp_lut[2640] = 8'd 64; long_chirp_lut[2641] = 8'd 4; long_chirp_lut[2642] = 8'd123; long_chirp_lut[2643] = 8'd248; long_chirp_lut[2644] = 8'd198; long_chirp_lut[2645] = 8'd 46; long_chirp_lut[2646] = 8'd 12; long_chirp_lut[2647] = 8'd146;
long_chirp_lut[2648] = 8'd253; long_chirp_lut[2649] = 8'd178; long_chirp_lut[2650] = 8'd 29; long_chirp_lut[2651] = 8'd 23; long_chirp_lut[2652] = 8'd169; long_chirp_lut[2653] = 8'd254; long_chirp_lut[2654] = 8'd155; long_chirp_lut[2655] = 8'd 15;
long_chirp_lut[2656] = 8'd 39; long_chirp_lut[2657] = 8'd192; long_chirp_lut[2658] = 8'd250; long_chirp_lut[2659] = 8'd130; long_chirp_lut[2660] = 8'd 6; long_chirp_lut[2661] = 8'd 60; long_chirp_lut[2662] = 8'd213; long_chirp_lut[2663] = 8'd241;
long_chirp_lut[2664] = 8'd104; long_chirp_lut[2665] = 8'd 1; long_chirp_lut[2666] = 8'd 83; long_chirp_lut[2667] = 8'd230; long_chirp_lut[2668] = 8'd227; long_chirp_lut[2669] = 8'd 78; long_chirp_lut[2670] = 8'd 2; long_chirp_lut[2671] = 8'd110;
long_chirp_lut[2672] = 8'd244; long_chirp_lut[2673] = 8'd207; long_chirp_lut[2674] = 8'd 54; long_chirp_lut[2675] = 8'd 8; long_chirp_lut[2676] = 8'd138; long_chirp_lut[2677] = 8'd252; long_chirp_lut[2678] = 8'd183; long_chirp_lut[2679] = 8'd 32;
long_chirp_lut[2680] = 8'd 21; long_chirp_lut[2681] = 8'd167; long_chirp_lut[2682] = 8'd254; long_chirp_lut[2683] = 8'd155; long_chirp_lut[2684] = 8'd 15; long_chirp_lut[2685] = 8'd 41; long_chirp_lut[2686] = 8'd194; long_chirp_lut[2687] = 8'd249;
long_chirp_lut[2688] = 8'd125; long_chirp_lut[2689] = 8'd 4; long_chirp_lut[2690] = 8'd 66; long_chirp_lut[2691] = 8'd218; long_chirp_lut[2692] = 8'd237; long_chirp_lut[2693] = 8'd 94; long_chirp_lut[2694] = 8'd 1; long_chirp_lut[2695] = 8'd 95;
long_chirp_lut[2696] = 8'd238; long_chirp_lut[2697] = 8'd217; long_chirp_lut[2698] = 8'd 64; long_chirp_lut[2699] = 8'd 5; long_chirp_lut[2700] = 8'd127; long_chirp_lut[2701] = 8'd250; long_chirp_lut[2702] = 8'd191; long_chirp_lut[2703] = 8'd 38;
long_chirp_lut[2704] = 8'd 18; long_chirp_lut[2705] = 8'd161; long_chirp_lut[2706] = 8'd254; long_chirp_lut[2707] = 8'd159; long_chirp_lut[2708] = 8'd 17; long_chirp_lut[2709] = 8'd 39; long_chirp_lut[2710] = 8'd193; long_chirp_lut[2711] = 8'd250;
long_chirp_lut[2712] = 8'd125; long_chirp_lut[2713] = 8'd 4; long_chirp_lut[2714] = 8'd 67; long_chirp_lut[2715] = 8'd220; long_chirp_lut[2716] = 8'd235; long_chirp_lut[2717] = 8'd 90; long_chirp_lut[2718] = 8'd 1; long_chirp_lut[2719] = 8'd101;
long_chirp_lut[2720] = 8'd241; long_chirp_lut[2721] = 8'd211; long_chirp_lut[2722] = 8'd 56; long_chirp_lut[2723] = 8'd 8; long_chirp_lut[2724] = 8'd138; long_chirp_lut[2725] = 8'd253; long_chirp_lut[2726] = 8'd180; long_chirp_lut[2727] = 8'd 29;
long_chirp_lut[2728] = 8'd 25; long_chirp_lut[2729] = 8'd175; long_chirp_lut[2730] = 8'd253; long_chirp_lut[2731] = 8'd143; long_chirp_lut[2732] = 8'd 9; long_chirp_lut[2733] = 8'd 53; long_chirp_lut[2734] = 8'd209; long_chirp_lut[2735] = 8'd242;
long_chirp_lut[2736] = 8'd104; long_chirp_lut[2737] = 8'd 1; long_chirp_lut[2738] = 8'd 88; long_chirp_lut[2739] = 8'd235; long_chirp_lut[2740] = 8'd220; long_chirp_lut[2741] = 8'd 66; long_chirp_lut[2742] = 8'd 5; long_chirp_lut[2743] = 8'd128;
long_chirp_lut[2744] = 8'd251; long_chirp_lut[2745] = 8'd187; long_chirp_lut[2746] = 8'd 34; long_chirp_lut[2747] = 8'd 21; long_chirp_lut[2748] = 8'd169; long_chirp_lut[2749] = 8'd254; long_chirp_lut[2750] = 8'd148; long_chirp_lut[2751] = 8'd 11;
long_chirp_lut[2752] = 8'd 50; long_chirp_lut[2753] = 8'd206; long_chirp_lut[2754] = 8'd243; long_chirp_lut[2755] = 8'd105; long_chirp_lut[2756] = 8'd 1; long_chirp_lut[2757] = 8'd 88; long_chirp_lut[2758] = 8'd235; long_chirp_lut[2759] = 8'd219;
long_chirp_lut[2760] = 8'd 64; long_chirp_lut[2761] = 8'd 5; long_chirp_lut[2762] = 8'd132; long_chirp_lut[2763] = 8'd252; long_chirp_lut[2764] = 8'd183; long_chirp_lut[2765] = 8'd 30; long_chirp_lut[2766] = 8'd 25; long_chirp_lut[2767] = 8'd176;
long_chirp_lut[2768] = 8'd253; long_chirp_lut[2769] = 8'd139; long_chirp_lut[2770] = 8'd 8; long_chirp_lut[2771] = 8'd 58; long_chirp_lut[2772] = 8'd214; long_chirp_lut[2773] = 8'd238; long_chirp_lut[2774] = 8'd 93; long_chirp_lut[2775] = 8'd 1;
long_chirp_lut[2776] = 8'd101; long_chirp_lut[2777] = 8'd242; long_chirp_lut[2778] = 8'd208; long_chirp_lut[2779] = 8'd 51; long_chirp_lut[2780] = 8'd 11; long_chirp_lut[2781] = 8'd149; long_chirp_lut[2782] = 8'd254; long_chirp_lut[2783] = 8'd166;
long_chirp_lut[2784] = 8'd 19; long_chirp_lut[2785] = 8'd 38; long_chirp_lut[2786] = 8'd194; long_chirp_lut[2787] = 8'd248; long_chirp_lut[2788] = 8'd117; long_chirp_lut[2789] = 8'd 2; long_chirp_lut[2790] = 8'd 79; long_chirp_lut[2791] = 8'd230;
long_chirp_lut[2792] = 8'd224; long_chirp_lut[2793] = 8'd 70; long_chirp_lut[2794] = 8'd 4; long_chirp_lut[2795] = 8'd128; long_chirp_lut[2796] = 8'd251; long_chirp_lut[2797] = 8'd184; long_chirp_lut[2798] = 8'd 30; long_chirp_lut[2799] = 8'd 26;
long_chirp_lut[2800] = 8'd178; long_chirp_lut[2801] = 8'd253; long_chirp_lut[2802] = 8'd135; long_chirp_lut[2803] = 8'd 6; long_chirp_lut[2804] = 8'd 64; long_chirp_lut[2805] = 8'd220; long_chirp_lut[2806] = 8'd233; long_chirp_lut[2807] = 8'd 83;
long_chirp_lut[2808] = 8'd 2; long_chirp_lut[2809] = 8'd114; long_chirp_lut[2810] = 8'd247; long_chirp_lut[2811] = 8'd195; long_chirp_lut[2812] = 8'd 38; long_chirp_lut[2813] = 8'd 19; long_chirp_lut[2814] = 8'd167; long_chirp_lut[2815] = 8'd254;
long_chirp_lut[2816] = 8'd145; long_chirp_lut[2817] = 8'd 9; long_chirp_lut[2818] = 8'd 57; long_chirp_lut[2819] = 8'd214; long_chirp_lut[2820] = 8'd237; long_chirp_lut[2821] = 8'd 90; long_chirp_lut[2822] = 8'd 1; long_chirp_lut[2823] = 8'd108;
long_chirp_lut[2824] = 8'd245; long_chirp_lut[2825] = 8'd200; long_chirp_lut[2826] = 8'd 42; long_chirp_lut[2827] = 8'd 17; long_chirp_lut[2828] = 8'd164; long_chirp_lut[2829] = 8'd254; long_chirp_lut[2830] = 8'd148; long_chirp_lut[2831] = 8'd 10;
long_chirp_lut[2832] = 8'd 55; long_chirp_lut[2833] = 8'd213; long_chirp_lut[2834] = 8'd238; long_chirp_lut[2835] = 8'd 91; long_chirp_lut[2836] = 8'd 1; long_chirp_lut[2837] = 8'd109; long_chirp_lut[2838] = 8'd246; long_chirp_lut[2839] = 8'd199;
long_chirp_lut[2840] = 8'd 40; long_chirp_lut[2841] = 8'd 18; long_chirp_lut[2842] = 8'd167; long_chirp_lut[2843] = 8'd254; long_chirp_lut[2844] = 8'd143; long_chirp_lut[2845] = 8'd 8; long_chirp_lut[2846] = 8'd 60; long_chirp_lut[2847] = 8'd217;
long_chirp_lut[2848] = 8'd235; long_chirp_lut[2849] = 8'd 84; long_chirp_lut[2850] = 8'd 2; long_chirp_lut[2851] = 8'd116; long_chirp_lut[2852] = 8'd249; long_chirp_lut[2853] = 8'd191; long_chirp_lut[2854] = 8'd 34; long_chirp_lut[2855] = 8'd 24;
long_chirp_lut[2856] = 8'd177; long_chirp_lut[2857] = 8'd252; long_chirp_lut[2858] = 8'd132; long_chirp_lut[2859] = 8'd 4; long_chirp_lut[2860] = 8'd 71; long_chirp_lut[2861] = 8'd226; long_chirp_lut[2862] = 8'd227; long_chirp_lut[2863] = 8'd 71;
long_chirp_lut[2864] = 8'd 4; long_chirp_lut[2865] = 8'd132; long_chirp_lut[2866] = 8'd252; long_chirp_lut[2867] = 8'd176; long_chirp_lut[2868] = 8'd 23; long_chirp_lut[2869] = 8'd 35; long_chirp_lut[2870] = 8'd193; long_chirp_lut[2871] = 8'd248;
long_chirp_lut[2872] = 8'd113; long_chirp_lut[2873] = 8'd 1; long_chirp_lut[2874] = 8'd 89; long_chirp_lut[2875] = 8'd238; long_chirp_lut[2876] = 8'd212; long_chirp_lut[2877] = 8'd 53; long_chirp_lut[2878] = 8'd 12; long_chirp_lut[2879] = 8'd154;
long_chirp_lut[2880] = 8'd255; long_chirp_lut[2881] = 8'd154; long_chirp_lut[2882] = 8'd 11; long_chirp_lut[2883] = 8'd 53; long_chirp_lut[2884] = 8'd213; long_chirp_lut[2885] = 8'd237; long_chirp_lut[2886] = 8'd 88; long_chirp_lut[2887] = 8'd 1;
long_chirp_lut[2888] = 8'd115; long_chirp_lut[2889] = 8'd249; long_chirp_lut[2890] = 8'd189; long_chirp_lut[2891] = 8'd 32; long_chirp_lut[2892] = 8'd 26; long_chirp_lut[2893] = 8'd182; long_chirp_lut[2894] = 8'd251; long_chirp_lut[2895] = 8'd123;
long_chirp_lut[2896] = 8'd 2; long_chirp_lut[2897] = 8'd 81; long_chirp_lut[2898] = 8'd234; long_chirp_lut[2899] = 8'd217; long_chirp_lut[2900] = 8'd 58; long_chirp_lut[2901] = 8'd 9; long_chirp_lut[2902] = 8'd150; long_chirp_lut[2903] = 8'd254;
long_chirp_lut[2904] = 8'd157; long_chirp_lut[2905] = 8'd 12; long_chirp_lut[2906] = 8'd 52; long_chirp_lut[2907] = 8'd213; long_chirp_lut[2908] = 8'd237; long_chirp_lut[2909] = 8'd 86; long_chirp_lut[2910] = 8'd 2; long_chirp_lut[2911] = 8'd119;
long_chirp_lut[2912] = 8'd250; long_chirp_lut[2913] = 8'd185; long_chirp_lut[2914] = 8'd 28; long_chirp_lut[2915] = 8'd 31; long_chirp_lut[2916] = 8'd189; long_chirp_lut[2917] = 8'd249; long_chirp_lut[2918] = 8'd114; long_chirp_lut[2919] = 8'd 1;
long_chirp_lut[2920] = 8'd 91; long_chirp_lut[2921] = 8'd240; long_chirp_lut[2922] = 8'd208; long_chirp_lut[2923] = 8'd 47; long_chirp_lut[2924] = 8'd 16; long_chirp_lut[2925] = 8'd164; long_chirp_lut[2926] = 8'd254; long_chirp_lut[2927] = 8'd140;
long_chirp_lut[2928] = 8'd 6; long_chirp_lut[2929] = 8'd 68; long_chirp_lut[2930] = 8'd226; long_chirp_lut[2931] = 8'd225; long_chirp_lut[2932] = 8'd 67; long_chirp_lut[2933] = 8'd 6; long_chirp_lut[2934] = 8'd141; long_chirp_lut[2935] = 8'd254;
long_chirp_lut[2936] = 8'd162; long_chirp_lut[2937] = 8'd 14; long_chirp_lut[2938] = 8'd 49; long_chirp_lut[2939] = 8'd211; long_chirp_lut[2940] = 8'd237; long_chirp_lut[2941] = 8'd 86; long_chirp_lut[2942] = 8'd 2; long_chirp_lut[2943] = 8'd121;
long_chirp_lut[2944] = 8'd251; long_chirp_lut[2945] = 8'd181; long_chirp_lut[2946] = 8'd 24; long_chirp_lut[2947] = 8'd 35; long_chirp_lut[2948] = 8'd196; long_chirp_lut[2949] = 8'd246; long_chirp_lut[2950] = 8'd104; long_chirp_lut[2951] = 8'd 1;
long_chirp_lut[2952] = 8'd104; long_chirp_lut[2953] = 8'd246; long_chirp_lut[2954] = 8'd195; long_chirp_lut[2955] = 8'd 35; long_chirp_lut[2956] = 8'd 25; long_chirp_lut[2957] = 8'd182; long_chirp_lut[2958] = 8'd250; long_chirp_lut[2959] = 8'd119;
long_chirp_lut[2960] = 8'd 1; long_chirp_lut[2961] = 8'd 90; long_chirp_lut[2962] = 8'd240; long_chirp_lut[2963] = 8'd207; long_chirp_lut[2964] = 8'd 45; long_chirp_lut[2965] = 8'd 18; long_chirp_lut[2966] = 8'd170; long_chirp_lut[2967] = 8'd253;
long_chirp_lut[2968] = 8'd131; long_chirp_lut[2969] = 8'd 3; long_chirp_lut[2970] = 8'd 79; long_chirp_lut[2971] = 8'd234; long_chirp_lut[2972] = 8'd215; long_chirp_lut[2973] = 8'd 53; long_chirp_lut[2974] = 8'd 13; long_chirp_lut[2975] = 8'd161;
long_chirp_lut[2976] = 8'd254; long_chirp_lut[2977] = 8'd140; long_chirp_lut[2978] = 8'd 5; long_chirp_lut[2979] = 8'd 71; long_chirp_lut[2980] = 8'd229; long_chirp_lut[2981] = 8'd220; long_chirp_lut[2982] = 8'd 59; long_chirp_lut[2983] = 8'd 10;
long_chirp_lut[2984] = 8'd154; long_chirp_lut[2985] = 8'd254; long_chirp_lut[2986] = 8'd146; long_chirp_lut[2987] = 8'd 7; long_chirp_lut[2988] = 8'd 66; long_chirp_lut[2989] = 8'd226; long_chirp_lut[2990] = 8'd224; long_chirp_lut[2991] = 8'd 63;
long_chirp_lut[2992] = 8'd 9; long_chirp_lut[2993] = 8'd150; long_chirp_lut[2994] = 8'd254; long_chirp_lut[2995] = 8'd149; long_chirp_lut[2996] = 8'd 8; long_chirp_lut[2997] = 8'd 64; long_chirp_lut[2998] = 8'd225; long_chirp_lut[2999] = 8'd225;
long_chirp_lut[3000] = 8'd 64; long_chirp_lut[3001] = 8'd 8; long_chirp_lut[3002] = 8'd150; long_chirp_lut[3003] = 8'd254; long_chirp_lut[3004] = 8'd149; long_chirp_lut[3005] = 8'd 8; long_chirp_lut[3006] = 8'd 65; long_chirp_lut[3007] = 8'd225;
long_chirp_lut[3008] = 8'd224; long_chirp_lut[3009] = 8'd 63; long_chirp_lut[3010] = 8'd 9; long_chirp_lut[3011] = 8'd152; long_chirp_lut[3012] = 8'd254; long_chirp_lut[3013] = 8'd146; long_chirp_lut[3014] = 8'd 7; long_chirp_lut[3015] = 8'd 68;
long_chirp_lut[3016] = 8'd228; long_chirp_lut[3017] = 8'd221; long_chirp_lut[3018] = 8'd 59; long_chirp_lut[3019] = 8'd 11; long_chirp_lut[3020] = 8'd157; long_chirp_lut[3021] = 8'd254; long_chirp_lut[3022] = 8'd141; long_chirp_lut[3023] = 8'd 5;
long_chirp_lut[3024] = 8'd 73; long_chirp_lut[3025] = 8'd232; long_chirp_lut[3026] = 8'd216; long_chirp_lut[3027] = 8'd 53; long_chirp_lut[3028] = 8'd 14; long_chirp_lut[3029] = 8'd165; long_chirp_lut[3030] = 8'd253; long_chirp_lut[3031] = 8'd132;
long_chirp_lut[3032] = 8'd 3; long_chirp_lut[3033] = 8'd 82; long_chirp_lut[3034] = 8'd237; long_chirp_lut[3035] = 8'd209; long_chirp_lut[3036] = 8'd 45; long_chirp_lut[3037] = 8'd 19; long_chirp_lut[3038] = 8'd175; long_chirp_lut[3039] = 8'd251;
long_chirp_lut[3040] = 8'd120; long_chirp_lut[3041] = 8'd 1; long_chirp_lut[3042] = 8'd 94; long_chirp_lut[3043] = 8'd243; long_chirp_lut[3044] = 8'd198; long_chirp_lut[3045] = 8'd 35; long_chirp_lut[3046] = 8'd 27; long_chirp_lut[3047] = 8'd188;
long_chirp_lut[3048] = 8'd247; long_chirp_lut[3049] = 8'd105; long_chirp_lut[3050] = 8'd 1; long_chirp_lut[3051] = 8'd109; long_chirp_lut[3052] = 8'd249; long_chirp_lut[3053] = 8'd184; long_chirp_lut[3054] = 8'd 24; long_chirp_lut[3055] = 8'd 38;
long_chirp_lut[3056] = 8'd202; long_chirp_lut[3057] = 8'd241; long_chirp_lut[3058] = 8'd 88; long_chirp_lut[3059] = 8'd 2; long_chirp_lut[3060] = 8'd127; long_chirp_lut[3061] = 8'd253; long_chirp_lut[3062] = 8'd167; long_chirp_lut[3063] = 8'd 14;
long_chirp_lut[3064] = 8'd 53; long_chirp_lut[3065] = 8'd218; long_chirp_lut[3066] = 8'd230; long_chirp_lut[3067] = 8'd 69; long_chirp_lut[3068] = 8'd 7; long_chirp_lut[3069] = 8'd149; long_chirp_lut[3070] = 8'd254; long_chirp_lut[3071] = 8'd145;
long_chirp_lut[3072] = 8'd 6; long_chirp_lut[3073] = 8'd 73; long_chirp_lut[3074] = 8'd232; long_chirp_lut[3075] = 8'd214; long_chirp_lut[3076] = 8'd 49; long_chirp_lut[3077] = 8'd 17; long_chirp_lut[3078] = 8'd172; long_chirp_lut[3079] = 8'd252;
long_chirp_lut[3080] = 8'd120; long_chirp_lut[3081] = 8'd 1; long_chirp_lut[3082] = 8'd 97; long_chirp_lut[3083] = 8'd245; long_chirp_lut[3084] = 8'd193; long_chirp_lut[3085] = 8'd 30; long_chirp_lut[3086] = 8'd 33; long_chirp_lut[3087] = 8'd197;
long_chirp_lut[3088] = 8'd243; long_chirp_lut[3089] = 8'd 92; long_chirp_lut[3090] = 8'd 2; long_chirp_lut[3091] = 8'd125; long_chirp_lut[3092] = 8'd253; long_chirp_lut[3093] = 8'd167; long_chirp_lut[3094] = 8'd 14; long_chirp_lut[3095] = 8'd 55;
long_chirp_lut[3096] = 8'd220; long_chirp_lut[3097] = 8'd227; long_chirp_lut[3098] = 8'd 64; long_chirp_lut[3099] = 8'd 9; long_chirp_lut[3100] = 8'd157; long_chirp_lut[3101] = 8'd254; long_chirp_lut[3102] = 8'd135; long_chirp_lut[3103] = 8'd 3;
long_chirp_lut[3104] = 8'd 84; long_chirp_lut[3105] = 8'd240; long_chirp_lut[3106] = 8'd203; long_chirp_lut[3107] = 8'd 37; long_chirp_lut[3108] = 8'd 26; long_chirp_lut[3109] = 8'd189; long_chirp_lut[3110] = 8'd246; long_chirp_lut[3111] = 8'd100;
long_chirp_lut[3112] = 8'd 1; long_chirp_lut[3113] = 8'd120; long_chirp_lut[3114] = 8'd252; long_chirp_lut[3115] = 8'd171; long_chirp_lut[3116] = 8'd 15; long_chirp_lut[3117] = 8'd 53; long_chirp_lut[3118] = 8'd219; long_chirp_lut[3119] = 8'd228;
long_chirp_lut[3120] = 8'd 64; long_chirp_lut[3121] = 8'd 10; long_chirp_lut[3122] = 8'd158; long_chirp_lut[3123] = 8'd254; long_chirp_lut[3124] = 8'd132; long_chirp_lut[3125] = 8'd 2; long_chirp_lut[3126] = 8'd 89; long_chirp_lut[3127] = 8'd242;
long_chirp_lut[3128] = 8'd198; long_chirp_lut[3129] = 8'd 32; long_chirp_lut[3130] = 8'd 31; long_chirp_lut[3131] = 8'd197; long_chirp_lut[3132] = 8'd242; long_chirp_lut[3133] = 8'd 90; long_chirp_lut[3134] = 8'd 2; long_chirp_lut[3135] = 8'd132;
long_chirp_lut[3136] = 8'd254; long_chirp_lut[3137] = 8'd157; long_chirp_lut[3138] = 8'd 9; long_chirp_lut[3139] = 8'd 66; long_chirp_lut[3140] = 8'd229; long_chirp_lut[3141] = 8'd216; long_chirp_lut[3142] = 8'd 49; long_chirp_lut[3143] = 8'd 18;
long_chirp_lut[3144] = 8'd177; long_chirp_lut[3145] = 8'd250; long_chirp_lut[3146] = 8'd111; long_chirp_lut[3147] = 8'd 1; long_chirp_lut[3148] = 8'd111; long_chirp_lut[3149] = 8'd250; long_chirp_lut[3150] = 8'd176; long_chirp_lut[3151] = 8'd 18;
long_chirp_lut[3152] = 8'd 50; long_chirp_lut[3153] = 8'd217; long_chirp_lut[3154] = 8'd228; long_chirp_lut[3155] = 8'd 64; long_chirp_lut[3156] = 8'd 10; long_chirp_lut[3157] = 8'd161; long_chirp_lut[3158] = 8'd253; long_chirp_lut[3159] = 8'd126;
long_chirp_lut[3160] = 8'd 1; long_chirp_lut[3161] = 8'd 97; long_chirp_lut[3162] = 8'd246; long_chirp_lut[3163] = 8'd188; long_chirp_lut[3164] = 8'd 25; long_chirp_lut[3165] = 8'd 41; long_chirp_lut[3166] = 8'd209; long_chirp_lut[3167] = 8'd235;
long_chirp_lut[3168] = 8'd 73; long_chirp_lut[3169] = 8'd 7; long_chirp_lut[3170] = 8'd151; long_chirp_lut[3171] = 8'd254; long_chirp_lut[3172] = 8'd135; long_chirp_lut[3173] = 8'd 3; long_chirp_lut[3174] = 8'd 89; long_chirp_lut[3175] = 8'd243;
long_chirp_lut[3176] = 8'd195; long_chirp_lut[3177] = 8'd 29; long_chirp_lut[3178] = 8'd 36; long_chirp_lut[3179] = 8'd204; long_chirp_lut[3180] = 8'd237; long_chirp_lut[3181] = 8'd 78; long_chirp_lut[3182] = 8'd 5; long_chirp_lut[3183] = 8'd148;
long_chirp_lut[3184] = 8'd254; long_chirp_lut[3185] = 8'd138; long_chirp_lut[3186] = 8'd 3; long_chirp_lut[3187] = 8'd 87; long_chirp_lut[3188] = 8'd242; long_chirp_lut[3189] = 8'd195; long_chirp_lut[3190] = 8'd 29; long_chirp_lut[3191] = 8'd 36;
long_chirp_lut[3192] = 8'd204; long_chirp_lut[3193] = 8'd237; long_chirp_lut[3194] = 8'd 77; long_chirp_lut[3195] = 8'd 6; long_chirp_lut[3196] = 8'd150; long_chirp_lut[3197] = 8'd254; long_chirp_lut[3198] = 8'd135; long_chirp_lut[3199] = 8'd 2;
long_chirp_lut[3200] = 8'd 91; long_chirp_lut[3201] = 8'd244; long_chirp_lut[3202] = 8'd191; long_chirp_lut[3203] = 8'd 26; long_chirp_lut[3204] = 8'd 41; long_chirp_lut[3205] = 8'd209; long_chirp_lut[3206] = 8'd233; long_chirp_lut[3207] = 8'd 70;
long_chirp_lut[3208] = 8'd 9; long_chirp_lut[3209] = 8'd158; long_chirp_lut[3210] = 8'd253; long_chirp_lut[3211] = 8'd125; long_chirp_lut[3212] = 8'd 1; long_chirp_lut[3213] = 8'd101; long_chirp_lut[3214] = 8'd248; long_chirp_lut[3215] = 8'd181;
long_chirp_lut[3216] = 8'd 19; long_chirp_lut[3217] = 8'd 50; long_chirp_lut[3218] = 8'd219; long_chirp_lut[3219] = 8'd225; long_chirp_lut[3220] = 8'd 58; long_chirp_lut[3221] = 8'd 14; long_chirp_lut[3222] = 8'd172; long_chirp_lut[3223] = 8'd251;
long_chirp_lut[3224] = 8'd110; long_chirp_lut[3225] = 8'd 1; long_chirp_lut[3226] = 8'd118; long_chirp_lut[3227] = 8'd252; long_chirp_lut[3228] = 8'd164; long_chirp_lut[3229] = 8'd 11; long_chirp_lut[3230] = 8'd 66; long_chirp_lut[3231] = 8'd231;
long_chirp_lut[3232] = 8'd212; long_chirp_lut[3233] = 8'd 42; long_chirp_lut[3234] = 8'd 25; long_chirp_lut[3235] = 8'd191; long_chirp_lut[3236] = 8'd243; long_chirp_lut[3237] = 8'd 88; long_chirp_lut[3238] = 8'd 3; long_chirp_lut[3239] = 8'd141;
long_chirp_lut[3240] = 8'd255; long_chirp_lut[3241] = 8'd141; long_chirp_lut[3242] = 8'd 3; long_chirp_lut[3243] = 8'd 88; long_chirp_lut[3244] = 8'd244; long_chirp_lut[3245] = 8'd191; long_chirp_lut[3246] = 8'd 24; long_chirp_lut[3247] = 8'd 43;
long_chirp_lut[3248] = 8'd213; long_chirp_lut[3249] = 8'd229; long_chirp_lut[3250] = 8'd 62; long_chirp_lut[3251] = 8'd 12; long_chirp_lut[3252] = 8'd169; long_chirp_lut[3253] = 8'd251; long_chirp_lut[3254] = 8'd111; long_chirp_lut[3255] = 8'd 1;
long_chirp_lut[3256] = 8'd119; long_chirp_lut[3257] = 8'd253; long_chirp_lut[3258] = 8'd161; long_chirp_lut[3259] = 8'd 9; long_chirp_lut[3260] = 8'd 71; long_chirp_lut[3261] = 8'd235; long_chirp_lut[3262] = 8'd206; long_chirp_lut[3263] = 8'd 36;
long_chirp_lut[3264] = 8'd 31; long_chirp_lut[3265] = 8'd201; long_chirp_lut[3266] = 8'd238; long_chirp_lut[3267] = 8'd 76; long_chirp_lut[3268] = 8'd 7; long_chirp_lut[3269] = 8'd156; long_chirp_lut[3270] = 8'd253; long_chirp_lut[3271] = 8'd123;
long_chirp_lut[3272] = 8'd 1; long_chirp_lut[3273] = 8'd108; long_chirp_lut[3274] = 8'd251; long_chirp_lut[3275] = 8'd171; long_chirp_lut[3276] = 8'd 13; long_chirp_lut[3277] = 8'd 63; long_chirp_lut[3278] = 8'd230; long_chirp_lut[3279] = 8'd211;
long_chirp_lut[3280] = 8'd 40; long_chirp_lut[3281] = 8'd 27; long_chirp_lut[3282] = 8'd196; long_chirp_lut[3283] = 8'd240; long_chirp_lut[3284] = 8'd 80; long_chirp_lut[3285] = 8'd 6; long_chirp_lut[3286] = 8'd153; long_chirp_lut[3287] = 8'd254;
long_chirp_lut[3288] = 8'd125; long_chirp_lut[3289] = 8'd 1; long_chirp_lut[3290] = 8'd107; long_chirp_lut[3291] = 8'd251; long_chirp_lut[3292] = 8'd170; long_chirp_lut[3293] = 8'd 12; long_chirp_lut[3294] = 8'd 65; long_chirp_lut[3295] = 8'd232;
long_chirp_lut[3296] = 8'd209; long_chirp_lut[3297] = 8'd 38; long_chirp_lut[3298] = 8'd 30; long_chirp_lut[3299] = 8'd200; long_chirp_lut[3300] = 8'd237; long_chirp_lut[3301] = 8'd 74; long_chirp_lut[3302] = 8'd 8; long_chirp_lut[3303] = 8'd161;
long_chirp_lut[3304] = 8'd253; long_chirp_lut[3305] = 8'd116; long_chirp_lut[3306] = 8'd 1; long_chirp_lut[3307] = 8'd117; long_chirp_lut[3308] = 8'd253; long_chirp_lut[3309] = 8'd159; long_chirp_lut[3310] = 8'd 8; long_chirp_lut[3311] = 8'd 76;
long_chirp_lut[3312] = 8'd239; long_chirp_lut[3313] = 8'd198; long_chirp_lut[3314] = 8'd 28; long_chirp_lut[3315] = 8'd 41; long_chirp_lut[3316] = 8'd213; long_chirp_lut[3317] = 8'd228; long_chirp_lut[3318] = 8'd 59; long_chirp_lut[3319] = 8'd 15;
long_chirp_lut[3320] = 8'd178; long_chirp_lut[3321] = 8'd248; long_chirp_lut[3322] = 8'd 97; long_chirp_lut[3323] = 8'd 2; long_chirp_lut[3324] = 8'd138; long_chirp_lut[3325] = 8'd254; long_chirp_lut[3326] = 8'd137; long_chirp_lut[3327] = 8'd 2;
long_chirp_lut[3328] = 8'd 98; long_chirp_lut[3329] = 8'd248; long_chirp_lut[3330] = 8'd176; long_chirp_lut[3331] = 8'd 14; long_chirp_lut[3332] = 8'd 61; long_chirp_lut[3333] = 8'd230; long_chirp_lut[3334] = 8'd210; long_chirp_lut[3335] = 8'd 37;
long_chirp_lut[3336] = 8'd 31; long_chirp_lut[3337] = 8'd203; long_chirp_lut[3338] = 8'd235; long_chirp_lut[3339] = 8'd 69; long_chirp_lut[3340] = 8'd 11; long_chirp_lut[3341] = 8'd169; long_chirp_lut[3342] = 8'd250; long_chirp_lut[3343] = 8'd105;
long_chirp_lut[3344] = 8'd 1; long_chirp_lut[3345] = 8'd132; long_chirp_lut[3346] = 8'd254; long_chirp_lut[3347] = 8'd142; long_chirp_lut[3348] = 8'd 3; long_chirp_lut[3349] = 8'd 95; long_chirp_lut[3350] = 8'd247; long_chirp_lut[3351] = 8'd178;
long_chirp_lut[3352] = 8'd 15; long_chirp_lut[3353] = 8'd 61; long_chirp_lut[3354] = 8'd231; long_chirp_lut[3355] = 8'd209; long_chirp_lut[3356] = 8'd 36; long_chirp_lut[3357] = 8'd 33; long_chirp_lut[3358] = 8'd206; long_chirp_lut[3359] = 8'd233;
long_chirp_lut[3360] = 8'd 64; long_chirp_lut[3361] = 8'd 13; long_chirp_lut[3362] = 8'd175; long_chirp_lut[3363] = 8'd248; long_chirp_lut[3364] = 8'd 96; long_chirp_lut[3365] = 8'd 3; long_chirp_lut[3366] = 8'd141; long_chirp_lut[3367] = 8'd254;
long_chirp_lut[3368] = 8'd131; long_chirp_lut[3369] = 8'd 1; long_chirp_lut[3370] = 8'd107; long_chirp_lut[3371] = 8'd251; long_chirp_lut[3372] = 8'd164; long_chirp_lut[3373] = 8'd 9; long_chirp_lut[3374] = 8'd 75; long_chirp_lut[3375] = 8'd240;
long_chirp_lut[3376] = 8'd195; long_chirp_lut[3377] = 8'd 24; long_chirp_lut[3378] = 8'd 47; long_chirp_lut[3379] = 8'd220; long_chirp_lut[3380] = 8'd220; long_chirp_lut[3381] = 8'd 46; long_chirp_lut[3382] = 8'd 25; long_chirp_lut[3383] = 8'd196;
long_chirp_lut[3384] = 8'd239; long_chirp_lut[3385] = 8'd 73; long_chirp_lut[3386] = 8'd 9; long_chirp_lut[3387] = 8'd167; long_chirp_lut[3388] = 8'd250; long_chirp_lut[3389] = 8'd103; long_chirp_lut[3390] = 8'd 2; long_chirp_lut[3391] = 8'd136;
long_chirp_lut[3392] = 8'd254; long_chirp_lut[3393] = 8'd134; long_chirp_lut[3394] = 8'd 1; long_chirp_lut[3395] = 8'd106; long_chirp_lut[3396] = 8'd251; long_chirp_lut[3397] = 8'd164; long_chirp_lut[3398] = 8'd 8; long_chirp_lut[3399] = 8'd 77;
long_chirp_lut[3400] = 8'd241; long_chirp_lut[3401] = 8'd191; long_chirp_lut[3402] = 8'd 21; long_chirp_lut[3403] = 8'd 52; long_chirp_lut[3404] = 8'd225; long_chirp_lut[3405] = 8'd214; long_chirp_lut[3406] = 8'd 40; long_chirp_lut[3407] = 8'd 31;
long_chirp_lut[3408] = 8'd204; long_chirp_lut[3409] = 8'd233; long_chirp_lut[3410] = 8'd 62; long_chirp_lut[3411] = 8'd 15; long_chirp_lut[3412] = 8'd180; long_chirp_lut[3413] = 8'd246; long_chirp_lut[3414] = 8'd 88; long_chirp_lut[3415] = 8'd 5;
long_chirp_lut[3416] = 8'd154; long_chirp_lut[3417] = 8'd253; long_chirp_lut[3418] = 8'd114; long_chirp_lut[3419] = 8'd 1; long_chirp_lut[3420] = 8'd127; long_chirp_lut[3421] = 8'd254; long_chirp_lut[3422] = 8'd141; long_chirp_lut[3423] = 8'd 2;
long_chirp_lut[3424] = 8'd101; long_chirp_lut[3425] = 8'd250; long_chirp_lut[3426] = 8'd166; long_chirp_lut[3427] = 8'd 9; long_chirp_lut[3428] = 8'd 77; long_chirp_lut[3429] = 8'd241; long_chirp_lut[3430] = 8'd189; long_chirp_lut[3431] = 8'd 20;
long_chirp_lut[3432] = 8'd 55; long_chirp_lut[3433] = 8'd228; long_chirp_lut[3434] = 8'd210; long_chirp_lut[3435] = 8'd 35; long_chirp_lut[3436] = 8'd 36; long_chirp_lut[3437] = 8'd212; long_chirp_lut[3438] = 8'd227; long_chirp_lut[3439] = 8'd 53;
long_chirp_lut[3440] = 8'd 21; long_chirp_lut[3441] = 8'd192; long_chirp_lut[3442] = 8'd240; long_chirp_lut[3443] = 8'd 73; long_chirp_lut[3444] = 8'd 10; long_chirp_lut[3445] = 8'd171; long_chirp_lut[3446] = 8'd249; long_chirp_lut[3447] = 8'd 94;
long_chirp_lut[3448] = 8'd 4; long_chirp_lut[3449] = 8'd150; long_chirp_lut[3450] = 8'd253; long_chirp_lut[3451] = 8'd116; long_chirp_lut[3452] = 8'd 1; long_chirp_lut[3453] = 8'd128; long_chirp_lut[3454] = 8'd254; long_chirp_lut[3455] = 8'd138;
long_chirp_lut[3456] = 8'd 2; long_chirp_lut[3457] = 8'd106; long_chirp_lut[3458] = 8'd252; long_chirp_lut[3459] = 8'd159; long_chirp_lut[3460] = 8'd 6; long_chirp_lut[3461] = 8'd 86; long_chirp_lut[3462] = 8'd246; long_chirp_lut[3463] = 8'd178;
long_chirp_lut[3464] = 8'd 13; long_chirp_lut[3465] = 8'd 68; long_chirp_lut[3466] = 8'd237; long_chirp_lut[3467] = 8'd196; long_chirp_lut[3468] = 8'd 23; long_chirp_lut[3469] = 8'd 51; long_chirp_lut[3470] = 8'd226; long_chirp_lut[3471] = 8'd211;
long_chirp_lut[3472] = 8'd 35; long_chirp_lut[3473] = 8'd 37; long_chirp_lut[3474] = 8'd213; long_chirp_lut[3475] = 8'd224; long_chirp_lut[3476] = 8'd 49; long_chirp_lut[3477] = 8'd 25; long_chirp_lut[3478] = 8'd199; long_chirp_lut[3479] = 8'd235;
long_chirp_lut[3480] = 8'd 64; long_chirp_lut[3481] = 8'd 15; long_chirp_lut[3482] = 8'd183; long_chirp_lut[3483] = 8'd243; long_chirp_lut[3484] = 8'd 80; long_chirp_lut[3485] = 8'd 8; long_chirp_lut[3486] = 8'd167; long_chirp_lut[3487] = 8'd249;
long_chirp_lut[3488] = 8'd 96; long_chirp_lut[3489] = 8'd 4; long_chirp_lut[3490] = 8'd151; long_chirp_lut[3491] = 8'd253; long_chirp_lut[3492] = 8'd112; long_chirp_lut[3493] = 8'd 1; long_chirp_lut[3494] = 8'd136; long_chirp_lut[3495] = 8'd254;
long_chirp_lut[3496] = 8'd127; long_chirp_lut[3497] = 8'd 1; long_chirp_lut[3498] = 8'd120; long_chirp_lut[3499] = 8'd254; long_chirp_lut[3500] = 8'd142; long_chirp_lut[3501] = 8'd 2; long_chirp_lut[3502] = 8'd106; long_chirp_lut[3503] = 8'd252;
long_chirp_lut[3504] = 8'd157; long_chirp_lut[3505] = 8'd 5; long_chirp_lut[3506] = 8'd 92; long_chirp_lut[3507] = 8'd248; long_chirp_lut[3508] = 8'd170; long_chirp_lut[3509] = 8'd 9; long_chirp_lut[3510] = 8'd 79; long_chirp_lut[3511] = 8'd244;
long_chirp_lut[3512] = 8'd182; long_chirp_lut[3513] = 8'd 14; long_chirp_lut[3514] = 8'd 67; long_chirp_lut[3515] = 8'd238; long_chirp_lut[3516] = 8'd193; long_chirp_lut[3517] = 8'd 20; long_chirp_lut[3518] = 8'd 57; long_chirp_lut[3519] = 8'd231;
long_chirp_lut[3520] = 8'd203; long_chirp_lut[3521] = 8'd 27; long_chirp_lut[3522] = 8'd 47; long_chirp_lut[3523] = 8'd224; long_chirp_lut[3524] = 8'd212; long_chirp_lut[3525] = 8'd 35; long_chirp_lut[3526] = 8'd 39; long_chirp_lut[3527] = 8'd216;
long_chirp_lut[3528] = 8'd220; long_chirp_lut[3529] = 8'd 43; long_chirp_lut[3530] = 8'd 31; long_chirp_lut[3531] = 8'd209; long_chirp_lut[3532] = 8'd227; long_chirp_lut[3533] = 8'd 50; long_chirp_lut[3534] = 8'd 25; long_chirp_lut[3535] = 8'd201;
long_chirp_lut[3536] = 8'd233; long_chirp_lut[3537] = 8'd 58; long_chirp_lut[3538] = 8'd 20; long_chirp_lut[3539] = 8'd193; long_chirp_lut[3540] = 8'd237; long_chirp_lut[3541] = 8'd 66; long_chirp_lut[3542] = 8'd 15; long_chirp_lut[3543] = 8'd185;
long_chirp_lut[3544] = 8'd242; long_chirp_lut[3545] = 8'd 73; long_chirp_lut[3546] = 8'd 12; long_chirp_lut[3547] = 8'd178; long_chirp_lut[3548] = 8'd245; long_chirp_lut[3549] = 8'd 81; long_chirp_lut[3550] = 8'd 9; long_chirp_lut[3551] = 8'd171;
long_chirp_lut[3552] = 8'd247; long_chirp_lut[3553] = 8'd 87; long_chirp_lut[3554] = 8'd 6; long_chirp_lut[3555] = 8'd164; long_chirp_lut[3556] = 8'd249; long_chirp_lut[3557] = 8'd 94; long_chirp_lut[3558] = 8'd 5; long_chirp_lut[3559] = 8'd158;
long_chirp_lut[3560] = 8'd251; long_chirp_lut[3561] = 8'd100; long_chirp_lut[3562] = 8'd 3; long_chirp_lut[3563] = 8'd153; long_chirp_lut[3564] = 8'd252; long_chirp_lut[3565] = 8'd105; long_chirp_lut[3566] = 8'd 2; long_chirp_lut[3567] = 8'd148;
long_chirp_lut[3568] = 8'd253; long_chirp_lut[3569] = 8'd110; long_chirp_lut[3570] = 8'd 2; long_chirp_lut[3571] = 8'd143; long_chirp_lut[3572] = 8'd254; long_chirp_lut[3573] = 8'd114; long_chirp_lut[3574] = 8'd 1; long_chirp_lut[3575] = 8'd139;
long_chirp_lut[3576] = 8'd254; long_chirp_lut[3577] = 8'd118; long_chirp_lut[3578] = 8'd 1; long_chirp_lut[3579] = 8'd136; long_chirp_lut[3580] = 8'd254; long_chirp_lut[3581] = 8'd121; long_chirp_lut[3582] = 8'd 1; long_chirp_lut[3583] = 8'd133;
long_chirp_lut[3584] = 8'd254; long_chirp_lut[3585] = 8'd123; long_chirp_lut[3586] = 8'd 1; long_chirp_lut[3587] = 8'd131; long_chirp_lut[3588] = 8'd254; long_chirp_lut[3589] = 8'd125; long_chirp_lut[3590] = 8'd 1; long_chirp_lut[3591] = 8'd129;
long_chirp_lut[3592] = 8'd254; long_chirp_lut[3593] = 8'd127; long_chirp_lut[3594] = 8'd 1; long_chirp_lut[3595] = 8'd128; long_chirp_lut[3596] = 8'd254; long_chirp_lut[3597] = 8'd127; long_chirp_lut[3598] = 8'd 1; long_chirp_lut[3599] = 8'd128;
// Complete Short PLFM chirp LUT (0.5us, 30MHz to 10MHz)
short_chirp_lut[ 0] = 8'd255; short_chirp_lut[ 1] = 8'd237; short_chirp_lut[ 2] = 8'd187; short_chirp_lut[ 3] = 8'd118; short_chirp_lut[ 4] = 8'd 49; short_chirp_lut[ 5] = 8'd 6; short_chirp_lut[ 6] = 8'd 7; short_chirp_lut[ 7] = 8'd 54;
short_chirp_lut[ 8] = 8'd132; short_chirp_lut[ 9] = 8'd210; short_chirp_lut[10] = 8'd253; short_chirp_lut[11] = 8'd237; short_chirp_lut[12] = 8'd167; short_chirp_lut[13] = 8'd 75; short_chirp_lut[14] = 8'd 10; short_chirp_lut[15] = 8'd 10;
short_chirp_lut[16] = 8'd 80; short_chirp_lut[17] = 8'd180; short_chirp_lut[18] = 8'd248; short_chirp_lut[19] = 8'd237; short_chirp_lut[20] = 8'd150; short_chirp_lut[21] = 8'd 45; short_chirp_lut[22] = 8'd 1; short_chirp_lut[23] = 8'd 54;
short_chirp_lut[24] = 8'd167; short_chirp_lut[25] = 8'd249; short_chirp_lut[26] = 8'd228; short_chirp_lut[27] = 8'd118; short_chirp_lut[28] = 8'd 15; short_chirp_lut[29] = 8'd 18; short_chirp_lut[30] = 8'd127; short_chirp_lut[31] = 8'd238;
short_chirp_lut[32] = 8'd235; short_chirp_lut[33] = 8'd118; short_chirp_lut[34] = 8'd 10; short_chirp_lut[35] = 8'd 34; short_chirp_lut[36] = 8'd167; short_chirp_lut[37] = 8'd254; short_chirp_lut[38] = 8'd187; short_chirp_lut[39] = 8'd 45;
short_chirp_lut[40] = 8'd 8; short_chirp_lut[41] = 8'd129; short_chirp_lut[42] = 8'd248; short_chirp_lut[43] = 8'd201; short_chirp_lut[44] = 8'd 49; short_chirp_lut[45] = 8'd 10; short_chirp_lut[46] = 8'd145; short_chirp_lut[47] = 8'd254;
short_chirp_lut[48] = 8'd167; short_chirp_lut[49] = 8'd 17; short_chirp_lut[50] = 8'd 46; short_chirp_lut[51] = 8'd210; short_chirp_lut[52] = 8'd235; short_chirp_lut[53] = 8'd 75; short_chirp_lut[54] = 8'd 7; short_chirp_lut[55] = 8'd155;
short_chirp_lut[56] = 8'd253; short_chirp_lut[57] = 8'd118; short_chirp_lut[58] = 8'd 1; short_chirp_lut[59] = 8'd129;
end
//chirp counter
always @(posedge clk_100m or negedge reset_n) begin
if (!reset_n) begin
chirp_counter <= 6'd1;
end else begin
if (chirp__toggling) begin
if (chirp_counter == CHIRP_MAX) begin
chirp_counter <= 6'd1;
end else begin
chirp_counter <= chirp_counter + 6'd1;
end
end
end
end
// Elevation counter
always @(posedge clk_100m or negedge reset_n) begin
if (!reset_n) begin
elevation_counter <= 6'b1;
end else begin
if (elevation__toggling) begin
if (elevation_counter == ELEVATION_MAX) begin
elevation_counter <= 6'b1;
end else begin
elevation_counter <= elevation_counter + 6'b1;
end
end
end
end
// Azimuth counter
always @(posedge clk_100m or negedge reset_n) begin
if (!reset_n) begin
azimuth_counter <= 6'd1;
end else begin
if (azimuth__toggling) begin
if (azimuth_counter == AZIMUTH_MAX) begin
azimuth_counter <= 6'd1;
end else begin
azimuth_counter <= azimuth_counter + 6'd1;
end
end
end
end
// State register
always @(posedge clk_120m or negedge reset_n) begin
if (!reset_n) begin
current_state <= IDLE;
end else begin
current_state <= next_state;
end
end
// Next state logic
always @(*) begin
case (current_state)
IDLE: begin
if (chirp__toggling && mixers_enable)
next_state = LONG_CHIRP;
else
next_state = IDLE;
end
LONG_CHIRP: begin
if (sample_counter == T1_SAMPLES-1)
next_state = LONG_LISTEN;
else
next_state = LONG_CHIRP;
end
LONG_LISTEN: begin
if (sample_counter == T1_RADAR_LISTENING-1) begin
if (chirp_counter == (CHIRP_MAX/2)-1)
next_state = GUARD_TIME;
else
next_state = LONG_CHIRP;
end else begin
next_state = LONG_LISTEN;
end
end
GUARD_TIME: begin
if (sample_counter == GUARD_SAMPLES-1)
next_state = SHORT_CHIRP;
else
next_state = GUARD_TIME;
end
SHORT_CHIRP: begin
if (sample_counter == T2_SAMPLES-1)
next_state = SHORT_LISTEN;
else
next_state = SHORT_CHIRP;
end
SHORT_LISTEN: begin
if (sample_counter == T2_RADAR_LISTENING-1) begin
if (chirp_counter == CHIRP_MAX-1)
next_state = DONE;
else
next_state = SHORT_CHIRP;
end else begin
next_state = SHORT_LISTEN;
end
end
DONE: begin
next_state = IDLE;
end
default: begin
next_state = IDLE;
end
endcase
end
always @(posedge clk_120m or negedge reset_n) begin
if (!reset_n) begin
sample_counter <= 0;
chirp_counter <= 0;
chirp_valid <= 0;
chirp_done <= 0;
chirp_data <= 8'd128;
rf_switch_ctrl <= 1'b0;
adar_tr_1 <= 1'b0;
adar_tr_2 <= 1'b0;
adar_tr_3 <= 1'b0;
adar_tr_4 <= 1'b0;
end else if (mixers_enable) begin
// Default outputs
chirp_valid <= 0;
chirp_done <= 0;
rf_switch_ctrl <= 0;
{adar_tr_1, adar_tr_2, adar_tr_3, adar_tr_4} <= 4'b0000;
// Sample counter increment logic
if (current_state == LONG_CHIRP || current_state == LONG_LISTEN ||
current_state == GUARD_TIME || current_state == SHORT_CHIRP ||
current_state == SHORT_LISTEN) begin
if (sample_counter == get_max_counter(current_state) - 1) begin
sample_counter <= 0;
// Increment chirp counter at end of listen states
if (current_state == LONG_LISTEN || current_state == SHORT_LISTEN) begin
chirp_counter <= chirp_counter + 1;
end
end else begin
sample_counter <= sample_counter + 1;
end
end else begin
sample_counter <= 0;
end
// State-specific outputs
case (current_state)
IDLE: begin
chirp_data <= 8'd128;
end
LONG_CHIRP: begin
rf_switch_ctrl <= 1'b1;
{adar_tr_1, adar_tr_2, adar_tr_3, adar_tr_4} <= 4'b1111;
// CRITICAL FIX: Generate valid signal
if (sample_counter < T1_SAMPLES) begin
chirp_data <= long_chirp_lut[sample_counter];
chirp_valid <= 1'b1; // Valid during entire chirp
end else begin
chirp_data <= 8'd128;
end
end
LONG_LISTEN: begin
chirp_data <= 8'd128;
rf_switch_ctrl <= 1'b0;
end
GUARD_TIME: begin
chirp_data <= 8'd128;
rf_switch_ctrl <= 1'b0;
end
SHORT_CHIRP: begin
rf_switch_ctrl <= 1'b1;
{adar_tr_1, adar_tr_2, adar_tr_3, adar_tr_4} <= 4'b1111;
// CRITICAL FIX: Generate valid signal for short chirp
if (sample_counter < T2_SAMPLES) begin
chirp_data <= short_chirp_lut[sample_counter];
chirp_valid <= 1'b1; // Valid during entire chirp
end else begin
chirp_data <= 8'd128;
end
end
SHORT_LISTEN: begin
chirp_data <= 8'd128;
rf_switch_ctrl <= 1'b0;
end
DONE: begin
chirp_done <= 1'b1;
chirp_data <= 8'd128;
end
default: begin
chirp_data <= 8'd128;
end
endcase
end else begin
// Mixers disabled
chirp_data <= 8'd128;
chirp_valid <= 0;
chirp_done <= 0;
rf_switch_ctrl <= 0;
{adar_tr_1, adar_tr_2, adar_tr_3, adar_tr_4} <= 4'b0000;
sample_counter <= 0;
end
end
// Helper function to get max counter for each state
function [15:0] get_max_counter;
input [2:0] state;
begin
case (state)
LONG_CHIRP: get_max_counter = T1_SAMPLES;
LONG_LISTEN: get_max_counter = T1_RADAR_LISTENING;
GUARD_TIME: get_max_counter = GUARD_SAMPLES;
SHORT_CHIRP: get_max_counter = T2_SAMPLES;
SHORT_LISTEN: get_max_counter = T2_RADAR_LISTENING;
default: get_max_counter = 0;
endcase
end
endfunction
endmodule
+353
View File
@@ -0,0 +1,353 @@
`timescale 1ns / 1ps
module radar_receiver_final (
input wire clk, // 100MHz
input wire reset_n,
// ADC Physical Interface (LVDS Inputs)
input wire [7:0] adc_d_p, // ADC Data P (LVDS)
input wire [7:0] adc_d_n, // ADC Data N (LVDS)
input wire adc_dco_p, // Data Clock Output P (400MHz LVDS)
input wire adc_dco_n, // Data Clock Output N (400MHz LVDS)
output wire adc_pwdn,
output reg [31:0] doppler_output,
output reg doppler_valid,
output reg [4:0] doppler_bin,
output reg [5:0] range_bin
);
// ========== INTERNAL SIGNALS ==========
wire use_long_chirp;
wire [5:0] chirp_counter;
wire chirp_start;
wire azimuth_change;
wire elevation_change;
wire [1:0] segment_request;
wire mem_request;
wire [15:0] ref_i, ref_q;
wire mem_ready;
wire [15:0] adc_i_scaled, adc_q_scaled;
wire adc_valid_sync;
// Reference signals for the processing chain
wire [15:0] long_chirp_real, long_chirp_imag;
wire [15:0] short_chirp_real, short_chirp_imag;
// ========== DOPPLER PROCESSING SIGNALS ==========
wire [31:0] range_data_32bit;
wire range_data_valid;
wire new_chirp_frame;
// Doppler processor outputs
wire [31:0] doppler_spectrum;
wire doppler_spectrum_valid;
wire [4:0] doppler_bin_out;
wire [5:0] doppler_range_bin_out;
wire doppler_processing;
wire doppler_frame_done;
// ========== RANGE BIN DECIMATOR SIGNALS ==========
wire signed [15:0] decimated_range_i;
wire signed [15:0] decimated_range_q;
wire decimated_range_valid;
wire [5:0] decimated_range_bin;
// ========== MODULE INSTANTIATIONS ==========
reg clk_400m;
lvds_to_cmos_400m clk_400m_inst(
// ADC Physical Interface (LVDS Inputs)
.clk_400m_p(adc_dco_p), // Data Clock Output P (400MHz LVDS, 2.5V)
.clk_400m_n(adc_dco_n), // Data Clock Output N (400MHz LVDS, 2.5V)
.reset_n(reset_n), // Active-low reset
// CMOS Output Interface (400MHz Domain)
.clk_400m_cmos(clk_400m) // ADC data clock (CMOS, 3.3V)
);
// 1. ADC + CDC + AGC
// CMOS Output Interface (400MHz Domain)
wire [7:0] adc_data_cmos; // 8-bit ADC data (CMOS)
wire adc_dco_cmos; // ADC data clock (CMOS, 400MHz)
wire adc_valid; // Data valid signal
wire [7:0] cdc_data_cmos; // 8-bit ADC data (CMOS)
wire cdc_valid; // Data valid signal
ad9484_lvds_to_cmos_400m adc (
.adc_d_p(adc_d_p),
.adc_d_n(adc_d_n),
.adc_dco_p(adc_dco_p),
.adc_dco_n(adc_dco_n),
.reset_n(reset_n),
.adc_data_cmos(adc_data_cmos),
.adc_dco_cmos(adc_dco_cmos),
.adc_valid(adc_valid),
.adc_pwdn(adc_pwdn)
);
cdc_adc_to_processing #(
.WIDTH(8),
.STAGES(3)
)cdc(
.src_clk(adc_dco_cmos),
.dst_clk(clk_400m),
.reset_n(reset_n),
.src_data(adc_data_cmos),
.src_valid(adc_valid),
.dst_data(cdc_data_cmos),
.dst_valid(cdc_valid)
);
// 2. DDC Input Interface
wire signed [17:0] ddc_out_i;
wire signed [17:0] ddc_out_q;
wire ddc_valid_i;
wire ddc_valid_q;
ddc_400m_enhanced ddc(
.clk_400m(clk_400m), // 400MHz clock from ADC DCO
.clk_100m(clk), // 100MHz system clock //used by the 2 FIR
.reset_n(reset_n),
.adc_data(cdc_data_cmos), // ADC data at 400MHz (unsigned 0-255)
.adc_data_valid_i(cdc_valid), // Valid at 400MHz
.adc_data_valid_q(cdc_valid), // Valid at 400MHz
.baseband_i(ddc_out_i), // I output at 100MHz
.baseband_q(ddc_out_q), // Q output at 100MHz
.baseband_valid_i(ddc_valid_i), // Valid at 100MHz
.baseband_valid_q(ddc_valid_q),
.mixers_enable(1'b1),
.bypass_mode(1'b1)
);
ddc_input_interface ddc_if (
.clk(clk),
.reset_n(reset_n),
.ddc_i(ddc_out_i),
.ddc_q(ddc_out_q),
.valid_i(ddc_valid_i),
.valid_q(ddc_valid_q),
.adc_i(adc_i_scaled),
.adc_q(adc_q_scaled),
.adc_valid(adc_valid_sync),
.data_sync_error()
);
// 3. Dual Chirp Memory Loader
chirp_memory_loader_param chirp_mem (
.clk(clk),
.reset_n(reset_n),
.segment_select(segment_request),
.mem_request(mem_request),
.use_long_chirp(use_long_chirp),
.sample_addr(sample_addr_from_chain),
.ref_i(ref_i),
.ref_q(ref_q),
.mem_ready(mem_ready)
);
// Sample address generator
reg [9:0] sample_addr_reg;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
sample_addr_reg <= 0;
end else if (mem_request) begin
sample_addr_reg <= sample_addr_reg + 1;
if (sample_addr_reg == 1023) sample_addr_reg <= 0;
end
end
assign sample_addr_wire = sample_addr_reg;
// 4. CRITICAL: Reference Chirp Latency Buffer
// This aligns reference data with FFT output (2159 cycle delay)
wire [15:0] delayed_ref_i, delayed_ref_q;
wire mem_ready_delayed;
latency_buffer_2159 #(
.DATA_WIDTH(32), // 16-bit I + 16-bit Q
.LATENCY(3187)
) ref_latency_buffer (
.clk(clk),
.reset_n(reset_n),
.data_in({ref_i, ref_q}),
.valid_in(mem_request),
.data_out({delayed_ref_i, delayed_ref_q}),
.valid_out(mem_ready_delayed)
);
// Assign delayed reference signals
assign long_chirp_real = delayed_ref_i;
assign long_chirp_imag = delayed_ref_q;
assign short_chirp_real = delayed_ref_i;
assign short_chirp_imag = delayed_ref_q;
// 5. Dual Chirp Matched Filter
wire [9:0] sample_addr_from_chain;
wire signed [15:0] range_profile_i;
wire signed [15:0] range_profile_q;
wire range_valid;
matched_filter_multi_segment mf_dual (
.clk(clk),
.reset_n(reset_n),
.ddc_i({{2{adc_i_scaled[15]}}, adc_i_scaled}),
.ddc_q({{2{adc_q_scaled[15]}}, adc_q_scaled}),
.ddc_valid(adc_valid_sync),
.use_long_chirp(use_long_chirp),
.chirp_counter(chirp_counter),
.mc_new_chirp(mc_new_chirp),
.mc_new_elevation(mc_new_elevation),
.mc_new_azimuth(mc_new_azimuth),
.long_chirp_real(delayed_ref_i), // From latency buffer
.long_chirp_imag(delayed_ref_q),
.short_chirp_real(delayed_ref_i), // Same for short chirp
.short_chirp_imag(delayed_ref_q),
.segment_request(segment_request),
.mem_request(mem_request),
.sample_addr_out(sample_addr_from_chain),
.ref_i(16'd0), // Direct ref to multi_seg
.ref_q(16'd0),
.mem_ready(mem_ready),
.pc_i_w(range_profile_i),
.pc_q_w(range_profile_q),
.pc_valid_w(range_valid)
);
// ========== CRITICAL: RANGE BIN DECIMATOR ==========
// Convert 1024 range bins to 64 bins for Doppler
range_bin_decimator #(
.INPUT_BINS(1024),
.OUTPUT_BINS(64),
.DECIMATION_FACTOR(16)
) range_decim (
.clk(clk),
.reset_n(reset_n),
.range_i_in(range_profile_i),
.range_q_in(range_profile_q),
.range_valid_in(range_valid),
.range_i_out(decimated_range_i),
.range_q_out(decimated_range_q),
.range_valid_out(decimated_range_valid),
.range_bin_index(decimated_range_bin),
.decimation_mode(2'b01), // Peak detection mode
.start_bin(10'd0)
);
// ========== FRAME SYNC USING chirp_counter ==========
reg [5:0] chirp_counter_prev;
reg new_frame_pulse;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
chirp_counter_prev <= 6'd0;
new_frame_pulse <= 1'b0;
end else begin
// Default: no pulse
new_frame_pulse <= 1'b0;
// ===== CHOOSE ONE FRAME DETECTION METHOD =====
// METHOD A: Detect frame start at chirp_counter = 0
// (Assumes frames are 64 chirps: 0-63)
//if (chirp_counter == 6'd0 && chirp_counter_prev != 6'd0) begin
// new_frame_pulse <= 1'b1;
//end
// METHOD B: Detect frame start at chirp_counter = 0 AND 32
// (For 32-chirp frames in a 64-chirp sequence)
if ((chirp_counter == 6'd0 || chirp_counter == 6'd32) &&
(chirp_counter_prev != chirp_counter)) begin
new_frame_pulse <= 1'b1;
end
// METHOD C: Programmable frame start
// localparam FRAME_START_CHIRP = 6'd0; // Set based on your sequence
// if (chirp_counter == FRAME_START_CHIRP &&
// chirp_counter_prev != FRAME_START_CHIRP) begin
// new_frame_pulse <= 1'b1;
// end
// Store previous value
chirp_counter_prev <= chirp_counter;
end
end
assign new_chirp_frame = new_frame_pulse;
// ========== DATA PACKING FOR DOPPLER ==========
assign range_data_32bit = {decimated_range_q, decimated_range_i};
assign range_data_valid = decimated_range_valid;
// ========== DOPPLER PROCESSOR ==========
doppler_processor_optimized #(
.DOPPLER_FFT_SIZE(32),
.RANGE_BINS(64),
.CHIRPS_PER_FRAME(32) // MUST MATCH YOUR ACTUAL FRAME SIZE!
) doppler_proc (
.clk(clk),
.reset_n(reset_n),
.range_data(range_data_32bit),
.data_valid(range_data_valid),
.new_chirp_frame(new_chirp_frame),
// Outputs
.doppler_output(doppler_output),
.doppler_valid(doppler_valid),
.doppler_bin(doppler_bin),
.range_bin(doppler_range_bin_out),
// Status
.processing_active(doppler_processing),
.frame_complete(doppler_frame_done),
.status()
);
// ========== OUTPUT CONNECTIONS ==========
assign doppler_range_bin = doppler_range_bin_out;
assign doppler_processing_active = doppler_processing;
assign doppler_frame_complete = doppler_frame_done;
// ========== STATUS ==========
// ========== DEBUG AND VERIFICATION ==========
reg [31:0] frame_counter;
reg [5:0] chirps_in_current_frame;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
frame_counter <= 0;
chirps_in_current_frame <= 0;
end else begin
// Count chirps in current frame
if (range_data_valid && decimated_range_bin == 0) begin
// First range bin of a chirp
chirps_in_current_frame <= chirps_in_current_frame + 1;
end
// Detect frame completion
if (new_chirp_frame) begin
frame_counter <= frame_counter + 1;
$display("[TOP] Frame %0d started. Previous frame had %0d chirps",
frame_counter, chirps_in_current_frame);
chirps_in_current_frame <= 0;
end
// Monitor chirp counter pattern
if (chirp_counter != chirp_counter_prev) begin
$display("[TOP] chirp_counter: %0d ? %0d",
chirp_counter_prev, chirp_counter);
end
end
end
endmodule
+157
View File
@@ -0,0 +1,157 @@
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 19:04:35 12/14/2025
// Design Name:
// Module Name: radar_transmitter
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module radar_transmitter(
// System Clocks
input wire clk_100m, // System clock
input wire clk_120m_dac, // 120MHz DAC clock
input wire reset_n,
// DAC Interface
output wire [7:0] dac_data,
output wire dac_clk,
output wire dac_sleep,
output wire rx_mixer_en,
output wire tx_mixer_en,
// STM32 Control Interface
input wire stm32_new_chirp,
input wire stm32_new_elevation,
input wire stm32_new_azimuth,
input wire stm32_mixers_enable,
output wire fpga_rf_switch,
// ADAR1000 Control Interface
output wire adar_tx_load_1,
output wire adar_rx_load_1,
output wire adar_tx_load_2,
output wire adar_rx_load_2,
output wire adar_tx_load_3,
output wire adar_rx_load_3,
output wire adar_tx_load_4,
output wire adar_rx_load_4,
output wire adar_tr_1,
output wire adar_tr_2,
output wire adar_tr_3,
output wire adar_tr_4,
// Level Shifter SPI Interface (STM32F7 to ADAR1000)
input wire stm32_sclk_3v3,
input wire stm32_mosi_3v3,
output wire stm32_miso_3v3,
input wire stm32_cs_adar1_3v3,
input wire stm32_cs_adar2_3v3,
input wire stm32_cs_adar3_3v3,
input wire stm32_cs_adar4_3v3,
output wire stm32_sclk_1v8,
output wire stm32_mosi_1v8,
input wire stm32_miso_1v8,
output wire stm32_cs_adar1_1v8,
output wire stm32_cs_adar2_1v8,
output wire stm32_cs_adar3_1v8,
output wire stm32_cs_adar4_1v8,
// Beam Position Tracking
output wire [5:0] current_elevation,
output wire [5:0] current_azimuth,
output wire [5:0] current_chirp,
output wire new_chirp_frame
);
// Edge Detection Signals
wire new_chirp_pulse;
wire new_elevation_pulse;
wire new_azimuth_pulse;
// Chirp Control Signals
wire [7:0] chirp_data;
wire chirp_valid;
wire chirp_sequence_done;
// Enhanced STM32 Input Edge Detection with Debouncing
edge_detector_enhanced chirp_edge (
.clk(clk_100m),
.reset_n(reset_n),
.signal_in(stm32_new_chirp),
.rising_falling_edge(new_chirp_pulse)
);
edge_detector_enhanced elevation_edge (
.clk(clk_100m),
.reset_n(reset_n),
.signal_in(stm32_new_elevation),
.rising_falling_edge(new_elevation_pulse)
);
edge_detector_enhanced azimuth_edge (
.clk(clk_100m),
.reset_n(reset_n),
.signal_in(stm32_new_azimuth),
.rising_falling_edge(new_azimuth_pulse)
);
// Enhanced PLFM Chirp Generation
plfm_chirp_controller_enhanced plfm_chirp_inst (
.clk_120m(clk_120m_dac),
.clk_100m(clk_100m),
.reset_n(reset_n),
.new_chirp(new_chirp_pulse),
.new_elevation(new_elevation_pulse),
.new_azimuth(new_azimuth_pulse),
.new_chirp_frame(new_chirp_frame),
.mixers_enable(stm32_mixers_enable),
.chirp_data(chirp_data),
.chirp_valid(chirp_valid),
.chirp_done(chirp_sequence_done),
.rf_switch_ctrl(fpga_rf_switch),
.rx_mixer_en(rx_mixer_en),
.tx_mixer_en(tx_mixer_en),
.adar_tx_load_1(adar_tx_load_1),
.adar_rx_load_1(adar_rx_load_1),
.adar_tx_load_2(adar_tx_load_2),
.adar_rx_load_2(adar_rx_load_2),
.adar_tx_load_3(adar_tx_load_3),
.adar_rx_load_3(adar_rx_load_3),
.adar_tx_load_4(adar_tx_load_4),
.adar_rx_load_4(adar_rx_load_4),
.adar_tr_1(adar_tr_1),
.adar_tr_2(adar_tr_2),
.adar_tr_3(adar_tr_3),
.adar_tr_4(adar_tr_4),
.elevation_counter(current_elevation),
.azimuth_counter(current_azimuth),
.chirp_counter(current_chirp)
);
// Enhanced DAC Interface
dac_interface_enhanced dac_interface_inst (
.clk_120m(clk_120m_dac),
.reset_n(reset_n),
.chirp_data(chirp_data),
.chirp_valid(chirp_valid),
.dac_data(dac_data),
.dac_clk(dac_clk),
.dac_sleep(dac_sleep)
);
endmodule
+50
View File
@@ -0,0 +1,50 @@
0095
000d
ffdd
0007
008c
015e
026b
039c
04d4
05f9
06ef
07a1
07fd
07fd
07a0
06ef
05fa
04d8
03a5
027d
017c
00bc
004d
003d
008f
013b
0234
0364
04b2
05ff
072e
0825
08ce
091a
0904
088d
07c3
06b9
0589
0450
032d
023c
0197
014e
016c
01f1
02d3
0402
0563
06db
+50
View File
@@ -0,0 +1,50 @@
f8b6
f791
f64d
f505
f3d6
f2d8
f221
f1c0
f1bb
f210
f2b6
f39b
f4a8
f5c1
f6c9
f7a6
f840
f886
f86d
f7f5
f724
f60b
f4bf
f35b
f1fc
f0bf
efbe
ef0d
eeb8
eec5
ef2e
efe7
f0db
f1f0
f308
f405
f4cc
f545
f560
f516
f467
f35f
f210
f094
ef07
ed88
ec36
eb2a
ea78
ea29