forked from Github_Repos/cvw
small busybear testbench changes
This commit is contained in:
parent
e7288716f7
commit
aea1c0cd2e
@ -13,7 +13,7 @@ module testbench_busybear();
|
|||||||
logic [31:0] InstrF;
|
logic [31:0] InstrF;
|
||||||
logic [7:0] ByteMaskM;
|
logic [7:0] ByteMaskM;
|
||||||
logic InstrAccessFaultF, DataAccessFaultM;
|
logic InstrAccessFaultF, DataAccessFaultM;
|
||||||
logic TimerIntM, SwIntM; // from CLINT
|
logic TimerIntM = 0, SwIntM = 0; // from CLINT
|
||||||
logic ExtIntM = 0; // not yet connected
|
logic ExtIntM = 0; // not yet connected
|
||||||
|
|
||||||
// for now, seem to need these to be zero until we get a better idea
|
// for now, seem to need these to be zero until we get a better idea
|
||||||
@ -50,10 +50,20 @@ module testbench_busybear();
|
|||||||
end
|
end
|
||||||
|
|
||||||
// read memreads trace file
|
// read memreads trace file
|
||||||
integer data_file_mem, scan_file_mem;
|
integer data_file_memR, scan_file_memR;
|
||||||
initial begin
|
initial begin
|
||||||
data_file_mem = $fopen("busybear-testgen/parsedMemRead.txt", "r");
|
data_file_memR = $fopen("busybear-testgen/parsedMemRead.txt", "r");
|
||||||
if (data_file_mem == 0) begin
|
if (data_file_memR == 0) begin
|
||||||
|
$display("file couldn't be opened");
|
||||||
|
$stop;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// read memwrite trace file
|
||||||
|
integer data_file_memW, scan_file_memW;
|
||||||
|
initial begin
|
||||||
|
data_file_memW = $fopen("busybear-testgen/parsedMemWrite.txt", "r");
|
||||||
|
if (data_file_memW == 0) begin
|
||||||
$display("file couldn't be opened");
|
$display("file couldn't be opened");
|
||||||
$stop;
|
$stop;
|
||||||
end
|
end
|
||||||
@ -74,6 +84,10 @@ module testbench_busybear();
|
|||||||
for(int j=1; j<32; j++) begin
|
for(int j=1; j<32; j++) begin
|
||||||
// read 31 integer registers
|
// read 31 integer registers
|
||||||
scan_file_rf = $fscanf(data_file_rf, "%x\n", rfExpected[j]);
|
scan_file_rf = $fscanf(data_file_rf, "%x\n", rfExpected[j]);
|
||||||
|
if($feof(data_file_rf)) begin
|
||||||
|
$display("no more rf data to read");
|
||||||
|
$stop;
|
||||||
|
end
|
||||||
// check things!
|
// check things!
|
||||||
if (rf[j*64+63 -: 64] != rfExpected[j]) begin
|
if (rf[j*64+63 -: 64] != rfExpected[j]) begin
|
||||||
$display("%t ps: rf[%0d] does not equal rf expected: %x, %x", $time, j, rf[j*64+63 -: 64], rfExpected[j]);
|
$display("%t ps: rf[%0d] does not equal rf expected: %x, %x", $time, j, rf[j*64+63 -: 64], rfExpected[j]);
|
||||||
@ -83,9 +97,21 @@ module testbench_busybear();
|
|||||||
end
|
end
|
||||||
|
|
||||||
// this might need to change
|
// this might need to change
|
||||||
always @(MemRWM or DataAdrM) begin
|
always @(MemRWM[1] or DataAdrM) begin
|
||||||
if (MemRWM != 0) begin
|
if (MemRWM[1]) begin
|
||||||
scan_file_mem = $fscanf(data_file_mem, "%x\n", ReadDataM);
|
scan_file_memR = $fscanf(data_file_memR, "%x\n", ReadDataM);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
logic [`XLEN-1:0] writeDataExpected;
|
||||||
|
// this might need to change
|
||||||
|
always @(WriteDataM or DataAdrM or ByteMaskM) begin
|
||||||
|
if (MemRWM[0]) begin
|
||||||
|
$display("!!!!");
|
||||||
|
scan_file_memW = $fscanf(data_file_memW, "%x\n", writeDataExpected);
|
||||||
|
if (writeDataExpected != WriteDataM) begin
|
||||||
|
$display("%t ps: WriteDataM does not equal WriteDataExpected: %x, %x", $time, WriteDataM, writeDataExpected);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -95,16 +121,26 @@ module testbench_busybear();
|
|||||||
nextSpec = 0;
|
nextSpec = 0;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
integer instrs;
|
||||||
|
initial begin
|
||||||
|
instrs = 0;
|
||||||
|
end
|
||||||
always @(PCF) begin
|
always @(PCF) begin
|
||||||
speculative <= nextSpec;
|
speculative <= nextSpec;
|
||||||
if (speculative) begin
|
if (speculative) begin
|
||||||
speculative <= (PCF != pcExpected);
|
nextSpec <= (PCF != pcExpected);
|
||||||
end
|
end
|
||||||
if (~speculative) begin
|
if (~speculative) begin
|
||||||
// first read instruction
|
// first read instruction
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%x\n", InstrF);
|
scan_file_PC = $fscanf(data_file_PC, "%x\n", InstrF);
|
||||||
// then expected PC value
|
// then expected PC value
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%x\n", pcExpected);
|
scan_file_PC = $fscanf(data_file_PC, "%x\n", pcExpected);
|
||||||
|
$display("loaded %0d instructions", instrs);
|
||||||
|
instrs += 1;
|
||||||
|
if($feof(data_file_PC)) begin
|
||||||
|
$display("no more PC data to read");
|
||||||
|
$stop;
|
||||||
|
end
|
||||||
// are we at a branch/jump?
|
// are we at a branch/jump?
|
||||||
case (InstrF[6:0]) //todo: add C versions of these
|
case (InstrF[6:0]) //todo: add C versions of these
|
||||||
7'b1101111, //JAL
|
7'b1101111, //JAL
|
||||||
|
@ -46,6 +46,10 @@ add wave -hex /testbench_busybear/dut/dp/InstrF
|
|||||||
add wave -divider
|
add wave -divider
|
||||||
# registers!
|
# registers!
|
||||||
add wave -hex /testbench_busybear/rfExpected
|
add wave -hex /testbench_busybear/rfExpected
|
||||||
|
add wave -hex /testbench_busybear/MemRWM[0]
|
||||||
|
add wave -hex /testbench_busybear/MemRWM[1]
|
||||||
|
add wave -hex /testbench_busybear/ByteMaskM
|
||||||
|
add wave -hex /testbench_busybear/WriteDataM
|
||||||
add wave -hex /testbench_busybear/dut/dp/regf/rf[1]
|
add wave -hex /testbench_busybear/dut/dp/regf/rf[1]
|
||||||
add wave -hex /testbench_busybear/dut/dp/regf/rf[2]
|
add wave -hex /testbench_busybear/dut/dp/regf/rf[2]
|
||||||
add wave -hex /testbench_busybear/dut/dp/regf/rf[3]
|
add wave -hex /testbench_busybear/dut/dp/regf/rf[3]
|
||||||
@ -87,7 +91,7 @@ add wave -hex /testbench_busybear/dut/dp/PCE
|
|||||||
add wave /testbench_busybear/InstrEName
|
add wave /testbench_busybear/InstrEName
|
||||||
#add wave -hex /testbench_busybear/dut/dp/SrcAE
|
#add wave -hex /testbench_busybear/dut/dp/SrcAE
|
||||||
#add wave -hex /testbench_busybear/dut/dp/SrcBE
|
#add wave -hex /testbench_busybear/dut/dp/SrcBE
|
||||||
#add wave -hex /testbench_busybear/dut/dp/ALUResultE
|
add wave -hex /testbench_busybear/dut/dp/ALUResultE
|
||||||
#add wave /testbench_busybear/dut/dp/PCSrcE
|
#add wave /testbench_busybear/dut/dp/PCSrcE
|
||||||
#add wave -divider
|
#add wave -divider
|
||||||
add wave -hex /testbench_busybear/dut/dp/PCM
|
add wave -hex /testbench_busybear/dut/dp/PCM
|
||||||
@ -121,6 +125,6 @@ add wave /testbench_busybear/InstrWName
|
|||||||
#set DefaultRadix hexadecimal
|
#set DefaultRadix hexadecimal
|
||||||
#
|
#
|
||||||
#-- Run the Simulation
|
#-- Run the Simulation
|
||||||
run 300
|
run 700
|
||||||
#run -all
|
#run -all
|
||||||
##quit
|
##quit
|
||||||
|
Loading…
Reference in New Issue
Block a user