HierarchyFilesModulesSignalsTasksFunctionsHelp
Prev12
// squash_inst and stall out of sync. 
// no need for data valid signal. stall is asserted only for loads
// or an iu inst coming to dcu while dcu is processing a miss.
// dcu-smu-iu hold : for this to happen, iu issues a ld/st to dcu and in the same cycle,
// there is a smu-hold. to avoid this deadlock, dcu services the ld/st from iu and changes
// priority to smu. but, data of the ld is lost by iu bcos it doesnt use data_vlds.
// so, for loads, we redo the instruction by asserting stall for an extra cycle..

// ****************************************************************************************************

wire stall_pipe0,stall_pipe1,special_c ;
assign	cache_miss	= !(dcu_hit0|dcu_hit1);
assign	iu_stall	=  cache_miss&qualify_miss | stall_pipe; //bubble betn store followed by load
assign	qualify_miss	=  iu_ld_c | iu_anyinst_e&dc_inst_c;
assign	stall_pipe0	=  iu_ld_c&iu_nc_c|
			   iu_miss_ld & iu_miss_sustain |       // load waiting for data
                           iu_miss_stall_ld             |       // load waiting for data
			   squash_iu_inst ;

assign stall_pipe1      =  iu_anyinst_e& special_c |
			   special_raw_e&(req_outstanding | dc_inst_c) ;

assign special_c = 	non_cacheable_c | repl_busy |fill_cyc_active|
                           stall_valid | zeroline_c_raw |  smu_na_st_miss_cyc |
                           zeroline_busy | iu_flush_cmp_c | iu_flush_index_c |iu_flush_inv_c ;

assign stall_pipe = iu_ld_e & store_c | stall_pipe0 | stall_pipe1 ;

			 
assign	iu_data_vld	= dcu_hit_c & iu_ld_c& !iu_nc_c &iu_valid_c | iu_miss_ld&first_fill_cyc_d1| diag_ld_c ;
assign	smu_data_vld	= dcu_hit_c & smu_ld_c&!smu_nc_c   | smu_miss_ld&first_fill_cyc_d1 ;
 
assign smu_stall        =cache_miss&dc_inst_c    |       // SMU inst misses in C stage
			non_cacheable_c		|	// noncacheable instruction in C stage
                        smu_miss_sustain         |      // miss cycle in progress
                        smu_ld & any_store_c         |      // bubble betwn store followed by load
                        stall_valid     |		// there is a miss pending
                        smu_ld_st & (repl_busy | smu_na_st_miss_cyc)  |	// replacing dirty line or na store
			fill_cyc_active |			// cache fill occurring
                        zeroline_c   |				// zeroline inst execution
			zeroline_busy |
                        iu_anyinst_e_smu  | 
			smu_prty&~squash_iu_inst |	// Hold smu for one cycle during smu_hold- timing reason
                        iu_flush_inv_c | iu_flush_cmp_c | iu_flush_index_c       ;
 

// Performance Monitors:

assign	dcu_perf_mon[0]	=	dc_inst_c&~iu_recirculating_c&~smu_recirculating_c;	// D$ accesses
assign	dcu_perf_mon[1]	=	smu_st_c&~smu_recirculating_c;	// SMU D$ stores
assign	dcu_perf_mon[2]	=	smu_ld_c&~smu_recirculating_c;	// SMU D$ loads

ff_sr_3		dcu_perf_reg(.out(dcu_perf_sgnl[2:0]),
				.din(dcu_perf_mon[2:0]),
				.clk(clk),
				.reset_l(reset_l));
endmodule


12
HierarchyFilesModulesSignalsTasksFunctionsHelp

This page: Created:Wed Mar 24 09:44:14 1999
From: /import/jet-pj2-sim/rahim/picoJava-II/design/dcu/rtl/dc_dec.v

Verilog converted to html by v2html 5.0 (written by Costas Calamvokis).Help