update and adapted firmware for tx

bug_fixes_integration_tx
David Michaeli 2023-07-03 12:20:50 +00:00
rodzic 125a843908
commit c684e7c439
15 zmienionych plików z 31053 dodań i 34088 usunięć

Plik diff jest za duży Load Diff

Plik binarny nie jest wyświetlany.

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -149,6 +149,7 @@ module top (
wire w_debug_fifo_pull;
wire w_debug_smi_test;
wire w_debug_lb_tx;
wire [3:0] tx_sample_gap;
// IO CTRL
io_ctrl io_ctrl_ins (
@ -180,9 +181,6 @@ module top (
.o_mixer_en(/*o_mixer_en*/)
);
assign o_led0 = i_smi_a2;
assign o_led1 = i_smi_a3;
//=========================================================================
// CONBINATORIAL ASSIGNMENTS
//=========================================================================
@ -273,8 +271,8 @@ module top (
) iq_tx_p (
.PACKAGE_PIN(o_iq_tx_p),
.OUTPUT_CLK(lvds_clock_buf),
.D_OUT_0(~w_lvds_tx_d1),
.D_OUT_1(~w_lvds_tx_d0)
.D_OUT_0(~w_lvds_tx_d0),
.D_OUT_1(~w_lvds_tx_d1)
);
// Inverting, N-side of pair
@ -284,8 +282,8 @@ module top (
) iq_tx_n (
.PACKAGE_PIN(o_iq_tx_n),
.OUTPUT_CLK(lvds_clock_buf),
.D_OUT_0(w_lvds_tx_d1),
.D_OUT_1(w_lvds_tx_d0)
.D_OUT_0(w_lvds_tx_d0),
.D_OUT_1(w_lvds_tx_d1)
);
@ -312,11 +310,9 @@ module top (
wire [31:0] w_rx_24_fifo_data;
lvds_rx lvds_rx_09_inst (
.i_rst_b (1'b1/*i_rst_b*/),
.i_rst_b (i_rst_b),
.i_ddr_clk(lvds_clock_buf),
.i_ddr_data({w_lvds_rx_09_d0, w_lvds_rx_09_d1}),
.i_fifo_full(w_rx_fifo_full),
.o_fifo_write_clk(w_rx_09_fifo_write_clk),
.o_fifo_push(w_rx_09_fifo_push),
@ -327,7 +323,7 @@ module top (
);
lvds_rx lvds_rx_24_inst (
.i_rst_b (1'b1/*i_rst_b*/),
.i_rst_b (i_rst_b),
.i_ddr_clk(lvds_clock_buf),
.i_ddr_data({!w_lvds_rx_24_d0, !w_lvds_rx_24_d1}),
@ -356,11 +352,11 @@ module top (
.ADDR_WIDTH(10), // 1024 samples
.DATA_WIDTH(16), // 2x16 for I and Q
) rx_fifo (
.wr_rst_b_i(1'b1/*i_rst_b*/),
.wr_rst_b_i(i_rst_b),
.wr_clk_i(w_rx_fifo_write_clk),
.wr_en_i(w_rx_fifo_push),
.wr_data_i(w_rx_fifo_data),
.rd_rst_b_i(1'b1/*i_rst_b*/),
.rd_rst_b_i(i_rst_b),
.rd_clk_i(w_clock_sys),
.rd_en_i(w_rx_fifo_pull),
.rd_data_o(w_rx_fifo_pulled_data),
@ -387,6 +383,7 @@ module top (
.i_sample_gap(tx_sample_gap),
.i_tx_state(~w_smi_data_direction),
.i_sync_input(1'b0),
.i_debug_lb(w_debug_lb_tx),
.o_tx_state_bit(),
.o_sync_state_bit(),
);
@ -399,20 +396,19 @@ module top (
wire [31:0] w_tx_fifo_data;
wire w_tx_fifo_pull;
wire [31:0] w_tx_fifo_pulled_data;
wire [3:0] tx_sample_gap;
complex_fifo #(
.ADDR_WIDTH(10), // 1024 samples
.DATA_WIDTH(16), // 2x16 for I and Q
) tx_fifo (
// smi clock is writing
.wr_rst_b_i(1'b1/*i_rst_b*/),
.wr_rst_b_i(i_rst_b),
.wr_clk_i(w_tx_fifo_clock),
.wr_en_i(w_tx_fifo_push),
.wr_data_i(w_tx_fifo_data),
// lvds clock is pulling (reading)
.rd_rst_b_i(1'b1/*i_rst_b*/),
.rd_rst_b_i(i_rst_b),
.rd_clk_i(w_tx_fifo_read_clk),
.rd_en_i(w_tx_fifo_pull),
.rd_data_o(w_tx_fifo_pulled_data),
@ -450,7 +446,7 @@ module top (
.o_smi_read_req(w_smi_read_req),
.o_smi_write_req(w_smi_write_req),
.o_channel(/*channel*/),
.o_dir (w_smi_data_direction),
.o_dir (/*w_smi_data_direction*/),
.i_smi_test(1'b0/*w_debug_smi_test*/),
.o_cond_tx(),
.o_address_error()
@ -547,5 +543,7 @@ module top (
assign o_smi_read_req = (w_smi_data_direction) ? w_smi_read_req : w_smi_write_req;
assign o_smi_write_req = 1'bZ;
assign o_led0 = w_smi_data_direction;
assign o_led1 = channel;
endmodule // top

Wyświetl plik

@ -119,7 +119,7 @@ int median(int a[], int n)
}
//===================================================================
int at86rf215_calibrate_device(at86rf215_st* dev, at86rf215_rf_channel_en ch, int* i, int* q)
int at86rf215_calibrate_device(at86rf215_st* dev, at86rf215_rf_channel_en ch, int* i_val, int* q_val)
{
int cal_i[NUM_CAL_STEPS] = {0};
int cal_q[NUM_CAL_STEPS] = {0};

Wyświetl plik

@ -101,7 +101,7 @@ typedef struct sys_st_t
signal_handler_operation_en sig_op;
// Management
cariboulite_fpga_versions_st fpga_versions;
caribou_fpga_versions_st fpga_versions;
uint8_t fpga_error_status;
int fpga_config_res_state;
// Initialization

Wyświetl plik

@ -369,6 +369,7 @@ int cariboulite_radio_set_tx_samp_cutoff(cariboulite_radio_state_st* radio,
at86rf215_radio_sample_rate_en tx_sample_rate,
at86rf215_radio_f_cut_en tx_cutoff)
{
uint8_t sample_gap = 0;
at86rf215_radio_tx_ctrl_st cfg =
{
.pa_ramping_time = at86rf215_radio_tx_pa_ramp_16usec,
@ -428,7 +429,7 @@ int cariboulite_radio_get_tx_samp_cutoff(cariboulite_radio_state_st* radio,
default: sample_gap = 0; break;
}
hermon_fpga_set_sys_ctrl_tx_sample_gap (&radio->sys->fpga, sample_gap);
caribou_fpga_set_sys_ctrl_tx_sample_gap (&radio->sys->fpga, sample_gap);
return 0;
}
@ -901,10 +902,11 @@ int cariboulite_radio_activate_channel(cariboulite_radio_state_st* radio,
{
// after modem is activated turn on the the smi stream
smi_stream_state_en smi_state = smi_stream_idle;
if (radio->smi_channel_id == hermon_smi_channel_900)
if (radio->smi_channel_id == caribou_smi_channel_900)
smi_state = smi_stream_rx_channel_0;
else if (radio->smi_channel_id == hermon_smi_channel_2400)
else if (radio->smi_channel_id == caribou_smi_channel_2400)
smi_state = smi_stream_rx_channel_1;
at86rf215_iq_interface_config_st modem_iq_config = {
.loopback_enable = radio->tx_loopback_anabled,
.drv_strength = at86rf215_iq_drive_current_4ma,
@ -993,14 +995,15 @@ int cariboulite_radio_activate_channel(cariboulite_radio_state_st* radio,
at86rf215_radio_state_cmd_tx_prep);
radio->state = at86rf215_radio_state_cmd_tx_prep;
at86rf215_radio_get_tx_iq_calibration(&radio->sys->modem, GET_MODEM_CH,
at86rf215_radio_get_tx_iq_calibration(&radio->sys->modem,
GET_MODEM_CH(radio->type),
&cal_i, &cal_q);
//printf(">>>>> CAL_I = %d, CAL_Q = %d\n", cal_i, cal_q);
// apply the state
hermon_smi_set_driver_streaming_state(&radio->sys->smi, smi_stream_tx_channel);
hermon_fpga_set_smi_ctrl_data_direction (&radio->sys->fpga, 0);
caribou_smi_set_driver_streaming_state(&radio->sys->smi, smi_stream_tx_channel);
caribou_fpga_set_smi_ctrl_data_direction (&radio->sys->fpga, 0);
}
}

Wyświetl plik

@ -82,6 +82,8 @@ typedef struct
at86rf215_radio_tx_cut_off_en tx_bw;
at86rf215_radio_f_cut_en tx_fcut;
at86rf215_radio_sample_rate_en tx_fs;
bool tx_loopback_anabled;
// at86rf215_radio_energy_detection_st rx_energy_detection;
float rx_energy_detection_value;

Wyświetl plik

@ -810,7 +810,8 @@ void cariboulite_print_board_info(sys_st *sys, bool log)
}
//===========================================================
cariboulite_radio_state_st* cariboulite_get_radio_handle(sys_st* sys)
cariboulite_radio_state_st* cariboulite_get_radio_handle(sys_st* sys, cariboulite_channel_en type)
{
return &sys->radio;
if (type == cariboulite_channel_s1g) return &sys->radio_low;
else return &sys->radio_high;
}

Wyświetl plik

@ -275,7 +275,7 @@ int cariboulite_self_test(sys_st* sys, cariboulite_self_test_result_st* res);
* @param res test-result
* @return 0 (sucess), -1 (fail)
*/
cariboulite_radio_state_st* cariboulite_get_radio_handle(sys_st* sys);
cariboulite_radio_state_st* cariboulite_get_radio_handle(sys_st* sys, cariboulite_channel_en type);
#ifdef __cplusplus
}
#endif

Wyświetl plik

@ -83,6 +83,13 @@ public:
int &flags,
long long &timeNs,
const long timeoutUs = 100000);
int writeStream(SoapySDR::Stream *stream,
void * const *buffs,
const size_t numElems,
int &flags,
long long &timeNs,
const long timeoutUs);
/*******************************************************************
* Antenna API

Wyświetl plik

@ -93,6 +93,12 @@ public:
int ReadSamples(sample_complex_double* buffer, size_t num_elements, long timeout_us);
int ReadSamples(sample_complex_int8* buffer, size_t num_elements, long timeout_us);
int ReadSamplesGen(void* buffer, size_t num_elements, long timeout_us);
int WriteSamples(caribou_smi_sample_complex_int16* buffer, size_t num_elements, long timeout_us);
int WriteSamples(sample_complex_float* buffer, size_t num_elements, long timeout_us);
int WriteSamples(sample_complex_double* buffer, size_t num_elements, long timeout_us);
int WriteSamples(sample_complex_int8* buffer, size_t num_elements, long timeout_us);
int WriteSamplesGen(void* buffer, size_t num_elements, long timeout_us);
cariboulite_channel_dir_en getInnerStreamType(void);
void setInnerStreamType(cariboulite_channel_dir_en dir);