forked from Github_Repos/cvw
		
	More progress on icache controller
This commit is contained in:
		
							parent
							
								
									ad0d77e9e1
								
							
						
					
					
						commit
						ba95557c44
					
				@ -150,14 +150,15 @@ module icachecontroller #(parameter LINESIZE = 256) (
 | 
			
		||||
    // Handle cache faults
 | 
			
		||||
 | 
			
		||||
    localparam integer WORDSPERLINE = LINESIZE/`XLEN;
 | 
			
		||||
    localparam integer LOGWPL = $clog2(WORDSPERLINE);
 | 
			
		||||
    localparam integer OFFSETWIDTH = $clog2(LINESIZE/8);
 | 
			
		||||
 | 
			
		||||
    logic FetchState;
 | 
			
		||||
    logic [$clog2(WORDSPERLINE)-1:0] FetchWordNum;
 | 
			
		||||
    logic FetchState, EndFetchState, BeginFetchState;
 | 
			
		||||
    logic [LOGWPL:0] FetchWordNum, NextFetchWordNum;
 | 
			
		||||
    logic [`XLEN-1:0] LineAlignedPCPF;
 | 
			
		||||
 | 
			
		||||
    flopr #(1) FetchStateFlop(clk, reset, 1'b0, FetchState);
 | 
			
		||||
    flopr #($clog2(WORDSPERLINE)) FetchWordNumFlop(clk, reset, {$clog2(WORDSPERLINE){1'b0}}, FetchWordNum);
 | 
			
		||||
    flopr #(1) FetchStateFlop(clk, reset, BeginFetchState | (FetchState & ~EndFetchState), FetchState);
 | 
			
		||||
    flopr #(LOGWPL+1) FetchWordNumFlop(clk, reset, NextFetchWordNum, FetchWordNum);
 | 
			
		||||
 | 
			
		||||
    genvar i;
 | 
			
		||||
    generate
 | 
			
		||||
@ -166,10 +167,23 @@ module icachecontroller #(parameter LINESIZE = 256) (
 | 
			
		||||
        end
 | 
			
		||||
    endgenerate
 | 
			
		||||
 | 
			
		||||
    // Machinery to request the correct addresses from main memory
 | 
			
		||||
    always_comb begin
 | 
			
		||||
        assign InstrReadF = FetchState;
 | 
			
		||||
        assign LineAlignedPCPF = {UpperPCPF, LowerPCF[11:OFFSETWIDTH], {OFFSETWIDTH{1'b0}}};
 | 
			
		||||
        assign InstrPAdrF = LineAlignedPCPF + i*`XLEN;
 | 
			
		||||
        assign InstrPAdrF = LineAlignedPCPF + FetchWordNum*`XLEN;
 | 
			
		||||
        assign NextFetchWordNum = FetchState ? FetchWordNum+1 : {LOGWPL+1{1'b0}}; 
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    // Write to cache memory when we have the line here
 | 
			
		||||
    always_comb begin
 | 
			
		||||
        assign BeginFetchState = 1'b0;
 | 
			
		||||
        assign EndFetchState = FetchWordNum == {1'b1, {LOGWPL{1'b0}}};
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    // Stall the pipeline while loading a new line from memory
 | 
			
		||||
    always_comb begin
 | 
			
		||||
        assign ICacheStallF = FetchState | ~ICacheMemReadValid;
 | 
			
		||||
    end
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user