mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Added signals to change HTRANS to the correct signal based on schematic as well as a way to tell if we are not on the first access
This commit is contained in:
		
							parent
							
								
									2b80788235
								
							
						
					
					
						commit
						56121b3587
					
				| @ -75,10 +75,11 @@ module ahblite ( | ||||
|   (* mark_debug = "true" *) output logic HWRITED | ||||
| ); | ||||
| 
 | ||||
|   typedef enum logic [1:0] {IDLE, MEMREAD, MEMWRITE, INSTRREAD} statetype; | ||||
|   typedef enum logic [2:0] {IDLE, MEMREAD, MEMREADNEXT, MEMWRITE, MEMWRITENEXT, INSTRREAD, INSTRREADNEXT} statetype; | ||||
|   statetype BusState, NextBusState; | ||||
| 
 | ||||
|   logic GrantData; | ||||
|   logic SubsequentAccess; | ||||
|   logic [31:0] AccessAddress; | ||||
|   logic [2:0] ISize; | ||||
| 
 | ||||
| @ -135,6 +136,7 @@ module ahblite ( | ||||
|   assign #1 GrantData = (NextBusState == MEMREAD) | (NextBusState == MEMWRITE) |  | ||||
|                 (NextBusState == MEMREADNEXT) | (NextBusState == MEMWRITENEXT); | ||||
|   assign #1 AccessAddress = (GrantData) ? LSUBusAdr[31:0] : IFUBusAdr[31:0]; | ||||
|   assign #1 SubsequentAccess = (GrantData) ? |(AccessAddress[$clog2(`XLEN):0]) : |(AccessAddress[5:0]); | ||||
|   assign #1 HADDR = AccessAddress; | ||||
|   assign ISize = 3'b010; // 32 bit instructions for now; later improve for filling cache with full width; ignored on reads anyway
 | ||||
|   assign HSIZE = (GrantData) ? {1'b0, LSUBusSize[1:0]} : ISize; | ||||
| @ -154,7 +156,7 @@ module ahblite ( | ||||
| 
 | ||||
| 
 | ||||
|   assign HPROT = 4'b0011; // not used; see Section 3.7
 | ||||
|   assign HTRANS = [SIGNAL TO SET SEQ] ? 2'b11 : (NextBusState != IDLE) ? 2'b10 : 2'b00; // SEQ if not first read or write, NONSEQ if first read or write, IDLE otherwise
 | ||||
|   assign HTRANS = SubsequentAccess ? 2'b11 : (NextBusState != IDLE) ? 2'b10 : 2'b00; // SEQ if not first read or write, NONSEQ if first read or write, IDLE otherwise
 | ||||
|   assign HMASTLOCK = 0; // no locking supported
 | ||||
|   assign HWRITE = (NextBusState == MEMWRITE) | (NextBusState == MEMWRITENEXT); | ||||
|   // delay write data by one cycle for
 | ||||
| @ -170,7 +172,7 @@ module ahblite ( | ||||
|   | ||||
|   assign IFUBusHRDATA = HRDATA; | ||||
|   assign LSUBusHRDATA = HRDATA; | ||||
|   assign IFUBusAck = (BusState == INSTRREAD) & (NextBusState != INSTRREAD); // *** these are wrong.
 | ||||
|   assign LSUBusAck = (BusState == MEMREAD) & (NextBusState != MEMREAD) | (BusState == MEMWRITE) & (NextBusState != MEMWRITE); // *** these are wrong.
 | ||||
|   assign IFUBusAck = (BusState == INSTRREADNEXT); | ||||
|   assign LSUBusAck = (BusState == MEMREADNEXT) | (BusState == MEMWRITENEXT); | ||||
| 
 | ||||
| endmodule | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user