Loading cocotb/x393_cocotb_lwir_06.sav +67 −16 Original line number Diff line number Diff line [*] [*] GTKWave Analyzer v3.3.103 (w)1999-2019 BSI [*] Sat Feb 11 21:53:42 2023 [*] Tue Feb 14 19:38:19 2023 [*] [dumpfile] "/home/elphel/git/x393/simulation/x393_dut-20230211143708385.fst" [dumpfile_mtime] "Sat Feb 11 21:53:30 2023" [dumpfile_size] 141595306 [dumpfile] "/home/elphel/git/x393/simulation/x393_dut-20230213165222653.fst" [dumpfile_mtime] "Tue Feb 14 00:48:28 2023" [dumpfile_size] 777646791 [savefile] "/home/elphel/git/x393/cocotb/x393_cocotb_lwir_06.sav" [timestart] 0 [size] 1920 1171 [pos] -1920 47 *-23.998985 81560000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [size] 1744 1144 [pos] 1920 74 *-27.278334 63200000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [treeopen] x393_dut. [treeopen] x393_dut.i_simul_imx5. [treeopen] x393_dut.x393_i. Loading @@ -29,11 +29,12 @@ [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[1].sensor_channel_i.sens_103993_i.sens_103993_l3_i. [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i. [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i.sens_103993_i. [treeopen] x393_dut.x393_i.timing393_i. [treeopen] x393_dut.x393_i.timing393_i.camsync393_i. [sst_width] 325 [signals_width] 278 [sst_expanded] 1 [sst_vpaned_height] 773 [sst_vpaned_height] 365 @800200 -simul_imx5 @28 Loading Loading @@ -112,6 +113,21 @@ x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.trig x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.trig_in (4)x393_dut.x393_i.gpio_pins[9:0] (5)x393_dut.x393_i.gpio_pins[9:0] @800022 x393_dut.x393_i.gpio_pins[9:0] @28 (0)x393_dut.x393_i.gpio_pins[9:0] (1)x393_dut.x393_i.gpio_pins[9:0] (2)x393_dut.x393_i.gpio_pins[9:0] (3)x393_dut.x393_i.gpio_pins[9:0] (4)x393_dut.x393_i.gpio_pins[9:0] (5)x393_dut.x393_i.gpio_pins[9:0] (6)x393_dut.x393_i.gpio_pins[9:0] (7)x393_dut.x393_i.gpio_pins[9:0] (8)x393_dut.x393_i.gpio_pins[9:0] (9)x393_dut.x393_i.gpio_pins[9:0] @1001200 -group_end @c00022 x393_dut.x393_i.gpio_camsync_en[9:0] @28 Loading Loading @@ -582,9 +598,17 @@ x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.eof @800200 -event_logger @28 x393_dut.x393_i.event_logger_i.xrst x393_dut.x393_i.event_logger_i.we_config_rst x393_dut.x393_i.event_logger_i.we_config_rst_xclk x393_dut.x393_i.event_logger_i.config_rst_mclk x393_dut.x393_i.event_logger_i.config_rst @22 x393_dut.x393_i.event_logger_i.enable_syn_mclk[4:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.xclk x393_dut.x393_i.event_logger_i.cmd_we @c00023 @c00022 x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] @28 (0)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] Loading @@ -594,7 +618,7 @@ x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (4)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (5)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (6)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] @1401201 @1401200 -group_end @22 x393_dut.x393_i.event_logger_i.cmd_data_r[31:0] Loading Loading @@ -811,7 +835,7 @@ x393_dut.x393_i.event_logger_i.ts_stb_chn1 x393_dut.x393_i.event_logger_i.ts_stb_chn2 x393_dut.x393_i.event_logger_i.ts_stb_chn3 x393_dut.x393_i.event_logger_i.ts_stb_chn4 @800022 @c00022 x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] @28 (0)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] Loading @@ -822,7 +846,7 @@ x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (5)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (6)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (7)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] @1001200 @1401200 -group_end @28 x393_dut.x393_i.event_logger_i.we_config_imu Loading Loading @@ -908,9 +932,36 @@ x393_dut.x393_i.event_logger_i.timestamps_rdata[15:0] x393_dut.x393_i.event_logger_i.config_syn_mclk[4:0] @28 x393_dut.x393_i.event_logger_i.config_rst_mclk @c00022 x393_dut.x393_i.event_logger_i.config_gps[3:0] @28 (0)x393_dut.x393_i.event_logger_i.config_gps[3:0] (1)x393_dut.x393_i.event_logger_i.config_gps[3:0] (2)x393_dut.x393_i.event_logger_i.config_gps[3:0] (3)x393_dut.x393_i.event_logger_i.config_gps[3:0] @1401200 -group_end @1000200 -event_logger @c00200 -rs232_rcv @22 x393_dut.x393_i.event_logger_i.i_rs232_rcv.bitHalfPeriod[15:0] x393_dut.x393_i.event_logger_i.i_rs232_rcv.bit_dur_cntr[15:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.xclk @22 x393_dut.x393_i.event_logger_i.i_rs232_rcv.bit_cntr[4:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_rst x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_di x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_do x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_do_stb @200 - @1401200 -rs232_rcv @c00200 -nmea_decoder393 @28 x393_dut.x393_i.event_logger_i.i_nmea_decoder.ser_rst Loading Loading @@ -1130,7 +1181,7 @@ x393_dut.x393_i.event_logger_i.i_imx5_decoder393.last_word_written[5:0] - @1401200 -imx5_decoder393 @800200 @c00200 -logger_arbiter393 @28 (2)x393_dut.x393_i.event_logger_i.i_logger_arbiter.ts_rq_in[3:0] Loading @@ -1151,9 +1202,9 @@ x393_dut.x393_i.event_logger_i.i_logger_arbiter.ts_en x393_dut.x393_i.event_logger_i.i_logger_arbiter.dv @22 x393_dut.x393_i.event_logger_i.i_logger_arbiter.sample_counter_r[23:0] @1000200 @1401200 -logger_arbiter393 @800200 @c00200 -imu_message393 @28 x393_dut.x393_i.event_logger_i.i_imu_message.we Loading @@ -1171,7 +1222,7 @@ x393_dut.x393_i.event_logger_i.i_imu_message.raddr[4:0] x393_dut.x393_i.event_logger_i.i_imu_message.rdata[15:0] @200 - @1000200 @1401200 -imu_message393 @c00200 -imu_exttime Loading fpga_version.vh +4 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,10 @@ * contains all the components and scripts required to completely simulate it * with at least one of the Free Software programs. */ parameter FPGA_VERSION = 32'h03934016; // Boson640, for 103993A, started IMU parameter FPGA_VERSION = 32'h03934019; // Boson640, logger debug disabled // parameter FPGA_VERSION = 32'h03934018; // Boson640, debugging logger 02 // parameter FPGA_VERSION = 32'h03934017; // Boson640, debugging logger 01 // parameter FPGA_VERSION = 32'h03934016; // Boson640, for 103993A, started IMU // parameter FPGA_VERSION = 32'h03931004; // parallel, starting IMS support // not yet used // parameter FPGA_VERSION = 32'h03931003; // parallel, adding camsync trigger decimation - modifying decimation // parameter FPGA_VERSION = 32'h03934015; // Boson640, for 103993A, debugging 4 removed DE deglitch - modifying decimation Loading logger/event_logger.v +36 −7 Original line number Diff line number Diff line Loading @@ -113,7 +113,9 @@ module event_logger#( output [15:0] data_out, // 16-bit data out to DMA1 (@posdge mclk) output data_out_stb,// data out valid (@posedge mclk) // sample_counter, // could be DMA latency, safe to use sample_counter-1 output [31:0] debug_state); output [31:0] debug_state // ,input [3:0] dbg_logger2023 ); localparam SELECT_IMX5 = 2'h3; // when config_imu == SELECT_IMX5 - use IMX instead of the GPS on serial input wire [23:0] sample_counter; // TODO: read with status! could be DMA latency, safe to use sample_counter-1 Loading Loading @@ -141,16 +143,15 @@ module event_logger#( reg we_bitHalfPeriod = 0; reg [1:0] config_imu; reg [3:0] config_gps; reg [1:0] config_imu; // should be 3 for IMXS-5 reg [3:0] config_gps; // should be 1 for IMX-5 (at least two lsb-s), will use ext2 for serial input (alse switches pulse1sec in ext3/ext5) reg [4:0] config_msg; reg config_rst; reg [3:0] config_debug; reg [15:0] bitHalfPeriod;// serial gps speed - number of xclk pulses in half bit period // Temporary reusing available bit // wire use_imx5 = config_gps[2]; reg use_imx5; // = config_gps[2]; will use config_imu == 3 (not used before) reg use_imx5; // will use config_imu == 3 (not used before) wire we_config_imu_xclk; // copy config_imu_mclk (@mclk) to config_imu (@xclk) wire we_config_gps_xclk; Loading Loading @@ -258,7 +259,6 @@ module event_logger#( assign message_trig= config_msg[4] ^ pre_message_trig; // assign timestamp_request[1]= config_gps[3]? (config_gps[2]?nmea_sent_start:gps_ts_stb):gps_pulse1sec_single; assign timestamp_request[1]= use_imx5 ? imx5_ts_rq : (config_gps[3]? (config_gps[2]?nmea_sent_start:gps_ts_stb):gps_pulse1sec_single); always @ (posedge mclk) begin // no enable for channel 4 - incoming ext trigger Loading Loading @@ -374,6 +374,34 @@ module event_logger#( .we ({cmd_status,cmd_we}) // output ); wire [25:0] status; //`define DEBUG_LOGGER 1 //dbg_logger2023 = {start_en, ts_external_pclk, rcv_run, trigger_condition} `ifdef DEBUG_LOGGER // wire start_en = dbg_logger2023[3]; // wire ts_external_pclk = dbg_logger2023[2]; // wire rcv_run = dbg_logger2023[1]; // wire trigger_condition = dbg_logger2023[0]; // imx5_ts_rq reg [7:0] ext_di_r; reg [7:0] ext_di_r2; reg [10:0] toggle_bits = 0; // wire[13:0] pulses = {ts_external_pclk, rcv_run, trigger_condition, ts_stb_chn4, (ext_di_r & ~ext_di_r2)}; // wire[10:0] pulses = {ts_stb_chn4, (ser_do & ser_do_stb), rs232_start, (ext_di_r & ~ext_di_r2)}; wire[10:0] pulses = {(ser_do & ser_do_stb), rs232_start, imx5_ts_rq, (ext_di_r & ~ext_di_r2)}; always @ (posedge xclk) begin // ext_di_r <= ext_di; ext_di_r <= {ser_di, 4'b0, imx5_rdy, ext_di[9], ext_di[2]}; ext_di_r2 <= ext_di_r; if (xrst) toggle_bits <= 0; else toggle_bits <= toggle_bits ^ pulses; end assign status = {toggle_bits[10:0], sample_counter[12:0], enable_gps, config_rst}; `else assign status = {sample_counter,2'b0}; `endif status_generate #( .STATUS_REG_ADDR (LOGGER_STATUS_REG_ADDR), .PAYLOAD_BITS (26), Loading @@ -384,12 +412,13 @@ module event_logger#( .srst (mrst), // input .we (cmd_status), // input .wd (cmd_data[7:0]), // input[7:0] .status ({sample_counter,2'b0}), // input[25:0] // 2 LSBs - may add "real" status .status (status), // {sample_counter,2'b0}), // input[25:0] // 2 LSBs - may add "real" status .ad (status_ad), // output[7:0] .rq (status_rq), // output .start (status_start) // input ); imu_spi393 i_imu_spi ( // .rst(rst), .mclk (mclk), // system clock, negedge Loading py393/x393_export_c.py +6 −2 Original line number Diff line number Diff line Loading @@ -2672,14 +2672,18 @@ class X393ExportC(object): dw.append(("imu_slot", vrlg.LOGGER_CONF_IMU - vrlg.LOGGER_CONF_IMU_BITS, vrlg.LOGGER_CONF_IMU_BITS, 0, "IMU slot (3 - use IMX5 instead of GPS)")) dw.append(("imu_set", vrlg.LOGGER_CONF_IMU, 1, 0, "Set 'imu_slot'")) dw.append(("gps_slot", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS, 2, 0, "GPS slot")) dw.append(("gps_invert", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 2, 1, 0, "GPS inpert 1pps signal")) dw.append(("gps_invert", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 2, 1, 0, "GPS ivpert 1pps signal")) dw.append(("gps_ext", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 3, 1, 0, "GPS sync to 1 pps signal (0 - sync to serial message)")) dw.append(("gps_set", vrlg.LOGGER_CONF_GPS, 1, 0, "Set 'gps_*' fields")) dw.append(("msg_input", vrlg.LOGGER_CONF_MSG - vrlg.LOGGER_CONF_MSG_BITS, 4, 0, "MSG pin: GPIO pin number to accept external signal (0xf - disable)")) dw.append(("msg_invert", vrlg.LOGGER_CONF_MSG - vrlg.LOGGER_CONF_MSG_BITS + 4, 1, 0, "MSG input polarity - 0 - active high, 1 - active low")) dw.append(("msg_set", vrlg.LOGGER_CONF_MSG, 1, 0, "Set 'msg_*' fields")) dw.append(("log_sync", vrlg.LOGGER_CONF_SYN - vrlg.LOGGER_CONF_SYN_BITS, vrlg.LOGGER_CONF_SYN_BITS, 0, "Log frame sync events (bit per sensor channel)")) dw.append(("log_sync", vrlg.LOGGER_CONF_SYN - vrlg.LOGGER_CONF_SYN_BITS, vrlg.LOGGER_CONF_SYN_BITS, 0, "Log frame sync events (bit per sensor channel, MSB - log external sync)")) dw.append(("log_sync_set",vrlg.LOGGER_CONF_SYN, 1, 0, "Set 'log_sync' fields")) dw.append(("log_en", vrlg.LOGGER_CONF_EN - vrlg.LOGGER_CONF_EN_BITS, vrlg.LOGGER_CONF_EN_BITS, 0, "Enable event logger (0- reset)")) dw.append(("log_en_set", vrlg.LOGGER_CONF_EN, 1, 0, "Set 'log_enable' field")) dw.append(("log_dbg", vrlg.LOGGER_CONF_DBG - vrlg.LOGGER_CONF_DBG_BITS, vrlg.LOGGER_CONF_DBG_BITS, 0, "IMU debug mode")) dw.append(("log_dbg_set",vrlg.LOGGER_CONF_DBG, 1, 0, "Set 'log_dbg' field")) return dw def _enc_logger_data(self): dw=[] Loading timing/camsync393.v +4 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,8 @@ module camsync393 #( output ts_rcv_stb_chn4, // 1 clock before ts_rcv_data is valid output [7:0] ts_rcv_data_chn4 // byte-wide serialized timestamp message received or local // ,output [3:0] dbg_logger2023 ); reg en = 0; // enable camsync module // wire rst = mrst || !en; Loading Loading @@ -436,6 +438,8 @@ module camsync393 #( (dly_cntr_chn1[31:0]!=0)?1'b1:1'b0, (dly_cntr_chn0[31:0]!=0)?1'b1:1'b0}; // assign dbg_logger2023 = {start_en, ts_external_pclk, rcv_run, trigger_condition}; assign gpio_out_en = gpio_out_en_r; //! in testmode GPIO[9] and GPIO[8] use internal signals instead of the outsync: Loading Loading
cocotb/x393_cocotb_lwir_06.sav +67 −16 Original line number Diff line number Diff line [*] [*] GTKWave Analyzer v3.3.103 (w)1999-2019 BSI [*] Sat Feb 11 21:53:42 2023 [*] Tue Feb 14 19:38:19 2023 [*] [dumpfile] "/home/elphel/git/x393/simulation/x393_dut-20230211143708385.fst" [dumpfile_mtime] "Sat Feb 11 21:53:30 2023" [dumpfile_size] 141595306 [dumpfile] "/home/elphel/git/x393/simulation/x393_dut-20230213165222653.fst" [dumpfile_mtime] "Tue Feb 14 00:48:28 2023" [dumpfile_size] 777646791 [savefile] "/home/elphel/git/x393/cocotb/x393_cocotb_lwir_06.sav" [timestart] 0 [size] 1920 1171 [pos] -1920 47 *-23.998985 81560000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [size] 1744 1144 [pos] 1920 74 *-27.278334 63200000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [treeopen] x393_dut. [treeopen] x393_dut.i_simul_imx5. [treeopen] x393_dut.x393_i. Loading @@ -29,11 +29,12 @@ [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[1].sensor_channel_i.sens_103993_i.sens_103993_l3_i. [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i. [treeopen] x393_dut.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i.sens_103993_i. [treeopen] x393_dut.x393_i.timing393_i. [treeopen] x393_dut.x393_i.timing393_i.camsync393_i. [sst_width] 325 [signals_width] 278 [sst_expanded] 1 [sst_vpaned_height] 773 [sst_vpaned_height] 365 @800200 -simul_imx5 @28 Loading Loading @@ -112,6 +113,21 @@ x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.trig x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.trig_in (4)x393_dut.x393_i.gpio_pins[9:0] (5)x393_dut.x393_i.gpio_pins[9:0] @800022 x393_dut.x393_i.gpio_pins[9:0] @28 (0)x393_dut.x393_i.gpio_pins[9:0] (1)x393_dut.x393_i.gpio_pins[9:0] (2)x393_dut.x393_i.gpio_pins[9:0] (3)x393_dut.x393_i.gpio_pins[9:0] (4)x393_dut.x393_i.gpio_pins[9:0] (5)x393_dut.x393_i.gpio_pins[9:0] (6)x393_dut.x393_i.gpio_pins[9:0] (7)x393_dut.x393_i.gpio_pins[9:0] (8)x393_dut.x393_i.gpio_pins[9:0] (9)x393_dut.x393_i.gpio_pins[9:0] @1001200 -group_end @c00022 x393_dut.x393_i.gpio_camsync_en[9:0] @28 Loading Loading @@ -582,9 +598,17 @@ x393_dut.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.eof @800200 -event_logger @28 x393_dut.x393_i.event_logger_i.xrst x393_dut.x393_i.event_logger_i.we_config_rst x393_dut.x393_i.event_logger_i.we_config_rst_xclk x393_dut.x393_i.event_logger_i.config_rst_mclk x393_dut.x393_i.event_logger_i.config_rst @22 x393_dut.x393_i.event_logger_i.enable_syn_mclk[4:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.xclk x393_dut.x393_i.event_logger_i.cmd_we @c00023 @c00022 x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] @28 (0)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] Loading @@ -594,7 +618,7 @@ x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (4)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (5)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] (6)x393_dut.x393_i.event_logger_i.ctrl_addr[6:0] @1401201 @1401200 -group_end @22 x393_dut.x393_i.event_logger_i.cmd_data_r[31:0] Loading Loading @@ -811,7 +835,7 @@ x393_dut.x393_i.event_logger_i.ts_stb_chn1 x393_dut.x393_i.event_logger_i.ts_stb_chn2 x393_dut.x393_i.event_logger_i.ts_stb_chn3 x393_dut.x393_i.event_logger_i.ts_stb_chn4 @800022 @c00022 x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] @28 (0)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] Loading @@ -822,7 +846,7 @@ x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (5)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (6)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] (7)x393_dut.x393_i.event_logger_i.ts_data_chn4[7:0] @1001200 @1401200 -group_end @28 x393_dut.x393_i.event_logger_i.we_config_imu Loading Loading @@ -908,9 +932,36 @@ x393_dut.x393_i.event_logger_i.timestamps_rdata[15:0] x393_dut.x393_i.event_logger_i.config_syn_mclk[4:0] @28 x393_dut.x393_i.event_logger_i.config_rst_mclk @c00022 x393_dut.x393_i.event_logger_i.config_gps[3:0] @28 (0)x393_dut.x393_i.event_logger_i.config_gps[3:0] (1)x393_dut.x393_i.event_logger_i.config_gps[3:0] (2)x393_dut.x393_i.event_logger_i.config_gps[3:0] (3)x393_dut.x393_i.event_logger_i.config_gps[3:0] @1401200 -group_end @1000200 -event_logger @c00200 -rs232_rcv @22 x393_dut.x393_i.event_logger_i.i_rs232_rcv.bitHalfPeriod[15:0] x393_dut.x393_i.event_logger_i.i_rs232_rcv.bit_dur_cntr[15:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.xclk @22 x393_dut.x393_i.event_logger_i.i_rs232_rcv.bit_cntr[4:0] @28 x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_rst x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_di x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_do x393_dut.x393_i.event_logger_i.i_rs232_rcv.ser_do_stb @200 - @1401200 -rs232_rcv @c00200 -nmea_decoder393 @28 x393_dut.x393_i.event_logger_i.i_nmea_decoder.ser_rst Loading Loading @@ -1130,7 +1181,7 @@ x393_dut.x393_i.event_logger_i.i_imx5_decoder393.last_word_written[5:0] - @1401200 -imx5_decoder393 @800200 @c00200 -logger_arbiter393 @28 (2)x393_dut.x393_i.event_logger_i.i_logger_arbiter.ts_rq_in[3:0] Loading @@ -1151,9 +1202,9 @@ x393_dut.x393_i.event_logger_i.i_logger_arbiter.ts_en x393_dut.x393_i.event_logger_i.i_logger_arbiter.dv @22 x393_dut.x393_i.event_logger_i.i_logger_arbiter.sample_counter_r[23:0] @1000200 @1401200 -logger_arbiter393 @800200 @c00200 -imu_message393 @28 x393_dut.x393_i.event_logger_i.i_imu_message.we Loading @@ -1171,7 +1222,7 @@ x393_dut.x393_i.event_logger_i.i_imu_message.raddr[4:0] x393_dut.x393_i.event_logger_i.i_imu_message.rdata[15:0] @200 - @1000200 @1401200 -imu_message393 @c00200 -imu_exttime Loading
fpga_version.vh +4 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,10 @@ * contains all the components and scripts required to completely simulate it * with at least one of the Free Software programs. */ parameter FPGA_VERSION = 32'h03934016; // Boson640, for 103993A, started IMU parameter FPGA_VERSION = 32'h03934019; // Boson640, logger debug disabled // parameter FPGA_VERSION = 32'h03934018; // Boson640, debugging logger 02 // parameter FPGA_VERSION = 32'h03934017; // Boson640, debugging logger 01 // parameter FPGA_VERSION = 32'h03934016; // Boson640, for 103993A, started IMU // parameter FPGA_VERSION = 32'h03931004; // parallel, starting IMS support // not yet used // parameter FPGA_VERSION = 32'h03931003; // parallel, adding camsync trigger decimation - modifying decimation // parameter FPGA_VERSION = 32'h03934015; // Boson640, for 103993A, debugging 4 removed DE deglitch - modifying decimation Loading
logger/event_logger.v +36 −7 Original line number Diff line number Diff line Loading @@ -113,7 +113,9 @@ module event_logger#( output [15:0] data_out, // 16-bit data out to DMA1 (@posdge mclk) output data_out_stb,// data out valid (@posedge mclk) // sample_counter, // could be DMA latency, safe to use sample_counter-1 output [31:0] debug_state); output [31:0] debug_state // ,input [3:0] dbg_logger2023 ); localparam SELECT_IMX5 = 2'h3; // when config_imu == SELECT_IMX5 - use IMX instead of the GPS on serial input wire [23:0] sample_counter; // TODO: read with status! could be DMA latency, safe to use sample_counter-1 Loading Loading @@ -141,16 +143,15 @@ module event_logger#( reg we_bitHalfPeriod = 0; reg [1:0] config_imu; reg [3:0] config_gps; reg [1:0] config_imu; // should be 3 for IMXS-5 reg [3:0] config_gps; // should be 1 for IMX-5 (at least two lsb-s), will use ext2 for serial input (alse switches pulse1sec in ext3/ext5) reg [4:0] config_msg; reg config_rst; reg [3:0] config_debug; reg [15:0] bitHalfPeriod;// serial gps speed - number of xclk pulses in half bit period // Temporary reusing available bit // wire use_imx5 = config_gps[2]; reg use_imx5; // = config_gps[2]; will use config_imu == 3 (not used before) reg use_imx5; // will use config_imu == 3 (not used before) wire we_config_imu_xclk; // copy config_imu_mclk (@mclk) to config_imu (@xclk) wire we_config_gps_xclk; Loading Loading @@ -258,7 +259,6 @@ module event_logger#( assign message_trig= config_msg[4] ^ pre_message_trig; // assign timestamp_request[1]= config_gps[3]? (config_gps[2]?nmea_sent_start:gps_ts_stb):gps_pulse1sec_single; assign timestamp_request[1]= use_imx5 ? imx5_ts_rq : (config_gps[3]? (config_gps[2]?nmea_sent_start:gps_ts_stb):gps_pulse1sec_single); always @ (posedge mclk) begin // no enable for channel 4 - incoming ext trigger Loading Loading @@ -374,6 +374,34 @@ module event_logger#( .we ({cmd_status,cmd_we}) // output ); wire [25:0] status; //`define DEBUG_LOGGER 1 //dbg_logger2023 = {start_en, ts_external_pclk, rcv_run, trigger_condition} `ifdef DEBUG_LOGGER // wire start_en = dbg_logger2023[3]; // wire ts_external_pclk = dbg_logger2023[2]; // wire rcv_run = dbg_logger2023[1]; // wire trigger_condition = dbg_logger2023[0]; // imx5_ts_rq reg [7:0] ext_di_r; reg [7:0] ext_di_r2; reg [10:0] toggle_bits = 0; // wire[13:0] pulses = {ts_external_pclk, rcv_run, trigger_condition, ts_stb_chn4, (ext_di_r & ~ext_di_r2)}; // wire[10:0] pulses = {ts_stb_chn4, (ser_do & ser_do_stb), rs232_start, (ext_di_r & ~ext_di_r2)}; wire[10:0] pulses = {(ser_do & ser_do_stb), rs232_start, imx5_ts_rq, (ext_di_r & ~ext_di_r2)}; always @ (posedge xclk) begin // ext_di_r <= ext_di; ext_di_r <= {ser_di, 4'b0, imx5_rdy, ext_di[9], ext_di[2]}; ext_di_r2 <= ext_di_r; if (xrst) toggle_bits <= 0; else toggle_bits <= toggle_bits ^ pulses; end assign status = {toggle_bits[10:0], sample_counter[12:0], enable_gps, config_rst}; `else assign status = {sample_counter,2'b0}; `endif status_generate #( .STATUS_REG_ADDR (LOGGER_STATUS_REG_ADDR), .PAYLOAD_BITS (26), Loading @@ -384,12 +412,13 @@ module event_logger#( .srst (mrst), // input .we (cmd_status), // input .wd (cmd_data[7:0]), // input[7:0] .status ({sample_counter,2'b0}), // input[25:0] // 2 LSBs - may add "real" status .status (status), // {sample_counter,2'b0}), // input[25:0] // 2 LSBs - may add "real" status .ad (status_ad), // output[7:0] .rq (status_rq), // output .start (status_start) // input ); imu_spi393 i_imu_spi ( // .rst(rst), .mclk (mclk), // system clock, negedge Loading
py393/x393_export_c.py +6 −2 Original line number Diff line number Diff line Loading @@ -2672,14 +2672,18 @@ class X393ExportC(object): dw.append(("imu_slot", vrlg.LOGGER_CONF_IMU - vrlg.LOGGER_CONF_IMU_BITS, vrlg.LOGGER_CONF_IMU_BITS, 0, "IMU slot (3 - use IMX5 instead of GPS)")) dw.append(("imu_set", vrlg.LOGGER_CONF_IMU, 1, 0, "Set 'imu_slot'")) dw.append(("gps_slot", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS, 2, 0, "GPS slot")) dw.append(("gps_invert", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 2, 1, 0, "GPS inpert 1pps signal")) dw.append(("gps_invert", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 2, 1, 0, "GPS ivpert 1pps signal")) dw.append(("gps_ext", vrlg.LOGGER_CONF_GPS - vrlg.LOGGER_CONF_GPS_BITS + 3, 1, 0, "GPS sync to 1 pps signal (0 - sync to serial message)")) dw.append(("gps_set", vrlg.LOGGER_CONF_GPS, 1, 0, "Set 'gps_*' fields")) dw.append(("msg_input", vrlg.LOGGER_CONF_MSG - vrlg.LOGGER_CONF_MSG_BITS, 4, 0, "MSG pin: GPIO pin number to accept external signal (0xf - disable)")) dw.append(("msg_invert", vrlg.LOGGER_CONF_MSG - vrlg.LOGGER_CONF_MSG_BITS + 4, 1, 0, "MSG input polarity - 0 - active high, 1 - active low")) dw.append(("msg_set", vrlg.LOGGER_CONF_MSG, 1, 0, "Set 'msg_*' fields")) dw.append(("log_sync", vrlg.LOGGER_CONF_SYN - vrlg.LOGGER_CONF_SYN_BITS, vrlg.LOGGER_CONF_SYN_BITS, 0, "Log frame sync events (bit per sensor channel)")) dw.append(("log_sync", vrlg.LOGGER_CONF_SYN - vrlg.LOGGER_CONF_SYN_BITS, vrlg.LOGGER_CONF_SYN_BITS, 0, "Log frame sync events (bit per sensor channel, MSB - log external sync)")) dw.append(("log_sync_set",vrlg.LOGGER_CONF_SYN, 1, 0, "Set 'log_sync' fields")) dw.append(("log_en", vrlg.LOGGER_CONF_EN - vrlg.LOGGER_CONF_EN_BITS, vrlg.LOGGER_CONF_EN_BITS, 0, "Enable event logger (0- reset)")) dw.append(("log_en_set", vrlg.LOGGER_CONF_EN, 1, 0, "Set 'log_enable' field")) dw.append(("log_dbg", vrlg.LOGGER_CONF_DBG - vrlg.LOGGER_CONF_DBG_BITS, vrlg.LOGGER_CONF_DBG_BITS, 0, "IMU debug mode")) dw.append(("log_dbg_set",vrlg.LOGGER_CONF_DBG, 1, 0, "Set 'log_dbg' field")) return dw def _enc_logger_data(self): dw=[] Loading
timing/camsync393.v +4 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,8 @@ module camsync393 #( output ts_rcv_stb_chn4, // 1 clock before ts_rcv_data is valid output [7:0] ts_rcv_data_chn4 // byte-wide serialized timestamp message received or local // ,output [3:0] dbg_logger2023 ); reg en = 0; // enable camsync module // wire rst = mrst || !en; Loading Loading @@ -436,6 +438,8 @@ module camsync393 #( (dly_cntr_chn1[31:0]!=0)?1'b1:1'b0, (dly_cntr_chn0[31:0]!=0)?1'b1:1'b0}; // assign dbg_logger2023 = {start_en, ts_external_pclk, rcv_run, trigger_condition}; assign gpio_out_en = gpio_out_en_r; //! in testmode GPIO[9] and GPIO[8] use internal signals instead of the outsync: Loading