diff --git a/umi/adapters/tl2umi/rtl/tl2umi.v b/umi/adapters/tl2umi/rtl/tl2umi.v index fcdadced..5a47f5ca 100644 --- a/umi/adapters/tl2umi/rtl/tl2umi.v +++ b/umi/adapters/tl2umi/rtl/tl2umi.v @@ -624,7 +624,7 @@ module tl2umi #( put_bytes_req <= ml_tx_len + 1; end `TL_OP_ArithmeticData, `TL_OP_LogicalData: begin - req_state <= REQ_PUT_LAST; + req_state <= REQ_GET_LAST; tl_a_ready_assert <= 1'b0; uhost_req_packet_cmd_opcode <= UMI_REQ_ATOMIC; uhost_req_packet_cmd_size <= tl_a_size; diff --git a/umi/adapters/umi2apb/rtl/umi2apb.v b/umi/adapters/umi2apb/rtl/umi2apb.v index bb0cdca0..a8c39a23 100644 --- a/umi/adapters/umi2apb/rtl/umi2apb.v +++ b/umi/adapters/umi2apb/rtl/umi2apb.v @@ -94,6 +94,7 @@ module umi2apb #(parameter AW = 64, // UMI address width reg [1:0] pslverr_r; reg [RW-1:0] prdata_r; + reg cmd_read_r; //############################ //# UMI Request @@ -120,6 +121,7 @@ module umi2apb #(parameter AW = 64, // UMI address width udev_req_dstaddr_r <= udev_req_dstaddr; udev_req_srcaddr_r <= udev_req_srcaddr; udev_req_data_r <= udev_req_data[RW-1:0]; + cmd_read_r <= (udev_req_cmd[UMI_OPCODE_MSB:UMI_OPCODE_LSB] == UMI_REQ_READ); end end @@ -181,10 +183,10 @@ module umi2apb #(parameter AW = 64, // UMI address width else if (apb_penable & apb_pready) pslverr_r <= {apb_pslverr, 1'b0}; - assign udev_resp_cmd[4:0] = cmd_read ? UMI_RESP_READ : UMI_RESP_WRITE; - assign udev_resp_cmd[24:5] = udev_req_cmd[24:5]; - assign udev_resp_cmd[26:25] = pslverr_r[1:0]; - assign udev_resp_cmd[31:27] = udev_req_cmd[31:27]; + assign udev_resp_cmd[UMI_OPCODE_MSB:UMI_OPCODE_LSB] = cmd_read_r ? UMI_RESP_READ : UMI_RESP_WRITE; + assign udev_resp_cmd[UMI_EX_BIT:UMI_SIZE_LSB] = udev_req_cmd_r[UMI_EX_BIT:UMI_SIZE_LSB]; + assign udev_resp_cmd[UMI_USER_MSB:UMI_USER_LSB] = pslverr_r[1:0]; + assign udev_resp_cmd[UMI_HOSTID_MSB:UMI_HOSTID_LSB] = udev_req_cmd_r[UMI_HOSTID_MSB:UMI_HOSTID_LSB]; assign udev_resp_dstaddr[AW-1:0] = udev_req_srcaddr_r[AW-1:0];