forked from Github_Repos/cvw
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
|
// instantiate processor and memories
|
||||||
wallypipelinedsocbusybear dut(.*);
|
wallypipelinedsocbusybear dut(.*);
|
||||||
|
|
||||||
|
|
||||||
// initialize test
|
// initialize test
|
||||||
initial
|
initial
|
||||||
begin
|
begin
|
||||||
@ -163,18 +164,19 @@ module testbench_busybear();
|
|||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
`define MAX_RAM 'h8000000
|
logic [`XLEN-1:0] RAM[('h8000000 >> 3):0];
|
||||||
logic [`XLEN-1:0] RAM[`MAX_RAM:0];
|
|
||||||
logic [`XLEN-1:0] readRAM, readPC;
|
logic [`XLEN-1:0] readRAM, readPC;
|
||||||
integer RAMAdr, RAMPC;
|
integer RAMAdr, RAMPC;
|
||||||
assign RAMAdr = HADDR - 'h80000000;
|
assign RAMAdr = (HADDR - 'h80000000) >> 3;
|
||||||
assign RAMPC = PCF - 'h80000000;
|
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
|
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 || dut.hart.MemRWM[1]) && (HADDR >= 'h80000000 && HADDR <= 'h87FFFFFF)) begin
|
||||||
if (HWRITE) begin
|
if (HWRITE) begin
|
||||||
RAM[RAMAdr] = HWDATA;
|
RAM[RAMAdr] = (RAM[RAMAdr] & (~readMask)) | ((HWDATA << 8 * HADDR[2:0]) & readMask);
|
||||||
end else begin
|
end else begin
|
||||||
readRAM = RAM[RAMAdr];
|
readRAM = RAM[RAMAdr] & readMask;
|
||||||
end
|
end
|
||||||
end
|
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);
|
$display("%0t ps, instr %0d: HADDR does not equal readAdrExpected: %x, %x", $time, instrs, HADDR, readAdrExpected);
|
||||||
`ERROR
|
`ERROR
|
||||||
end
|
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;
|
warningCount += 1;
|
||||||
`ERROR
|
`ERROR
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user