22 #ifndef GNSS_SDR_FPGA_ACQUISITION_H 23 #define GNSS_SDR_FPGA_ACQUISITION_H 46 std::string device_name,
47 uint32_t select_queue,
48 std::vector<std::pair<uint32_t, uint32_t>> &downsampling_filter_specs,
49 uint32_t &max_FFT_size);
60 void init(uint32_t nsamples, uint32_t doppler_max, uint32_t d_fft_size,
61 int64_t resampled_fs, uint32_t downsampling_filter_num, uint32_t excludelimit, uint32_t *all_fft_codes);
71 void set_doppler_sweep(uint32_t num_sweeps, uint32_t doppler_step, int32_t doppler_min);
85 uint64_t *initial_sample,
87 uint32_t *doppler_index,
88 uint32_t *total_blk_exp);
96 d_doppler_max = doppler_max;
105 d_doppler_step = doppler_step;
145 static const uint32_t FPGA_ACQ_IP_VERSION_1 = 0x0001;
150 static const uint32_t FREQ_BAND_DOWNSAMPLE_REG_ADDR = 0;
151 static const uint32_t FFT_LENGTH_REG_ADDR = 1;
152 static const uint32_t CORR_NSAMPLES_REG_ADDR = 2;
153 static const uint32_t DOPPLER_MIN_REG_ADDR = 3;
154 static const uint32_t DOPPLER_STEP_REG_ADDR = 4;
155 static const uint32_t NUM_DOPPLER_SEARCH_STEPS_REG_ADDR = 5;
156 static const uint32_t PROG_MEM_ADDR = 6;
157 static const uint32_t LOG2_FFT_LENGTH_REG_ADDR = 7;
158 static const uint32_t ACQ_COMMAND_FLAGS_REG_ADDR = 8;
159 static const uint32_t CLEAR_MEM_REG_ADDR = 9;
160 static const uint32_t MAX_FFT_SCALING_FACTOR_REG_ADDR = 11;
161 static const uint32_t EXCL_LIM_REG_ADDR = 12;
164 static const uint32_t TEST_REG_ADDR = 15;
167 static const uint32_t RESULT_VALID_REG_ADDR = 0;
168 static const uint32_t SAMPLESTAMP_LSW_REG_ADDR = 1;
169 static const uint32_t SAMPLESTAMP_MSW_REG_ADDR = 2;
170 static const uint32_t MAG_SQ_FIRST_PEAK_REG_ADDR = 3;
171 static const uint32_t MAG_SQ_SECOND_PEAK_REG_ADDR = 4;
172 static const uint32_t ACQ_DELAY_SAMPLES_REG_ADDR = 5;
173 static const uint32_t DOPPLER_INDEX_REG_ADDR = 7;
174 static const uint32_t FFT_SCALING_FACTOR_REG_ADDR = 8;
175 static const uint32_t MAX_FFT_SIZE_REG_ADDR = 9;
176 static const uint32_t DOWNSAMPLING_FILTER_DEC_FACTORS_REG_ADDR = 10;
177 static const uint32_t DOWNSAMPLING_FILTER_LATENCIES_REG_ADDR = 11;
178 static const uint32_t FPGA_IP_CORE_VERSION_REG_ADDR = 14;
181 static const uint32_t FPGA_PAGE_SIZE = 0x1000;
182 static const uint32_t LAUNCH_ACQUISITION = 1;
183 static const uint32_t RESET_ACQUISITION = 2;
184 static const uint32_t STOP_ACQUISITION = 4;
185 static const uint32_t TEST_REG_SANITY_CHECK = 0x55AA;
186 static const uint32_t LOCAL_CODE_CLEAR_MEM = 0x10000000;
187 static const uint32_t MEM_LOCAL_CODE_WR_ENABLE = 0x0C000000;
188 static const uint32_t POW_2_2 = 4;
189 static const uint32_t POW_2_31 = 2147483648;
190 static const uint32_t MAX_FILTERS_AVAILABLE = 2;
191 static const uint32_t DEFAULT_MAX_FFT_SIZE = 32768;
192 static const uint32_t ACQ_BUFF_0 = 0;
193 static const uint32_t ACQ_BUFF_1 = 0;
196 static const uint32_t RSHIFT_4_BITS = 0x4;
197 static const uint32_t RSHIFT_8_BITS = 0x8;
198 static const uint32_t BIT_MASK_4 = 0xF;
199 static const uint32_t BIT_MASK_8 = 0xFF;
202 const uint32_t DEFAULT_DOWNSAMPLING_FILTER_DELAY = 40;
203 const uint32_t DEFAULT_DOWNSAMPLING_FACTOR = 4;
206 void fpga_acquisition_test_register(
void);
207 void read_ipcore_info(std::vector<std::pair<uint32_t, uint32_t>> &downsampling_filter_specs, uint32_t &max_FFT_size);
209 std::vector<std::pair<uint32_t, uint32_t>> d_downsampling_filter_specs;
210 std::string d_device_name;
211 int64_t d_resampled_fs;
212 volatile uint32_t *d_map_base;
213 uint32_t *d_all_fft_codes;
216 uint32_t d_excludelimit;
218 uint32_t d_filter_num;
219 uint32_t d_downsampling_factor;
220 uint32_t d_downsampling_filter_delay;
221 uint32_t d_select_queue;
222 uint32_t d_doppler_max;
223 uint32_t d_doppler_step;
225 uint32_t d_IP_core_version;
231 #endif // GNSS_SDR_FPGA_ACQUISITION_H void set_doppler_step(uint32_t doppler_step)
Set Doppler steps for the grid search.
void close_device()
Close the device driver.
Class that implements carrier wipe-off and correlators.
~Fpga_Acquisition()=default
Destructor.
void reset_acquisition()
Reset the FPGA PL.
void set_block_exp(uint32_t total_block_exp)
Set the block exponent of the FFT in the FPGA.
Fpga_Acquisition(std::string device_name, uint32_t select_queue, std::vector< std::pair< uint32_t, uint32_t >> &downsampling_filter_specs, uint32_t &max_FFT_size)
Constructor.
void stop_acquisition()
stop the acquisition and the FPGA modules.
void open_device()
Open the device driver.
void init(uint32_t nsamples, uint32_t doppler_max, uint32_t d_fft_size, int64_t resampled_fs, uint32_t downsampling_filter_num, uint32_t excludelimit, uint32_t *all_fft_codes)
Initialize acquisition parameters.
bool set_local_code(uint32_t PRN)
Select the code with the chosen PRN.
void run_acquisition()
Run the acquisition process in the FPGA.
void read_acquisition_results(uint32_t *max_index, float *firstpeak, float *secondpeak, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index, uint32_t *total_blk_exp)
Read the results of the acquisition process.
void configure_acquisition(void)
Write the acquisition parameters into the FPGA.
void set_doppler_sweep(uint32_t num_sweeps, uint32_t doppler_step, int32_t doppler_min)
Configure the doppler sweep parameters in the FPGA.
void set_doppler_max(uint32_t doppler_max)
Set maximum Doppler grid search.
void write_local_code(void)
Write the PRN code in the FPGA.