140 lines
5.8 KiB
Systemverilog
140 lines
5.8 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 TLToAPB(
|
|
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 [28:0] auto_in_a_bits_address,
|
|
input auto_in_a_bits_user_amba_prot_bufferable,
|
|
auto_in_a_bits_user_amba_prot_modifiable,
|
|
auto_in_a_bits_user_amba_prot_readalloc,
|
|
auto_in_a_bits_user_amba_prot_writealloc,
|
|
auto_in_a_bits_user_amba_prot_privileged,
|
|
auto_in_a_bits_user_amba_prot_secure,
|
|
auto_in_a_bits_user_amba_prot_fetch,
|
|
input [3:0] auto_in_a_bits_mask,
|
|
input [31:0] auto_in_a_bits_data,
|
|
input auto_in_a_bits_corrupt,
|
|
auto_in_d_ready,
|
|
output auto_in_d_valid,
|
|
output [2:0] auto_in_d_bits_opcode,
|
|
output [1:0] auto_in_d_bits_param,
|
|
auto_in_d_bits_size,
|
|
output [6:0] auto_in_d_bits_source,
|
|
output auto_in_d_bits_sink,
|
|
auto_in_d_bits_denied,
|
|
output [31:0] auto_in_d_bits_data,
|
|
output auto_in_d_bits_corrupt,
|
|
auto_out_psel,
|
|
auto_out_penable,
|
|
auto_out_pwrite,
|
|
output [28:0] auto_out_paddr,
|
|
output [31:0] auto_out_pwdata,
|
|
input auto_out_pready,
|
|
auto_out_pslverr,
|
|
input [31:0] auto_out_prdata
|
|
);
|
|
|
|
wire _a_q_io_deq_valid;
|
|
wire [2:0] _a_q_io_deq_bits_opcode;
|
|
wire [1:0] _a_q_io_deq_bits_size;
|
|
wire [6:0] _a_q_io_deq_bits_source;
|
|
wire _nodeIn_d_q_io_enq_ready;
|
|
wire _nodeIn_d_q_io_deq_valid;
|
|
reg a_enable;
|
|
reg a_sel_REG;
|
|
wire a_sel = _a_q_io_deq_valid & a_sel_REG;
|
|
reg d_write;
|
|
reg [6:0] d_source;
|
|
reg [1:0] d_size;
|
|
wire d_valid = a_enable & auto_out_pready;
|
|
wire _GEN = ~d_valid | _nodeIn_d_q_io_enq_ready;
|
|
`ifndef SYNTHESIS
|
|
always @(posedge clock) begin
|
|
if ((`PRINTF_COND_) & ~reset & ~_GEN)
|
|
$fwrite(32'h80000002,
|
|
"Assertion failed\n at ToAPB.scala:110 assert (!d.valid || d.ready)\n");
|
|
end // always @(posedge)
|
|
`endif // not def SYNTHESIS
|
|
always @(posedge clock) begin
|
|
if (reset)
|
|
a_enable <= 1'h0;
|
|
else
|
|
a_enable <= ~(_nodeIn_d_q_io_enq_ready & d_valid) & (a_sel | a_enable);
|
|
a_sel_REG <= ~_nodeIn_d_q_io_deq_valid | auto_in_d_ready;
|
|
if (a_sel & ~a_enable) begin
|
|
d_write <= ~(_a_q_io_deq_bits_opcode[2]);
|
|
d_source <= _a_q_io_deq_bits_source;
|
|
d_size <= _a_q_io_deq_bits_size;
|
|
end
|
|
end // always @(posedge)
|
|
Queue1_TLBundleD_a29d32s7k1z2u nodeIn_d_q (
|
|
.clock (clock),
|
|
.reset (reset),
|
|
.io_enq_ready (_nodeIn_d_q_io_enq_ready),
|
|
.io_enq_valid (d_valid),
|
|
.io_enq_bits_opcode ({2'h0, ~d_write}),
|
|
.io_enq_bits_size (d_size),
|
|
.io_enq_bits_source (d_source),
|
|
.io_enq_bits_denied (d_write & auto_out_pslverr),
|
|
.io_enq_bits_data (auto_out_prdata),
|
|
.io_enq_bits_corrupt (~d_write & auto_out_pslverr),
|
|
.io_deq_ready (auto_in_d_ready),
|
|
.io_deq_valid (_nodeIn_d_q_io_deq_valid),
|
|
.io_deq_bits_opcode (auto_in_d_bits_opcode),
|
|
.io_deq_bits_param (auto_in_d_bits_param),
|
|
.io_deq_bits_size (auto_in_d_bits_size),
|
|
.io_deq_bits_source (auto_in_d_bits_source),
|
|
.io_deq_bits_sink (auto_in_d_bits_sink),
|
|
.io_deq_bits_denied (auto_in_d_bits_denied),
|
|
.io_deq_bits_data (auto_in_d_bits_data),
|
|
.io_deq_bits_corrupt (auto_in_d_bits_corrupt)
|
|
);
|
|
Queue1_TLBundleA_a29d32s7k1z2u a_q (
|
|
.clock (clock),
|
|
.reset (reset),
|
|
.io_enq_ready (auto_in_a_ready),
|
|
.io_enq_valid (auto_in_a_valid),
|
|
.io_enq_bits_opcode (auto_in_a_bits_opcode),
|
|
.io_enq_bits_param (auto_in_a_bits_param),
|
|
.io_enq_bits_size (auto_in_a_bits_size),
|
|
.io_enq_bits_source (auto_in_a_bits_source),
|
|
.io_enq_bits_address (auto_in_a_bits_address),
|
|
.io_enq_bits_user_amba_prot_bufferable (auto_in_a_bits_user_amba_prot_bufferable),
|
|
.io_enq_bits_user_amba_prot_modifiable (auto_in_a_bits_user_amba_prot_modifiable),
|
|
.io_enq_bits_user_amba_prot_readalloc (auto_in_a_bits_user_amba_prot_readalloc),
|
|
.io_enq_bits_user_amba_prot_writealloc (auto_in_a_bits_user_amba_prot_writealloc),
|
|
.io_enq_bits_user_amba_prot_privileged (auto_in_a_bits_user_amba_prot_privileged),
|
|
.io_enq_bits_user_amba_prot_secure (auto_in_a_bits_user_amba_prot_secure),
|
|
.io_enq_bits_user_amba_prot_fetch (auto_in_a_bits_user_amba_prot_fetch),
|
|
.io_enq_bits_mask (auto_in_a_bits_mask),
|
|
.io_enq_bits_data (auto_in_a_bits_data),
|
|
.io_enq_bits_corrupt (auto_in_a_bits_corrupt),
|
|
.io_deq_ready (d_valid),
|
|
.io_deq_valid (_a_q_io_deq_valid),
|
|
.io_deq_bits_opcode (_a_q_io_deq_bits_opcode),
|
|
.io_deq_bits_size (_a_q_io_deq_bits_size),
|
|
.io_deq_bits_source (_a_q_io_deq_bits_source),
|
|
.io_deq_bits_address (auto_out_paddr),
|
|
.io_deq_bits_data (auto_out_pwdata)
|
|
);
|
|
assign auto_in_d_valid = _nodeIn_d_q_io_deq_valid;
|
|
assign auto_out_psel = a_sel;
|
|
assign auto_out_penable = a_enable;
|
|
assign auto_out_pwrite = ~(_a_q_io_deq_bits_opcode[2]);
|
|
endmodule
|
|
|