diff --git a/src/CP0/CP0.sv b/src/CP0/CP0.sv index dfcbb79..1f8d585 100644 --- a/src/CP0/CP0.sv +++ b/src/CP0/CP0.sv @@ -41,6 +41,7 @@ module CP0 ( // int comb logic assign interrupt = (rf_cp0.Status.EXL == 1'b0) + & ~rf_cp0.Status.IE & |{rf_cp0.Cause.IP & rf_cp0.Status.IM, rf_cp0.Cause.TI & rf_cp0.Status.IM[7]}; diff --git a/src/Core/Gadgets.sv b/src/Core/Gadgets.sv index 6fb1d6c..88fee42 100644 --- a/src/Core/Gadgets.sv +++ b/src/Core/Gadgets.sv @@ -80,13 +80,13 @@ module instr_valid ( 32'b101000??????????????????????????: valid = 1'b1; // SB 32'b101001??????????????????????????: valid = 1'b1; // SH 32'b101011??????????????????????????: valid = 1'b1; // SW - 32'b101111?????00000????????????????: valid = 1'b1; // I-Cache Index Invalid - 32'b101111?????01000????????????????: valid = 1'b1; // I-Cache Index Store Tag - 32'b101111?????10000????????????????: valid = 1'b1; // I-Cache Hit Invalid - 32'b101111?????00001????????????????: valid = 1'b1; // D-Cache Index Writeback Invalid - 32'b101111?????01001????????????????: valid = 1'b1; // D-Cache Index Store Tag - 32'b101111?????10001????????????????: valid = 1'b1; // D-Cache Hit Invalid - 32'b101111?????10101????????????????: valid = 1'b1; // D-Cache Hit Writeback Invalid + // 32'b101111?????00000????????????????: valid = 1'b1; // I-Cache Index Invalid + // 32'b101111?????01000????????????????: valid = 1'b1; // I-Cache Index Store Tag + // 32'b101111?????10000????????????????: valid = 1'b1; // I-Cache Hit Invalid + // 32'b101111?????00001????????????????: valid = 1'b1; // D-Cache Index Writeback Invalid + // 32'b101111?????01001????????????????: valid = 1'b1; // D-Cache Index Store Tag + // 32'b101111?????10001????????????????: valid = 1'b1; // D-Cache Hit Invalid + // 32'b101111?????10101????????????????: valid = 1'b1; // D-Cache Hit Writeback Invalid default: valid = 1'b0; endcase endmodule