From c480802b02ea8a9d7304bb469057f3b4ecb200bb Mon Sep 17 00:00:00 2001
From: vauban353 <vauban353@gmail.com>
Date: Mon, 4 Dec 2023 19:21:14 +0000
Subject: [PATCH] Cape: Verilog template: Simplify APB interface.

---
 .../CAPE/VERILOG_TEMPLATE/ADD_CAPE.tcl        |   2 -
 .../CAPE/VERILOG_TEMPLATE/HDL/CAPE.v          |  14 --
 .../VERILOG_TEMPLATE/HDL/apb_ctrl_status.v    | 120 +++++++++++-------
 3 files changed, 73 insertions(+), 63 deletions(-)

diff --git a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/ADD_CAPE.tcl b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/ADD_CAPE.tcl
index 15a49b9..a652488 100644
--- a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/ADD_CAPE.tcl
+++ b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/ADD_CAPE.tcl
@@ -21,8 +21,6 @@ hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_n
 hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_name {PWRITE} -core_signal_name {APB_SLAVE_SLAVE_PWRITE} 
 hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_name {PRDATA} -core_signal_name {APB_SLAVE_SLAVE_PRDATA} 
 hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_name {PWDATA} -core_signal_name {APB_SLAVE_SLAVE_PWDATA} 
-hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_name {PREADY} -core_signal_name {APB_SLAVE_SLAVE_PREADY} 
-hdl_core_assign_bif_signal -hdl_core_name {CAPE} -bif_name {BIF_1} -bif_signal_name {PSLVERR} -core_signal_name {APB_SLAVE_SLAVE_PSLVERR} 
 hdl_core_rename_bif -hdl_core_name {CAPE} -current_bif_name {BIF_1} -new_bif_name {APB_TARGET} 
 
 #-------------------------------------------------------------------------------
diff --git a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/CAPE.v b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/CAPE.v
index bae27cc..88ced63 100644
--- a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/CAPE.v
+++ b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/CAPE.v
@@ -19,8 +19,6 @@ module CAPE(
     PRESETN,
     // Outputs
     APB_SLAVE_SLAVE_PRDATA,
-    APB_SLAVE_SLAVE_PREADY,
-    APB_SLAVE_SLAVE_PSLVERR,
     GPIO_IN,
     INT,
     // Inouts
@@ -107,8 +105,6 @@ input         PRESETN;
 // Output
 //--------------------------------------------------------------------
 output [31:0] APB_SLAVE_SLAVE_PRDATA;
-output        APB_SLAVE_SLAVE_PREADY;
-output        APB_SLAVE_SLAVE_PSLVERR;
 output [27:0] GPIO_IN;
 output [23:0] INT;
 //--------------------------------------------------------------------
@@ -185,9 +181,7 @@ inout         P9_42;
 wire   [31:0]  apb_ctrl_status_0_control;
 wire           APB_SLAVE_SLAVE_PENABLE;
 wire   [31:0]  APB_SLAVE_PRDATA;
-wire           APB_SLAVE_PREADY;
 wire           APB_SLAVE_SLAVE_PSEL;
-wire           APB_SLAVE_PSLVERR;
 wire   [31:0]  APB_SLAVE_SLAVE_PWDATA;
 wire           APB_SLAVE_SLAVE_PWRITE;
 wire   [30:3]  GPIO_IN_net_0;
@@ -260,8 +254,6 @@ wire           P9_41;
 wire           P9_42;
 wire           PCLK;
 wire           PRESETN;
-wire           APB_SLAVE_PREADY_net_0;
-wire           APB_SLAVE_PSLVERR_net_0;
 wire   [31:0]  APB_SLAVE_PRDATA_net_0;
 wire   [27:0]  GPIO_IN_net_1;
 wire   [46:31] GPIO_IN_slice_0;
@@ -305,10 +297,6 @@ assign INT[23:0]                    = 24'h000000;
 //--------------------------------------------------------------------
 // Top level output port assignments
 //--------------------------------------------------------------------
-assign APB_SLAVE_PREADY_net_0       = APB_SLAVE_PREADY;
-assign APB_SLAVE_SLAVE_PREADY       = APB_SLAVE_PREADY_net_0;
-assign APB_SLAVE_PSLVERR_net_0      = APB_SLAVE_PSLVERR;
-assign APB_SLAVE_SLAVE_PSLVERR      = APB_SLAVE_PSLVERR_net_0;
 assign APB_SLAVE_PRDATA_net_0       = APB_SLAVE_PRDATA;
 assign APB_SLAVE_SLAVE_PRDATA[31:0] = APB_SLAVE_PRDATA_net_0;
 assign GPIO_IN_net_1                = GPIO_IN_net_0;
@@ -344,8 +332,6 @@ apb_ctrl_status apb_ctrl_status_0(
         .pwdata  ( APB_SLAVE_SLAVE_PWDATA ),
         .status  ( apb_ctrl_status_0_control ),
         // Outputs
-        .pslverr ( APB_SLAVE_PSLVERR ),
-        .pready  ( APB_SLAVE_PREADY ),
         .prdata  ( APB_SLAVE_PRDATA ),
         .control ( apb_ctrl_status_0_control ) 
         );
diff --git a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/apb_ctrl_status.v b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/apb_ctrl_status.v
index e5cb886..f6e0b08 100644
--- a/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/apb_ctrl_status.v
+++ b/sources/FPGA-design/script_support/components/CAPE/VERILOG_TEMPLATE/HDL/apb_ctrl_status.v
@@ -1,47 +1,73 @@
-
-
-module apb_ctrl_status
-  (
-    input         presetn,
-    input         pclk,
-    input         psel,
-    input         penable,
-    input         pwrite,
-    output        pslverr,
-    output        pready,
-    input  [7:0]  paddr,
-    input  [31:0] pwdata,
-    output [31:0] prdata,
-    input  [31:0] status,
-    output [31:0] control
-  );
-
-  reg [31:0] control_value;
-  reg [31:0] status_value_o;
-  
-  assign pslverr = 1'b0;
-  assign pready = 1'b1;
-  assign control = control_value;
-
-  assign prdata = ((paddr[7:0] == 8'h20)) ? status_value_o[31:0] : 32'h00000000;
-
-  //---------------------------------------------------------------------------
-  always @(negedge pclk)
-    begin
-      if ((psel == 1'b1) & (pwrite == 1'b1) & (penable == 1'b1))
-      begin
-        case (paddr)
-          8'h00:    control_value <= 32'h00000001;
-          8'h10:    control_value <= 32'h00000002;
-          default:  control_value <= 32'h00000000;
-        endcase
-      end
-    end
-
-  //---------------------------------------------------------------------------
-  always @(negedge pclk)
-    begin
-      status_value_o <= status;
-    end
-
-endmodule
+`timescale 1ns/100ps
+module apb_ctrl_status(
+   input               pclk,
+   input               presetn,
+   input               penable,
+   input               psel,
+   input       [7:0]   paddr,
+   input               pwrite,
+   input       [31:0]  pwdata,
+   output  reg [31:0]  prdata,
+   output  reg [31:0]  control,
+   input       [31:0]  status
+   );
+
+   
+   localparam [7:0] STATUS      = 8'h20; // READ-ONLY REGISTER
+   localparam [7:0] CONTROL_1   = 8'h10; // READ/WRITE Register
+   localparam [7:0] CONTROL_0   = 8'h00; // READ_ONLY DEADBEEF REGISTER
+
+   reg [31:0] control_value;
+   
+   wire rd_enable;
+   wire wr_enable;  
+
+   assign wr_enable = (penable && pwrite && psel);
+   assign rd_enable = (!pwrite && psel);
+
+   always@(posedge pclk or negedge presetn)
+   begin
+      if(~presetn)
+         begin
+            prdata <= 'b0;
+            control_value <= 32'h00000000;
+            control <= 32'h00000000;
+         end
+      else
+         begin
+            case(paddr[7:0])
+               STATUS:
+                  begin
+                    if (rd_enable)
+                        begin
+                           prdata <= status;
+                        end
+                  end
+               CONTROL_0:
+                  begin
+                    if (rd_enable)
+                        begin
+                           prdata <= 32'hdeadbeef;
+                           control <= 32'hdeadbeef;
+                        end
+                  end
+                CONTROL_1:
+                    begin
+                      if (rd_enable)
+                        begin
+                            prdata <= control_value;
+                            control <= control_value;
+                        end
+                      else if (wr_enable)
+                        begin
+                            control_value <= pwdata;
+                        end
+                    end  
+               default:
+                  begin
+                     prdata <= 32'b0;
+                  end
+            endcase
+         end
+   end
+endmodule
\ No newline at end of file
-- 
GitLab