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

1246 lines
65 KiB
Systemverilog

// Generated by CIRCT firtool-1.151.0
// Users can define 'PRINTF_COND' to add an extra gate to prints.
`ifndef PRINTF_COND_
`ifdef PRINTF_COND
`define PRINTF_COND_ (`PRINTF_COND)
`else // PRINTF_COND
`define PRINTF_COND_ 1
`endif // PRINTF_COND
`endif // not def PRINTF_COND_
module DCache(
input clock,
reset,
auto_out_a_ready,
output auto_out_a_valid,
output [2:0] auto_out_a_bits_opcode,
auto_out_a_bits_param,
output [3:0] auto_out_a_bits_size,
output [31:0] auto_out_a_bits_address,
output auto_out_a_bits_user_amba_prot_bufferable,
auto_out_a_bits_user_amba_prot_modifiable,
auto_out_a_bits_user_amba_prot_readalloc,
auto_out_a_bits_user_amba_prot_writealloc,
auto_out_a_bits_user_amba_prot_privileged,
output [7:0] auto_out_a_bits_mask,
output [63:0] auto_out_a_bits_data,
output auto_out_d_ready,
input auto_out_d_valid,
input [2:0] auto_out_d_bits_opcode,
input [3:0] auto_out_d_bits_size,
input auto_out_d_bits_denied,
input [63:0] auto_out_d_bits_data,
output io_cpu_req_ready,
input io_cpu_req_valid,
input [33:0] io_cpu_req_bits_addr,
input [6:0] io_cpu_req_bits_tag,
input [4:0] io_cpu_req_bits_cmd,
input [1:0] io_cpu_req_bits_size,
input io_cpu_req_bits_signed,
input [1:0] io_cpu_req_bits_dprv,
input io_cpu_req_bits_no_xcpt,
io_cpu_s1_kill,
input [63:0] io_cpu_s1_data_data,
input [7:0] io_cpu_s1_data_mask,
output io_cpu_s2_nack,
io_cpu_resp_valid,
output [6:0] io_cpu_resp_bits_tag,
output [1:0] io_cpu_resp_bits_size,
output [63:0] io_cpu_resp_bits_data,
output io_cpu_resp_bits_replay,
io_cpu_resp_bits_has_data,
output [63:0] io_cpu_resp_bits_data_word_bypass,
io_cpu_resp_bits_data_raw,
output io_cpu_replay_next,
io_cpu_s2_xcpt_ma_ld,
io_cpu_s2_xcpt_ma_st,
io_cpu_s2_xcpt_pf_ld,
io_cpu_s2_xcpt_pf_st,
io_cpu_s2_xcpt_ae_ld,
io_cpu_s2_xcpt_ae_st,
io_cpu_ordered,
io_cpu_perf_grant,
input io_ptw_status_debug,
io_ptw_pmp_0_cfg_l,
input [1:0] io_ptw_pmp_0_cfg_a,
input io_ptw_pmp_0_cfg_w,
io_ptw_pmp_0_cfg_r,
input [29:0] io_ptw_pmp_0_addr,
input [31:0] io_ptw_pmp_0_mask,
input io_ptw_pmp_1_cfg_l,
input [1:0] io_ptw_pmp_1_cfg_a,
input io_ptw_pmp_1_cfg_w,
io_ptw_pmp_1_cfg_r,
input [29:0] io_ptw_pmp_1_addr,
input [31:0] io_ptw_pmp_1_mask,
input io_ptw_pmp_2_cfg_l,
input [1:0] io_ptw_pmp_2_cfg_a,
input io_ptw_pmp_2_cfg_w,
io_ptw_pmp_2_cfg_r,
input [29:0] io_ptw_pmp_2_addr,
input [31:0] io_ptw_pmp_2_mask,
input io_ptw_pmp_3_cfg_l,
input [1:0] io_ptw_pmp_3_cfg_a,
input io_ptw_pmp_3_cfg_w,
io_ptw_pmp_3_cfg_r,
input [29:0] io_ptw_pmp_3_addr,
input [31:0] io_ptw_pmp_3_mask,
input io_ptw_pmp_4_cfg_l,
input [1:0] io_ptw_pmp_4_cfg_a,
input io_ptw_pmp_4_cfg_w,
io_ptw_pmp_4_cfg_r,
input [29:0] io_ptw_pmp_4_addr,
input [31:0] io_ptw_pmp_4_mask,
input io_ptw_pmp_5_cfg_l,
input [1:0] io_ptw_pmp_5_cfg_a,
input io_ptw_pmp_5_cfg_w,
io_ptw_pmp_5_cfg_r,
input [29:0] io_ptw_pmp_5_addr,
input [31:0] io_ptw_pmp_5_mask,
input io_ptw_pmp_6_cfg_l,
input [1:0] io_ptw_pmp_6_cfg_a,
input io_ptw_pmp_6_cfg_w,
io_ptw_pmp_6_cfg_r,
input [29:0] io_ptw_pmp_6_addr,
input [31:0] io_ptw_pmp_6_mask,
input io_ptw_pmp_7_cfg_l,
input [1:0] io_ptw_pmp_7_cfg_a,
input io_ptw_pmp_7_cfg_w,
io_ptw_pmp_7_cfg_r,
input [29:0] io_ptw_pmp_7_addr,
input [31:0] io_ptw_pmp_7_mask
);
wire io_cpu_s2_xcpt_ma_st_0;
wire io_cpu_s2_xcpt_ma_ld_0;
wire io_cpu_s2_xcpt_ae_st_0;
wire io_cpu_s2_xcpt_ae_ld_0;
wire io_cpu_s2_xcpt_pf_st_0;
wire io_cpu_s2_xcpt_pf_ld_0;
wire _GEN;
wire s1_nack;
wire [63:0] _amoalus_0_io_out_unmasked;
wire _dataArb_io_in_1_ready;
wire _dataArb_io_in_3_ready;
wire _dataArb_io_out_valid;
wire [19:0] _dataArb_io_out_bits_addr;
wire _dataArb_io_out_bits_write;
wire [63:0] _dataArb_io_out_bits_wdata;
wire [7:0] _dataArb_io_out_bits_eccMask;
wire [63:0] _data_io_resp_0;
wire _metaArb_io_in_7_ready;
wire _metaArb_io_out_valid;
wire _metaArb_io_out_bits_write;
wire [33:0] _metaArb_io_out_bits_addr;
wire [31:0] _tlb_io_resp_paddr;
wire _tlb_io_resp_pf_ld;
wire _tlb_io_resp_pf_st;
wire _tlb_io_resp_ae_ld;
wire _tlb_io_resp_ae_st;
wire _tlb_io_resp_ma_ld;
wire _tlb_io_resp_ma_st;
wire _tlb_io_resp_cacheable;
reg s1_valid;
wire s1_valid_masked = s1_valid & ~io_cpu_s1_kill;
reg [33:0] s1_req_addr;
reg [6:0] s1_req_tag;
reg [4:0] s1_req_cmd;
reg [1:0] s1_req_size;
reg s1_req_signed;
reg [1:0] s1_req_dprv;
reg s1_req_no_xcpt;
reg [33:0] s1_tlb_req_vaddr;
reg [1:0] s1_tlb_req_size;
reg [4:0] s1_tlb_req_cmd;
reg [1:0] s1_tlb_req_prv;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_1 = s1_req_cmd == 5'h0;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_2 = s1_req_cmd == 5'h10;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_3 = s1_req_cmd == 5'h6;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_29 = s1_req_cmd == 5'h7;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_31 = s1_req_cmd == 5'h4;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_32 = s1_req_cmd == 5'h9;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_33 = s1_req_cmd == 5'hA;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_34 = s1_req_cmd == 5'hB;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_38 = s1_req_cmd == 5'h8;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_39 = s1_req_cmd == 5'hC;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_40 = s1_req_cmd == 5'hD;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_41 = s1_req_cmd == 5'hE;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_42 = s1_req_cmd == 5'hF;
wire s1_read =
_io_cpu_perf_canAcceptLoadThenLoad_T_1 | _io_cpu_perf_canAcceptLoadThenLoad_T_2
| _io_cpu_perf_canAcceptLoadThenLoad_T_3 | _io_cpu_perf_canAcceptLoadThenLoad_T_29
| _io_cpu_perf_canAcceptLoadThenLoad_T_31 | _io_cpu_perf_canAcceptLoadThenLoad_T_32
| _io_cpu_perf_canAcceptLoadThenLoad_T_33 | _io_cpu_perf_canAcceptLoadThenLoad_T_34
| _io_cpu_perf_canAcceptLoadThenLoad_T_38 | _io_cpu_perf_canAcceptLoadThenLoad_T_39
| _io_cpu_perf_canAcceptLoadThenLoad_T_40 | _io_cpu_perf_canAcceptLoadThenLoad_T_41
| _io_cpu_perf_canAcceptLoadThenLoad_T_42;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_26 = s1_req_cmd == 5'h1;
wire _io_cpu_perf_canAcceptLoadThenLoad_T_51 = s1_req_cmd == 5'h11;
wire s1_write =
_io_cpu_perf_canAcceptLoadThenLoad_T_26 | _io_cpu_perf_canAcceptLoadThenLoad_T_51
| _io_cpu_perf_canAcceptLoadThenLoad_T_29 | _io_cpu_perf_canAcceptLoadThenLoad_T_31
| _io_cpu_perf_canAcceptLoadThenLoad_T_32 | _io_cpu_perf_canAcceptLoadThenLoad_T_33
| _io_cpu_perf_canAcceptLoadThenLoad_T_34 | _io_cpu_perf_canAcceptLoadThenLoad_T_38
| _io_cpu_perf_canAcceptLoadThenLoad_T_39 | _io_cpu_perf_canAcceptLoadThenLoad_T_40
| _io_cpu_perf_canAcceptLoadThenLoad_T_41 | _io_cpu_perf_canAcceptLoadThenLoad_T_42;
reg cached_grant_wait;
wire _io_cpu_req_ready_T_4 = ~cached_grant_wait & ~s1_nack;
reg uncachedInFlight_0;
reg [33:0] uncachedReqs_0_addr;
reg [6:0] uncachedReqs_0_tag;
reg [1:0] uncachedReqs_0_size;
reg uncachedReqs_0_signed;
wire _pstore_drain_opportunistic_T = io_cpu_req_bits_cmd == 5'h0;
wire _pstore_drain_opportunistic_T_1 = io_cpu_req_bits_cmd == 5'h10;
wire _pstore_drain_opportunistic_T_2 = io_cpu_req_bits_cmd == 5'h6;
wire _pstore_drain_opportunistic_T_28 = io_cpu_req_bits_cmd == 5'h7;
wire _pstore_drain_opportunistic_T_30 = io_cpu_req_bits_cmd == 5'h4;
wire _pstore_drain_opportunistic_T_31 = io_cpu_req_bits_cmd == 5'h9;
wire _pstore_drain_opportunistic_T_32 = io_cpu_req_bits_cmd == 5'hA;
wire _pstore_drain_opportunistic_T_33 = io_cpu_req_bits_cmd == 5'hB;
wire _pstore_drain_opportunistic_T_37 = io_cpu_req_bits_cmd == 5'h8;
wire _pstore_drain_opportunistic_T_38 = io_cpu_req_bits_cmd == 5'hC;
wire _pstore_drain_opportunistic_T_39 = io_cpu_req_bits_cmd == 5'hD;
wire _pstore_drain_opportunistic_T_40 = io_cpu_req_bits_cmd == 5'hE;
wire _pstore_drain_opportunistic_T_41 = io_cpu_req_bits_cmd == 5'hF;
wire _pstore_drain_opportunistic_T_25 = io_cpu_req_bits_cmd == 5'h1;
wire _pstore_drain_opportunistic_res_T_1 = io_cpu_req_bits_cmd == 5'h3;
wire _dataArb_io_in_3_valid_res_T_2 =
_pstore_drain_opportunistic_T_25 | _pstore_drain_opportunistic_res_T_1;
wire _pstore_drain_opportunistic_T_50 = io_cpu_req_bits_cmd == 5'h11;
wire _dataArb_io_in_3_valid_T_54 =
~(_pstore_drain_opportunistic_T | _pstore_drain_opportunistic_T_1
| _pstore_drain_opportunistic_T_2 | _pstore_drain_opportunistic_T_28
| _pstore_drain_opportunistic_T_30 | _pstore_drain_opportunistic_T_31
| _pstore_drain_opportunistic_T_32 | _pstore_drain_opportunistic_T_33
| _pstore_drain_opportunistic_T_37 | _pstore_drain_opportunistic_T_38
| _pstore_drain_opportunistic_T_39 | _pstore_drain_opportunistic_T_40
| _pstore_drain_opportunistic_T_41
| (_pstore_drain_opportunistic_T_25 | _pstore_drain_opportunistic_T_50
| _pstore_drain_opportunistic_T_28 | _pstore_drain_opportunistic_T_30
| _pstore_drain_opportunistic_T_31 | _pstore_drain_opportunistic_T_32
| _pstore_drain_opportunistic_T_33 | _pstore_drain_opportunistic_T_37
| _pstore_drain_opportunistic_T_38 | _pstore_drain_opportunistic_T_39
| _pstore_drain_opportunistic_T_40 | _pstore_drain_opportunistic_T_41)
& _pstore_drain_opportunistic_T_50) | ~_dataArb_io_in_3_valid_res_T_2;
reg s1_did_read;
wire _GEN_0 =
~_metaArb_io_in_7_ready | ~_dataArb_io_in_3_ready
& (_pstore_drain_opportunistic_T | _pstore_drain_opportunistic_T_1
| _pstore_drain_opportunistic_T_2 | _pstore_drain_opportunistic_T_28
| _pstore_drain_opportunistic_T_30 | _pstore_drain_opportunistic_T_31
| _pstore_drain_opportunistic_T_32 | _pstore_drain_opportunistic_T_33
| _pstore_drain_opportunistic_T_37 | _pstore_drain_opportunistic_T_38
| _pstore_drain_opportunistic_T_39 | _pstore_drain_opportunistic_T_40
| _pstore_drain_opportunistic_T_41);
wire [1:0] _s1_mask_xwr_T = {s1_req_addr[0] | (|s1_req_size), ~(s1_req_addr[0])};
wire [3:0] _s1_mask_xwr_T_1 =
{(s1_req_addr[1] ? _s1_mask_xwr_T : 2'h0) | {2{s1_req_size[1]}},
s1_req_addr[1] ? 2'h0 : _s1_mask_xwr_T};
wire [3:0] s1_hazard_hi_2 =
(s1_req_addr[2] ? _s1_mask_xwr_T_1 : 4'h0) | {4{&s1_req_size}};
wire [3:0] s1_hazard_lo_2 = s1_req_addr[2] ? 4'h0 : _s1_mask_xwr_T_1;
wire [7:0] s1_mask_xwr = {s1_hazard_hi_2, s1_hazard_lo_2};
wire _GEN_1 =
~(s1_valid_masked & _io_cpu_perf_canAcceptLoadThenLoad_T_51)
| (&(s1_mask_xwr | ~io_cpu_s1_data_mask));
reg s2_valid;
wire s2_valid_no_xcpt =
s2_valid
& {io_cpu_s2_xcpt_ma_ld_0,
io_cpu_s2_xcpt_ma_st_0,
io_cpu_s2_xcpt_pf_ld_0,
io_cpu_s2_xcpt_pf_st_0,
io_cpu_s2_xcpt_ae_ld_0,
io_cpu_s2_xcpt_ae_st_0} == 6'h0;
reg s2_not_nacked_in_s1;
wire s2_valid_masked = s2_valid_no_xcpt & s2_not_nacked_in_s1;
reg [33:0] s2_req_addr;
reg [6:0] s2_req_tag;
reg [4:0] s2_req_cmd;
reg [1:0] s2_req_size;
reg s2_req_signed;
reg [1:0] s2_req_dprv;
reg s2_req_no_xcpt;
reg s2_tlb_xcpt_pf_ld;
reg s2_tlb_xcpt_pf_st;
reg s2_tlb_xcpt_ae_ld;
reg s2_tlb_xcpt_ae_st;
reg s2_tlb_xcpt_ma_ld;
reg s2_tlb_xcpt_ma_st;
reg s2_pma_cacheable;
wire _metaArb_io_in_3_bits_data_c_cat_T_48 = s2_req_cmd == 5'h6;
wire _io_cpu_store_pending_T_3 = s2_req_cmd == 5'h7;
wire _io_cpu_store_pending_T_5 = s2_req_cmd == 5'h4;
wire _io_cpu_store_pending_T_6 = s2_req_cmd == 5'h9;
wire _io_cpu_store_pending_T_7 = s2_req_cmd == 5'hA;
wire _io_cpu_store_pending_T_8 = s2_req_cmd == 5'hB;
wire _io_cpu_store_pending_T_12 = s2_req_cmd == 5'h8;
wire _io_cpu_store_pending_T_13 = s2_req_cmd == 5'hC;
wire _io_cpu_store_pending_T_14 = s2_req_cmd == 5'hD;
wire _io_cpu_store_pending_T_15 = s2_req_cmd == 5'hE;
wire _io_cpu_store_pending_T_16 = s2_req_cmd == 5'hF;
wire s2_read =
s2_req_cmd == 5'h0 | s2_req_cmd == 5'h10 | _metaArb_io_in_3_bits_data_c_cat_T_48
| _io_cpu_store_pending_T_3 | _io_cpu_store_pending_T_5 | _io_cpu_store_pending_T_6
| _io_cpu_store_pending_T_7 | _io_cpu_store_pending_T_8 | _io_cpu_store_pending_T_12
| _io_cpu_store_pending_T_13 | _io_cpu_store_pending_T_14 | _io_cpu_store_pending_T_15
| _io_cpu_store_pending_T_16;
wire _io_cpu_store_pending_T = s2_req_cmd == 5'h1;
wire _io_cpu_store_pending_T_1 = s2_req_cmd == 5'h11;
wire s2_write =
_io_cpu_store_pending_T | _io_cpu_store_pending_T_1 | _io_cpu_store_pending_T_3
| _io_cpu_store_pending_T_5 | _io_cpu_store_pending_T_6 | _io_cpu_store_pending_T_7
| _io_cpu_store_pending_T_8 | _io_cpu_store_pending_T_12 | _io_cpu_store_pending_T_13
| _io_cpu_store_pending_T_14 | _io_cpu_store_pending_T_15
| _io_cpu_store_pending_T_16;
wire s2_readwrite = s2_read | s2_write;
reg [63:0] s2_data;
reg [1:0] s2_hit_state_state;
wire [3:0] _r_T =
{_io_cpu_store_pending_T | _io_cpu_store_pending_T_1 | _io_cpu_store_pending_T_3
| _io_cpu_store_pending_T_5 | _io_cpu_store_pending_T_6 | _io_cpu_store_pending_T_7
| _io_cpu_store_pending_T_8 | _io_cpu_store_pending_T_12
| _io_cpu_store_pending_T_13 | _io_cpu_store_pending_T_14
| _io_cpu_store_pending_T_15 | _io_cpu_store_pending_T_16,
_io_cpu_store_pending_T | _io_cpu_store_pending_T_1 | _io_cpu_store_pending_T_3
| _io_cpu_store_pending_T_5 | _io_cpu_store_pending_T_6 | _io_cpu_store_pending_T_7
| _io_cpu_store_pending_T_8 | _io_cpu_store_pending_T_12
| _io_cpu_store_pending_T_13 | _io_cpu_store_pending_T_14
| _io_cpu_store_pending_T_15 | _io_cpu_store_pending_T_16 | s2_req_cmd == 5'h3
| _metaArb_io_in_3_bits_data_c_cat_T_48,
s2_hit_state_state};
wire [1:0] _r_T_27 = {1'h0, _r_T == 4'hC};
wire s2_hit =
_r_T == 4'h3 | _r_T == 4'h2 | _r_T == 4'h1 | _r_T == 4'h7 | _r_T == 4'h6 | (&_r_T)
| _r_T == 4'hE;
wire [15:0][1:0] _GEN_2 =
{{2'h3},
{2'h3},
{2'h2},
{_r_T_27},
{_r_T_27},
{_r_T_27},
{_r_T_27},
{_r_T_27},
{2'h3},
{2'h2},
{2'h2},
{2'h1},
{2'h3},
{2'h2},
{2'h1},
{2'h0}};
wire s2_valid_hit_pre_data_ecc_and_waw =
s2_valid_masked & s2_hit & s2_readwrite;
wire s2_valid_miss = s2_valid_masked & s2_readwrite & ~s2_hit;
wire s2_valid_uncached_pending =
s2_valid_miss & ~s2_pma_cacheable & ~uncachedInFlight_0;
wire io_cpu_s2_nack_0 =
s2_valid_no_xcpt & ~(s2_valid_uncached_pending & auto_out_a_ready)
& ~(s2_valid_masked & s2_req_cmd == 5'h17) & ~s2_valid_hit_pre_data_ecc_and_waw;
wire metaArb_io_in_2_valid =
s2_valid_hit_pre_data_ecc_and_waw & s2_hit_state_state != _GEN_2[_r_T];
reg [4:0] pstore1_cmd;
reg [33:0] pstore1_addr;
reg [63:0] pstore1_data;
reg [7:0] pstore1_mask;
reg pstore1_rmw_r;
wire _pstore1_held_T_2 = s2_valid_hit_pre_data_ecc_and_waw & s2_write;
reg pstore2_valid;
wire _pstore_drain_opportunistic_res_T_2 =
_pstore_drain_opportunistic_T_25 | _pstore_drain_opportunistic_res_T_1;
wire _pstore_drain_opportunistic_T_54 =
~(_pstore_drain_opportunistic_T | _pstore_drain_opportunistic_T_1
| _pstore_drain_opportunistic_T_2 | _pstore_drain_opportunistic_T_28
| _pstore_drain_opportunistic_T_30 | _pstore_drain_opportunistic_T_31
| _pstore_drain_opportunistic_T_32 | _pstore_drain_opportunistic_T_33
| _pstore_drain_opportunistic_T_37 | _pstore_drain_opportunistic_T_38
| _pstore_drain_opportunistic_T_39 | _pstore_drain_opportunistic_T_40
| _pstore_drain_opportunistic_T_41
| (_pstore_drain_opportunistic_T_25 | _pstore_drain_opportunistic_T_50
| _pstore_drain_opportunistic_T_28 | _pstore_drain_opportunistic_T_30
| _pstore_drain_opportunistic_T_31 | _pstore_drain_opportunistic_T_32
| _pstore_drain_opportunistic_T_33 | _pstore_drain_opportunistic_T_37
| _pstore_drain_opportunistic_T_38 | _pstore_drain_opportunistic_T_39
| _pstore_drain_opportunistic_T_40 | _pstore_drain_opportunistic_T_41)
& _pstore_drain_opportunistic_T_50) | ~_pstore_drain_opportunistic_res_T_2;
reg pstore_drain_on_miss_REG;
reg pstore1_held;
wire pstore1_valid_likely = s2_valid & s2_write | pstore1_held;
wire pstore1_valid = _pstore1_held_T_2 | pstore1_held;
wire pstore_drain_structural =
pstore1_valid_likely & pstore2_valid & (s1_valid & s1_write | pstore1_rmw_r);
wire _dataArb_io_in_0_valid_T_4 =
s2_valid_hit_pre_data_ecc_and_waw & s2_write;
wire _GEN_3 =
pstore1_rmw_r | (_dataArb_io_in_0_valid_T_4 | pstore1_held) == pstore1_valid;
wire _dataArb_io_in_0_valid_T_9 =
~(io_cpu_req_valid & ~_pstore_drain_opportunistic_res_T_2) | pstore_drain_on_miss_REG;
wire dataArb_io_in_0_bits_write =
pstore_drain_structural
| ((_dataArb_io_in_0_valid_T_4 | pstore1_held) & ~pstore1_rmw_r | pstore2_valid)
& _dataArb_io_in_0_valid_T_9;
reg [33:0] pstore2_addr;
reg [7:0] pstore2_storegen_data_r;
reg [7:0] pstore2_storegen_data_r_1;
reg [7:0] pstore2_storegen_data_r_2;
reg [7:0] pstore2_storegen_data_r_3;
reg [7:0] pstore2_storegen_data_r_4;
reg [7:0] pstore2_storegen_data_r_5;
reg [7:0] pstore2_storegen_data_r_6;
reg [7:0] pstore2_storegen_data_r_7;
reg [7:0] pstore2_storegen_mask;
wire [19:0] _dataArb_io_in_0_bits_wordMask_wordMask_T =
pstore2_valid ? pstore2_addr[19:0] : pstore1_addr[19:0];
wire [63:0] dataArb_io_in_3_bits_wdata =
pstore2_valid
? {pstore2_storegen_data_r_7,
pstore2_storegen_data_r_6,
pstore2_storegen_data_r_5,
pstore2_storegen_data_r_4,
pstore2_storegen_data_r_3,
pstore2_storegen_data_r_2,
pstore2_storegen_data_r_1,
pstore2_storegen_data_r}
: pstore1_data;
wire [7:0] dataArb_io_in_1_bits_eccMask =
pstore2_valid ? pstore2_storegen_mask : pstore1_mask;
assign s1_nack =
s1_valid & s1_read
& (pstore1_valid_likely & pstore1_addr[19:3] == s1_req_addr[19:3]
& (s1_write
? (|(pstore1_mask & {s1_hazard_hi_2, s1_hazard_lo_2}))
: (|(pstore1_mask & s1_mask_xwr))) | pstore2_valid
& pstore2_addr[19:3] == s1_req_addr[19:3]
& (s1_write
? (|(pstore2_storegen_mask & {s1_hazard_hi_2, s1_hazard_lo_2}))
: (|(pstore2_storegen_mask & s1_mask_xwr)))) | io_cpu_s2_nack_0
| metaArb_io_in_2_valid;
wire [3:0] _GEN_4 = {2'h0, s2_req_size};
wire [3:0] _get_a_mask_sizeOH_T_1 = 4'h1 << _GEN_4;
wire get_a_mask_sub_sub_sub_0_1 = &s2_req_size;
wire get_a_mask_sub_sub_0_1 =
get_a_mask_sub_sub_sub_0_1 | _get_a_mask_sizeOH_T_1[2] & ~(s2_req_addr[2]);
wire get_a_mask_sub_sub_1_1 =
get_a_mask_sub_sub_sub_0_1 | _get_a_mask_sizeOH_T_1[2] & s2_req_addr[2];
wire get_a_mask_sub_0_2 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire get_a_mask_sub_0_1 =
get_a_mask_sub_sub_0_1 | _get_a_mask_sizeOH_T_1[1] & get_a_mask_sub_0_2;
wire get_a_mask_sub_1_2 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire get_a_mask_sub_1_1 =
get_a_mask_sub_sub_0_1 | _get_a_mask_sizeOH_T_1[1] & get_a_mask_sub_1_2;
wire get_a_mask_sub_2_2 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire get_a_mask_sub_2_1 =
get_a_mask_sub_sub_1_1 | _get_a_mask_sizeOH_T_1[1] & get_a_mask_sub_2_2;
wire get_a_mask_sub_3_2 = s2_req_addr[2] & s2_req_addr[1];
wire get_a_mask_sub_3_1 =
get_a_mask_sub_sub_1_1 | _get_a_mask_sizeOH_T_1[1] & get_a_mask_sub_3_2;
wire [3:0] _put_a_mask_sizeOH_T_1 = 4'h1 << _GEN_4;
wire put_a_mask_sub_sub_0_1 =
get_a_mask_sub_sub_sub_0_1 | _put_a_mask_sizeOH_T_1[2] & ~(s2_req_addr[2]);
wire put_a_mask_sub_sub_1_1 =
get_a_mask_sub_sub_sub_0_1 | _put_a_mask_sizeOH_T_1[2] & s2_req_addr[2];
wire put_a_mask_sub_0_2 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire put_a_mask_sub_0_1 =
put_a_mask_sub_sub_0_1 | _put_a_mask_sizeOH_T_1[1] & put_a_mask_sub_0_2;
wire put_a_mask_sub_1_2 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire put_a_mask_sub_1_1 =
put_a_mask_sub_sub_0_1 | _put_a_mask_sizeOH_T_1[1] & put_a_mask_sub_1_2;
wire put_a_mask_sub_2_2 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire put_a_mask_sub_2_1 =
put_a_mask_sub_sub_1_1 | _put_a_mask_sizeOH_T_1[1] & put_a_mask_sub_2_2;
wire put_a_mask_sub_3_2 = s2_req_addr[2] & s2_req_addr[1];
wire put_a_mask_sub_3_1 =
put_a_mask_sub_sub_1_1 | _put_a_mask_sizeOH_T_1[1] & put_a_mask_sub_3_2;
wire [3:0] _atomics_a_mask_sizeOH_T_1 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_1[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_1[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1 =
atomics_a_mask_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_1[1] & atomics_a_mask_sub_0_2;
wire atomics_a_mask_sub_1_2 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1 =
atomics_a_mask_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_1[1] & atomics_a_mask_sub_1_2;
wire atomics_a_mask_sub_2_2 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1 =
atomics_a_mask_sub_sub_1_1 | _atomics_a_mask_sizeOH_T_1[1] & atomics_a_mask_sub_2_2;
wire atomics_a_mask_sub_3_2 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1 =
atomics_a_mask_sub_sub_1_1 | _atomics_a_mask_sizeOH_T_1[1] & atomics_a_mask_sub_3_2;
wire [3:0] _atomics_a_mask_sizeOH_T_4 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_1 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_4[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_1 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_4[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_1 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_1 =
atomics_a_mask_sub_sub_0_1_1 | _atomics_a_mask_sizeOH_T_4[1]
& atomics_a_mask_sub_0_2_1;
wire atomics_a_mask_sub_1_2_1 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_1 =
atomics_a_mask_sub_sub_0_1_1 | _atomics_a_mask_sizeOH_T_4[1]
& atomics_a_mask_sub_1_2_1;
wire atomics_a_mask_sub_2_2_1 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_1 =
atomics_a_mask_sub_sub_1_1_1 | _atomics_a_mask_sizeOH_T_4[1]
& atomics_a_mask_sub_2_2_1;
wire atomics_a_mask_sub_3_2_1 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_1 =
atomics_a_mask_sub_sub_1_1_1 | _atomics_a_mask_sizeOH_T_4[1]
& atomics_a_mask_sub_3_2_1;
wire [3:0] _atomics_a_mask_sizeOH_T_7 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_2 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_7[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_2 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_7[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_2 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_2 =
atomics_a_mask_sub_sub_0_1_2 | _atomics_a_mask_sizeOH_T_7[1]
& atomics_a_mask_sub_0_2_2;
wire atomics_a_mask_sub_1_2_2 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_2 =
atomics_a_mask_sub_sub_0_1_2 | _atomics_a_mask_sizeOH_T_7[1]
& atomics_a_mask_sub_1_2_2;
wire atomics_a_mask_sub_2_2_2 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_2 =
atomics_a_mask_sub_sub_1_1_2 | _atomics_a_mask_sizeOH_T_7[1]
& atomics_a_mask_sub_2_2_2;
wire atomics_a_mask_sub_3_2_2 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_2 =
atomics_a_mask_sub_sub_1_1_2 | _atomics_a_mask_sizeOH_T_7[1]
& atomics_a_mask_sub_3_2_2;
wire [3:0] _atomics_a_mask_sizeOH_T_10 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_3 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_10[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_3 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_10[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_3 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_3 =
atomics_a_mask_sub_sub_0_1_3 | _atomics_a_mask_sizeOH_T_10[1]
& atomics_a_mask_sub_0_2_3;
wire atomics_a_mask_sub_1_2_3 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_3 =
atomics_a_mask_sub_sub_0_1_3 | _atomics_a_mask_sizeOH_T_10[1]
& atomics_a_mask_sub_1_2_3;
wire atomics_a_mask_sub_2_2_3 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_3 =
atomics_a_mask_sub_sub_1_1_3 | _atomics_a_mask_sizeOH_T_10[1]
& atomics_a_mask_sub_2_2_3;
wire atomics_a_mask_sub_3_2_3 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_3 =
atomics_a_mask_sub_sub_1_1_3 | _atomics_a_mask_sizeOH_T_10[1]
& atomics_a_mask_sub_3_2_3;
wire [3:0] _atomics_a_mask_sizeOH_T_13 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_4 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_13[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_4 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_13[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_4 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_4 =
atomics_a_mask_sub_sub_0_1_4 | _atomics_a_mask_sizeOH_T_13[1]
& atomics_a_mask_sub_0_2_4;
wire atomics_a_mask_sub_1_2_4 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_4 =
atomics_a_mask_sub_sub_0_1_4 | _atomics_a_mask_sizeOH_T_13[1]
& atomics_a_mask_sub_1_2_4;
wire atomics_a_mask_sub_2_2_4 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_4 =
atomics_a_mask_sub_sub_1_1_4 | _atomics_a_mask_sizeOH_T_13[1]
& atomics_a_mask_sub_2_2_4;
wire atomics_a_mask_sub_3_2_4 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_4 =
atomics_a_mask_sub_sub_1_1_4 | _atomics_a_mask_sizeOH_T_13[1]
& atomics_a_mask_sub_3_2_4;
wire [3:0] _atomics_a_mask_sizeOH_T_16 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_5 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_16[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_5 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_16[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_5 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_5 =
atomics_a_mask_sub_sub_0_1_5 | _atomics_a_mask_sizeOH_T_16[1]
& atomics_a_mask_sub_0_2_5;
wire atomics_a_mask_sub_1_2_5 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_5 =
atomics_a_mask_sub_sub_0_1_5 | _atomics_a_mask_sizeOH_T_16[1]
& atomics_a_mask_sub_1_2_5;
wire atomics_a_mask_sub_2_2_5 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_5 =
atomics_a_mask_sub_sub_1_1_5 | _atomics_a_mask_sizeOH_T_16[1]
& atomics_a_mask_sub_2_2_5;
wire atomics_a_mask_sub_3_2_5 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_5 =
atomics_a_mask_sub_sub_1_1_5 | _atomics_a_mask_sizeOH_T_16[1]
& atomics_a_mask_sub_3_2_5;
wire [3:0] _atomics_a_mask_sizeOH_T_19 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_6 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_19[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_6 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_19[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_6 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_6 =
atomics_a_mask_sub_sub_0_1_6 | _atomics_a_mask_sizeOH_T_19[1]
& atomics_a_mask_sub_0_2_6;
wire atomics_a_mask_sub_1_2_6 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_6 =
atomics_a_mask_sub_sub_0_1_6 | _atomics_a_mask_sizeOH_T_19[1]
& atomics_a_mask_sub_1_2_6;
wire atomics_a_mask_sub_2_2_6 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_6 =
atomics_a_mask_sub_sub_1_1_6 | _atomics_a_mask_sizeOH_T_19[1]
& atomics_a_mask_sub_2_2_6;
wire atomics_a_mask_sub_3_2_6 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_6 =
atomics_a_mask_sub_sub_1_1_6 | _atomics_a_mask_sizeOH_T_19[1]
& atomics_a_mask_sub_3_2_6;
wire [3:0] _atomics_a_mask_sizeOH_T_22 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_7 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_22[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_7 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_22[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_7 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_7 =
atomics_a_mask_sub_sub_0_1_7 | _atomics_a_mask_sizeOH_T_22[1]
& atomics_a_mask_sub_0_2_7;
wire atomics_a_mask_sub_1_2_7 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_7 =
atomics_a_mask_sub_sub_0_1_7 | _atomics_a_mask_sizeOH_T_22[1]
& atomics_a_mask_sub_1_2_7;
wire atomics_a_mask_sub_2_2_7 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_7 =
atomics_a_mask_sub_sub_1_1_7 | _atomics_a_mask_sizeOH_T_22[1]
& atomics_a_mask_sub_2_2_7;
wire atomics_a_mask_sub_3_2_7 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_7 =
atomics_a_mask_sub_sub_1_1_7 | _atomics_a_mask_sizeOH_T_22[1]
& atomics_a_mask_sub_3_2_7;
wire [3:0] _atomics_a_mask_sizeOH_T_25 = 4'h1 << _GEN_4;
wire atomics_a_mask_sub_sub_0_1_8 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_25[2] & ~(s2_req_addr[2]);
wire atomics_a_mask_sub_sub_1_1_8 =
get_a_mask_sub_sub_sub_0_1 | _atomics_a_mask_sizeOH_T_25[2] & s2_req_addr[2];
wire atomics_a_mask_sub_0_2_8 = ~(s2_req_addr[2]) & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_0_1_8 =
atomics_a_mask_sub_sub_0_1_8 | _atomics_a_mask_sizeOH_T_25[1]
& atomics_a_mask_sub_0_2_8;
wire atomics_a_mask_sub_1_2_8 = ~(s2_req_addr[2]) & s2_req_addr[1];
wire atomics_a_mask_sub_1_1_8 =
atomics_a_mask_sub_sub_0_1_8 | _atomics_a_mask_sizeOH_T_25[1]
& atomics_a_mask_sub_1_2_8;
wire atomics_a_mask_sub_2_2_8 = s2_req_addr[2] & ~(s2_req_addr[1]);
wire atomics_a_mask_sub_2_1_8 =
atomics_a_mask_sub_sub_1_1_8 | _atomics_a_mask_sizeOH_T_25[1]
& atomics_a_mask_sub_2_2_8;
wire atomics_a_mask_sub_3_2_8 = s2_req_addr[2] & s2_req_addr[1];
wire atomics_a_mask_sub_3_1_8 =
atomics_a_mask_sub_sub_1_1_8 | _atomics_a_mask_sizeOH_T_25[1]
& atomics_a_mask_sub_3_2_8;
wire _GEN_5 =
_io_cpu_store_pending_T_8 | _io_cpu_store_pending_T_7 | _io_cpu_store_pending_T_6
| _io_cpu_store_pending_T_5;
wire [7:0] atomics_mask =
_io_cpu_store_pending_T_16
? {atomics_a_mask_sub_3_1_8 | atomics_a_mask_sub_3_2_8 & s2_req_addr[0],
atomics_a_mask_sub_3_1_8 | atomics_a_mask_sub_3_2_8 & ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_8 | atomics_a_mask_sub_2_2_8 & s2_req_addr[0],
atomics_a_mask_sub_2_1_8 | atomics_a_mask_sub_2_2_8 & ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_8 | atomics_a_mask_sub_1_2_8 & s2_req_addr[0],
atomics_a_mask_sub_1_1_8 | atomics_a_mask_sub_1_2_8 & ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_8 | atomics_a_mask_sub_0_2_8 & s2_req_addr[0],
atomics_a_mask_sub_0_1_8 | atomics_a_mask_sub_0_2_8 & ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_15
? {atomics_a_mask_sub_3_1_7 | atomics_a_mask_sub_3_2_7 & s2_req_addr[0],
atomics_a_mask_sub_3_1_7 | atomics_a_mask_sub_3_2_7 & ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_7 | atomics_a_mask_sub_2_2_7 & s2_req_addr[0],
atomics_a_mask_sub_2_1_7 | atomics_a_mask_sub_2_2_7 & ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_7 | atomics_a_mask_sub_1_2_7 & s2_req_addr[0],
atomics_a_mask_sub_1_1_7 | atomics_a_mask_sub_1_2_7 & ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_7 | atomics_a_mask_sub_0_2_7 & s2_req_addr[0],
atomics_a_mask_sub_0_1_7 | atomics_a_mask_sub_0_2_7 & ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_14
? {atomics_a_mask_sub_3_1_6 | atomics_a_mask_sub_3_2_6 & s2_req_addr[0],
atomics_a_mask_sub_3_1_6 | atomics_a_mask_sub_3_2_6 & ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_6 | atomics_a_mask_sub_2_2_6 & s2_req_addr[0],
atomics_a_mask_sub_2_1_6 | atomics_a_mask_sub_2_2_6 & ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_6 | atomics_a_mask_sub_1_2_6 & s2_req_addr[0],
atomics_a_mask_sub_1_1_6 | atomics_a_mask_sub_1_2_6 & ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_6 | atomics_a_mask_sub_0_2_6 & s2_req_addr[0],
atomics_a_mask_sub_0_1_6 | atomics_a_mask_sub_0_2_6 & ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_13
? {atomics_a_mask_sub_3_1_5 | atomics_a_mask_sub_3_2_5 & s2_req_addr[0],
atomics_a_mask_sub_3_1_5 | atomics_a_mask_sub_3_2_5
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_5 | atomics_a_mask_sub_2_2_5 & s2_req_addr[0],
atomics_a_mask_sub_2_1_5 | atomics_a_mask_sub_2_2_5
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_5 | atomics_a_mask_sub_1_2_5 & s2_req_addr[0],
atomics_a_mask_sub_1_1_5 | atomics_a_mask_sub_1_2_5
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_5 | atomics_a_mask_sub_0_2_5 & s2_req_addr[0],
atomics_a_mask_sub_0_1_5 | atomics_a_mask_sub_0_2_5
& ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_12
? {atomics_a_mask_sub_3_1_4 | atomics_a_mask_sub_3_2_4
& s2_req_addr[0],
atomics_a_mask_sub_3_1_4 | atomics_a_mask_sub_3_2_4
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_4 | atomics_a_mask_sub_2_2_4
& s2_req_addr[0],
atomics_a_mask_sub_2_1_4 | atomics_a_mask_sub_2_2_4
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_4 | atomics_a_mask_sub_1_2_4
& s2_req_addr[0],
atomics_a_mask_sub_1_1_4 | atomics_a_mask_sub_1_2_4
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_4 | atomics_a_mask_sub_0_2_4
& s2_req_addr[0],
atomics_a_mask_sub_0_1_4 | atomics_a_mask_sub_0_2_4
& ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_8
? {atomics_a_mask_sub_3_1_3 | atomics_a_mask_sub_3_2_3
& s2_req_addr[0],
atomics_a_mask_sub_3_1_3 | atomics_a_mask_sub_3_2_3
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_3 | atomics_a_mask_sub_2_2_3
& s2_req_addr[0],
atomics_a_mask_sub_2_1_3 | atomics_a_mask_sub_2_2_3
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_3 | atomics_a_mask_sub_1_2_3
& s2_req_addr[0],
atomics_a_mask_sub_1_1_3 | atomics_a_mask_sub_1_2_3
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_3 | atomics_a_mask_sub_0_2_3
& s2_req_addr[0],
atomics_a_mask_sub_0_1_3 | atomics_a_mask_sub_0_2_3
& ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_7
? {atomics_a_mask_sub_3_1_2 | atomics_a_mask_sub_3_2_2
& s2_req_addr[0],
atomics_a_mask_sub_3_1_2 | atomics_a_mask_sub_3_2_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_2 | atomics_a_mask_sub_2_2_2
& s2_req_addr[0],
atomics_a_mask_sub_2_1_2 | atomics_a_mask_sub_2_2_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_2 | atomics_a_mask_sub_1_2_2
& s2_req_addr[0],
atomics_a_mask_sub_1_1_2 | atomics_a_mask_sub_1_2_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_2 | atomics_a_mask_sub_0_2_2
& s2_req_addr[0],
atomics_a_mask_sub_0_1_2 | atomics_a_mask_sub_0_2_2
& ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_6
? {atomics_a_mask_sub_3_1_1 | atomics_a_mask_sub_3_2_1
& s2_req_addr[0],
atomics_a_mask_sub_3_1_1 | atomics_a_mask_sub_3_2_1
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1_1 | atomics_a_mask_sub_2_2_1
& s2_req_addr[0],
atomics_a_mask_sub_2_1_1 | atomics_a_mask_sub_2_2_1
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1_1 | atomics_a_mask_sub_1_2_1
& s2_req_addr[0],
atomics_a_mask_sub_1_1_1 | atomics_a_mask_sub_1_2_1
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1_1 | atomics_a_mask_sub_0_2_1
& s2_req_addr[0],
atomics_a_mask_sub_0_1_1 | atomics_a_mask_sub_0_2_1
& ~(s2_req_addr[0])}
: _io_cpu_store_pending_T_5
? {atomics_a_mask_sub_3_1 | atomics_a_mask_sub_3_2
& s2_req_addr[0],
atomics_a_mask_sub_3_1 | atomics_a_mask_sub_3_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_2_1 | atomics_a_mask_sub_2_2
& s2_req_addr[0],
atomics_a_mask_sub_2_1 | atomics_a_mask_sub_2_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_1_1 | atomics_a_mask_sub_1_2
& s2_req_addr[0],
atomics_a_mask_sub_1_1 | atomics_a_mask_sub_1_2
& ~(s2_req_addr[0]),
atomics_a_mask_sub_0_1 | atomics_a_mask_sub_0_2
& s2_req_addr[0],
atomics_a_mask_sub_0_1 | atomics_a_mask_sub_0_2
& ~(s2_req_addr[0])}
: 8'h0;
wire tl_out_a_valid =
s2_valid_uncached_pending | s2_valid_miss & s2_pma_cacheable & ~uncachedInFlight_0
& ((|s2_hit_state_state) ? s2_hit_state_state : 2'h0) != 2'h3;
wire _GEN_6 =
_io_cpu_store_pending_T_1 | ~s2_read | _io_cpu_store_pending_T_16
| _io_cpu_store_pending_T_15 | _io_cpu_store_pending_T_14 | _io_cpu_store_pending_T_13
| _io_cpu_store_pending_T_12 | _GEN_5;
wire _GEN_7 = s2_pma_cacheable | ~(~s2_write | _GEN_6);
wire _io_errors_bus_valid_T = ~_GEN & auto_out_d_valid;
wire [26:0] _r_beats1_decode_T = 27'hFFF << auto_out_d_bits_size;
wire [8:0] r_beats1 =
auto_out_d_bits_opcode[0] ? ~(_r_beats1_decode_T[11:3]) : 9'h0;
reg [8:0] r_counter;
wire d_last = r_counter == 9'h1 | r_beats1 == 9'h0;
wire _GEN_8 =
~auto_out_d_valid | auto_out_d_bits_opcode == 3'h1 | auto_out_d_bits_opcode == 3'h0
| auto_out_d_bits_opcode == 3'h2;
wire grantIsUncachedData =
&{auto_out_d_bits_opcode[0], ~(auto_out_d_bits_opcode[1])};
wire _GEN_9 = _io_errors_bus_valid_T & d_last & ~reset;
wire _GEN_10 = _io_errors_bus_valid_T & grantIsUncachedData;
reg blockUncachedGrant;
assign _GEN = grantIsUncachedData & (blockUncachedGrant | s1_valid);
wire io_cpu_req_ready_0 =
_GEN
? ~(auto_out_d_valid | _GEN_0) & _io_cpu_req_ready_T_4
: ~_GEN_0 & _io_cpu_req_ready_T_4;
wire _GEN_11 = _GEN & auto_out_d_valid;
reg io_cpu_s2_xcpt_REG;
assign io_cpu_s2_xcpt_pf_ld_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_pf_ld;
assign io_cpu_s2_xcpt_pf_st_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_pf_st;
assign io_cpu_s2_xcpt_ae_ld_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_ae_ld;
assign io_cpu_s2_xcpt_ae_st_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_ae_st;
assign io_cpu_s2_xcpt_ma_ld_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_ma_ld;
assign io_cpu_s2_xcpt_ma_st_0 = io_cpu_s2_xcpt_REG & s2_tlb_xcpt_ma_st;
wire _GEN_12 =
s2_valid_masked & (_metaArb_io_in_3_bits_data_c_cat_T_48 | _io_cpu_store_pending_T_3);
reg doUncachedResp;
wire io_cpu_replay_next_0 = _io_errors_bus_valid_T & grantIsUncachedData;
wire _GEN_13 = doUncachedResp & ~reset;
`ifndef SYNTHESIS
always @(posedge clock) begin
if ((`PRINTF_COND_) & ~reset & ~_dataArb_io_in_3_valid_T_54)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:1184 assert(!needsRead(req) || res)\n");
if ((`PRINTF_COND_) & ~reset & ~_GEN_1)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:327 assert(!(s1_valid_masked && s1_req.cmd === M_PWR) || (s1_mask_xwr | ~io.cpu.s1_data.mask).andR)\n");
if ((`PRINTF_COND_) & ~reset & ~_pstore_drain_opportunistic_T_54)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:1184 assert(!needsRead(req) || res)\n");
if ((`PRINTF_COND_) & ~reset & ~_GEN_3)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:508 assert(pstore1_rmw || pstore1_valid_not_rmw(io.cpu.s2_kill) === pstore1_valid)\n");
if ((`PRINTF_COND_) & ~reset & ~_GEN_8)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:652 assert(!tl_out.d.valid || whole_opc.isOneOf(uncachedGrantOpcodes))\n");
if ((`PRINTF_COND_) & _GEN_9 & ~uncachedInFlight_0)
$fwrite(32'h80000002,
"Assertion failed: An AccessAck was unexpected by the dcache.\n at DCache.scala:685 assert(f, \"An AccessAck was unexpected by the dcache.\") // TODO must handle Ack coming back on same cycle!\n");
if ((`PRINTF_COND_) & ~reset & _GEN_12)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:934 assert(!(s2_valid_masked && s2_req.cmd.isOneOf(M_XLR, M_XSC)))\n");
if ((`PRINTF_COND_) & _GEN_13 & s2_valid_hit_pre_data_ecc_and_waw)
$fwrite(32'h80000002,
"Assertion failed\n at DCache.scala:950 assert(!s2_valid_hit)\n");
end // always @(posedge)
`endif // not def SYNTHESIS
wire [31:0] io_cpu_resp_bits_data_zeroed =
s2_req_addr[2] ? s2_data[63:32] : s2_data[31:0];
wire _io_cpu_resp_bits_data_word_bypass_T_1 = s2_req_size == 2'h2;
wire [15:0] io_cpu_resp_bits_data_zeroed_1 =
s2_req_addr[1]
? io_cpu_resp_bits_data_zeroed[31:16]
: io_cpu_resp_bits_data_zeroed[15:0];
wire [7:0] io_cpu_resp_bits_data_zeroed_2 =
s2_req_addr[0]
? io_cpu_resp_bits_data_zeroed_1[15:8]
: io_cpu_resp_bits_data_zeroed_1[7:0];
wire [31:0] io_cpu_resp_bits_data_word_bypass_zeroed =
s2_req_addr[2] ? s2_data[63:32] : s2_data[31:0];
wire [63:0] pstore1_storegen_data_mask =
{{8{pstore1_mask[7]}},
{8{pstore1_mask[6]}},
{8{pstore1_mask[5]}},
{8{pstore1_mask[4]}},
{8{pstore1_mask[3]}},
{8{pstore1_mask[2]}},
{8{pstore1_mask[1]}},
{8{pstore1_mask[0]}}};
wire [63:0] pstore1_storegen_data =
_amoalus_0_io_out_unmasked & pstore1_storegen_data_mask | s2_data
& ~pstore1_storegen_data_mask;
always @(posedge clock) begin
automatic logic s1_valid_not_nacked;
automatic logic advance_pstore1;
automatic logic _io_cpu_perf_acquire_T;
automatic logic _GEN_14;
s1_valid_not_nacked = s1_valid & ~s1_nack;
advance_pstore1 = pstore1_valid & pstore2_valid == dataArb_io_in_0_bits_write;
_io_cpu_perf_acquire_T = auto_out_a_ready & tl_out_a_valid;
_GEN_14 = _io_cpu_perf_acquire_T & ~s2_pma_cacheable;
if (~reset) begin
end
if (reset) begin
s1_valid <= 1'h0;
cached_grant_wait <= 1'h0;
uncachedInFlight_0 <= 1'h0;
s2_valid <= 1'h0;
pstore2_valid <= 1'h0;
pstore1_held <= 1'h0;
r_counter <= 9'h0;
end
else begin
s1_valid <= io_cpu_req_ready_0 & io_cpu_req_valid;
cached_grant_wait <= _io_cpu_perf_acquire_T & s2_pma_cacheable | cached_grant_wait;
uncachedInFlight_0 <=
(~_io_errors_bus_valid_T | ~d_last) & (_GEN_14 | uncachedInFlight_0);
s2_valid <=
s1_valid_masked
& ~(s1_req_cmd == 5'h14 | s1_req_cmd == 5'h15 | s1_req_cmd == 5'h16);
pstore2_valid <= pstore2_valid & ~dataArb_io_in_0_bits_write | advance_pstore1;
pstore1_held <=
(_pstore1_held_T_2 | pstore1_held) & pstore2_valid & ~dataArb_io_in_0_bits_write;
if (_io_errors_bus_valid_T)
r_counter <= (|r_counter) ? r_counter - 9'h1 : r_beats1;
end
if (_metaArb_io_out_valid & ~_metaArb_io_out_bits_write) begin
automatic logic [33:0] s0_req_addr =
{_metaArb_io_out_bits_addr[33:6], io_cpu_req_bits_addr[5:0]};
s1_req_addr <= s0_req_addr;
s1_req_tag <= io_cpu_req_bits_tag;
s1_req_cmd <= io_cpu_req_bits_cmd;
s1_req_size <= io_cpu_req_bits_size;
s1_req_signed <= io_cpu_req_bits_signed;
s1_req_dprv <= io_cpu_req_bits_dprv;
s1_req_no_xcpt <= io_cpu_req_bits_no_xcpt;
s1_tlb_req_vaddr <= s0_req_addr;
s1_tlb_req_size <= io_cpu_req_bits_size;
s1_tlb_req_cmd <= io_cpu_req_bits_cmd;
s1_tlb_req_prv <= io_cpu_req_bits_dprv;
s1_did_read <=
_dataArb_io_in_3_ready & io_cpu_req_valid
& (_pstore_drain_opportunistic_T | _pstore_drain_opportunistic_T_1
| _pstore_drain_opportunistic_T_2 | _pstore_drain_opportunistic_T_28
| _pstore_drain_opportunistic_T_30 | _pstore_drain_opportunistic_T_31
| _pstore_drain_opportunistic_T_32 | _pstore_drain_opportunistic_T_33
| _pstore_drain_opportunistic_T_37 | _pstore_drain_opportunistic_T_38
| _pstore_drain_opportunistic_T_39 | _pstore_drain_opportunistic_T_40
| _pstore_drain_opportunistic_T_41
| (_pstore_drain_opportunistic_T_25 | _pstore_drain_opportunistic_T_50
| _pstore_drain_opportunistic_T_28 | _pstore_drain_opportunistic_T_30
| _pstore_drain_opportunistic_T_31 | _pstore_drain_opportunistic_T_32
| _pstore_drain_opportunistic_T_33 | _pstore_drain_opportunistic_T_37
| _pstore_drain_opportunistic_T_38 | _pstore_drain_opportunistic_T_39
| _pstore_drain_opportunistic_T_40 | _pstore_drain_opportunistic_T_41)
& _pstore_drain_opportunistic_T_50);
end
if (_GEN_14) begin
uncachedReqs_0_addr <= s2_req_addr;
uncachedReqs_0_tag <= s2_req_tag;
uncachedReqs_0_size <= s2_req_size;
uncachedReqs_0_signed <= s2_req_signed;
end
s2_not_nacked_in_s1 <= ~s1_nack;
if (_GEN_10) begin
s2_req_addr <=
{2'h0, _tlb_io_resp_paddr[31:12], s1_req_addr[11:3], uncachedReqs_0_addr[2:0]};
s2_req_tag <= uncachedReqs_0_tag;
s2_req_cmd <= 5'h0;
s2_req_size <= uncachedReqs_0_size;
s2_req_signed <= uncachedReqs_0_signed;
end
else if (s1_valid_not_nacked) begin
s2_req_addr <= {2'h0, _tlb_io_resp_paddr[31:12], s1_req_addr[11:0]};
s2_req_tag <= s1_req_tag;
s2_req_cmd <= s1_req_cmd;
s2_req_size <= s1_req_size;
s2_req_signed <= s1_req_signed;
end
if (s1_valid_not_nacked) begin
s2_req_dprv <= s1_req_dprv;
s2_req_no_xcpt <= s1_req_no_xcpt;
s2_tlb_xcpt_pf_ld <= _tlb_io_resp_pf_ld;
s2_tlb_xcpt_pf_st <= _tlb_io_resp_pf_st;
s2_tlb_xcpt_ae_ld <= _tlb_io_resp_ae_ld;
s2_tlb_xcpt_ae_st <= _tlb_io_resp_ae_st;
s2_tlb_xcpt_ma_ld <= _tlb_io_resp_ma_ld;
s2_tlb_xcpt_ma_st <= _tlb_io_resp_ma_st;
s2_pma_cacheable <= _tlb_io_resp_cacheable;
s2_hit_state_state <=
{2{_tlb_io_resp_paddr[31]
& {_tlb_io_resp_paddr[31:12], s1_req_addr[11:0]} < 32'h80100000}};
end
if (s1_valid | io_cpu_replay_next_0) begin
automatic logic [1:0] _s2_data_T_1 =
io_cpu_replay_next_0 | s1_did_read ? (_GEN_10 ? 2'h2 : 2'h1) : 2'h0;
s2_data <=
(_s2_data_T_1[0] ? _data_io_resp_0 : 64'h0)
| (_s2_data_T_1[1] ? auto_out_d_bits_data : 64'h0);
end
if (s1_valid_not_nacked & s1_write) begin
pstore1_cmd <= s1_req_cmd;
pstore1_addr <= s1_req_addr;
pstore1_data <= io_cpu_s1_data_data;
pstore1_mask <=
_io_cpu_perf_canAcceptLoadThenLoad_T_51 ? io_cpu_s1_data_mask : s1_mask_xwr;
pstore1_rmw_r <=
_io_cpu_perf_canAcceptLoadThenLoad_T_1 | _io_cpu_perf_canAcceptLoadThenLoad_T_2
| _io_cpu_perf_canAcceptLoadThenLoad_T_3 | _io_cpu_perf_canAcceptLoadThenLoad_T_29
| _io_cpu_perf_canAcceptLoadThenLoad_T_31
| _io_cpu_perf_canAcceptLoadThenLoad_T_32
| _io_cpu_perf_canAcceptLoadThenLoad_T_33
| _io_cpu_perf_canAcceptLoadThenLoad_T_34
| _io_cpu_perf_canAcceptLoadThenLoad_T_38
| _io_cpu_perf_canAcceptLoadThenLoad_T_39
| _io_cpu_perf_canAcceptLoadThenLoad_T_40
| _io_cpu_perf_canAcceptLoadThenLoad_T_41
| _io_cpu_perf_canAcceptLoadThenLoad_T_42
| (_io_cpu_perf_canAcceptLoadThenLoad_T_26
| _io_cpu_perf_canAcceptLoadThenLoad_T_51
| _io_cpu_perf_canAcceptLoadThenLoad_T_29
| _io_cpu_perf_canAcceptLoadThenLoad_T_31
| _io_cpu_perf_canAcceptLoadThenLoad_T_32
| _io_cpu_perf_canAcceptLoadThenLoad_T_33
| _io_cpu_perf_canAcceptLoadThenLoad_T_34
| _io_cpu_perf_canAcceptLoadThenLoad_T_38
| _io_cpu_perf_canAcceptLoadThenLoad_T_39
| _io_cpu_perf_canAcceptLoadThenLoad_T_40
| _io_cpu_perf_canAcceptLoadThenLoad_T_41
| _io_cpu_perf_canAcceptLoadThenLoad_T_42)
& _io_cpu_perf_canAcceptLoadThenLoad_T_51;
end
pstore_drain_on_miss_REG <= io_cpu_s2_nack_0;
if (advance_pstore1) begin
pstore2_addr <= pstore1_addr;
pstore2_storegen_data_r <= pstore1_storegen_data[7:0];
pstore2_storegen_data_r_1 <= pstore1_storegen_data[15:8];
pstore2_storegen_data_r_2 <= pstore1_storegen_data[23:16];
pstore2_storegen_data_r_3 <= pstore1_storegen_data[31:24];
pstore2_storegen_data_r_4 <= pstore1_storegen_data[39:32];
pstore2_storegen_data_r_5 <= pstore1_storegen_data[47:40];
pstore2_storegen_data_r_6 <= pstore1_storegen_data[55:48];
pstore2_storegen_data_r_7 <= pstore1_storegen_data[63:56];
pstore2_storegen_mask <= pstore1_mask;
end
blockUncachedGrant <= _GEN_11 ? ~_dataArb_io_in_1_ready : _dataArb_io_out_valid;
io_cpu_s2_xcpt_REG <=
s1_valid & ~io_cpu_s1_kill
& (s1_read | s1_write | s1_req_cmd == 5'h5 & s1_req_size[0] | s1_req_cmd == 5'h17)
& ~s1_req_no_xcpt & ~s1_nack;
doUncachedResp <= io_cpu_replay_next_0;
end // always @(posedge)
DTLB tlb (
.io_req_bits_vaddr (s1_tlb_req_vaddr),
.io_req_bits_size (s1_tlb_req_size),
.io_req_bits_cmd (s1_tlb_req_cmd),
.io_req_bits_prv (s1_tlb_req_prv),
.io_resp_paddr (_tlb_io_resp_paddr),
.io_resp_pf_ld (_tlb_io_resp_pf_ld),
.io_resp_pf_st (_tlb_io_resp_pf_st),
.io_resp_ae_ld (_tlb_io_resp_ae_ld),
.io_resp_ae_st (_tlb_io_resp_ae_st),
.io_resp_ma_ld (_tlb_io_resp_ma_ld),
.io_resp_ma_st (_tlb_io_resp_ma_st),
.io_resp_cacheable (_tlb_io_resp_cacheable),
.io_ptw_status_debug (io_ptw_status_debug),
.io_ptw_pmp_0_cfg_l (io_ptw_pmp_0_cfg_l),
.io_ptw_pmp_0_cfg_a (io_ptw_pmp_0_cfg_a),
.io_ptw_pmp_0_cfg_w (io_ptw_pmp_0_cfg_w),
.io_ptw_pmp_0_cfg_r (io_ptw_pmp_0_cfg_r),
.io_ptw_pmp_0_addr (io_ptw_pmp_0_addr),
.io_ptw_pmp_0_mask (io_ptw_pmp_0_mask),
.io_ptw_pmp_1_cfg_l (io_ptw_pmp_1_cfg_l),
.io_ptw_pmp_1_cfg_a (io_ptw_pmp_1_cfg_a),
.io_ptw_pmp_1_cfg_w (io_ptw_pmp_1_cfg_w),
.io_ptw_pmp_1_cfg_r (io_ptw_pmp_1_cfg_r),
.io_ptw_pmp_1_addr (io_ptw_pmp_1_addr),
.io_ptw_pmp_1_mask (io_ptw_pmp_1_mask),
.io_ptw_pmp_2_cfg_l (io_ptw_pmp_2_cfg_l),
.io_ptw_pmp_2_cfg_a (io_ptw_pmp_2_cfg_a),
.io_ptw_pmp_2_cfg_w (io_ptw_pmp_2_cfg_w),
.io_ptw_pmp_2_cfg_r (io_ptw_pmp_2_cfg_r),
.io_ptw_pmp_2_addr (io_ptw_pmp_2_addr),
.io_ptw_pmp_2_mask (io_ptw_pmp_2_mask),
.io_ptw_pmp_3_cfg_l (io_ptw_pmp_3_cfg_l),
.io_ptw_pmp_3_cfg_a (io_ptw_pmp_3_cfg_a),
.io_ptw_pmp_3_cfg_w (io_ptw_pmp_3_cfg_w),
.io_ptw_pmp_3_cfg_r (io_ptw_pmp_3_cfg_r),
.io_ptw_pmp_3_addr (io_ptw_pmp_3_addr),
.io_ptw_pmp_3_mask (io_ptw_pmp_3_mask),
.io_ptw_pmp_4_cfg_l (io_ptw_pmp_4_cfg_l),
.io_ptw_pmp_4_cfg_a (io_ptw_pmp_4_cfg_a),
.io_ptw_pmp_4_cfg_w (io_ptw_pmp_4_cfg_w),
.io_ptw_pmp_4_cfg_r (io_ptw_pmp_4_cfg_r),
.io_ptw_pmp_4_addr (io_ptw_pmp_4_addr),
.io_ptw_pmp_4_mask (io_ptw_pmp_4_mask),
.io_ptw_pmp_5_cfg_l (io_ptw_pmp_5_cfg_l),
.io_ptw_pmp_5_cfg_a (io_ptw_pmp_5_cfg_a),
.io_ptw_pmp_5_cfg_w (io_ptw_pmp_5_cfg_w),
.io_ptw_pmp_5_cfg_r (io_ptw_pmp_5_cfg_r),
.io_ptw_pmp_5_addr (io_ptw_pmp_5_addr),
.io_ptw_pmp_5_mask (io_ptw_pmp_5_mask),
.io_ptw_pmp_6_cfg_l (io_ptw_pmp_6_cfg_l),
.io_ptw_pmp_6_cfg_a (io_ptw_pmp_6_cfg_a),
.io_ptw_pmp_6_cfg_w (io_ptw_pmp_6_cfg_w),
.io_ptw_pmp_6_cfg_r (io_ptw_pmp_6_cfg_r),
.io_ptw_pmp_6_addr (io_ptw_pmp_6_addr),
.io_ptw_pmp_6_mask (io_ptw_pmp_6_mask),
.io_ptw_pmp_7_cfg_l (io_ptw_pmp_7_cfg_l),
.io_ptw_pmp_7_cfg_a (io_ptw_pmp_7_cfg_a),
.io_ptw_pmp_7_cfg_w (io_ptw_pmp_7_cfg_w),
.io_ptw_pmp_7_cfg_r (io_ptw_pmp_7_cfg_r),
.io_ptw_pmp_7_addr (io_ptw_pmp_7_addr),
.io_ptw_pmp_7_mask (io_ptw_pmp_7_mask)
);
Arbiter8_DCacheMetadataReq metaArb (
.io_in_2_valid (metaArb_io_in_2_valid),
.io_in_2_bits_addr ({io_cpu_req_bits_addr[33:20], s2_req_addr[19:0]}),
.io_in_3_valid (1'h0),
.io_in_3_bits_addr ({io_cpu_req_bits_addr[33:20], s2_req_addr[19:0]}),
.io_in_7_ready (_metaArb_io_in_7_ready),
.io_in_7_valid (io_cpu_req_valid),
.io_in_7_bits_addr (io_cpu_req_bits_addr),
.io_out_valid (_metaArb_io_out_valid),
.io_out_bits_write (_metaArb_io_out_bits_write),
.io_out_bits_addr (_metaArb_io_out_bits_addr)
);
DCacheDataArray data (
.clock (clock),
.io_req_valid (_dataArb_io_out_valid),
.io_req_bits_addr (_dataArb_io_out_bits_addr),
.io_req_bits_write (_dataArb_io_out_bits_write),
.io_req_bits_wdata (_dataArb_io_out_bits_wdata),
.io_req_bits_eccMask (_dataArb_io_out_bits_eccMask),
.io_resp_0 (_data_io_resp_0)
);
Arbiter4_DCacheDataReq dataArb (
.io_in_0_valid
(pstore_drain_structural
| ((_dataArb_io_in_0_valid_T_4 | pstore1_held) & ~pstore1_rmw_r | pstore2_valid)
& _dataArb_io_in_0_valid_T_9),
.io_in_0_bits_addr (_dataArb_io_in_0_bits_wordMask_wordMask_T),
.io_in_0_bits_write (dataArb_io_in_0_bits_write),
.io_in_0_bits_wdata (dataArb_io_in_3_bits_wdata),
.io_in_0_bits_eccMask (dataArb_io_in_1_bits_eccMask),
.io_in_1_ready (_dataArb_io_in_1_ready),
.io_in_1_valid (_GEN_11),
.io_in_1_bits_addr (_dataArb_io_in_0_bits_wordMask_wordMask_T),
.io_in_1_bits_write (~_GEN_11 & dataArb_io_in_0_bits_write),
.io_in_1_bits_wdata (dataArb_io_in_3_bits_wdata),
.io_in_1_bits_eccMask (dataArb_io_in_1_bits_eccMask),
.io_in_3_ready (_dataArb_io_in_3_ready),
.io_in_3_valid (io_cpu_req_valid & ~_dataArb_io_in_3_valid_res_T_2),
.io_in_3_bits_addr (io_cpu_req_bits_addr[19:0]),
.io_in_3_bits_wdata (dataArb_io_in_3_bits_wdata),
.io_out_valid (_dataArb_io_out_valid),
.io_out_bits_addr (_dataArb_io_out_bits_addr),
.io_out_bits_write (_dataArb_io_out_bits_write),
.io_out_bits_wdata (_dataArb_io_out_bits_wdata),
.io_out_bits_eccMask (_dataArb_io_out_bits_eccMask)
);
AMOALU amoalus_0 (
.io_mask (pstore1_mask),
.io_cmd (pstore1_cmd),
.io_lhs (s2_data),
.io_rhs (pstore1_data),
.io_out_unmasked (_amoalus_0_io_out_unmasked)
);
assign auto_out_a_valid = tl_out_a_valid;
assign auto_out_a_bits_opcode =
s2_pma_cacheable
? 3'h0
: s2_write
? (_io_cpu_store_pending_T_1
? 3'h1
: s2_read
? (_io_cpu_store_pending_T_16 | _io_cpu_store_pending_T_15
| _io_cpu_store_pending_T_14 | _io_cpu_store_pending_T_13
| _io_cpu_store_pending_T_12
? 3'h2
: _GEN_5 ? 3'h3 : 3'h0)
: 3'h0)
: 3'h4;
assign auto_out_a_bits_param =
s2_pma_cacheable | ~s2_write | _io_cpu_store_pending_T_1 | ~s2_read
? 3'h0
: _io_cpu_store_pending_T_16
? 3'h3
: _io_cpu_store_pending_T_15
? 3'h2
: _io_cpu_store_pending_T_14
? 3'h1
: _io_cpu_store_pending_T_13
? 3'h0
: _io_cpu_store_pending_T_12
? 3'h4
: _io_cpu_store_pending_T_8
? 3'h2
: _io_cpu_store_pending_T_7
? 3'h1
: _io_cpu_store_pending_T_6 | ~_io_cpu_store_pending_T_5
? 3'h0
: 3'h3;
assign auto_out_a_bits_size = _GEN_7 ? 4'h0 : _GEN_4;
assign auto_out_a_bits_address = _GEN_7 ? 32'h0 : s2_req_addr[31:0];
assign auto_out_a_bits_user_amba_prot_bufferable = s2_pma_cacheable;
assign auto_out_a_bits_user_amba_prot_modifiable = s2_pma_cacheable;
assign auto_out_a_bits_user_amba_prot_readalloc = s2_pma_cacheable;
assign auto_out_a_bits_user_amba_prot_writealloc = s2_pma_cacheable;
assign auto_out_a_bits_user_amba_prot_privileged = (&s2_req_dprv) | s2_pma_cacheable;
assign auto_out_a_bits_mask =
s2_pma_cacheable
? 8'h0
: s2_write
? (_io_cpu_store_pending_T_1
? pstore1_mask
: s2_read
? atomics_mask
: {put_a_mask_sub_3_1 | put_a_mask_sub_3_2 & s2_req_addr[0],
put_a_mask_sub_3_1 | put_a_mask_sub_3_2 & ~(s2_req_addr[0]),
put_a_mask_sub_2_1 | put_a_mask_sub_2_2 & s2_req_addr[0],
put_a_mask_sub_2_1 | put_a_mask_sub_2_2 & ~(s2_req_addr[0]),
put_a_mask_sub_1_1 | put_a_mask_sub_1_2 & s2_req_addr[0],
put_a_mask_sub_1_1 | put_a_mask_sub_1_2 & ~(s2_req_addr[0]),
put_a_mask_sub_0_1 | put_a_mask_sub_0_2 & s2_req_addr[0],
put_a_mask_sub_0_1 | put_a_mask_sub_0_2 & ~(s2_req_addr[0])})
: {get_a_mask_sub_3_1 | get_a_mask_sub_3_2 & s2_req_addr[0],
get_a_mask_sub_3_1 | get_a_mask_sub_3_2 & ~(s2_req_addr[0]),
get_a_mask_sub_2_1 | get_a_mask_sub_2_2 & s2_req_addr[0],
get_a_mask_sub_2_1 | get_a_mask_sub_2_2 & ~(s2_req_addr[0]),
get_a_mask_sub_1_1 | get_a_mask_sub_1_2 & s2_req_addr[0],
get_a_mask_sub_1_1 | get_a_mask_sub_1_2 & ~(s2_req_addr[0]),
get_a_mask_sub_0_1 | get_a_mask_sub_0_2 & s2_req_addr[0],
get_a_mask_sub_0_1 | get_a_mask_sub_0_2 & ~(s2_req_addr[0])};
assign auto_out_a_bits_data =
s2_pma_cacheable | ~s2_write | ~_GEN_6 ? 64'h0 : pstore1_data;
assign auto_out_d_ready = ~_GEN;
assign io_cpu_req_ready = io_cpu_req_ready_0;
assign io_cpu_s2_nack = io_cpu_s2_nack_0;
assign io_cpu_resp_valid = s2_valid_hit_pre_data_ecc_and_waw | doUncachedResp;
assign io_cpu_resp_bits_tag = s2_req_tag;
assign io_cpu_resp_bits_size = s2_req_size;
assign io_cpu_resp_bits_data =
{s2_req_size == 2'h0
? {56{s2_req_signed & io_cpu_resp_bits_data_zeroed_2[7]}}
: {s2_req_size == 2'h1
? {48{s2_req_signed & io_cpu_resp_bits_data_zeroed_1[15]}}
: {_io_cpu_resp_bits_data_word_bypass_T_1
? {32{s2_req_signed & io_cpu_resp_bits_data_zeroed[31]}}
: s2_data[63:32],
io_cpu_resp_bits_data_zeroed[31:16]},
io_cpu_resp_bits_data_zeroed_1[15:8]},
io_cpu_resp_bits_data_zeroed_2};
assign io_cpu_resp_bits_replay = doUncachedResp;
assign io_cpu_resp_bits_has_data = s2_read;
assign io_cpu_resp_bits_data_word_bypass =
{_io_cpu_resp_bits_data_word_bypass_T_1
? {32{s2_req_signed & io_cpu_resp_bits_data_word_bypass_zeroed[31]}}
: s2_data[63:32],
io_cpu_resp_bits_data_word_bypass_zeroed};
assign io_cpu_resp_bits_data_raw = s2_data;
assign io_cpu_replay_next = io_cpu_replay_next_0;
assign io_cpu_s2_xcpt_ma_ld = io_cpu_s2_xcpt_ma_ld_0;
assign io_cpu_s2_xcpt_ma_st = io_cpu_s2_xcpt_ma_st_0;
assign io_cpu_s2_xcpt_pf_ld = io_cpu_s2_xcpt_pf_ld_0;
assign io_cpu_s2_xcpt_pf_st = io_cpu_s2_xcpt_pf_st_0;
assign io_cpu_s2_xcpt_ae_ld = io_cpu_s2_xcpt_ae_ld_0;
assign io_cpu_s2_xcpt_ae_st = io_cpu_s2_xcpt_ae_st_0;
assign io_cpu_ordered =
~(s1_valid & ~s1_req_no_xcpt | s2_valid & ~s2_req_no_xcpt | cached_grant_wait
| uncachedInFlight_0);
assign io_cpu_perf_grant = auto_out_d_valid & d_last;
endmodule