diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 4a14c5e..9504256 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -35,974 +35,31 @@
  *-------------------------------------------------------------
  */
 
-module user_proj_example #(
-    parameter BITS = 32
-)(
+module user_proj_example (
 `ifdef USE_POWER_PINS
     inout vccd1,	// User area 1 1.8V supply
     inout vssd1,	// User area 1 digital ground
-`endif
-
-    // Wishbone Slave ports (WB MI A)
-    input wb_clk_i,
-    input wb_rst_i,
-    input wbs_stb_i,
-    input wbs_cyc_i,
-    input wbs_we_i,
-    input [3:0] wbs_sel_i,
-    input [31:0] wbs_dat_i,
-    input [31:0] wbs_adr_i,
-    output wbs_ack_o,
-    output [31:0] wbs_dat_o,
-
-    // Logic Analyzer Signals
-    input  [127:0] la_data_in,
-    output [127:0] la_data_out,
-    input  [127:0] la_oenb,
-
-    // IOs
-    input  [`MPRJ_IO_PADS-1:0] io_in,
-    output [`MPRJ_IO_PADS-1:0] io_out,
-    output [`MPRJ_IO_PADS-1:0] io_oeb,
-
-    // IRQ
-    output [2:0] irq
-);
-    wire clk;
-    wire rst;
-
-    wire [`MPRJ_IO_PADS-1:0] io_in;
-    wire [`MPRJ_IO_PADS-1:0] io_out;
-    wire [`MPRJ_IO_PADS-1:0] io_oeb;
-
-    wire [31:0] rdata; 
-    wire [31:0] wdata;
-    wire [BITS-1:0] count;
-
-    wire valid;
-    wire [3:0] wstrb;
-    wire [31:0] la_write;
-
-    // WB MI A
-    assign valid = wbs_cyc_i && wbs_stb_i; 
-    assign wstrb = wbs_sel_i & {4{wbs_we_i}};
-    assign wbs_dat_o = rdata;
-    assign wdata = wbs_dat_i;
-
-    // IO
-    assign io_out = count;
-    assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
-
-    // IRQ
-    assign irq = 3'b000;	// Unused
-
-    // LA
-    assign la_data_out = {{(127-BITS){1'b0}}, count};
-    // Assuming LA probes [63:32] are for controlling the count register  
-    assign la_write = ~la_oenb[63:32] & ~{BITS{valid}};
-    // Assuming LA probes [65:64] are for controlling the count clk & reset  
-    assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i;
-    assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i;
-
-    counter #(
-        .BITS(BITS)
-    ) counter(
-        .clk(clk),
-        .reset(la_data_in[0]),
-        .trace_ready(la_data_in[1]),
-        .mem_addr(la_data_in[33:2]),
-        .L1_hit_count(la_data_out[9:0]),
-        .L2_hit_count4(la_data_out[19:10]),
-        .L2_hit_count8(la_data_out[29:20]),
-        .L2_hit_count16(la_data_out[39:30]),
-        .L2_ss1_count4(la_data_out[49:40]),
-        .L2_ss1_count8(la_data_out[59:50]),
-        .L2_ss1_count16(la_data_out[69:60]),
-        .L2_ss2_count4(la_data_out[79:70]),
-        .L2_ss2_count8(la_data_out[89:80]),
-        .L2_ss2_count16(la_data_out[99:90])
-    );
-
-endmodule
-
-module main(clk,reset,trace_ready,mem_addr,L1_hit_count,L2_hit_count4,L2_hit_count8,L2_hit_count16,L2_ss1_count4,L2_ss1_count8,L2_ss1_count16,L2_ss2_count4,L2_ss2_count8,L2_ss2_count16);
-
-    parameter L1_way = 4;
-    parameter L1_block_size_byte = 16;
-    parameter L1_cache_size_byte = 1*1024;
+`endif	
     
-    parameter L2_way = 16;
-    parameter L2_block_size_byte = 16;
-    parameter L2_set_size = 64;
-    
-    parameter L1_block_offset_index = $rtoi($ln(L1_block_size_byte)/$ln(2));
-    parameter L1_set = L1_cache_size_byte/(L1_block_size_byte*L1_way);
-    parameter L1_set_index = $rtoi($ln(L1_set)/$ln(2));
-    parameter L1_way_width = $rtoi($ln(L1_way)/$ln(2));
-    
-    parameter L2_block_offset_index = $rtoi($ln(L2_block_size_byte)/$ln(2));
-    parameter L2_set_index = $rtoi($ln(L2_set_size)/$ln(2));
-    parameter L2_way_width = $rtoi($ln(L2_way)/$ln(2));
-
-    input clk,trace_ready,reset;
-    input [31:0] mem_addr;
-    
+    input clk,reset,trace_ready;
+    input [31:0] mem_addr; 
     output [19:0] L1_hit_count,L2_hit_count4,L2_hit_count8,L2_hit_count16,L2_ss1_count4,L2_ss1_count8,L2_ss1_count16,L2_ss2_count4,L2_ss2_count8,L2_ss2_count16;
-    wire updated;    
     
-    // variables to divide address in tag, index and offset for L1 cache
-    wire [31-L1_set_index-L1_block_offset_index:0] L1_tag;
-    wire [L1_set_index-1:0] L1_index;
-    wire [L1_block_offset_index-1:0] L1_block_offset;
-    
-    // variables to divide address in tag, index and offset for L2 cache
-    wire [31-L2_set_index-L2_block_offset_index:0] L2_tag;
-    wire [L2_set_index-1:0] L2_index;
-    wire [L2_block_offset_index-1:0] L2_block_offset;
-    
-    //L1 cache 
-    wire L1_done,L1_found_in_cache,L1_updated;
-    
-    //L2 cache
-    wire L2_done,L2_found_in_cache,L2_updated ;    
-    wire [L2_way_width:0] L2_hit_way;
-    
-    //Subset cache1
-    wire ss1_found_in_cache,ss1_updated;
-    wire [L2_way_width:0] ss1_hit_way;
-    
-    //Subset cache2
-    wire ss2_found_in_cache,ss2_updated;
-    wire [L2_way_width:0] ss2_hit_way;
-    wire [L2_set_index-2:0] ss1_index;
-    
-    //prefetcher
-    wire prefetch_hit,prefetch_done;
-    
+    	main cache (
+	    .clk(clk), 
+	    .reset(reset),
+	    .trace_ready(trace_ready),
+	    .mem_addr(mem_addr),
+	    .L1_hit_count(L1_hit_count),
+	    .L2_hit_count4(L2_hit_count4),
+	    .L2_hit_count8(L2_hit_count8),
+	    .L2_hit_count16(L2_hit_count16),
+	    .L2_ss1_count4(L2_ss1_count4),
+	    .L2_ss1_count8(L2_ss1_count8),
+	    .L2_ss1_count16(L2_ss1_count16),
+	    .L2_ss2_count4(L2_ss2_count4),
+	    .L2_ss2_count8(L2_ss2_count8),
+	    .L2_ss2_count16(L2_ss2_count16)
+    	);
 
-    assign L1_block_offset = mem_addr[L1_block_offset_index-1:0];
-    assign L1_index = mem_addr[L1_set_index+L1_block_offset_index-1:L1_block_offset_index];
-    assign L1_tag = mem_addr[31:L1_set_index+L1_block_offset_index];
-    
-    assign L2_block_offset = mem_addr[L2_block_offset_index-1:0];
-    assign L2_index = mem_addr[L2_set_index+L2_block_offset_index-1:L2_block_offset_index];
-    assign L2_tag = mem_addr[31:L2_set_index+L2_block_offset_index]; 
-    
-    assign ss1_index = L2_index[L2_set_index-2:0];
-    assign updated = !prefetch_hit&&ss1_updated ? 1'b1 : L1_updated&&(prefetch_hit||L1_found_in_cache) ? 1'b1 :  1'b0;      
-    
-    L1_cache #(.way(L1_way),.block_size_byte(L1_block_size_byte),.cache_size_byte(L1_cache_size_byte)) i1  (clk,reset,L1_tag,L1_index,L1_block_offset,trace_ready,prefetch_hit,L2_found_in_cache,L1_hit_count,L1_found_in_cache,L1_updated,L1_done,prefetch_done);
-    L2_cache #(.way(L2_way),.block_size_byte(L2_block_size_byte),.set_size(L2_set_size)) i2 (clk,reset,L2_tag,L2_index,L2_block_offset,(prefetch_done && !prefetch_hit),L2_hit_count4,L2_hit_count8,L2_hit_count16,L2_found_in_cache,L2_hit_way,L2_done,L2_updated);
-    L2_cache_subset #(.way(L2_way),.block_size_byte(L2_block_size_byte),.set_size(L2_set_size/2)) i3 (clk,reset,L2_index,L2_updated,L2_found_in_cache,L2_hit_way,ss1_found_in_cache,L2_ss1_count4,L2_ss1_count8,L2_ss1_count16,ss1_hit_way,ss1_updated);
-    L2_cache_subset #(.way(L2_way),.block_size_byte(L2_block_size_byte),.set_size(L2_set_size/4)) i4 (clk,reset,ss1_index,ss1_updated,ss1_found_in_cache,ss1_hit_way,ss2_found_in_cache,L2_ss2_count4,L2_ss2_count8,L2_ss2_count16,ss2_hit_way,ss2_updated);
-    prefetcher #(.way(L1_way),.block_size_byte(L1_block_size_byte),.cache_size_byte(L1_cache_size_byte)) i5(clk,mem_addr,(L1_done && !L1_found_in_cache),prefetch_hit);
-    
-endmodule
-
-module L1_cache(clk,reset,tag,index,block_offset,find_start,prefetch_hit,L2_cache_hit,cache_hit_count,found_in_cache,updated,done_L1,done_prefetch);
-
-    parameter way = 4;
-    parameter block_size_byte = 16;
-    parameter cache_size_byte = 32*1024;
-    
-    parameter block_offset_index = $rtoi($ln(block_size_byte)/$ln(2));
-    parameter set = cache_size_byte/(block_size_byte*way); 
-    parameter set_index = $rtoi($ln(set)/$ln(2));
-    parameter way_width = $rtoi($ln(way)/$ln(2));
-    parameter cache_line_width = 32-set_index-block_offset_index+1;
-    
-    input clk,find_start,L2_cache_hit,prefetch_hit,reset;
-    input [31-set_index-block_offset_index:0] tag;
-    input [set_index-1:0] index;
-    input [block_offset_index-1:0] block_offset;
-    output reg found_in_cache;
-    output reg [19:0] cache_hit_count;
-    output reg updated,done_L1,done_prefetch;
-    
-    reg [1:0]find_state;
-    reg [1:0]flag;
-    reg bi_flag;
-    reg [way_width:0] way_index;
-    reg [way_width-1:0] hit_way;
-    reg [cache_line_width-1:0] cache [0:set-1][0:way-1];
-    reg [cache_line_width-1:0] temp_content;
-    reg [cache_line_width-1:0] temp_content1 [0:way-1];
-    
-    integer i,j;
-    
-    initial
-    begin
-        found_in_cache = 0;
-        cache_hit_count = 0;        
-        find_state = 0;
-        flag = 0;
-        bi_flag = 0;
-        updated = 0;
-        done_prefetch = 0;
-        for (i=0;i<set;i=i+1)
-            for (j=0;j<way;j=j+1)
-                cache[i][j] = 0;
-    end
-    
-    always @ (posedge clk)
-    begin
-        if (reset)
-        begin
-            found_in_cache = 0;
-            cache_hit_count = 0;
-            //cache_miss_count = 0;
-            find_state = 0;
-            flag = 0;
-            bi_flag = 0;
-            updated = 0;
-            done_prefetch = 0;
-            for (i=0;i<set;i=i+1)
-                for (j=0;j<way;j=j+1)
-                    cache[i][j] = 0;     
-        end
-        else
-        begin
-            case (find_state)
-                2'b00: begin          
-                        found_in_cache = 1'b0;
-                        if(find_start)
-                        begin                        
-                            find_state = 2'b01;                        
-                            done_L1 = 1'b0;
-                        end        
-                      end
-                      
-                2'b01: begin
-                  
-                        if (done_L1 && !found_in_cache)
-                        begin
-                            find_state = 2'b10;
-                            done_L1 = 1'b0;
-                        end    
-                        else if (done_L1 && found_in_cache)
-                        begin
-                            find_state = 2'b11;
-                            done_L1 = 1'b0;
-                        end    
-                        else
-                        begin
-                            for (way_index=0;way_index<way;way_index=way_index+1'b1)
-                            begin
-                                if(cache[index][way_index][cache_line_width-1]) // valid bit
-                                begin
-                                    if(cache[index][way_index][cache_line_width-2:0]==tag) // tag comparison
-                                    begin
-                                        found_in_cache = 1'b1;                                    
-                                        hit_way = way_index;                                    
-                                        temp_content = cache[index][way_index];
-                                        cache_hit_count = cache_hit_count + 1'b1;
-                                        done_L1 = 1'b1;                                    
-                                    end
-                               end                                                                                                                                                                                                                                                                                                                                                                                                                                
-                            end                                               
-                            if (way_index==way&&!found_in_cache)
-                            begin
-                                    //cache_miss_count = cache_miss_count + 1'b1; 
-                                    found_in_cache = 1'b0;                                
-                                    done_L1 = 1'b1;
-                            end                                                  
-                        end 
-                       end
-    
-                2'b10: begin
-                        if(done_prefetch)
-                        begin
-                            find_state= 2'b11;
-                            done_prefetch = 1'b0;
-                            flag = 1'b0;
-                        end   
-                        else
-                        begin
-                            if(!flag)
-                                flag = 1'b1;
-                            else
-                            begin
-                                if(prefetch_hit&flag)                        
-                                begin
-                                    flag = 1'b0;
-                                    cache_hit_count = cache_hit_count + 1'b1;                                     
-                                end
-                                //else                                                                
-                                    //cache_miss_count = cache_miss_count + 1'b1;                              
-                                done_prefetch = 1'b1;
-                            end            
-                        end
-                       end                                                        
-                       
-                2'b11: begin                
-                        if(updated)
-                        begin
-                            find_state = 2'b00;
-                            updated = 1'b0;
-                        end
-                        
-                        else
-                        begin
-                            if(found_in_cache) // hit
-                            begin  
-                                if(hit_way != 0)
-                                    begin
-                                        cache[index][hit_way] = cache[index][hit_way-1];
-                                        hit_way = hit_way - 1;
-                                    end
-                                    else
-                                    begin            
-                                        cache[index][0] = temp_content;
-                                        updated = 1'b1;
-                                    end                                    
-                            end 
-                            
-                            else // miss
-                            begin
-                                for(way_index=way-2;way_index>0;way_index=way_index-1)                            
-                                    cache[index][way_index+1] = cache[index][way_index];                                    
-        
-                                cache[index][1] = cache[index][0];
-                                cache[index][0] = {1'b1,tag};  
-                                updated = 1'b1;                                                  
-                            end                                                                                                                                                                                                              
-                        end 
-                                                  
-                       end                     
-            endcase
-         end       
-    end   
-    
-endmodule
-
-module L2_cache(clk,reset,tag,index,block_offset,find_start,cache_hit_count4,cache_hit_count8,cache_hit_count16,found_in_cache,hit_way,done,updated);
-
-    parameter way = 16;
-    parameter block_size_byte = 16;
-    parameter set_size = 64;
-    
-    parameter block_offset_index = $rtoi($ln(block_size_byte)/$ln(2)); 
-    parameter set_index = $rtoi($ln(set_size)/$ln(2));
-    parameter way_width = $rtoi($ln(way)/$ln(2));
-    parameter cache_line_width = 32-set_index-block_offset_index+1; 
-    
-    input clk,find_start,reset;
-    input [31-set_index-block_offset_index:0] tag;
-    input [set_index-1:0] index;
-    input [block_offset_index-1:0] block_offset;
-    output reg found_in_cache;
-    // this needs to get parameterized based on number of max associativity        
-    output reg [19:0] cache_hit_count4;
-    output reg [19:0] cache_hit_count8;
-    output reg [19:0] cache_hit_count16;
-    output reg [way_width:0] hit_way;   
-    output reg updated,done;        
-    
-    reg [1:0]find_state;
-    reg [way_width:0] way_index;    
-    reg [cache_line_width-1:0] cache [0:set_size-1][0:way-1];
-    reg [cache_line_width-1:0] temp_content;
-    //reg [19:0] hit_count [way-1:0];
-    
-    integer i,j;
-    
-    initial
-    begin
-        found_in_cache = 0;        
-        cache_hit_count4 = 0;        
-        cache_hit_count8 = 0;
-        cache_hit_count16 = 0;                
-        find_state = 0;
-        updated = 0;        
-        for (i=0;i<set_size;i=i+1)
-            for (j=0;j<way;j=j+1)
-                cache[i][j] = 0;
-    end
-    
-    always @ (posedge clk)
-    begin
-        if (reset)
-        begin
-            found_in_cache = 0;        
-            cache_hit_count4 = 0;        
-            cache_hit_count8 = 0;
-            cache_hit_count16 = 0;                   
-            find_state = 0;
-            updated = 0;            
-            for (i=0;i<set_size;i=i+1)
-                for (j=0;j<way;j=j+1)
-                    cache[i][j] = 0;    
-        end
-        else
-        begin
-            case (find_state)
-                2'b00: begin          
-                        found_in_cache = 1'b0;                             
-                        if(find_start)
-                        begin
-                            find_state = 2'b01;                        
-                            done = 1'b0;
-                        end        
-                      end
-                      // Find cache state (to check if particular memory address data is present in cache or not)
-                      
-                2'b01: begin
-                  
-                        if (done)
-                        begin
-                            find_state = 2'b10;                                                   
-                        end        
-                        else
-                        begin
-                            for (way_index=0;way_index<way;way_index=way_index+1'b1)
-                            begin
-                                if(cache[index][way_index][cache_line_width-1]) // valid bit
-                                begin
-                                    if(cache[index][way_index][cache_line_width-2:0]==tag) // tag comparison
-                                    begin
-                                        found_in_cache = 1'b1;                                    
-                                        hit_way = way_index;                                    
-                                        temp_content = cache[index][way_index];                                    
-                                    end
-                               end                                                                                          
-                            end                        
-                            if (found_in_cache)
-                            begin
-                                if (hit_way>=0 && hit_way<4)
-                                begin
-                                    cache_hit_count4 = cache_hit_count4 + 1;
-                                    cache_hit_count8 = cache_hit_count8 + 1;
-                                    cache_hit_count16 = cache_hit_count16 + 1;
-                                end
-                                else if (hit_way>=4 && hit_way<8)
-                                begin
-                                    cache_hit_count8 = cache_hit_count8 + 1;
-                                    cache_hit_count16 = cache_hit_count16 + 1;
-                                end
-                                else if (hit_way>=8 && hit_way<16)
-                                begin                                    
-                                    cache_hit_count16 = cache_hit_count16 + 1;
-                                end
-                                done = 1'b1;
-                                way_index = hit_way;                                                                                      
-                            end  
-                            else                                                                
-                            begin
-                                hit_way = way;
-                                done = 1'b1;
-                            end                                                  
-                        end 
-                       end
-                      
-                       // Updation of cache according LRU shift register policy
-                2'b10: begin                
-                        if(updated)
-                        begin
-                            find_state = 2'b00;
-                            updated = 1'b0;
-                        end
-                        else
-                        begin                            
-                            if(found_in_cache) // hit
-                            begin 
-                                   if(way_index != 0)
-                                    begin
-                                        cache[index][way_index] = cache[index][way_index-1];
-                                        way_index = way_index - 1;
-                                    end
-                                    else
-                                    begin            
-                                        cache[index][0] = temp_content;
-                                        updated = 1'b1;
-                                    end                                                                       
-                            end    
-                            else // miss
-                            begin                                                                                          
-                                for(way_index=way-2;way_index>0;way_index=way_index-1)                            
-                                  cache[index][way_index+1] = cache[index][way_index];                                    
-    
-                                cache[index][1] = cache[index][0];
-                                cache[index][0] = {1'b1,tag};
-                                updated = 1'b1;             
-                            end                                                                                    
-                        end                           
-                       end 
-                        
-            endcase
-         end       
-    end  
-endmodule
-
-module L2_cache_subset(clk,reset,msb_index,find_start,L2_found_in_cache,hit_way,found_in_cache,cache_hit_count4,cache_hit_count8,cache_hit_count16,hit_source,updated);
-
-    parameter way = 16;
-    parameter block_size_byte = 16;
-    parameter set_size = 512;   
-    parameter set_index = $rtoi($ln(set_size)/$ln(2));
-    parameter way_width = $rtoi($ln(way)/$ln(2));
-    
-    
-    input clk,find_start,reset,L2_found_in_cache;
-    input [way_width:0] hit_way;
-    input [set_index:0] msb_index;
-    output reg found_in_cache;
-    // this needs to get parameterized based on number of max associativity
-    output reg [19:0] cache_hit_count4;
-    output reg [19:0] cache_hit_count8;
-    output reg [19:0] cache_hit_count16;
-    output reg updated;
-    output reg [way_width:0] hit_source;
-    
-    reg msb_indexbit,msb_update,mask_update;
-    reg [set_index-1:0] index;        
-    reg [way_width:0] way_index; 
-      
-    reg mask0 [0:set_size-1][0:way-1];
-    reg mask1 [0:set_size-1][0:way-1];
-    reg [1:0] source [0:set_size-1][0:way-1];
-    reg [1:0] temp_data;
-    reg temp_source;
-    reg [way_width:0] count;
-    //reg [19:0] hit_count [way-1:0];
-    
-    reg [1:0]find_state;
-    reg done;    
-    
-    integer i,j;
-    
-    
-    initial
-    begin
-        found_in_cache = 0;
-        cache_hit_count4 = 0;        
-        cache_hit_count8 = 0;
-        cache_hit_count16 = 0;
-        //cache_miss_count = 0;        
-        find_state = 0;
-        temp_data = 0;   
-        msb_update = 0;  
-        mask_update = 0;   
-        for (i=0;i<set_size;i=i+1)
-        begin
-            for (j=0;j<way;j=j+1)
-            begin
-                source[i][j] = 0;
-                mask0[i][j] = 0;
-                mask1[i][j] = 0;
-            end
-        end
-    end
-    
-    always @ (posedge clk)
-    begin
-        if (reset)
-        begin
-            found_in_cache = 0;
-            cache_hit_count4 = 0;        
-            cache_hit_count8 = 0;
-            cache_hit_count16 = 0;                    
-            find_state = 0;
-            temp_data = 0;            
-            for (i=0;i<set_size;i=i+1)
-            begin
-                for (j=0;j<way;j=j+1)
-                begin
-                    source[i][j] = 0;
-                    mask0[i][j] = 0;
-                    mask1[i][j] = 0;
-                end
-            end
-        end
-        else
-        begin
-            case (find_state)
-                2'b00: begin          
-                                                     
-                        if(find_start)
-                        begin
-                            found_in_cache = 1'b0;
-                            find_state = 2'b01;                        
-                            done = 1'b0;                        
-                        end                            
-                       end
-                       
-                2'b01: begin
-                       
-                       if (done)
-                       begin
-                           find_state = 2'b10;
-                           count = 0;
-                       end     
-                       else
-                       begin
-                          // to check if there is hit in cache 
-                          msb_indexbit = msb_index[set_index];
-                          index[set_index-1:0] = msb_index[set_index-1:0];                          
-                          if (L2_found_in_cache)
-                          begin
-                              if (msb_indexbit)
-                              begin                          
-                                 if(mask1[index][hit_way])
-                                 begin                            
-                                    temp_source = 1'b1;                         
-                                    found_in_cache = 1'b1;
-                                 end                               
-                              end
-                              else if (!msb_indexbit)
-                              begin                                                    
-                                 if(mask0[index][hit_way]) // mask0[0][16]
-                                 begin                           
-                                    temp_source = 1'b0;
-                                    found_in_cache = 1'b1;
-                                 end   
-                              end
-                              if (found_in_cache)                      
-                              begin                         
-                                 way_index = 0;
-                                 if(temp_source)
-                                 begin
-                                    for(way_index=0;way_index<way;way_index=way_index+1)
-                                    begin
-                                        if(source[index][way_index]==2'b11&&count<hit_way+1)
-                                            count = count + 1;
-                                        if(count==hit_way+1)
-                                        begin                                    
-                                            temp_data =  source[index][way_index]; 
-                                            hit_source = way_index;
-                                            count = count + 1;
-                                        end                                    
-                                    end               
-                                 end
-                                 else if (!temp_source)
-                                 begin
-                                    for(way_index=0;way_index<way;way_index=way_index+1)
-                                    begin
-                                        if(source[index][way_index]==2'b10&&count<hit_way+1)
-                                            count = count + 1;
-                                        if(count==hit_way+1)
-                                        begin                                    
-                                            temp_data =  source[index][way_index]; 
-                                            hit_source = way_index;
-                                            count = count + 1;
-                                        end                                    
-                                    end                                                   
-                                 end                                                         
-                                 
-                                    if (hit_source>=0 && hit_source<4)
-                                    begin
-                                        cache_hit_count4 = cache_hit_count4 + 1;
-                                        cache_hit_count8 = cache_hit_count8 + 1;
-                                        cache_hit_count16 = cache_hit_count16 + 1;
-                                    end
-                                    else if (hit_source>=4 && hit_source<8)
-                                    begin
-                                        cache_hit_count8 = cache_hit_count8 + 1;
-                                        cache_hit_count16 = cache_hit_count16 + 1;
-                                    end
-                                    else if (hit_source>=8 && hit_source<16)
-                                    begin                                    
-                                        cache_hit_count16 = cache_hit_count16 + 1;
-                                    end
-                                 way_index = hit_source;
-                                 done = 1'b1;                              
-                            end
-                            else
-                            begin                                                          
-                             hit_source = way;
-                             done = 1'b1;      
-                            end
-
-                          end
-                          
-                          else
-                          begin                            
-                             hit_source = way;
-                             done = 1'b1;      
-                          end
-                       end     
-                       end
-               2'b10: begin
-                      
-                      if(updated)
-                      begin
-                        find_state = 2'b00;
-                        updated = 1'b0;
-                        count = 0;
-                      end
-                      else
-                      begin
-                        if(found_in_cache)
-                        begin
-                            
-                           if(msb_indexbit && !msb_update && !mask_update)
-                           begin
-                              if(way_index != 0)
-                              begin
-                                mask1[index][way_index] = mask1[index][way_index-1];
-                                way_index = way_index - 1;
-                              end
-                              else
-                              begin            
-                                mask1[index][0] = 1'b1;
-                                msb_update = 1'b1;
-                              end                                                                                                                               
-                                                               
-                           end
-                           else if (!msb_indexbit && !msb_update && !mask_update)
-                           begin
-                              if(way_index != 0)
-                              begin
-                                mask0[index][way_index] = mask0[index][way_index-1];
-                                way_index = way_index - 1;
-                              end
-                              else
-                              begin            
-                                mask0[index][0] = 1'b1;
-                                msb_update = 1'b1;                                
-                              end                                                                                                                               
-                                                               
-                           end
-                           if (msb_update && !mask_update)
-                           begin
-                            for(way_index=0;way_index<way;way_index=way_index+1)
-                            begin
-                                if(mask0[index][way_index])
-                                    count = count + 1;
-                                if(mask1[index][way_index])
-                                    count = count + 1;    
-                            end                                                       
-                            
-                            // if count>way then we have to change one of mask from 1 to 0 based on LRU
-                            if(count>way)
-                            begin
-                                if(source[index][way-1] == 2'b11)
-                                begin
-                                    way_index = way-1;
-                                    while(way_index>0 && !mask1[index][way_index])
-                                        way_index = way_index - 1;
-                                    mask1[index][way_index] = 1'b0;                                   
-                                end
-                                else if (source[index][way-1] == 2'b10)
-                                begin
-                                    way_index = way-1;
-                                    while(way_index>0 && !mask0[index][way_index])
-                                        way_index = way_index - 1;
-                                    mask0[index][way_index] = 1'b0;                                
-                                end    
-                            end
-                            mask_update = 1'b1;
-                            way_index = hit_source;
-                            msb_update = 1'b0;
-                           end
-                           if(mask_update)
-                           begin
-                               if(way_index != 0)
-                               begin
-                                    source[index][way_index] = source[index][way_index-1];
-                                    way_index = way_index - 1;
-                               end
-                               else
-                               begin
-                                    mask_update = 1'b0;                                           
-                                    source[index][0] = temp_data;
-                                    updated = 1'b1;
-                               end                                                                                                                               
-                           end                                                      
-                        end                   
-                        else // cache miss
-                        begin
-                                                                       
-                            // update mask register
-                            if(msb_indexbit)
-                            begin
-                                for(way_index=way-2;way_index>0;way_index=way_index-1)                                         
-                                    mask1[index][way_index+1] = mask1[index][way_index];
-                                mask1[index][1] = mask1[index][0];
-                                mask1[index][0] = 1'b1;                                  
-                            end
-                            else
-                            begin
-                                for(way_index=way-2;way_index>0;way_index=way_index-1)                                         
-                                    mask0[index][way_index+1] = mask0[index][way_index];
-                                mask0[index][1] = mask0[index][0];
-                                mask0[index][0] = 1'b1;           
-                            end
-                            
-                            // after updating  the mask registers check count of 1's in both mask 0 and 1                        
-                            for(way_index=0;way_index<way;way_index=way_index+1)
-                            begin
-                                if(mask0[index][way_index])
-                                    count = count + 1;
-                                if(mask1[index][way_index])
-                                    count = count + 1;    
-                            end                                                       
-                            
-                            // if count>way then we have to change one of mask from 1 to 0 based on LRU
-                            if(count>way)
-                            begin
-                                if(source[index][way-1] == 2'b11)
-                                begin
-                                    way_index = way-1;
-                                    while(way_index>0 && !mask1[index][way_index])
-                                        way_index = way_index - 1;
-                                    mask1[index][way_index] = 1'b0;                                   
-                                end
-                                else if (source[index][way-1] == 2'b10)
-                                begin
-                                    way_index = way-1;
-                                    while(way_index>0 && !mask0[index][way_index])
-                                        way_index = way_index - 1;
-                                    mask0[index][way_index] = 1'b0;                                
-                                end    
-                            end
-                            
-                             // update source register
-                            for(way_index=way-2;way_index>0;way_index=way_index-1)                                         
-                                source[index][way_index+1] = source[index][way_index];                                                                                               
-                            source[index][1] = source[index][0];
-                            source[index][0] = {1'b1,msb_indexbit};                               
-                            updated = 1'b1;
-                                    
-                        end
-                      end
-               
-                      end
-                                  
-            endcase
-         end                 
-    end    
-endmodule
-
-
-module prefetcher (clk,address,cache_miss,prefetch_hit);
-
-    parameter way = 4;
-    parameter block_size_byte = 16;
-    parameter cache_size_byte = 1024;
-    
-    parameter block_offset_index = $rtoi($ln(block_size_byte)/$ln(2));  //2
-    parameter set = cache_size_byte/(block_size_byte*way); 
-    parameter set_index = $rtoi($ln(set)/$ln(2));
-     
-    parameter prefetch_width = 32-block_offset_index  + 1; // without data (tag+index+valid) 
-    
-    input clk,cache_miss;
-    input [31:0]address;
-    output reg prefetch_hit;
-    
-    
-    wire [31-set_index-block_offset_index:0] tag;      // 23 bits..22:0
-    wire [set_index-1:0] index;                        //7 bits...6:0
-    wire [block_offset_index-1:0] block_offset;         //2 bits...1:0
-    
-     
-    wire [set_index-1:0]temp_index;
-    wire [5:0]prefetch_fill_index;
-    wire valid_buffer_check, valid_fill_check;
-    
-    reg [prefetch_width-1:0]prefetch_buffer[0:7];
-    wire [2:0] hit_index;
-    reg [2:0] way_index;    
-    reg [1:0] find_state;
-    reg done,updated;
-    reg [prefetch_width-1:0] temp_data;
-    integer k;
-     
-     assign block_offset = address[block_offset_index-1:0];
-     assign index = address[set_index+block_offset_index-1:block_offset_index];
-     assign tag =address[31:set_index+block_offset_index];
-     assign temp_index = index + 1;
-         
-     assign valid_buffer_check = (prefetch_buffer[0][prefetch_width-1] && (prefetch_buffer[0][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[1][prefetch_width-1] && (prefetch_buffer[1][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[2][prefetch_width-1] && (prefetch_buffer[2][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[3][prefetch_width-1] && (prefetch_buffer[3][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[4][prefetch_width-1] && (prefetch_buffer[4][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[5][prefetch_width-1] && (prefetch_buffer[5][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[6][prefetch_width-1] && (prefetch_buffer[6][prefetch_width-2:0]==address[31:block_offset_index])) || (prefetch_buffer[7][prefetch_width-1] && (prefetch_buffer[7][prefetch_width-2:0]==address[31:block_offset_index])); 
-     
-     assign hit_index = (prefetch_buffer[0][prefetch_width-1] && (prefetch_buffer[0][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b000 :     
-                        (prefetch_buffer[1][prefetch_width-1] && (prefetch_buffer[1][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b001 :
-                        (prefetch_buffer[2][prefetch_width-1] && (prefetch_buffer[2][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b010 :
-                        (prefetch_buffer[3][prefetch_width-1] && (prefetch_buffer[3][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b011 : 
-                        (prefetch_buffer[4][prefetch_width-1] && (prefetch_buffer[4][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b100 :
-                        (prefetch_buffer[5][prefetch_width-1] && (prefetch_buffer[5][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b101 :
-                        (prefetch_buffer[6][prefetch_width-1] && (prefetch_buffer[6][prefetch_width-2:0]==address[31:block_offset_index])) ? 3'b110 : 3'b111;
-                        
-     
-     assign valid_fill_check = (prefetch_buffer[0][prefetch_width-1] && (prefetch_buffer[0][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[1][prefetch_width-1] && (prefetch_buffer[1][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[2][prefetch_width-1] && (prefetch_buffer[2][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[3][prefetch_width-1] && (prefetch_buffer[3][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[4][prefetch_width-1] && (prefetch_buffer[4][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[5][prefetch_width-1] && (prefetch_buffer[5][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[6][prefetch_width-1] && (prefetch_buffer[6][prefetch_width-2:0]=={tag,temp_index})) || (prefetch_buffer[7][prefetch_width-1] && (prefetch_buffer[7][prefetch_width-2:0]=={tag,temp_index}));
-     initial
-     begin
-        for (k=0;k<8;k=k+1)
-            prefetch_buffer[k] = 0;
-        done = 0;
-        updated = 0;
-        prefetch_hit = 0;
-        find_state = 0;        
-    end
-    
-    always @ (posedge clk)
-    begin
-        case(find_state)
-            2'b00: begin
-                    done = 1'b0;
-	                prefetch_hit = 1'b0;
-                    if(cache_miss)
-                    begin
-                        find_state = 2'b01;
-                    end    
-                  end
-                  
-            2'b01: begin
-                    if(done)
-                        find_state = 2'b10;
-                    else
-                    begin                                           
-                        if(valid_buffer_check)
-                        begin
-                            prefetch_hit = 1'b1;
-                            done = 1'b1;
-                        end
-                        else 
-                        begin
-                            done =1'b1;
-                            prefetch_hit=1'b0;
-                        end
-                     end                                                        
-                   end
-            
-            2'b10: begin
-                    if(updated)
-                    begin
-                        find_state = 2'b00;
-                        updated = 1'b0;
-                    end
-                    else
-                    begin
-                        if(!prefetch_hit)
-                        begin
-                            if(valid_fill_check)
-                                updated = 1'b1;
-                            else
-                            begin    
-                                prefetch_buffer[7] = prefetch_buffer[6];
-                                prefetch_buffer[6] = prefetch_buffer[5];
-                                prefetch_buffer[5] = prefetch_buffer[4];
-                                prefetch_buffer[4] = prefetch_buffer[3];
-                                prefetch_buffer[3] = prefetch_buffer[2];
-                                prefetch_buffer[2] = prefetch_buffer[1];
-                                prefetch_buffer[1] = prefetch_buffer[0];
-                                prefetch_buffer[0] = {1'b1,tag,temp_index};
-                                updated = 1'b1;
-                             end                                                                     
-                        end
-                        
-                        if(prefetch_hit)
-                        begin
-                            temp_data = prefetch_buffer[hit_index];
-                            for (way_index=0;way_index<hit_index;way_index=way_index+1)
-                                prefetch_buffer[hit_index-way_index]= prefetch_buffer[hit_index-way_index-1];
-                            prefetch_buffer[0] = temp_data;
-                                                        
-                            updated = 1'b1;             
-                        end
-                                                
-                    end
-                   end       
-        endcase
-    end
 endmodule
