forked from Github_Repos/cvw
		
	Another round of cleanup in the LSU.
This commit is contained in:
		
							parent
							
								
									a60a1756a4
								
							
						
					
					
						commit
						af6899472d
					
				| @ -32,107 +32,107 @@ | |||||||
| `include "wally-config.vh" | `include "wally-config.vh" | ||||||
| 
 | 
 | ||||||
| module lsu ( | module lsu ( | ||||||
|   input  logic             clk, reset, |   input  logic                clk,set, | ||||||
|   input  logic             StallM, FlushM, StallW, FlushW, |   input  logic                StallM,ushM, StallW, FlushW, | ||||||
|   output logic             LSUStallM,                               // LSU stalls pipeline during a multicycle operation
 |   output logic                LSUStallM,                            // LSU stalls pipeline during a multicycle operation
 | ||||||
|   // connected to cpu (controls)
 |   // connected to cpu (controls)
 | ||||||
|   input  logic [1:0]       MemRWM,                                  // Read/Write control
 |   input  logic [1:0]          MemRWM,                               // Read/Write control
 | ||||||
|   input  logic [2:0]       Funct3M,                                 // Size of memory operation
 |   input  logic [2:0]          Funct3M,                              // Size of memory operation
 | ||||||
|   input  logic [6:0]       Funct7M,                                 // Atomic memory operation function
 |   input  logic [6:0]          Funct7M,                              // Atomic memory operation function
 | ||||||
|   input  logic [1:0]       AtomicM,                                 // Atomic memory operation
 |   input  logic [1:0]          AtomicM,                              // Atomic memory operation
 | ||||||
|   input  logic             FlushDCacheM,                            // Flush D cache to next level of memory
 |   input  logic                FlushDCacheM,                         // Flush D cache to next level of memory
 | ||||||
|   output logic             CommittedM,                              // Delay interrupts while memory operation in flight
 |   output logic                CommittedM,                           // Delay interrupts while memory operation in flight
 | ||||||
|   output logic             SquashSCW,                               // Store conditional failed disable write to GPR
 |   output logic                SquashSCW,                            // Store conditional failed disable write to GPR
 | ||||||
|   output logic             DCacheMiss,                              // D cache miss for performance counters
 |   output logic                DCacheMiss,                           // D cache miss for performance counters
 | ||||||
|   output logic             DCacheAccess,                            // D cache memory access for performance counters
 |   output logic                DCacheAccess,                         // D cache memory access for performance counters
 | ||||||
|   // address and write data
 |   // address and write data
 | ||||||
|   input  logic [`XLEN-1:0] IEUAdrE,                                 // Execution stage memory address
 |   input  logic [`XLEN-1:0]    IEUAdrE,                              // Execution stage memory address
 | ||||||
|   output logic [`XLEN-1:0] IEUAdrM,       // Memory stage memory address
 |   output logic [`XLEN-1:0]    IEUAdrM,                              // Memory stage memory address
 | ||||||
|   input logic [`XLEN-1:0] WriteDataM,     // Write data from IEU
 |   input  logic [`XLEN-1:0]    WriteDataM,                           // Write data from IEU
 | ||||||
|   output logic [`LLEN-1:0] ReadDataW,                               // Read data to IEU or FPU
 |   output logic [`LLEN-1:0]    ReadDataW,                            // Read data to IEU or FPU
 | ||||||
|   // cpu privilege
 |   // cpu privilege
 | ||||||
|   input  logic [1:0]       PrivilegeModeW,                          // Current privilege mode
 |   input  logic [1:0]          PrivilegeModeW,                       // Current privilege mode
 | ||||||
|   input  logic             BigEndianM,                              // Swap byte order to big endian
 |   input  logic                BigEndianM,                           // Swap byte order to big endian
 | ||||||
|   input  logic             sfencevmaM,                              // Virtual memory address fence, invalidate TLB entries
 |   input  logic                sfencevmaM,                           // Virtual memory address fence, invalidate TLB entries
 | ||||||
|   // fpu
 |   // fpu
 | ||||||
|   input  logic [`FLEN-1:0] FWriteDataM,                             // Write data from FPU
 |   input  logic [`FLEN-1:0]    FWriteDataM,                          // Write data from FPU
 | ||||||
|   input  logic             FpLoadStoreM,                            // Selects FPU as store for write data
 |   input  logic                FpLoadStoreM,                         // Selects FPU as store for write data
 | ||||||
|   // faults
 |   // faults
 | ||||||
|   output logic             LoadPageFaultM, StoreAmoPageFaultM,      // Page fault exceptions
 |   output logic                LoadPageFaultM,oreAmoPageFaultM,      // Page fault exceptions
 | ||||||
|   output logic             LoadMisalignedFaultM,                    // Load address misaligned fault
 |   output logic                LoadMisalignedFaultM,                 // Load address misaligned fault
 | ||||||
|   output logic             LoadAccessFaultM,                        // Load access fault (PMA)
 |   output logic                LoadAccessFaultM,                     // Load access fault (PMA)
 | ||||||
|   output logic             HPTWInstrAccessFaultM,                   // HPTW generated access fault during instruction fetch
 |   output logic                HPTWInstrAccessFaultM,                // HPTW generated access fault during instruction fetch
 | ||||||
|   // cpu hazard unit (trap)
 |   // cpu hazard unit (trap)
 | ||||||
|   output logic             StoreAmoMisalignedFaultM,                // Store or AMO address misaligned fault
 |   output logic                StoreAmoMisalignedFaultM,             // Store or AMO address misaligned fault
 | ||||||
|   output logic             StoreAmoAccessFaultM,                    // Store or AMO access fault
 |   output logic                StoreAmoAccessFaultM,                 // Store or AMO access fault
 | ||||||
|           // connect to ahb
 |   // connect to ahb
 | ||||||
|   output logic [`PA_BITS-1:0] LSUHADDR, // Bus address from LSU to EBU
 |   output logic [`PA_BITS-1:0] LSUHADDR,                             // Bus address from LSU to EBU
 | ||||||
|   input logic [`XLEN-1:0] HRDATA,       // Bus read data from LSU to EBU
 |   input  logic [`XLEN-1:0]    HRDATA,                               // Bus read data from LSU to EBU
 | ||||||
|   output logic [`XLEN-1:0] LSUHWDATA,   // Bus write data from LSU to EBU
 |   output logic [`XLEN-1:0]    LSUHWDATA,                            // Bus write data from LSU to EBU
 | ||||||
|   input logic LSUHREADY,                // Bus ready from LSU to EBU
 |   input  logic                LSUHREADY,                            // Bus ready from LSU to EBU
 | ||||||
|   output logic LSUHWRITE,               // Bus write operation from LSU to EBU
 |   output logic                LSUHWRITE,                            // Bus write operation from LSU to EBU
 | ||||||
|   output logic [2:0] LSUHSIZE,          // Bus operation size from LSU to EBU
 |   output logic [2:0]          LSUHSIZE,                             // Bus operation size from LSU to EBU
 | ||||||
|   output logic [2:0] LSUHBURST,         // Bus burst from LSU to EBU
 |   output logic [2:0]          LSUHBURST,                            // Bus burst from LSU to EBU
 | ||||||
|   output logic [1:0] LSUHTRANS,         // Bus transaction type from LSU to EBU
 |   output logic [1:0]          LSUHTRANS,                            // Bus transaction type from LSU to EBU
 | ||||||
|   output logic [`XLEN/8-1:0] LSUHWSTRB, // Bus byte write enables from LSU to EBU
 |   output logic [`XLEN/8-1:0]  LSUHWSTRB,                            // Bus byte write enables from LSU to EBU
 | ||||||
|           // page table walker
 |   // page table walker
 | ||||||
|   input  logic [`XLEN-1:0] SATP_REGW,                               // SATP (supervisor address translation and protection) CSR
 |   input  logic [`XLEN-1:0]    SATP_REGW,                            // SATP (supervisor address translation and protection) CSR
 | ||||||
|   input  logic             STATUS_MXR, STATUS_SUM, STATUS_MPRV,     // STATUS CSR bits: make executable readable, supervisor user memory, machine privilege
 |   input  logic                STATUS_MXR,ATUS_SUM, STATUS_MPRV,     // STATUS CSR bits: make executable readable, supervisor user memory, machine privilege
 | ||||||
|   input  logic [1:0]       STATUS_MPP,                              // Machine previous privilege mode
 |   input  logic [1:0]          STATUS_MPP,                           // Machine previous privilege mode
 | ||||||
|   input  logic [`XLEN-1:0] PCF,                                     // Fetch PC 
 |   input  logic [`XLEN-1:0]    PCF,                                  // Fetch PC 
 | ||||||
|   input  logic             ITLBMissF,                               // ITLB miss causes HPTW (hardware pagetable walker) walk
 |   input  logic                ITLBMissF,                            // ITLB miss causes HPTW (hardware pagetable walker) walk
 | ||||||
|   input  logic             InstrDAPageFaultF,                       // ITLB hit needs to update dirty or access bits
 |   input  logic                InstrDAPageFaultF,                    // ITLB hit needs to update dirty or access bits
 | ||||||
|   output logic [`XLEN-1:0] PTE,                                     // Page table entry write to ITLB
 |   output logic [`XLEN-1:0]    PTE,                                  // Page table entry write to ITLB
 | ||||||
|   output logic [1:0]       PageType,                                // Type of page table entry to write to ITLB
 |   output logic [1:0]          PageType,                             // Type of page table entry to write to ITLB
 | ||||||
|   output logic             ITLBWriteF,                              // Write PTE to ITLB
 |   output logic                ITLBWriteF,                           // Write PTE to ITLB
 | ||||||
|   output logic             SelHPTW,                                 // During a HPTW walk the effective privilege mode becomes S_MODE
 |   output logic                SelHPTW,                              // During a HPTW walk the effective privilege mode becomes S_MODE
 | ||||||
|   input var logic [7:0]    PMPCFG_ARRAY_REGW[`PMP_ENTRIES-1:0],     // PMP configuration from privileged unit
 |   input var logic [7:0]       PMPCFG_ARRAY_REGW[P_ENTRIES-1:0],     // PMP configuration from privileged unit
 | ||||||
|   input var logic [`XLEN-1:0] PMPADDR_ARRAY_REGW[`PMP_ENTRIES-1:0]  // PMP address from privileged unit
 |   input var logic [`XLEN-1:0] PMPADDR_ARRAY_REGW[`PMP_ENTRIES-1:0]  // PMP address from privileged unit
 | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|   logic [`XLEN+1:0]         IEUAdrExtM;                              // Memory stage address zero-extended to PA_BITS or XLEN whichever is longer
 |   logic [`XLEN+1:0]         IEUAdrExtM;                             // Memory stage address zero-extended to PA_BITS or XLEN whichever is longer
 | ||||||
|   logic [`XLEN+1:0]         IEUAdrExtE;                              // Execution stage address zero-extended to PA_BITS or XLEN whichever is longer
 |   logic [`XLEN+1:0]         IEUAdrExtE;                             // Execution stage address zero-extended to PA_BITS or XLEN whichever is longer
 | ||||||
|   logic [`PA_BITS-1:0]      PAdrM;                                   // Physical memory address
 |   logic [`PA_BITS-1:0]      PAdrM;                                  // Physical memory address
 | ||||||
|    logic [`XLEN+1:0] IHAdrM;               // Either IEU or HPTW memory address
 |   logic [`XLEN+1:0] 		IHAdrM;                                 // Either IEU or HPTW memory address
 | ||||||
| 
 | 
 | ||||||
|   logic [1:0] 				PreLSURWM;                               // IEU or HPTW Read/Write signal
 |   logic [1:0] 				PreLSURWM;                              // IEU or HPTW Read/Write signal
 | ||||||
|   logic [1:0] 				LSURWM;                                  // IEU or HPTW Read/Write signal gated by LR/SC
 |   logic [1:0] 				LSURWM;                                 // IEU or HPTW Read/Write signal gated by LR/SC
 | ||||||
|   logic [2:0]               LSUFunct3M;                              // IEU or HPTW memory operation size
 |   logic [2:0]               LSUFunct3M;                             // IEU or HPTW memory operation size
 | ||||||
|   logic [6:0]               LSUFunct7M;                              // AMO function gated by HPTW
 |   logic [6:0]               LSUFunct7M;                             // AMO function gated by HPTW
 | ||||||
|   logic [1:0]               LSUAtomicM;                              // AMO signal gated by HPTW
 |   logic [1:0]               LSUAtomicM;                             // AMO signal gated by HPTW
 | ||||||
| 
 | 
 | ||||||
|   logic                     GatedStallW;                             // Hazard unit StallW gated when SelHPTW = 1
 |   logic                     GatedStallW;                            // Hazard unit StallW gated when SelHPTW = 1
 | ||||||
|   |   | ||||||
|   logic                     DCacheStallM;                            // D$ busy with multicycle operation
 |   logic                     DCacheStallM;                           // D$ busy with multicycle operation
 | ||||||
|   logic                     BusStall;                                // Bus interface busy with multicycle operation
 |   logic                     BusStall;                               // Bus interface busy with multicycle operation
 | ||||||
|   logic                     HPTWStall;                               // HPTW busy with multicycle operation
 |   logic                     HPTWStall;                              // HPTW busy with multicycle operation
 | ||||||
| 
 | 
 | ||||||
|   logic                     CacheableM;                              // PMA indicates memory address is cacheable
 |   logic                     CacheableM;                             // PMA indicates memory address is cacheable
 | ||||||
|   logic                     BusCommittedM;                           // Bus memory operation in flight, delay interrupts
 |   logic                     BusCommittedM;                          // Bus memory operation in flight, delay interrupts
 | ||||||
|   logic 					DCacheCommittedM;                        // D$ memory operation started, delay interrupts
 |   logic 					DCacheCommittedM;                       // D$ memory operation started, delay interrupts
 | ||||||
| 
 | 
 | ||||||
|   logic [`LLEN-1:0] 		DTIMReadDataWordM;                       // DTIM read data
 |   logic [`LLEN-1:0] 		DTIMReadDataWordM;                      // DTIM read data
 | ||||||
|   logic [`LLEN-1:0] 		DCacheReadDataWordM;                     // D$ read data
 |   logic [`LLEN-1:0] 		DCacheReadDataWordM;                    // D$ read data
 | ||||||
|   logic [`LLEN-1:0] 		ReadDataWordMuxM;                        // DTIM or D$ read data
 |   logic [`LLEN-1:0] 		ReadDataWordMuxM;                       // DTIM or D$ read data
 | ||||||
|   logic [`LLEN-1:0] 		LittleEndianReadDataWordM;               // Endian-swapped read data
 |   logic [`LLEN-1:0] 		LittleEndianReadDataWordM;              // Endian-swapped read data
 | ||||||
|   logic [`LLEN-1:0] 		ReadDataWordM;                           // Read data before subword selection
 |   logic [`LLEN-1:0] 		ReadDataWordM;                          // Read data before subword selection
 | ||||||
|   logic [`LLEN-1:0]         ReadDataM;                               // Final read data
 |   logic [`LLEN-1:0]         ReadDataM;                              // Final read data
 | ||||||
| 
 | 
 | ||||||
|   logic [`XLEN-1:0] 		IHWriteDataM;                            // IEU or HPTW write data
 |   logic [`XLEN-1:0] 		IHWriteDataM;                           // IEU or HPTW write data
 | ||||||
|   logic [`XLEN-1:0] 		IMAWriteDataM;                           // IEU, HPTW, or AMO write data
 |   logic [`XLEN-1:0] 		IMAWriteDataM;                          // IEU, HPTW, or AMO write data
 | ||||||
|   logic [`LLEN-1:0]         IMAFWriteDataM;                          // IEU, HPTW, AMO, or FPU write data
 |   logic [`LLEN-1:0]         IMAFWriteDataM;                         // IEU, HPTW, AMO, or FPU write data
 | ||||||
|   logic [`LLEN-1:0] 		LittleEndianWriteDataM;                  // Ending-swapped write data 
 |   logic [`LLEN-1:0] 		LittleEndianWriteDataM;                 // Ending-swapped write data 
 | ||||||
|   logic [`LLEN-1:0] 		LSUWriteDataM;                           // Final write data
 |   logic [`LLEN-1:0] 		LSUWriteDataM;                          // Final write data
 | ||||||
|   logic [(`LLEN-1)/8:0]     ByteMaskM;                               // Selects which bytes within a word to write
 |   logic [(`LLEN-1)/8:0]     ByteMaskM;                              // Selects which bytes within a word to write
 | ||||||
| 
 | 
 | ||||||
|   logic                     DTLBMissM;                               // DTLB miss causes HPTW walk
 |   logic                     DTLBMissM;                              // DTLB miss causes HPTW walk
 | ||||||
|   logic                     DTLBWriteM;                              // Writes PTE and PageType to DTLB
 |   logic                     DTLBWriteM;                             // Writes PTE and PageType to DTLB
 | ||||||
|   logic                     DataDAPageFaultM;                        // DTLB hit needs to update dirty or access bits
 |   logic                     DataDAPageFaultM;                       // DTLB hit needs to update dirty or access bits
 | ||||||
|   logic                     LSULoadAccessFaultM;                     // Load acces fault
 |   logic                     LSULoadAccessFaultM;                    // Load acces fault
 | ||||||
|   logic 					LSUStoreAmoAccessFaultM;                 // Store access fault
 |   logic 					LSUStoreAmoAccessFaultM;                // Store access fault
 | ||||||
|   logic                     IgnoreRequestTLB;                        // On either ITLB or DTLB miss, ignore miss so HPTW can handle
 |   logic                     IgnoreRequestTLB;                       // On either ITLB or DTLB miss, ignore miss so HPTW can handle
 | ||||||
|   logic 					IgnoreRequest;                           // On FlushM or TLB miss ignore memory operation
 |   logic 					IgnoreRequest;                          // On FlushM or TLB miss ignore memory operation
 | ||||||
|   logic                     SelDTIM;                                 // Select DTIM rather than bus or D$
 |   logic                     SelDTIM;                                // Select DTIM rather than bus or D$
 | ||||||
| 
 | 
 | ||||||
|    |    | ||||||
|   /////////////////////////////////////////////////////////////////////////////////////////////
 |   /////////////////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user