mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Removed FStore2 and simplified HPTW
This commit is contained in:
		
							parent
							
								
									8444eca57c
								
							
						
					
					
						commit
						ea153e0aad
					
				| @ -48,7 +48,7 @@ module hptw | |||||||
|    output logic [1:0]          PageType, // page type to TLBs
 |    output logic [1:0]          PageType, // page type to TLBs
 | ||||||
|    (* mark_debug = "true" *) output logic ITLBWriteF, DTLBWriteM, // write TLB with new entry
 |    (* mark_debug = "true" *) output logic ITLBWriteF, DTLBWriteM, // write TLB with new entry
 | ||||||
|    output logic [`PA_BITS-1:0] HPTWAdr, |    output logic [`PA_BITS-1:0] HPTWAdr, | ||||||
|    output logic [1:0]          HPTWRW, // HPTW requesting to read memory
 |    output logic [1:0]          HPTWRW, // HPTW requesting to write or read memory
 | ||||||
|    output logic [2:0]          HPTWSize // 32 or 64 bit access.
 |    output logic [2:0]          HPTWSize // 32 or 64 bit access.
 | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| @ -114,14 +114,16 @@ module hptw | |||||||
|     logic [`PA_BITS-1:0]      HPTWWriteAdr;   |     logic [`PA_BITS-1:0]      HPTWWriteAdr;   | ||||||
|     logic                     SetDirty; |     logic                     SetDirty; | ||||||
|     logic                     Dirty, Accessed; |     logic                     Dirty, Accessed; | ||||||
|  | 	logic [`XLEN-1:0]		  AccessedPTE; | ||||||
| 
 | 
 | ||||||
|     assign NextPTE = UpdatePTE ? {PTE[`XLEN-1:8], (SetDirty | PTE[7]), 1'b1, PTE[5:0]} : HPTWReadPTE;  | 	assign AccessedPTE = {PTE[`XLEN-1:8], (SetDirty | PTE[7]), 1'b1, PTE[5:0]}; // set accessed bit, conditionally set dirty bit
 | ||||||
|  | 	mux2 #(`XLEN) NextPTEMux(HPTWReadPTE, AccessedPTE, UpdatePTE, NextPTE); | ||||||
|     flopenr #(`PA_BITS) HPTWAdrWriteReg(clk, reset, SaveHPTWAdr, HPTWReadAdr, HPTWWriteAdr); |     flopenr #(`PA_BITS) HPTWAdrWriteReg(clk, reset, SaveHPTWAdr, HPTWReadAdr, HPTWWriteAdr); | ||||||
|  | 	 | ||||||
|     assign SaveHPTWAdr = WalkerState == L0_ADR; |     assign SaveHPTWAdr = WalkerState == L0_ADR; | ||||||
|     assign SelHPTWWriteAdr = UpdatePTE | HPTWRW[0]; |     assign SelHPTWWriteAdr = UpdatePTE | HPTWRW[0]; | ||||||
|     mux2 #(`PA_BITS) HPTWWriteAdrMux(HPTWReadAdr, HPTWWriteAdr, SelHPTWWriteAdr, HPTWAdr);  |     mux2 #(`PA_BITS) HPTWWriteAdrMux(HPTWReadAdr, HPTWWriteAdr, SelHPTWWriteAdr, HPTWAdr);  | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     assign {Dirty, Accessed} = PTE[7:6]; |     assign {Dirty, Accessed} = PTE[7:6]; | ||||||
|     assign WriteAccess = MemRWM[0] | (|AtomicM); |     assign WriteAccess = MemRWM[0] | (|AtomicM); | ||||||
|     assign SetDirty = ~Dirty & DTLBWalk & WriteAccess; |     assign SetDirty = ~Dirty & DTLBWalk & WriteAccess; | ||||||
| @ -255,9 +257,7 @@ module hptw | |||||||
|            else                                  NextWalkerState = LEAF; |            else                                  NextWalkerState = LEAF; | ||||||
|     LEAF: if (DAPageFault) NextWalkerState = UPDATE_PTE; |     LEAF: if (DAPageFault) NextWalkerState = UPDATE_PTE; | ||||||
|           else NextWalkerState = IDLE; |           else NextWalkerState = IDLE; | ||||||
|       // *** TODO update PTE with dirty/access.  write to TLB and update memory.
 |      UPDATE_PTE: if(`HPTW_WRITES_SUPPORTED & DCacheStallM) NextWalkerState = UPDATE_PTE; | ||||||
|       // probably want to write the PTE in UPDATE_PTE then go to leaf and update TLB.
 |  | ||||||
|     UPDATE_PTE: if(`HPTW_WRITES_SUPPORTED & DCacheStallM) NextWalkerState = UPDATE_PTE; |  | ||||||
|                 else NextWalkerState = LEAF; |                 else NextWalkerState = LEAF; | ||||||
| 	default: begin | 	default: begin | ||||||
| 		NextWalkerState = IDLE; // should never be reached
 | 		NextWalkerState = IDLE; // should never be reached
 | ||||||
|  | |||||||
| @ -93,7 +93,6 @@ module wallypipelinedcore ( | |||||||
|   logic             FStallD; |   logic             FStallD; | ||||||
|   logic             FWriteIntE; |   logic             FWriteIntE; | ||||||
|   logic [`XLEN-1:0]         FWriteDataE; |   logic [`XLEN-1:0]         FWriteDataE; | ||||||
|   logic                     FStore2; |  | ||||||
|   logic [`FLEN-1:0]         FWriteDataM; |   logic [`FLEN-1:0]         FWriteDataM; | ||||||
|   logic [`XLEN-1:0]         FIntResM;   |   logic [`XLEN-1:0]         FIntResM;   | ||||||
|   logic [`XLEN-1:0]         FCvtIntResW;   |   logic [`XLEN-1:0]         FCvtIntResW;   | ||||||
| @ -258,7 +257,7 @@ module wallypipelinedcore ( | |||||||
|   .CommittedM, .DCacheMiss, .DCacheAccess, |   .CommittedM, .DCacheMiss, .DCacheAccess, | ||||||
|   .SquashSCW,             |   .SquashSCW,             | ||||||
|   .FpLoadStoreM, |   .FpLoadStoreM, | ||||||
|   .FWriteDataM, .FStore2, |   .FWriteDataM,  | ||||||
|   //.DataMisalignedM(DataMisalignedM),
 |   //.DataMisalignedM(DataMisalignedM),
 | ||||||
|   .IEUAdrE, .IEUAdrM, .WriteDataE, |   .IEUAdrE, .IEUAdrM, .WriteDataE, | ||||||
|   .ReadDataW, .FlushDCacheM, |   .ReadDataW, .FlushDCacheM, | ||||||
| @ -397,8 +396,7 @@ module wallypipelinedcore ( | |||||||
|          .STATUS_FS, // is floating-point enabled?
 |          .STATUS_FS, // is floating-point enabled?
 | ||||||
|          .FRegWriteM, // FP register write enable
 |          .FRegWriteM, // FP register write enable
 | ||||||
|          .FpLoadStoreM, |          .FpLoadStoreM, | ||||||
|          .FStore2, |         .FStallD, // Stall the decode stage
 | ||||||
|          .FStallD, // Stall the decode stage
 |  | ||||||
|          .FWriteIntE, // integer register write enable
 |          .FWriteIntE, // integer register write enable
 | ||||||
|          .FWriteDataE, // Data to be written to memory
 |          .FWriteDataE, // Data to be written to memory
 | ||||||
|          .FWriteDataM, // Data to be written to memory
 |          .FWriteDataM, // Data to be written to memory
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user