From 23d548a2cbe9c61a8ec90096c6f269ba692534e1 Mon Sep 17 00:00:00 2001
From: dwf1m12 <d.w.flynn@soton.ac.uk>
Date: Sat, 27 May 2023 19:54:02 +0100
Subject: [PATCH] update ADP v4 to add B (byte) and H (half) to R (word) read
 commands

---
 system/test_io/verilog/nanosoc_adp_manager.v | 29 ++++++++++++++++----
 system/testcodes/adp_demo/adp.cmd            |  4 +--
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/system/test_io/verilog/nanosoc_adp_manager.v b/system/test_io/verilog/nanosoc_adp_manager.v
index cf6c0d8..7b3bc77 100755
--- a/system/test_io/verilog/nanosoc_adp_manager.v
+++ b/system/test_io/verilog/nanosoc_adp_manager.v
@@ -12,7 +12,7 @@
 
 //`define ADPBASIC 1
 
-`define ADPFSMDESIGN 1
+//`define ADPFSMDESIGN 1
 
 module nanosoc_adp_manager // AHB initiator interface
    #(parameter PROMPT_CHAR          = "]"
@@ -77,6 +77,8 @@ localparam CMD_M   = 4'b1001;  // set read Mask
 localparam CMD_P   = 4'b1010;  // Poll hardware  (count)
 localparam CMD_U   = 4'b1011;  // (Binary) Upload (wordocunt) from addr++
 localparam CMD_V   = 4'b1100;  // match Value
+localparam CMD_B   = 4'b1101;  // Read byte, addr++
+localparam CMD_H   = 4'b1110;  // Read Halfword, addr++
 `endif
 
 
@@ -111,6 +113,10 @@ case (char8[7:0])
 "u": FNvalid_cmd = CMD_U;
 "V": FNvalid_cmd = CMD_V;
 "v": FNvalid_cmd = CMD_V;
+"B": FNvalid_cmd = CMD_B;
+"b": FNvalid_cmd = CMD_B;
+"H": FNvalid_cmd = CMD_H;
+"h": FNvalid_cmd = CMD_H;
 `endif
 default:
       FNvalid_cmd = 0;
@@ -571,11 +577,22 @@ always @(posedge HCLK or negedge HRESETn)
              begin adp_state <= ADP_SYSCTL; end
            end
          else if (FNvalid_cmd(adp_cmd) == CMD_R)
-           begin adp_size <= FNparam2size(adp_param[34:33]); ADP_BUSREADINC_next; adp_state <= ADP_READ;
+           begin adp_size <= 2'b10; ADP_BUSREADINC_next; adp_state <= ADP_READ;
 `ifndef ADPBASIC
              adp_count_dec <= 1'b1; // optional loop param
 `endif
-           end // no param required
+           end // param is optional count-down loop
+`ifndef ADPBASIC
+         else if (FNvalid_cmd(adp_cmd) == CMD_H)
+           begin adp_size <= 2'b01; ADP_BUSREADINC_next; adp_state <= ADP_READ;
+             adp_count_dec <= 1'b1; // optional loop param
+           end // param is optional count-down loop
+         else if (FNvalid_cmd(adp_cmd) == CMD_B)
+           begin adp_size <= 2'b00; ADP_BUSREADINC_next; adp_state <= ADP_READ;
+             adp_count_dec <= 1'b1; // optional loop param
+           end // param is optional count-down loop
+`endif
+
          else if (FNvalid_cmd(adp_cmd) == CMD_S)
            begin adp_state <= ADP_SYSCHK; end
          else if (FNvalid_cmd(adp_cmd) == CMD_W)
@@ -611,7 +628,7 @@ always @(posedge HCLK or negedge HRESETn)
                                                : (byteaddr[1:0] == 2'b10) ? {HRDATA32_i[15: 0],HRDATA32_i[31:16]} 
                                                : (byteaddr[1:0] == 2'b11) ? {HRDATA32_i[23: 0],HRDATA32_i[31:24]}
                                                : HRDATA32_i;
-                                 adp_bus_err <= HRESP_i; ADP_txchar_next("R"); adp_state <= ADP_ECHOBUS;
+                                 adp_bus_err <= HRESP_i; ADP_txchar_next(adp_cmd & 8'h5f); adp_state <= ADP_ECHOBUS;
                            end
          else begin
              ADP_BUSREADINC_next;
@@ -732,7 +749,9 @@ always @(posedge HCLK or negedge HRESETn)
          if (com_tx_done) begin
            if (banner) begin banner <= 0; adp_state <= STD_IOCHK; end
 `ifndef ADPBASIC
-           else if ((FNvalid_cmd(adp_cmd) == CMD_R) & |adp_count) //// non-zero count
+           else if ( ((FNvalid_cmd(adp_cmd) == CMD_R) |
+                      (FNvalid_cmd(adp_cmd) == CMD_H) |
+                      (FNvalid_cmd(adp_cmd) == CMD_B)) & |adp_count) //// non-zero count
              begin ADP_BUSREADINC_next; adp_count_dec <= 1'b1; adp_state <= ADP_READ; end //
 `endif
            else begin ADP_txchar_next(PROMPT_CHAR); adp_state <= ADP_PROMPT; end
diff --git a/system/testcodes/adp_demo/adp.cmd b/system/testcodes/adp_demo/adp.cmd
index 89934e9..06ecc10 100644
--- a/system/testcodes/adp_demo/adp.cmd
+++ b/system/testcodes/adp_demo/adp.cmd
@@ -33,11 +33,11 @@ w 0xb7b6b5b4
 a
 a 0x80000000
 a
-r 0x8
+b 0x8
 a
 a 0x80000000
 a
-r 0x004
+h 0x004
 a
 a 0x80000000
 a
-- 
GitLab