From 9f8a94df69b73a510ff2168ba7ccd6e93f2a2660 Mon Sep 17 00:00:00 2001 From: Adrian Costina Date: Mon, 3 Jul 2017 18:00:23 +0300 Subject: [PATCH] axi_logic_analyzer: Streaming flag initial commit If the streaming bit is set, after the trigger condition is met data will be continuosly captured by the DMA. The streaming bit must be set to 0 to reset triggering. --- .../axi_logic_analyzer/axi_logic_analyzer.v | 24 ++++++++++++++++++- .../axi_logic_analyzer_reg.v | 18 ++++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/library/axi_logic_analyzer/axi_logic_analyzer.v b/library/axi_logic_analyzer/axi_logic_analyzer.v index 68d7cae7b..aec2487bb 100644 --- a/library/axi_logic_analyzer/axi_logic_analyzer.v +++ b/library/axi_logic_analyzer/axi_logic_analyzer.v @@ -106,6 +106,8 @@ module axi_logic_analyzer ( reg up_triggered_reset_d1; reg up_triggered_reset_d2; + reg streaming_on; + // internal signals wire up_clk; @@ -141,6 +143,8 @@ module axi_logic_analyzer ( wire [31:0] trigger_delay; wire trigger_out_delayed; + wire streaming; + genvar i; // signal name changes @@ -148,9 +152,25 @@ module axi_logic_analyzer ( assign up_clk = s_axi_aclk; assign up_rstn = s_axi_aresetn; - assign trigger_out = trigger_delay == 32'h0 ? trigger_out_s : trigger_out_delayed; + assign trigger_out = trigger_delay == 32'h0 ? trigger_out_s | streaming_on : trigger_out_delayed | streaming_on; assign trigger_out_delayed = delay_counter == 32'h0 ? 1 : 0; + always @(posedge clk_out) begin + if (trigger_delay == 0) begin + if (streaming == 1'b1 && sample_valid_la == 1'b1 && trigger_out_s == 1'b1) begin + streaming_on <= 1'b1; + end else if (streaming == 1'b0) begin + streaming_on <= 1'b0; + end + end else begin + if (streaming == 1'b1 && sample_valid_la == 1'b1 && trigger_out_delayed == 1'b1) begin + streaming_on <= 1'b1; + end else if (streaming == 1'b0) begin + streaming_on <= 1'b0; + end + end + end + always @(posedge clk_out) begin if (sample_valid_la == 1'b1 && trigger_out_s == 1'b1) begin up_triggered_set <= 1'b1; @@ -310,6 +330,8 @@ module axi_logic_analyzer ( .triggered (up_triggered), + .streaming(streaming), + // bus interface .up_rstn (up_rstn), diff --git a/library/axi_logic_analyzer/axi_logic_analyzer_reg.v b/library/axi_logic_analyzer/axi_logic_analyzer_reg.v index 53ee0755a..32bd00cf8 100644 --- a/library/axi_logic_analyzer/axi_logic_analyzer_reg.v +++ b/library/axi_logic_analyzer/axi_logic_analyzer_reg.v @@ -59,6 +59,8 @@ module axi_logic_analyzer_reg ( output [15:0] od_pp_n, input triggered, + + output streaming, // bus interface @@ -94,6 +96,7 @@ module axi_logic_analyzer_reg ( reg [15:0] up_overwrite_data = 0; reg [15:0] up_od_pp_n = 0; reg up_triggered = 0; + reg up_streaming = 0; wire [15:0] up_input_data; @@ -117,6 +120,7 @@ module axi_logic_analyzer_reg ( up_io_selection <= 16'h0; up_od_pp_n <= 16'h0; up_triggered <= 1'd0; + up_streaming <= 1'd0; end else begin up_wack <= up_wreq; if ((up_wreq == 1'b1) && (up_waddr[4:0] == 5'h1)) begin @@ -172,6 +176,9 @@ module axi_logic_analyzer_reg ( end else if ((up_wreq == 1'b1) && (up_waddr[4:0] == 5'h12)) begin up_triggered <= up_triggered & ~up_wdata[0]; end + if ((up_wreq == 1'b1) && (up_waddr[4:0] == 5'h13)) begin + up_streaming <= up_wdata[0]; + end end end @@ -204,6 +211,7 @@ module axi_logic_analyzer_reg ( 5'h10: up_rdata <= {16'h0,up_od_pp_n}; 5'h11: up_rdata <= up_trigger_delay; 5'h12: up_rdata <= {31'h0,up_triggered}; + 5'h13: up_rdata <= {31'h0,up_streaming}; default: up_rdata <= 0; endcase end else begin @@ -214,15 +222,16 @@ module axi_logic_analyzer_reg ( ad_rst i_core_rst_reg (.preset(!up_rstn), .clk(clk), .rst(reset)); - up_xfer_cntrl #(.DATA_WIDTH(284)) i_xfer_cntrl ( + up_xfer_cntrl #(.DATA_WIDTH(285)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), - .up_data_cntrl ({ up_od_pp_n, // 16 + .up_data_cntrl ({ up_streaming, // 1 + up_od_pp_n, // 16 up_overwrite_data, // 16 up_overwrite_enable, // 16 up_clock_select, // 1 up_trigger_logic, // 1 - up_fifo_depth, // 32 + up_fifo_depth, // 32 up_trigger_delay, // 32 up_high_level_enable, // 18 up_low_level_enable, // 18 @@ -236,7 +245,8 @@ module axi_logic_analyzer_reg ( .up_xfer_done (), .d_rst (1'b0), .d_clk (clk), - .d_data_cntrl ({ od_pp_n, // 16 + .d_data_cntrl ({ streaming, // 1 + od_pp_n, // 16 overwrite_data, // 16 overwrite_enable, // 16 clock_select, // 1