diff --git a/hdl/s15611_driver.sv b/hdl/s15611_driver.sv index 425cd4f55d71c3b3b5eb3d0392a5008f891b2987..9cfb2ff7e27c2b00c9d99d9822ede86cfed290a1 100644 --- a/hdl/s15611_driver.sv +++ b/hdl/s15611_driver.sv @@ -20,16 +20,15 @@ module s15611_driver #( - parameter MASTER_CLK_MHZ = 100, parameter MCLK_MHZ = 40, parameter NUMBER_OF_PIXEL = 1024, - parameter MASTER_START_PULSE_PERIOD = 1162, - parameter MASTER_START_PULSE_HIGH_PERIOD = 167, parameter CDC_REG_LENGTH = 4 ) ( input master_clock, input resetn, + input [31:0] master_start_pulse_period, + input [31:0] master_start_pulse_high_period, // sensor interface output s15611_mclk, output logic s15611_mst, @@ -55,7 +54,7 @@ module s15611_driver genvar i; logic sensor_clock; - logic [15:0] mclk_counter; + logic [31:0] mclk_counter; logic data_capture_triger; logic [15:0] pixel_counter; enum logic [3:0] {BLANKING_PERIOD, SYNC_CLK1, SYNC_CLK2, CAPTURE_DATA} state; @@ -77,7 +76,7 @@ module s15611_driver assign s15611_mclk = master_clock; always_ff @(posedge master_clock) begin - if(mclk_counter >= MASTER_START_PULSE_PERIOD-1) + if(mclk_counter >= master_start_pulse_period-1) begin mclk_counter <= 0; end @@ -86,7 +85,7 @@ module s15611_driver mclk_counter <= mclk_counter + 1; end - if (mclk_counter <= MASTER_START_PULSE_HIGH_PERIOD-1) + if (mclk_counter <= master_start_pulse_high_period-1) begin s15611_mst <= 1; end diff --git a/hdl/sensor_data_acquisition.v b/hdl/sensor_data_acquisition.v index 805fa66d7814586a13f8b0cc281e824025e40325..b413f481a80162ae947cf05903cc89bccdc2d65e 100644 --- a/hdl/sensor_data_acquisition.v +++ b/hdl/sensor_data_acquisition.v @@ -25,6 +25,8 @@ module sensor_data_acquisition input resetn, input send_raw_data, input [15:0] number_of_packet, + input [31:0] master_start_pulse_period, + input [31:0] master_start_pulse_high_period, // sensor interface output s15611_mclk, output s15611_mst, @@ -76,6 +78,8 @@ module sensor_data_acquisition ( .master_clock(master_clock), .resetn(resetn), + .master_start_pulse_period(master_start_pulse_period), + .master_start_pulse_high_period(master_start_pulse_high_period), // sensor interface .s15611_mclk(s15611_mclk), .s15611_mst(s15611_mst), diff --git a/matlab/captured_raw_data.m b/matlab/captured_raw_data.m new file mode 100644 index 0000000000000000000000000000000000000000..65ded6f6a23782d2377fc05302e77afa39e07569 --- /dev/null +++ b/matlab/captured_raw_data.m @@ -0,0 +1,40 @@ +clear; +close all; +clc; +%% read data +fileID = fopen('sensor_data.bin'); +data_input = fread(fileID, 'uint8', 'ieee-be'); +%% extract processed data +fs = 40e6; +ts = 1 / fs; +header_start = strfind(data_input', [170, 170, 170, 170])'; +footer_start = strfind(data_input', [85, 85, 85, 85])'; + +valid_header_end = header_start(2:end - 2) +5; +header_end_diff = diff(valid_header_end); +time_stamp_temp = get_data_slice(data_input, valid_header_end + 1, 6); +time_stamp_diff = diff(time_stamp_temp); +time_stamp = ts .* time_stamp_temp; + +if (max(time_stamp_diff) / time_stamp_diff(2) ~= 1) + disp("Warning: packet loss!"); +end + +sensor_raw_data = zeros(length(valid_header_end), 1025); +sensor_raw_data(:, 1025) = time_stamp; + +for i = 1:length(valid_header_end) + sensor_raw_data(i, (1:2:1024)) = get_data_slice(data_input, (1:4:2048) + valid_header_end(i) + 6, 2); + sensor_raw_data(i, (2:2:1024)) = get_data_slice(data_input, (1:4:2048) + valid_header_end(i) + 8, 2); +end + +%% plot +hold on; +for i=1:10 + pause(1); + plot(sensor_raw_data(i,1:1024)); +end +hold off; + + +%% diff --git a/petalinux/config b/petalinux/config index fb939dc6222f5925376b7b69f6028a736aa38421..ee7b7ef17157daa3c7885cd0e711c2d1b9a32fba 100644 --- a/petalinux/config +++ b/petalinux/config @@ -80,9 +80,12 @@ CONFIG_SUBSYSTEM_SERIAL_IP_NAME="psu_uart_0" # CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_SELECT=y # CONFIG_SUBSYSTEM_ETHERNET_MANUAL_SELECT is not set -CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_MAC_AUTO=y -CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_MAC_PATTERN="00:0a:35:00:??:??" -CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_USE_DHCP=y +# CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_MAC_AUTO is not set +CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_MAC="00:0a:35:00:13:0a" +# CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_USE_DHCP is not set +CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_IP_ADDRESS="192.168.4.100" +CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_IP_NETMASK="255.255.0.0" +CONFIG_SUBSYSTEM_ETHERNET_PSU_ETHERNET_3_IP_GATEWAY="192.168.0.1" # # Flash Settings @@ -146,7 +149,7 @@ CONFIG_SUBSYSTEM_EXTRA_DT_FILES="" # CONFIG_SUBSYSTEM_BOOTARGS_AUTO=y CONFIG_SUBSYSTEM_BOOTARGS_EARLYPRINTK=y -CONFIG_SUBSYSTEM_BOOTARGS_GENERATED=" earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait" + CONFIG_SUBSYSTEM_DEVICETREE_COMPILER_FLAGS="-@" # CONFIG_SUBSYSTEM_DTB_OVERLAY is not set # CONFIG_SUBSYSTEM_REMOVE_PL_DTB is not set @@ -292,3 +295,4 @@ CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL="/tools/Xilinx/PetaLinux/sstate_aarch64_2021 # User Layers # CONFIG_USER_LAYER_0="" +CONFIG_SUBSYSTEM_BOOTARGS_GENERATED=" earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait" diff --git a/qt/FZ3TCPClient/mainwindow.ui b/qt/FZ3TCPClient/mainwindow.ui index a24290a8b473cf1e69b704dda37f5fe688de60d6..4fdd28de08a6bc26f07bbe62f02b915b6bc4460a 100644 --- a/qt/FZ3TCPClient/mainwindow.ui +++ b/qt/FZ3TCPClient/mainwindow.ui @@ -35,7 +35,7 @@ - 1 + 4 @@ -49,14 +49,14 @@ - 11 + 100 - 10 + 192 @@ -84,7 +84,7 @@ - 1 + 168 diff --git a/qt/FZ3TCPServer/mainwindow.h b/qt/FZ3TCPServer/mainwindow.h index b829adf29a958d6fb0f32ddb3497f3605cd53694..3c5ddb43705a7cd3673ab3cec810913a9e6ecb3d 100644 --- a/qt/FZ3TCPServer/mainwindow.h +++ b/qt/FZ3TCPServer/mainwindow.h @@ -38,7 +38,7 @@ #include #include -#define BUFFER_SIZE 1 +#define BUFFER_SIZE 2 namespace Ui { diff --git a/tcl/create_vivado_project.tcl b/tcl/create_vivado_project.tcl index 13a8c1b5351bc65860d6c59ec9cefe79d420abf2..0d5a6a1ccffdc7be58cc4b64f1037b2cfba868a7 100644 --- a/tcl/create_vivado_project.tcl +++ b/tcl/create_vivado_project.tcl @@ -18,7 +18,7 @@ # # create_vivado_project.tcl: Tcl script for re-creating project 'vivado' # -# Generated by Vivado on Mon Aug 22 10:17:31 +0430 2022 +# Generated by Vivado on Sat Aug 27 16:12:12 +0430 2022 # IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021 # # This file contains the Vivado Tcl commands for re-creating the project to the state* @@ -411,6 +411,8 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { set axis_data_fifo_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axis_data_fifo:2.0 axis_data_fifo_0 ] set_property -dict [ list \ CONFIG.FIFO_DEPTH {32768} \ + CONFIG.HAS_AFULL {1} \ + CONFIG.HAS_WR_DATA_COUNT {1} \ CONFIG.IS_ACLK_ASYNC {1} \ ] $axis_data_fifo_0 @@ -429,11 +431,11 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { set sensor_ila [ create_bd_cell -type ip -vlnv xilinx.com:ip:system_ila:1.1 sensor_ila ] set_property -dict [ list \ CONFIG.ALL_PROBE_SAME_MU_CNT {2} \ - CONFIG.C_DATA_DEPTH {4096} \ + CONFIG.C_DATA_DEPTH {2048} \ CONFIG.C_EN_STRG_QUAL {1} \ CONFIG.C_INPUT_PIPE_STAGES {3} \ CONFIG.C_MON_TYPE {MIX} \ - CONFIG.C_NUM_OF_PROBES {6} \ + CONFIG.C_NUM_OF_PROBES {8} \ CONFIG.C_PROBE0_MU_CNT {2} \ CONFIG.C_PROBE1_MU_CNT {2} \ CONFIG.C_PROBE2_MU_CNT {2} \ @@ -441,6 +443,7 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { CONFIG.C_PROBE4_MU_CNT {2} \ CONFIG.C_PROBE5_MU_CNT {2} \ CONFIG.C_PROBE6_MU_CNT {2} \ + CONFIG.C_PROBE7_MU_CNT {2} \ CONFIG.C_SLOT_0_INTF_TYPE {xilinx.com:interface:axis_rtl:1.0} \ ] $sensor_ila @@ -449,9 +452,14 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { set_property -dict [ list \ CONFIG.C_EN_PROBE_IN_ACTIVITY {0} \ CONFIG.C_NUM_PROBE_IN {0} \ - CONFIG.C_NUM_PROBE_OUT {2} \ - CONFIG.C_PROBE_OUT1_INIT_VAL {0x84D0} \ + CONFIG.C_NUM_PROBE_OUT {4} \ + CONFIG.C_PROBE_OUT0_INIT_VAL {0x1} \ + CONFIG.C_PROBE_OUT1_INIT_VAL {0x0190} \ CONFIG.C_PROBE_OUT1_WIDTH {16} \ + CONFIG.C_PROBE_OUT2_INIT_VAL {0x00007530} \ + CONFIG.C_PROBE_OUT2_WIDTH {32} \ + CONFIG.C_PROBE_OUT3_INIT_VAL {0x000000A7} \ + CONFIG.C_PROBE_OUT3_WIDTH {32} \ ] $sensor_vio # Create interface connections @@ -461,6 +469,8 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { # Create port connections connect_bd_net -net S00_ARESETN_1 [get_bd_pins clk_40mhz_resetn] [get_bd_pins axis_data_fifo_0/s_axis_aresetn] [get_bd_pins sensor_data_acquisition_0/resetn] [get_bd_pins sensor_ila/resetn] + connect_bd_net -net almost_full [get_bd_pins axis_data_fifo_0/almost_full] [get_bd_pins sensor_ila/probe7] + connect_bd_net -net axis_wr_data_count [get_bd_pins axis_data_fifo_0/axis_wr_data_count] [get_bd_pins sensor_ila/probe6] connect_bd_net -net dbg_axis_state [get_bd_pins sensor_data_acquisition_0/dbg_axis_state] [get_bd_pins sensor_ila/probe0] connect_bd_net -net dbg_sensor_data [get_bd_pins sensor_data_acquisition_0/dbg_sensor_data] [get_bd_pins sensor_ila/probe3] connect_bd_net -net dbg_sensor_index [get_bd_pins sensor_data_acquisition_0/dbg_sensor_index] [get_bd_pins sensor_ila/probe4] @@ -468,6 +478,8 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { connect_bd_net -net dbg_sensor_state [get_bd_pins sensor_data_acquisition_0/dbg_sensor_state] [get_bd_pins sensor_ila/probe1] connect_bd_net -net dbg_sensor_valid [get_bd_pins sensor_data_acquisition_0/dbg_sensor_valid] [get_bd_pins sensor_ila/probe5] connect_bd_net -net m_axis_aclk_0_1 [get_bd_pins clk_300mhz] [get_bd_pins axis_data_fifo_0/m_axis_aclk] + connect_bd_net -net master_start_pulse_high_period [get_bd_pins sensor_data_acquisition_0/master_start_pulse_high_period] [get_bd_pins sensor_vio/probe_out3] + connect_bd_net -net master_start_pulse_period [get_bd_pins sensor_data_acquisition_0/master_start_pulse_period] [get_bd_pins sensor_vio/probe_out2] connect_bd_net -net number_of_packet [get_bd_pins sensor_data_acquisition_0/number_of_packet] [get_bd_pins sensor_vio/probe_out1] connect_bd_net -net pl_clk3 [get_bd_pins clk_40mhz] [get_bd_pins axis_data_fifo_0/s_axis_aclk] [get_bd_pins sensor_data_acquisition_0/master_clock] [get_bd_pins sensor_ila/clk] [get_bd_pins sensor_vio/clk] connect_bd_net -net s15611_data_0_1 [get_bd_pins s15611_data] [get_bd_pins sensor_data_acquisition_0/s15611_data] @@ -485,54 +497,58 @@ proc create_hier_cell_sensor_ss { parentCell nameHier } { # Perform GUI Layout regenerate_bd_layout -hierarchy [get_bd_cells /sensor_ss] -layout_string { "ActiveEmotionalView":"Default View", - "Default View_ScaleFactor":"0.636111", - "Default View_TopLeft":"-395,0", + "Default View_ScaleFactor":"0.692213", + "Default View_TopLeft":"-185,-12", "ExpandedHierarchyInLayout":"", "guistr":"# # String gsaved with Nlview 7.0r4 2019-12-20 bk=1.5203 VDI=41 GEI=36 GUI=JA:10.0 TLS # -string -flagsOSRD -preplace port data -pg 1 -lvl 4 -x 1040 -y 370 -defaultsOSRD -preplace port port-id_clk_300mhz -pg 1 -lvl 0 -x -70 -y 360 -defaultsOSRD -preplace port port-id_clk_40mhz -pg 1 -lvl 0 -x -70 -y 410 -defaultsOSRD -preplace port port-id_clk_40mhz_resetn -pg 1 -lvl 0 -x -70 -y 380 -defaultsOSRD -preplace port port-id_s15611_cs -pg 1 -lvl 4 -x 1040 -y 480 -defaultsOSRD -preplace port port-id_s15611_mclk -pg 1 -lvl 4 -x 1040 -y 280 -defaultsOSRD -preplace port port-id_s15611_miso -pg 1 -lvl 0 -x -70 -y 550 -defaultsOSRD -preplace port port-id_s15611_mosi -pg 1 -lvl 4 -x 1040 -y 500 -defaultsOSRD -preplace port port-id_s15611_mst -pg 1 -lvl 4 -x 1040 -y 460 -defaultsOSRD -preplace port port-id_s15611_pclk -pg 1 -lvl 0 -x -70 -y 590 -defaultsOSRD -preplace port port-id_s15611_rstb -pg 1 -lvl 4 -x 1040 -y 540 -defaultsOSRD -preplace port port-id_s15611_sclk -pg 1 -lvl 4 -x 1040 -y 520 -defaultsOSRD -preplace port port-id_s15611_sync -pg 1 -lvl 0 -x -70 -y 570 -defaultsOSRD -preplace portBus s15611_data -pg 1 -lvl 0 -x -70 -y 610 -defaultsOSRD -preplace inst axis_data_fifo_0 -pg 1 -lvl 3 -x 900 -y 370 -defaultsOSRD -preplace inst sensor_ila -pg 1 -lvl 3 -x 900 -y 140 -defaultsOSRD -preplace inst sensor_vio -pg 1 -lvl 1 -x 60 -y 480 -defaultsOSRD -preplace inst sensor_data_acquisition_0 -pg 1 -lvl 2 -x 420 -y 540 -defaultsOSRD -preplace netloc S00_ARESETN_1 1 0 3 NJ 380 190 340 650 -preplace netloc dbg_axis_state 1 2 1 670 100n -preplace netloc dbg_sensor_data 1 2 1 710 160n -preplace netloc dbg_sensor_index 1 2 1 730 180n -preplace netloc dbg_sensor_raw_data 1 2 1 700 140n -preplace netloc dbg_sensor_state 1 2 1 690 120n -preplace netloc dbg_sensor_valid 1 2 1 740 200n -preplace netloc m_axis_aclk_0_1 1 0 3 NJ 360 NJ 360 640J -preplace netloc number_of_packet 1 1 1 170 490n -preplace netloc pl_clk3 1 0 3 -50 410 200 350 720 -preplace netloc s15611_data_0_1 1 0 2 NJ 610 NJ -preplace netloc s15611_miso_0_1 1 0 2 NJ 550 NJ -preplace netloc s15611_pclk_0_1 1 0 2 NJ 590 NJ -preplace netloc s15611_sync_0_1 1 0 2 NJ 570 NJ -preplace netloc send_raw_data 1 1 1 180 470n -preplace netloc sensor_data_acquisit_0_s15611_cs 1 2 2 NJ 480 NJ -preplace netloc sensor_data_acquisit_0_s15611_mclk 1 2 2 680J 470 1020J -preplace netloc sensor_data_acquisit_0_s15611_mosi 1 2 2 NJ 500 NJ -preplace netloc sensor_data_acquisit_0_s15611_mst 1 2 2 NJ 460 NJ -preplace netloc sensor_data_acquisit_0_s15611_rstb 1 2 2 NJ 540 NJ -preplace netloc sensor_data_acquisit_0_s15611_sclk 1 2 2 NJ 520 NJ -preplace netloc axis_data_fifo_0_M_AXIS 1 3 1 NJ 370 -preplace netloc sensor_data_acquisition_data 1 2 1 660 60n -levelinfo -pg 1 -70 60 420 900 1040 -pagesize -pg 1 -db -bbox -sgen -260 0 1190 720 +preplace port data -pg 1 -lvl 4 -x 1290 -y 530 -defaultsOSRD +preplace port port-id_clk_300mhz -pg 1 -lvl 0 -x 0 -y 580 -defaultsOSRD +preplace port port-id_clk_40mhz -pg 1 -lvl 0 -x 0 -y 100 -defaultsOSRD +preplace port port-id_clk_40mhz_resetn -pg 1 -lvl 0 -x 0 -y 200 -defaultsOSRD +preplace port port-id_s15611_cs -pg 1 -lvl 4 -x 1290 -y 70 -defaultsOSRD +preplace port port-id_s15611_mclk -pg 1 -lvl 4 -x 1290 -y 50 -defaultsOSRD +preplace port port-id_s15611_miso -pg 1 -lvl 0 -x 0 -y 220 -defaultsOSRD +preplace port port-id_s15611_mosi -pg 1 -lvl 4 -x 1290 -y 90 -defaultsOSRD +preplace port port-id_s15611_mst -pg 1 -lvl 4 -x 1290 -y 440 -defaultsOSRD +preplace port port-id_s15611_pclk -pg 1 -lvl 0 -x 0 -y 260 -defaultsOSRD +preplace port port-id_s15611_rstb -pg 1 -lvl 4 -x 1290 -y 420 -defaultsOSRD +preplace port port-id_s15611_sclk -pg 1 -lvl 4 -x 1290 -y 110 -defaultsOSRD +preplace port port-id_s15611_sync -pg 1 -lvl 0 -x 0 -y 240 -defaultsOSRD +preplace portBus s15611_data -pg 1 -lvl 0 -x 0 -y 280 -defaultsOSRD +preplace inst axis_data_fifo_0 -pg 1 -lvl 3 -x 1070 -y 550 -defaultsOSRD +preplace inst sensor_ila -pg 1 -lvl 3 -x 1070 -y 270 -defaultsOSRD +preplace inst sensor_vio -pg 1 -lvl 1 -x 130 -y 100 -defaultsOSRD +preplace inst sensor_data_acquisition_0 -pg 1 -lvl 2 -x 550 -y 190 -defaultsOSRD +preplace netloc S00_ARESETN_1 1 0 3 NJ 200 240 370 880 +preplace netloc almost_full 1 2 2 900 430 1250 +preplace netloc axis_wr_data_count 1 2 2 890 440 1240 +preplace netloc dbg_axis_state 1 2 1 N 210 +preplace netloc dbg_sensor_data 1 2 1 N 270 +preplace netloc dbg_sensor_index 1 2 1 N 290 +preplace netloc dbg_sensor_raw_data 1 2 1 N 250 +preplace netloc dbg_sensor_state 1 2 1 N 230 +preplace netloc dbg_sensor_valid 1 2 1 N 310 +preplace netloc m_axis_aclk_0_1 1 0 3 NJ 580 NJ 580 NJ +preplace netloc master_start_pulse_high_period 1 1 1 250 130n +preplace netloc master_start_pulse_period 1 1 1 260 110n +preplace netloc number_of_packet 1 1 1 270 90n +preplace netloc pl_clk3 1 0 3 20 10 290 10 870 +preplace netloc s15611_data_0_1 1 0 2 NJ 280 NJ +preplace netloc s15611_miso_0_1 1 0 2 NJ 220 NJ +preplace netloc s15611_pclk_0_1 1 0 2 NJ 260 NJ +preplace netloc s15611_sync_0_1 1 0 2 NJ 240 NJ +preplace netloc send_raw_data 1 1 1 280 70n +preplace netloc sensor_data_acquisit_0_s15611_cs 1 2 2 860J 70 NJ +preplace netloc sensor_data_acquisit_0_s15611_mclk 1 2 2 810J 50 NJ +preplace netloc sensor_data_acquisit_0_s15611_mosi 1 2 2 900J 80 1270J +preplace netloc sensor_data_acquisit_0_s15611_mst 1 2 2 820J 90 1260J +preplace netloc sensor_data_acquisit_0_s15611_rstb 1 2 2 850J 100 1240J +preplace netloc sensor_data_acquisit_0_s15611_sclk 1 2 2 830J 110 NJ +preplace netloc axis_data_fifo_0_M_AXIS 1 3 1 NJ 530 +preplace netloc sensor_data_acquisition_data 1 2 1 840 70n +levelinfo -pg 1 0 130 550 1070 1290 +pagesize -pg 1 -db -bbox -sgen -190 0 1440 640 " } @@ -2467,8 +2483,8 @@ proc create_hier_cell_dma_ss { parentCell nameHier } { # Perform GUI Layout regenerate_bd_layout -layout_string { "ActiveEmotionalView":"Default View", - "Default View_ScaleFactor":"0.789655", - "Default View_TopLeft":"18,24", + "Default View_ScaleFactor":"0.776271", + "Default View_TopLeft":"-198,-10", "ExpandedHierarchyInLayout":"", "guistr":"# # String gsaved with Nlview 7.0r4 2019-12-20 bk=1.5203 VDI=41 GEI=36 GUI=JA:10.0 TLS # -string -flagsOSRD