mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	busybear: add support for subwords in ram
this is really weird and i'm not sure if i did it right. I'd love if @kaveh could review it
This commit is contained in:
		
							parent
							
								
									00605864fc
								
							
						
					
					
						commit
						a24270c4ca
					
				| @ -30,6 +30,7 @@ module testbench_busybear(); | ||||
|   // instantiate processor and memories
 | ||||
|   wallypipelinedsocbusybear dut(.*); | ||||
| 
 | ||||
| 
 | ||||
|   // initialize test
 | ||||
|   initial | ||||
|     begin | ||||
| @ -163,18 +164,19 @@ module testbench_busybear(); | ||||
|     end | ||||
|   endgenerate | ||||
|    | ||||
|   `define MAX_RAM 'h8000000 | ||||
|   logic [`XLEN-1:0] RAM[`MAX_RAM:0]; | ||||
|   logic [`XLEN-1:0] RAM[('h8000000 >> 3):0]; | ||||
|   logic [`XLEN-1:0] readRAM, readPC; | ||||
|   integer RAMAdr, RAMPC; | ||||
|   assign RAMAdr = HADDR - 'h80000000; | ||||
|   assign RAMPC = PCF - 'h80000000; | ||||
|   assign RAMAdr = (HADDR - 'h80000000) >> 3; | ||||
|   assign RAMPC = (PCF - 'h80000000) >> 3; | ||||
|   logic [63:0] readMask; | ||||
|   assign readMask = ((1 << (8*(1 << HSIZE))) - 1) << 8 * HADDR[2:0]; | ||||
|   always @(HWDATA or HADDR or HSIZE or HWRITE or dut.hart.MemRWM[1]) begin | ||||
|     if ((HWRITE || dut.hart.MemRWM[1]) && (HADDR >= 'h80000000 && HADDR <= 'h87FFFFFF)) begin | ||||
|       if (HWRITE) begin | ||||
|         RAM[RAMAdr] = HWDATA; | ||||
|         RAM[RAMAdr] = (RAM[RAMAdr] & (~readMask)) | ((HWDATA << 8 * HADDR[2:0]) & readMask); | ||||
|       end else begin | ||||
|         readRAM = RAM[RAMAdr]; | ||||
|         readRAM = RAM[RAMAdr] & readMask; | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| @ -199,8 +201,9 @@ module testbench_busybear(); | ||||
|         $display("%0t ps, instr %0d: HADDR does not equal readAdrExpected: %x, %x", $time, instrs, HADDR, readAdrExpected); | ||||
|         `ERROR | ||||
|       end | ||||
|       if (HRDATA != readRAM && (HADDR >= 'h80000000 && HADDR <= 'h87FFFFFF)) begin | ||||
|         $display("warning %0t ps, instr %0d: HRDATA does not equal readRAM: %x, %x from address %x", $time, instrs, HRDATA, readRAM, HADDR); | ||||
| 
 | ||||
|       if (((readMask & HRDATA) != (readMask & readRAM)) && (HADDR >= 'h80000000 && HADDR <= 'h87FFFFFF)) begin | ||||
|         $display("warning %0t ps, instr %0d: HRDATA does not equal readRAM: %x, %x from address %x, %x", $time, instrs, HRDATA, readRAM, HADDR, HSIZE); | ||||
|         warningCount += 1; | ||||
|         `ERROR | ||||
|       end | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user