From aa65f26c496887087b1773fe509c214fa686b4c1 Mon Sep 17 00:00:00 2001
From: Daniel Newbrook <dwn1c21@soton.ac.uk>
Date: Thu, 28 Sep 2023 10:41:53 +0100
Subject: [PATCH] Update trig Converter

---
 flist/dma350_ahb_ip.flist                 |  1 +
 wrapper/logical/sldma350_trig_converter.v | 45 +++++++++--------------
 2 files changed, 19 insertions(+), 27 deletions(-)

diff --git a/flist/dma350_ahb_ip.flist b/flist/dma350_ahb_ip.flist
index 0c41f92..7e52f51 100644
--- a/flist/dma350_ahb_ip.flist
+++ b/flist/dma350_ahb_ip.flist
@@ -28,6 +28,7 @@ $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_reg_field_rw_rw_sldm
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_gen_coreif_dmach_sldma350_pkg.sv
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_gen_addrmap_dmach_sldma350.sv
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_interface_sldma350_pkg.sv
+$(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_address_map_m1_sldma350_inc.sv
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_flop_en/verilog/ada_flop_en.sv
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_or_tree/verilog/ada_or_tree.sv
 $(SOCLABS_SLDMA350_TECH_DIR)/src/logical/shared/verilog/ada_gen_regif_dmainfo_sldma350_pkg.sv
diff --git a/wrapper/logical/sldma350_trig_converter.v b/wrapper/logical/sldma350_trig_converter.v
index f2cbe08..9ead9c6 100644
--- a/wrapper/logical/sldma350_trig_converter.v
+++ b/wrapper/logical/sldma350_trig_converter.v
@@ -23,7 +23,7 @@ module sldma350_trig_converter (
     output wire         DMAC_DMA_DONE
 );
 
- parameter IDLE  = 2'b00,START_REQ = 2'b01,ERROR = 2'b10;
+ parameter IDLE  = 2'b00,START_REQ = 2'b01,ERROR = 2'b10,END_REQ = 2'b11;
 
 reg [1:0]  state;
 reg        dma_err;
@@ -37,46 +37,30 @@ assign DMAC_DMA_REQ_ERR = dma_err;
 assign trig_in_req_type = 2'b10;
 assign DMAC_DMA_DONE = out_ack;
 
-reg         req_0;
-reg         req_1;
-reg         DMAC_DMA_REQ_EDGE;
-
-always @(posedge clk) begin
-    req_0<=DMAC_DMA_REQ;
-    req_1<=req_0;
-    if (req_0&~req_1) begin
-        DMAC_DMA_REQ_EDGE<=1'b1;
-    end else begin
-        DMAC_DMA_REQ_EDGE<=1'b0;
-    end
-end
-
-always @(negedge resetn or posedge clk) begin
+always @(posedge clk or negedge resetn) begin
     if(~resetn) begin
         state <= IDLE;
         dma_err<= 1'b0;
         out_ack <= 1'b0;
-        req_0 <= 1'b0;
-        req_1 <= 1'b0;
-        DMAC_DMA_REQ_EDGE <= 1'b0;
     end else begin
         state <= next_state;
-    end
-    if (req_err) begin
+        if (req_err) begin
         dma_err <= 1'b1;
+        end
+        if (trig_out_req) begin
+            out_ack <= 1'b1;
+        end else begin
+            out_ack <= 1'b0;
+        end
     end
-    if (trig_out_req) begin
-        out_ack <= 1'b1;
-    end else begin
-        out_ack <= 1'b0;
-    end
+    
 end
 
 always @* begin
 case(state)
     IDLE: begin
         trig_req = 1'b0;
-        if (DMAC_DMA_REQ_EDGE & ~trig_in_ack) begin
+        if (DMAC_DMA_REQ & ~trig_in_ack) begin
             req_err = 1'b0;
             next_state = START_REQ;
         end
@@ -96,6 +80,13 @@ case(state)
         req_err = 1'b1;
         next_state = IDLE;
     end
+    END_REQ: begin
+        trig_req = 1'b0;
+        req_err = 1'b0;
+        if (~DMAC_DMA_REQ) begin
+            next_state = IDLE;
+        end
+    end
     default : next_state = IDLE;
 endcase
 end
-- 
GitLab