Maintain AMO IRQ holdoff when transitioning from data phase to error phase, to prevent error possibly being flushed
This commit is contained in:
		
							parent
							
								
									29c5c8ca7f
								
							
						
					
					
						commit
						50d3d5d3b3
					
				|  | @ -606,8 +606,13 @@ always @ (posedge clk or negedge rst_n) begin | ||||||
| 		// taken once this load/store moves to the next stage: if another load/store | 		// taken once this load/store moves to the next stage: if another load/store | ||||||
| 		// is chasing down the pipeline then this is immediately suppressed by the | 		// is chasing down the pipeline then this is immediately suppressed by the | ||||||
| 		// IRQ entry, before its address phase can begin. | 		// IRQ entry, before its address phase can begin. | ||||||
|  | 
 | ||||||
|  | 		// Also hold off on AMOs, unless the AMO is transitioning to an address | ||||||
|  | 		// phase or completing. (This excludes transitions to error phase.) | ||||||
|  | 
 | ||||||
| 		xm_delay_irq_entry <= bus_aph_req_d && !bus_aph_ready_d || | 		xm_delay_irq_entry <= bus_aph_req_d && !bus_aph_ready_d || | ||||||
| 			d_memop_is_amo && !((x_amo_phase == 3'h1 || x_amo_phase == 3'h3) && bus_dph_ready_d); | 			d_memop_is_amo && !((x_amo_phase == 3'h1 || x_amo_phase == 3'h3) && bus_dph_ready_d && !bus_dph_err_d); | ||||||
|  | 
 | ||||||
| 		if (!x_stall) | 		if (!x_stall) | ||||||
| 			prev_instr_was_32_bit <= df_cir_use == 2'd2; | 			prev_instr_was_32_bit <= df_cir_use == 2'd2; | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue