Files
gps/hardware/generated/genesys2-soc-verilog/TLMAX2771SPI.sv
T
onur a25a1a61d0 fix(gps): make ephemeris flash persistence hardware-safe
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.
2026-08-13 00:50:57 +03:00

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