diff --git a/system/test_io/verilog/nanosoc_adp_manager.v b/system/test_io/verilog/nanosoc_adp_manager.v index cf6c0d850b0f50781599a489030b5b37761179e1..7b3bc7712e57063c2d7b4f9e773ff65f80186654 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 89934e9acde45e350ffdfebc5917cc2e8f229333..06ecc105ed9983e9a3ca622dcaae3a84f4e631f7 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