a25a1a61d0
Add freestanding S25FL256S read/program/erase/verify support and seed a newly formatted ephemeris store with stale records. Age-gate navigation readiness, persist the continuous Toe week, and regenerate the Genesys2 MAX2771 integration and flash image.
116 lines
4.9 KiB
Systemverilog
116 lines
4.9 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module TLMAX2771SPI(
|
|
input clock,
|
|
reset,
|
|
output auto_in_a_ready,
|
|
input auto_in_a_valid,
|
|
input [2:0] auto_in_a_bits_opcode,
|
|
input [1:0] auto_in_a_bits_size,
|
|
input [5:0] auto_in_a_bits_source,
|
|
input [28: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 [5:0] auto_in_d_bits_source,
|
|
output [63:0] auto_in_d_bits_data,
|
|
output auto_sdata_oe_out,
|
|
auto_sdata_out_out,
|
|
input auto_sdata_in_in,
|
|
output auto_csn_out,
|
|
auto_sclk_out
|
|
);
|
|
|
|
wire _out_wofireMux_T_4;
|
|
wire _out_T_26;
|
|
wire _out_back_front_q_io_deq_valid;
|
|
wire _out_back_front_q_io_deq_bits_read;
|
|
wire [8:0] _out_back_front_q_io_deq_bits_index;
|
|
wire [63:0] _out_back_front_q_io_deq_bits_data;
|
|
wire [7:0] _out_back_front_q_io_deq_bits_mask;
|
|
wire [31:0] _engine_read_data;
|
|
wire _engine_busy;
|
|
wire _engine_ready;
|
|
reg [31:0] writeData;
|
|
wire _out_out_bits_data_T_1 =
|
|
_out_back_front_q_io_deq_bits_index[8:2] == 7'h0;
|
|
wire out_womask =
|
|
&{{8{_out_back_front_q_io_deq_bits_mask[3]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[2]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[1]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[0]}}};
|
|
wire _out_T_15 = _engine_ready | ~out_womask;
|
|
wire out_womask_1 =
|
|
&{{8{_out_back_front_q_io_deq_bits_mask[7]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[6]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[5]}},
|
|
{8{_out_back_front_q_io_deq_bits_mask[4]}}};
|
|
assign _out_T_26 = _engine_ready | ~out_womask_1;
|
|
assign _out_wofireMux_T_4 =
|
|
_out_back_front_q_io_deq_valid & auto_in_d_ready & ~_out_back_front_q_io_deq_bits_read
|
|
& _out_back_front_q_io_deq_bits_index[1:0] == 2'h0 & _out_out_bits_data_T_1;
|
|
wire [3:0] _GEN =
|
|
{{1'h1},
|
|
{1'h1},
|
|
{1'h1},
|
|
{|{_out_T_26 & _out_T_15, _out_back_front_q_io_deq_bits_index[8:2]}}};
|
|
wire out_oready =
|
|
_out_back_front_q_io_deq_bits_read | _GEN[_out_back_front_q_io_deq_bits_index[1:0]];
|
|
wire [3:0][63:0] _GEN_0 =
|
|
{{64'h4D41583100000007},
|
|
{64'h367EE402FAF080},
|
|
{{30'h0, _engine_busy, _engine_ready, _engine_read_data}},
|
|
{64'h0}};
|
|
always @(posedge clock) begin
|
|
if (reset)
|
|
writeData <= 32'h0;
|
|
else if (_out_wofireMux_T_4 & _out_T_15 & out_womask_1 & _engine_ready)
|
|
writeData <= _out_back_front_q_io_deq_bits_data[63:32];
|
|
end // always @(posedge)
|
|
max2771_spi_engine #(
|
|
.CLOCK_HZ(50000000),
|
|
.MAX_SCLK_HZ(4000000)
|
|
) engine (
|
|
.clk (clock),
|
|
.rst_n (~reset),
|
|
.start (_out_wofireMux_T_4 & _out_T_26 & out_womask & _engine_ready),
|
|
.read_not_write (_out_back_front_q_io_deq_bits_data[8]),
|
|
.address (_out_back_front_q_io_deq_bits_data[3:0]),
|
|
.write_data (writeData),
|
|
.read_data (_engine_read_data),
|
|
.busy (_engine_busy),
|
|
.ready (_engine_ready),
|
|
.sclk (auto_sclk_out),
|
|
.csn (auto_csn_out),
|
|
.sdata_i (auto_sdata_in_in),
|
|
.sdata_o (auto_sdata_out_out),
|
|
.sdata_oe (auto_sdata_oe_out)
|
|
);
|
|
Queue1_RegMapperInput_i9_m8 out_back_front_q (
|
|
.clock (clock),
|
|
.reset (reset),
|
|
.io_enq_ready (auto_in_a_ready),
|
|
.io_enq_valid (auto_in_a_valid),
|
|
.io_enq_bits_read (auto_in_a_bits_opcode == 3'h4),
|
|
.io_enq_bits_index (auto_in_a_bits_address[11:3]),
|
|
.io_enq_bits_data (auto_in_a_bits_data),
|
|
.io_enq_bits_mask (auto_in_a_bits_mask),
|
|
.io_enq_bits_extra_tlrr_extra_source (auto_in_a_bits_source),
|
|
.io_enq_bits_extra_tlrr_extra_size (auto_in_a_bits_size),
|
|
.io_deq_ready (auto_in_d_ready & out_oready),
|
|
.io_deq_valid (_out_back_front_q_io_deq_valid),
|
|
.io_deq_bits_read (_out_back_front_q_io_deq_bits_read),
|
|
.io_deq_bits_index (_out_back_front_q_io_deq_bits_index),
|
|
.io_deq_bits_data (_out_back_front_q_io_deq_bits_data),
|
|
.io_deq_bits_mask (_out_back_front_q_io_deq_bits_mask),
|
|
.io_deq_bits_extra_tlrr_extra_source (auto_in_d_bits_source),
|
|
.io_deq_bits_extra_tlrr_extra_size (auto_in_d_bits_size)
|
|
);
|
|
assign auto_in_d_valid = _out_back_front_q_io_deq_valid & out_oready;
|
|
assign auto_in_d_bits_opcode = {2'h0, _out_back_front_q_io_deq_bits_read};
|
|
assign auto_in_d_bits_data =
|
|
_out_out_bits_data_T_1 ? _GEN_0[_out_back_front_q_io_deq_bits_index[1:0]] : 64'h0;
|
|
endmodule
|