// Generated by CIRCT firtool-1.151.0 module ScratchpadSlavePort( input clock, reset, output auto_in_a_ready, input auto_in_a_valid, input [2:0] auto_in_a_bits_opcode, auto_in_a_bits_param, input [1:0] auto_in_a_bits_size, input [6:0] auto_in_a_bits_source, input [31:0] auto_in_a_bits_address, input [7:0] auto_in_a_bits_mask, input [63:0] auto_in_a_bits_data, input auto_in_d_ready, output auto_in_d_valid, output [2:0] auto_in_d_bits_opcode, output [1:0] auto_in_d_bits_size, output [6:0] auto_in_d_bits_source, output [63:0] auto_in_d_bits_data, input io_dmem_req_ready, output io_dmem_req_valid, output [33:0] io_dmem_req_bits_addr, output [4:0] io_dmem_req_bits_cmd, output [1:0] io_dmem_req_bits_size, output io_dmem_s1_kill, output [63:0] io_dmem_s1_data_data, output [7:0] io_dmem_s1_data_mask, input io_dmem_s2_nack, io_dmem_resp_valid, input [63:0] io_dmem_resp_bits_data_raw ); wire [7:0][3:0] _GEN = '{4'h0, 4'h0, 4'h0, 4'h8, 4'hF, 4'hE, 4'hD, 4'hC}; reg [2:0] state; wire _io_dmem_req_bits_T_2 = state == 3'h4; reg [2:0] acq_opcode; reg [2:0] acq_param; reg [1:0] acq_size; reg [6:0] acq_source; reg [31:0] acq_address; reg [7:0] acq_mask; reg [63:0] acq_data; wire _ready_T = state == 3'h0; wire _nodeIn_d_bits_data_T = state == 3'h2; wire ready = _ready_T | _nodeIn_d_bits_data_T & io_dmem_resp_valid & auto_in_d_ready; wire _io_dmem_req_bits_T = state == 3'h3; wire nodeIn_a_ready = io_dmem_req_ready & ready; wire [2:0] _io_dmem_req_bits_T_1_opcode = _io_dmem_req_bits_T ? acq_opcode : auto_in_a_bits_opcode; wire [2:0] _io_dmem_req_bits_T_1_param = _io_dmem_req_bits_T ? acq_param : auto_in_a_bits_param; wire [1:0] io_dmem_req_bits_size_0 = _io_dmem_req_bits_T ? acq_size : auto_in_a_bits_size; wire [31:0] _io_dmem_req_bits_T_1_address = _io_dmem_req_bits_T ? acq_address : auto_in_a_bits_address; wire _io_dmem_req_bits_T_3 = _io_dmem_req_bits_T_1_opcode == 3'h1; wire [1:0] _io_dmem_req_bits_mask_full_desired_mask_T = {_io_dmem_req_bits_T_1_address[0] | (|io_dmem_req_bits_size_0), ~(_io_dmem_req_bits_T_1_address[0])}; wire [3:0] _io_dmem_req_bits_mask_full_desired_mask_T_1 = {(_io_dmem_req_bits_T_1_address[1] ? _io_dmem_req_bits_mask_full_desired_mask_T : 2'h0) | {2{io_dmem_req_bits_size_0[1]}}, _io_dmem_req_bits_T_1_address[1] ? 2'h0 : _io_dmem_req_bits_mask_full_desired_mask_T}; wire nodeIn_d_valid = io_dmem_resp_valid | state == 3'h5; reg [63:0] nodeIn_d_bits_data_r; always @(posedge clock) begin if (reset) state <= 3'h4; else if ((auto_in_a_valid & ready | _io_dmem_req_bits_T) & io_dmem_req_ready) state <= 3'h1; else if (io_dmem_s2_nack) state <= 3'h3; else if (auto_in_d_ready & nodeIn_d_valid) state <= 3'h0; else if (io_dmem_resp_valid) state <= 3'h5; else if (_io_dmem_req_bits_T_2 & auto_in_a_valid) state <= 3'h0; else if (state == 3'h1) state <= 3'h2; if (nodeIn_a_ready & auto_in_a_valid) begin acq_opcode <= auto_in_a_bits_opcode; acq_param <= auto_in_a_bits_param; acq_size <= auto_in_a_bits_size; acq_source <= auto_in_a_bits_source; acq_address <= auto_in_a_bits_address; acq_mask <= auto_in_a_bits_mask; acq_data <= auto_in_a_bits_data; end if (_nodeIn_d_bits_data_T) nodeIn_d_bits_data_r <= io_dmem_resp_bits_data_raw; end // always @(posedge) assign auto_in_a_ready = nodeIn_a_ready; assign auto_in_d_valid = nodeIn_d_valid; assign auto_in_d_bits_opcode = {2'h0, ~(acq_opcode == 3'h0 | acq_opcode == 3'h1)}; assign auto_in_d_bits_size = acq_size; assign auto_in_d_bits_source = acq_source; assign auto_in_d_bits_data = _nodeIn_d_bits_data_T ? io_dmem_resp_bits_data_raw : nodeIn_d_bits_data_r; assign io_dmem_req_valid = auto_in_a_valid & (_ready_T | _nodeIn_d_bits_data_T) | _io_dmem_req_bits_T; assign io_dmem_req_bits_addr = {2'h0, _io_dmem_req_bits_T_1_address}; assign io_dmem_req_bits_cmd = _io_dmem_req_bits_T_2 | _io_dmem_req_bits_T_3 & (&((_io_dmem_req_bits_T ? acq_mask : auto_in_a_bits_mask) | ~{(_io_dmem_req_bits_T_1_address[2] ? _io_dmem_req_bits_mask_full_desired_mask_T_1 : 4'h0) | {4{&io_dmem_req_bits_size_0}}, _io_dmem_req_bits_T_1_address[2] ? 4'h0 : _io_dmem_req_bits_mask_full_desired_mask_T_1})) ? 5'h1 : _io_dmem_req_bits_T_1_opcode == 3'h4 ? 5'h0 : _io_dmem_req_bits_T_1_opcode == 3'h3 ? {1'h0, _io_dmem_req_bits_T_1_param == 3'h3 ? 4'h4 : _io_dmem_req_bits_T_1_param == 3'h2 ? 4'hB : _io_dmem_req_bits_T_1_param == 3'h1 ? 4'hA : _io_dmem_req_bits_T_1_param == 3'h0 ? 4'h9 : 4'h0} : _io_dmem_req_bits_T_1_opcode == 3'h2 ? {1'h0, _GEN[_io_dmem_req_bits_T_1_param]} : _io_dmem_req_bits_T_3 ? 5'h11 : {4'h0, _io_dmem_req_bits_T_1_opcode == 3'h0}; assign io_dmem_req_bits_size = io_dmem_req_bits_size_0; assign io_dmem_s1_kill = state != 3'h1; assign io_dmem_s1_data_data = acq_data; assign io_dmem_s1_data_mask = acq_mask; endmodule