Files
gps/hardware/generated/genesys2-soc-verilog/PMAChecker.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

67 lines
3.2 KiB
Systemverilog

// Generated by CIRCT firtool-1.151.0
module PMAChecker(
input [33:0] io_paddr,
output io_resp_r,
io_resp_w,
io_resp_pp,
io_resp_al,
io_resp_aa,
io_resp_x,
io_resp_eff
);
wire [9:0] _GEN = io_paddr[25:16] ^ 10'h200;
wire [16:0] _GEN_0 = io_paddr[28:12] ^ 17'h10013;
wire [16:0] _GEN_1 = io_paddr[28:12] ^ 17'h10014;
wire [16:0] _GEN_2 = io_paddr[28:12] ^ 17'h10016;
wire [16:0] _GEN_3 = io_paddr[28:12] ^ 17'h10020;
wire [11:0] _GEN_4 = io_paddr[31:20] ^ 12'h800;
wire legal_address =
io_paddr[33:12] == 22'h0 | {io_paddr[33:14], ~(io_paddr[13:12])} == 22'h0
| {io_paddr[33:17], ~(io_paddr[16])} == 18'h0 | {io_paddr[33:26], _GEN} == 18'h0
| {io_paddr[33:28], ~(io_paddr[27:26])} == 8'h0 | {io_paddr[33:29], _GEN_0} == 22'h0
| {io_paddr[33:29], _GEN_1} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10015} == 22'h0
| {io_paddr[33:29], _GEN_2} == 22'h0 | {io_paddr[33:29], _GEN_3} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10021} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10022} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10023} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10024} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10025} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10026} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10027} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10028} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h10029} == 22'h0
| {io_paddr[33:29], io_paddr[28:12] ^ 17'h1002A} == 22'h0
| {io_paddr[33:32], _GEN_4} == 14'h0;
wire _GEN_5 = |{io_paddr[31:27], io_paddr[19:16]};
wire _GEN_6 = |{io_paddr[31:27], io_paddr[19:15]};
wire _GEN_7 = |{io_paddr[31:28], ~(io_paddr[27])};
wire [13:0] _GEN_8 = io_paddr[28:15] ^ 14'h2002;
wire _GEN_9 = |{io_paddr[31:29], _GEN_8[13:12], _GEN_8[4:0]};
wire _GEN_10 = |{io_paddr[31:29], _GEN_3[16:15], _GEN_3[7:4]};
wire _GEN_11 = |(_GEN_4[11:7]);
assign io_resp_r = legal_address;
assign io_resp_w =
legal_address & (~_GEN_5 | ~_GEN_6 | ~_GEN_7 | ~_GEN_9 | ~_GEN_10 | ~_GEN_11);
assign io_resp_pp =
legal_address & (~_GEN_5 | ~_GEN_6 | ~_GEN_7 | ~_GEN_9 | ~_GEN_10 | ~_GEN_11);
assign io_resp_al =
legal_address & (~_GEN_5 | ~_GEN_6 | ~_GEN_7 | ~_GEN_9 | ~_GEN_10 | ~_GEN_11);
assign io_resp_aa =
legal_address & (~_GEN_5 | ~_GEN_6 | ~_GEN_7 | ~_GEN_9 | ~_GEN_10 | ~_GEN_11);
assign io_resp_x =
legal_address
& ({io_paddr[30:27], io_paddr[25]} == 5'h0
| {io_paddr[31:27], io_paddr[25], io_paddr[14]} == 7'h0);
assign io_resp_eff =
legal_address
& ({io_paddr[31:27], io_paddr[25], io_paddr[16], io_paddr[14:12]} == 10'h0
| {io_paddr[31:27], _GEN[9], io_paddr[16]} == 7'h0 | ~_GEN_7
| {io_paddr[31:29], io_paddr[28:27] ^ 2'h2, io_paddr[25], io_paddr[16]} == 7'h0
| {io_paddr[31:29], _GEN_0[16:15], io_paddr[25], _GEN_0[4], _GEN_0[2:0]} == 10'h0
| {io_paddr[31:29], _GEN_1[16:15], io_paddr[25], _GEN_1[4], _GEN_1[2:1]} == 9'h0
| {io_paddr[31:29], _GEN_2[16:15], io_paddr[25], _GEN_2[4], _GEN_2[2:0]} == 10'h0);
endmodule