
// // 模块: e203_pmp_5stage // 功能: 五阶段物理内存保护 NAPOT/TOR匹配 当拍拦截 // include e203_defines.v module e203_pmp_5stage ( input logic req_valid, input logic [31:0] req_addr, input logic req_rw, req_exec, input logic [31:0] pmpcfg [0:3], input logic [31:0] pmpaddr [0:3], output logic access_ok, output logic pmp_fault ); // 阶段12组合条目匹配禁止打拍 wire [3:0] hit; genvar i; generate for (i 0; i 4; i i 1) begin : pmp_match wire [1:0] a_mode pmpcfg[i][4:3]; wire [33:0] pmp_addr_34 {pmpaddr[i], 2b00}; // TOR匹配 wire is_tor (a_mode 2b01); wire [33:0] prev_bound (i 0) ? 34h0 : {pmpaddr[i-1], 2b00}; wire tor_hit (req_addr prev_bound) (req_addr pmp_addr_34); // NAPOT匹配 wire is_napot (a_mode 2b11); wire [33:0] napot_mask ~(pmp_addr_34 1) | 34h3; wire napot_hit ((req_addr napot_mask) (pmp_addr_34 napot_mask)); assign hit[i] is_tor ? tor_hit : (is_napot ? napot_hit : 1b0); end endgenerate // 阶段3权限判定 (Rbit0, Wbit1, Xbit2) wire [3:0] perm_ok; generate for (i 0; i 4; i i 1) begin : pmp_perm wire pmp_r pmpcfg[i][0], pmp_w pmpcfg[i][1], pmp_x pmpcfg[i][2]; assign perm_ok[i] hit[i] (req_rw ? pmp_w : pmp_r) (req_exec ? pmp_x : 1b1); end endgenerate // 阶段45组合拦截 assign pmp_fault req_valid ~|perm_ok |hit; assign access_ok ~pmp_fault; endmodule