Files
gps/hardware/generated/genesys2-soc-verilog/ScratchpadSlavePort.sv
T
2026-08-06 22:14:52 +03:00

139 lines
5.6 KiB
Systemverilog

// 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