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

267 lines
13 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 TLFragmenter_FPGAGPS(
input clock,
reset,
output auto_anon_in_a_ready,
input auto_anon_in_a_valid,
input [2:0] auto_anon_in_a_bits_opcode,
auto_anon_in_a_bits_param,
auto_anon_in_a_bits_size,
input [1:0] auto_anon_in_a_bits_source,
input [28:0] auto_anon_in_a_bits_address,
input auto_anon_in_a_bits_user_amba_prot_bufferable,
auto_anon_in_a_bits_user_amba_prot_modifiable,
auto_anon_in_a_bits_user_amba_prot_readalloc,
auto_anon_in_a_bits_user_amba_prot_writealloc,
auto_anon_in_a_bits_user_amba_prot_privileged,
auto_anon_in_a_bits_user_amba_prot_secure,
auto_anon_in_a_bits_user_amba_prot_fetch,
input [3:0] auto_anon_in_a_bits_mask,
input [31:0] auto_anon_in_a_bits_data,
input auto_anon_in_a_bits_corrupt,
auto_anon_in_d_ready,
output auto_anon_in_d_valid,
output [2:0] auto_anon_in_d_bits_opcode,
output [1:0] auto_anon_in_d_bits_param,
output [2:0] auto_anon_in_d_bits_size,
output [1:0] auto_anon_in_d_bits_source,
output auto_anon_in_d_bits_sink,
auto_anon_in_d_bits_denied,
output [31:0] auto_anon_in_d_bits_data,
output auto_anon_in_d_bits_corrupt,
input auto_anon_out_a_ready,
output auto_anon_out_a_valid,
output [2:0] auto_anon_out_a_bits_opcode,
auto_anon_out_a_bits_param,
output [1:0] auto_anon_out_a_bits_size,
output [6:0] auto_anon_out_a_bits_source,
output [28:0] auto_anon_out_a_bits_address,
output auto_anon_out_a_bits_user_amba_prot_bufferable,
auto_anon_out_a_bits_user_amba_prot_modifiable,
auto_anon_out_a_bits_user_amba_prot_readalloc,
auto_anon_out_a_bits_user_amba_prot_writealloc,
auto_anon_out_a_bits_user_amba_prot_privileged,
auto_anon_out_a_bits_user_amba_prot_secure,
auto_anon_out_a_bits_user_amba_prot_fetch,
output [3:0] auto_anon_out_a_bits_mask,
output [31:0] auto_anon_out_a_bits_data,
output auto_anon_out_a_bits_corrupt,
auto_anon_out_d_ready,
input auto_anon_out_d_valid,
input [2:0] auto_anon_out_d_bits_opcode,
input [1:0] auto_anon_out_d_bits_param,
auto_anon_out_d_bits_size,
input [6:0] auto_anon_out_d_bits_source,
input auto_anon_out_d_bits_sink,
auto_anon_out_d_bits_denied,
input [31:0] auto_anon_out_d_bits_data,
input auto_anon_out_d_bits_corrupt
);
wire _repeater_io_full;
wire _repeater_io_deq_valid;
wire [2:0] _repeater_io_deq_bits_opcode;
wire [2:0] _repeater_io_deq_bits_size;
wire [1:0] _repeater_io_deq_bits_source;
wire [28:0] _repeater_io_deq_bits_address;
wire [3:0] _repeater_io_deq_bits_mask;
reg [3:0] acknum;
reg [2:0] dOrig;
reg dToggle;
wire _d_denied_T = |acknum;
wire [4:0] _dsizeOH1_T = 5'h3 << auto_anon_out_d_bits_size;
wire [3:0] _GEN = ~(auto_anon_out_d_bits_source[3:0]);
wire [2:0] dFirst_size_hi = auto_anon_out_d_bits_source[3:1] & {1'h1, _GEN[3:2]};
wire [2:0] _dFirst_size_T_8 =
{1'h0, dFirst_size_hi[2:1]} | {auto_anon_out_d_bits_source[0], ~(_dsizeOH1_T[1:0])}
& {_GEN[1:0], _dsizeOH1_T[1]};
wire [2:0] dFirst_size =
{|dFirst_size_hi,
|(_dFirst_size_T_8[2:1]),
_dFirst_size_T_8[2] | _dFirst_size_T_8[0]};
wire drop =
~(auto_anon_out_d_bits_opcode[0]) & (|(auto_anon_out_d_bits_source[3:0]));
wire anonOut_d_ready = auto_anon_in_d_ready | drop;
reg r_denied;
wire d_denied = _d_denied_T & r_denied | auto_anon_out_d_bits_denied;
wire [1:0] _maxLgHint_T = {_repeater_io_deq_bits_address[15:12] == 4'h0, 1'h0};
wire [1:0] _maxLgHint_T_1 =
{{_repeater_io_deq_bits_address[15:13], ~(_repeater_io_deq_bits_address[12])} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_2 =
{{_repeater_io_deq_bits_address[15:14],
_repeater_io_deq_bits_address[13:12] ^ 2'h2} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_3 =
{{_repeater_io_deq_bits_address[15:14],
~(_repeater_io_deq_bits_address[13:12])} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_4 =
{{_repeater_io_deq_bits_address[15],
_repeater_io_deq_bits_address[14:12] ^ 3'h4} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_5 =
{{_repeater_io_deq_bits_address[15],
_repeater_io_deq_bits_address[14:12] ^ 3'h5} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_6 =
{{_repeater_io_deq_bits_address[15],
_repeater_io_deq_bits_address[14:12] ^ 3'h6} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_7 =
{{_repeater_io_deq_bits_address[15], ~(_repeater_io_deq_bits_address[14:12])} == 4'h0,
1'h0};
wire [1:0] _maxLgHint_T_8 = {_repeater_io_deq_bits_address[15:12] == 4'h8, 1'h0};
wire [1:0] _maxLgHint_T_9 = {_repeater_io_deq_bits_address[15:12] == 4'h9, 1'h0};
wire [1:0] _maxLgHint_T_10 = {_repeater_io_deq_bits_address[15:12] == 4'hA, 1'h0};
wire [7:0][1:0] _GEN_0 =
{{2'h2},
{2'h2},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10},
{_maxLgHint_T | _maxLgHint_T_1 | _maxLgHint_T_2 | _maxLgHint_T_3 | _maxLgHint_T_4
| _maxLgHint_T_5 | _maxLgHint_T_6 | _maxLgHint_T_7 | _maxLgHint_T_8
| _maxLgHint_T_9 | _maxLgHint_T_10}};
wire [1:0] limit = _GEN_0[_repeater_io_deq_bits_opcode];
wire [12:0] _aOrigOH1_T = 13'h3F << _repeater_io_deq_bits_size;
reg [3:0] gennum;
wire aFirst = gennum == 4'h0;
wire [3:0] aFragnum = aFirst ? ~(_aOrigOH1_T[5:2]) : gennum - 4'h1;
reg aToggle_r;
wire _GEN_1 = ~_repeater_io_full | _repeater_io_deq_bits_opcode[2];
wire _GEN_2 = ~_repeater_io_full | (&_repeater_io_deq_bits_mask);
`ifndef SYNTHESIS
always @(posedge clock) begin
if ((`PRINTF_COND_) & ~reset & ~_GEN_1)
$fwrite(32'h80000002,
"Assertion failed\n at Fragmenter.scala:321 assert (!repeater.io.full || !aHasData)\n");
if ((`PRINTF_COND_) & ~reset & ~_GEN_2)
$fwrite(32'h80000002,
"Assertion failed\n at Fragmenter.scala:324 assert (!repeater.io.full || in_a.bits.mask === fullMask)\n");
end // always @(posedge)
`endif // not def SYNTHESIS
always @(posedge clock) begin
automatic logic _GEN_3;
automatic logic _GEN_4;
_GEN_3 = anonOut_d_ready & auto_anon_out_d_valid;
_GEN_4 = _GEN_3 & ~_d_denied_T;
if (~reset) begin
end
if (reset) begin
acknum <= 4'h0;
dToggle <= 1'h0;
gennum <= 4'h0;
end
else begin
if (_GEN_3)
acknum <=
_d_denied_T
? acknum
- {3'h0, auto_anon_out_d_bits_opcode[0] | auto_anon_out_d_bits_size == 2'h2}
: auto_anon_out_d_bits_source[3:0];
if (_GEN_4)
dToggle <= auto_anon_out_d_bits_source[4];
if (auto_anon_out_a_ready & _repeater_io_deq_valid)
gennum <= aFragnum;
end
if (_GEN_4)
dOrig <= dFirst_size;
if (_GEN_3)
r_denied <= d_denied;
if (aFirst)
aToggle_r <= dToggle;
end // always @(posedge)
Repeater_TLBundleA_a29d32s2k1z3u repeater (
.clock (clock),
.reset (reset),
.io_repeat
(_repeater_io_deq_bits_opcode[2] & (|aFragnum)),
.io_full (_repeater_io_full),
.io_enq_ready (auto_anon_in_a_ready),
.io_enq_valid (auto_anon_in_a_valid),
.io_enq_bits_opcode (auto_anon_in_a_bits_opcode),
.io_enq_bits_param (auto_anon_in_a_bits_param),
.io_enq_bits_size (auto_anon_in_a_bits_size),
.io_enq_bits_source (auto_anon_in_a_bits_source),
.io_enq_bits_address (auto_anon_in_a_bits_address),
.io_enq_bits_user_amba_prot_bufferable
(auto_anon_in_a_bits_user_amba_prot_bufferable),
.io_enq_bits_user_amba_prot_modifiable
(auto_anon_in_a_bits_user_amba_prot_modifiable),
.io_enq_bits_user_amba_prot_readalloc (auto_anon_in_a_bits_user_amba_prot_readalloc),
.io_enq_bits_user_amba_prot_writealloc
(auto_anon_in_a_bits_user_amba_prot_writealloc),
.io_enq_bits_user_amba_prot_privileged
(auto_anon_in_a_bits_user_amba_prot_privileged),
.io_enq_bits_user_amba_prot_secure (auto_anon_in_a_bits_user_amba_prot_secure),
.io_enq_bits_user_amba_prot_fetch (auto_anon_in_a_bits_user_amba_prot_fetch),
.io_enq_bits_mask (auto_anon_in_a_bits_mask),
.io_enq_bits_corrupt (auto_anon_in_a_bits_corrupt),
.io_deq_ready (auto_anon_out_a_ready),
.io_deq_valid (_repeater_io_deq_valid),
.io_deq_bits_opcode (_repeater_io_deq_bits_opcode),
.io_deq_bits_param (auto_anon_out_a_bits_param),
.io_deq_bits_size (_repeater_io_deq_bits_size),
.io_deq_bits_source (_repeater_io_deq_bits_source),
.io_deq_bits_address (_repeater_io_deq_bits_address),
.io_deq_bits_user_amba_prot_bufferable
(auto_anon_out_a_bits_user_amba_prot_bufferable),
.io_deq_bits_user_amba_prot_modifiable
(auto_anon_out_a_bits_user_amba_prot_modifiable),
.io_deq_bits_user_amba_prot_readalloc
(auto_anon_out_a_bits_user_amba_prot_readalloc),
.io_deq_bits_user_amba_prot_writealloc
(auto_anon_out_a_bits_user_amba_prot_writealloc),
.io_deq_bits_user_amba_prot_privileged
(auto_anon_out_a_bits_user_amba_prot_privileged),
.io_deq_bits_user_amba_prot_secure (auto_anon_out_a_bits_user_amba_prot_secure),
.io_deq_bits_user_amba_prot_fetch (auto_anon_out_a_bits_user_amba_prot_fetch),
.io_deq_bits_mask (_repeater_io_deq_bits_mask),
.io_deq_bits_corrupt (auto_anon_out_a_bits_corrupt)
);
assign auto_anon_in_d_valid = auto_anon_out_d_valid & ~drop;
assign auto_anon_in_d_bits_opcode = auto_anon_out_d_bits_opcode;
assign auto_anon_in_d_bits_param = auto_anon_out_d_bits_param;
assign auto_anon_in_d_bits_size = _d_denied_T ? dOrig : dFirst_size;
assign auto_anon_in_d_bits_source = auto_anon_out_d_bits_source[6:5];
assign auto_anon_in_d_bits_sink = auto_anon_out_d_bits_sink;
assign auto_anon_in_d_bits_denied = d_denied;
assign auto_anon_in_d_bits_data = auto_anon_out_d_bits_data;
assign auto_anon_in_d_bits_corrupt = auto_anon_out_d_bits_corrupt;
assign auto_anon_out_a_valid = _repeater_io_deq_valid;
assign auto_anon_out_a_bits_opcode = _repeater_io_deq_bits_opcode;
assign auto_anon_out_a_bits_size =
_repeater_io_deq_bits_size > {1'h0, limit} ? limit : _repeater_io_deq_bits_size[1:0];
assign auto_anon_out_a_bits_source =
{_repeater_io_deq_bits_source, ~(aFirst ? dToggle : aToggle_r), aFragnum};
assign auto_anon_out_a_bits_address =
{_repeater_io_deq_bits_address[28:6],
_repeater_io_deq_bits_address[5:0] | {~(aFragnum | _aOrigOH1_T[5:2]), 2'h0}};
assign auto_anon_out_a_bits_mask = _repeater_io_full ? 4'hF : auto_anon_in_a_bits_mask;
assign auto_anon_out_a_bits_data = auto_anon_in_a_bits_data;
assign auto_anon_out_d_ready = anonOut_d_ready;
endmodule