Commit d7392a0f authored by Andrey Filippov's avatar Andrey Filippov
Browse files

tested imx-5 and external syncs with event logger, version 32'h03934019

parent faa42107
Loading
Loading
Loading
Loading
+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.
@@ -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
@@ -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
@@ -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]
@@ -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]
@@ -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]
@@ -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
@@ -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
@@ -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]
@@ -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
@@ -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
+4 −1
Original line number Diff line number Diff line
@@ -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
+36 −7
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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
@@ -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),
@@ -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
+6 −2
Original line number Diff line number Diff line
@@ -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=[]
+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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