forked from Github_Repos/cvw
Cleaned up name of MTIME register in CSRC
This commit is contained in:
parent
de3a0c644b
commit
336936cc39
1534
wally-pipelined/regression/vsim_stacktrace.vstf
Normal file
1534
wally-pipelined/regression/vsim_stacktrace.vstf
Normal file
File diff suppressed because it is too large
Load Diff
@ -35,7 +35,7 @@ vopt +acc work.testbench -o workopt
|
|||||||
|
|
||||||
vsim workopt -suppress 8852,12070
|
vsim workopt -suppress 8852,12070
|
||||||
|
|
||||||
do ./wave-dos/linux-waves.do
|
#do ./wave-dos/linux-waves.do
|
||||||
|
|
||||||
|
|
||||||
#-- Run the Simulation
|
#-- Run the Simulation
|
||||||
|
@ -39,7 +39,7 @@ module csr #(parameter
|
|||||||
input logic InterruptM,
|
input logic InterruptM,
|
||||||
input logic CSRReadM, CSRWriteM, TrapM, MTrapM, STrapM, UTrapM, mretM, sretM, uretM,
|
input logic CSRReadM, CSRWriteM, TrapM, MTrapM, STrapM, UTrapM, mretM, sretM, uretM,
|
||||||
input logic TimerIntM, ExtIntM, SwIntM,
|
input logic TimerIntM, ExtIntM, SwIntM,
|
||||||
input logic [63:0] MTIME, MTIMECMP,
|
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
||||||
input logic InstrValidW, FloatRegWriteW, LoadStallD,
|
input logic InstrValidW, FloatRegWriteW, LoadStallD,
|
||||||
input logic BPPredDirWrongM,
|
input logic BPPredDirWrongM,
|
||||||
input logic BTBPredPCWrongM,
|
input logic BTBPredPCWrongM,
|
||||||
|
@ -30,8 +30,8 @@
|
|||||||
// Ben 06/17/21: I brought in MTIME, MTIMECMP from CLINT. *** this probably isn't perfect though because it doesn't yet provide the ability to change these through CSR writes; overall this whole thing might need some rethinking
|
// Ben 06/17/21: I brought in MTIME, MTIMECMP from CLINT. *** this probably isn't perfect though because it doesn't yet provide the ability to change these through CSR writes; overall this whole thing might need some rethinking
|
||||||
module csrc #(parameter
|
module csrc #(parameter
|
||||||
MCYCLE = 12'hB00,
|
MCYCLE = 12'hB00,
|
||||||
MTIMEadr = 12'hB01, // address not specified in privileged spec. Consider moving to CLINT to match SiFive
|
MTIME = 12'hB01, // address not specified in privileged spec. Consider moving to CLINT to match SiFive
|
||||||
MTIMECMPadr = 12'hB21, // not specified in privileged spec. Move to CLINT
|
MTIMECMP = 12'hB21, // not specified in privileged spec. Move to CLINT
|
||||||
MINSTRET = 12'hB02,
|
MINSTRET = 12'hB02,
|
||||||
MHPMCOUNTERBASE = 12'hB00,
|
MHPMCOUNTERBASE = 12'hB00,
|
||||||
//MHPMCOUNTER3 = 12'hB03,
|
//MHPMCOUNTER3 = 12'hB03,
|
||||||
@ -39,8 +39,8 @@ module csrc #(parameter
|
|||||||
// ... more counters
|
// ... more counters
|
||||||
//MHPMCOUNTER31 = 12'hB1F,
|
//MHPMCOUNTER31 = 12'hB1F,
|
||||||
MCYCLEH = 12'hB80,
|
MCYCLEH = 12'hB80,
|
||||||
MTIMEHadr = 12'hB81, // address not specified in privileged spec. Consider moving to CLINT to match SiFive
|
MTIMEH = 12'hB81, // address not specified in privileged spec. Consider moving to CLINT to match SiFive
|
||||||
MTIMECMPHadr = 12'hBA1, // not specified in privileged spec. Move to CLINT
|
MTIMECMPH = 12'hBA1, // not specified in privileged spec. Move to CLINT
|
||||||
MINSTRETH = 12'hB82,
|
MINSTRETH = 12'hB82,
|
||||||
MHPMCOUNTERHBASE = 12'hB80,
|
MHPMCOUNTERHBASE = 12'hB80,
|
||||||
//MHPMCOUNTER3H = 12'hB83,
|
//MHPMCOUNTER3H = 12'hB83,
|
||||||
@ -82,7 +82,7 @@ module csrc #(parameter
|
|||||||
input logic [1:0] PrivilegeModeW,
|
input logic [1:0] PrivilegeModeW,
|
||||||
input logic [`XLEN-1:0] CSRWriteValM,
|
input logic [`XLEN-1:0] CSRWriteValM,
|
||||||
input logic [31:0] MCOUNTINHIBIT_REGW, MCOUNTEREN_REGW, SCOUNTEREN_REGW,
|
input logic [31:0] MCOUNTINHIBIT_REGW, MCOUNTEREN_REGW, SCOUNTEREN_REGW,
|
||||||
input logic [63:0] MTIME, MTIMECMP,
|
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
||||||
output logic [`XLEN-1:0] CSRCReadValM,
|
output logic [`XLEN-1:0] CSRCReadValM,
|
||||||
output logic IllegalCSRCAccessM
|
output logic IllegalCSRCAccessM
|
||||||
);
|
);
|
||||||
@ -230,13 +230,13 @@ module csrc #(parameter
|
|||||||
if (CSRAdrM >= MHPMCOUNTERBASE+3 && CSRAdrM < MHPMCOUNTERBASE+`COUNTERS) CSRCReadValM = HPMCOUNTER_REGW[CSRAdrM-MHPMCOUNTERBASE];
|
if (CSRAdrM >= MHPMCOUNTERBASE+3 && CSRAdrM < MHPMCOUNTERBASE+`COUNTERS) CSRCReadValM = HPMCOUNTER_REGW[CSRAdrM-MHPMCOUNTERBASE];
|
||||||
else if (CSRAdrM >= HPMCOUNTERBASE+3 && CSRAdrM < HPMCOUNTERBASE+`COUNTERS) CSRCReadValM = HPMCOUNTER_REGW[CSRAdrM-HPMCOUNTERBASE];
|
else if (CSRAdrM >= HPMCOUNTERBASE+3 && CSRAdrM < HPMCOUNTERBASE+`COUNTERS) CSRCReadValM = HPMCOUNTER_REGW[CSRAdrM-HPMCOUNTERBASE];
|
||||||
else case (CSRAdrM)
|
else case (CSRAdrM)
|
||||||
MTIMEadr: CSRCReadValM = MTIME;
|
MTIME: CSRCReadValM = MTIME_CLINT;
|
||||||
MTIMECMPadr: CSRCReadValM = MTIMECMP;
|
MTIMECMP: CSRCReadValM = MTIMECMP_CLINT;
|
||||||
MCYCLE: CSRCReadValM = CYCLE_REGW;
|
MCYCLE: CSRCReadValM = CYCLE_REGW;
|
||||||
MINSTRET: CSRCReadValM = INSTRET_REGW;
|
MINSTRET: CSRCReadValM = INSTRET_REGW;
|
||||||
//MHPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW;
|
//MHPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW;
|
||||||
//MHPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW;
|
//MHPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW;
|
||||||
TIME: CSRCReadValM = MTIME;
|
TIME: CSRCReadValM = MTIME_CLINT;
|
||||||
CYCLE: CSRCReadValM = CYCLE_REGW;
|
CYCLE: CSRCReadValM = CYCLE_REGW;
|
||||||
INSTRET: CSRCReadValM = INSTRET_REGW;
|
INSTRET: CSRCReadValM = INSTRET_REGW;
|
||||||
//HPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW;
|
//HPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW;
|
||||||
@ -259,24 +259,24 @@ module csrc #(parameter
|
|||||||
else if (CSRAdrM >= MHPMCOUNTERHBASE+3 && CSRAdrM < MHPMCOUNTERHBASE+`COUNTERS) CSRCReadValM = HPMCOUNTERH_REGW[CSRAdrM-MHPMCOUNTERHBASE];
|
else if (CSRAdrM >= MHPMCOUNTERHBASE+3 && CSRAdrM < MHPMCOUNTERHBASE+`COUNTERS) CSRCReadValM = HPMCOUNTERH_REGW[CSRAdrM-MHPMCOUNTERHBASE];
|
||||||
else if (CSRAdrM >= HPMCOUNTERHBASE+3 && CSRAdrM < HPMCOUNTERHBASE+`COUNTERS) CSRCReadValM = HPMCOUNTERH_REGW[CSRAdrM-HPMCOUNTERHBASE];
|
else if (CSRAdrM >= HPMCOUNTERHBASE+3 && CSRAdrM < HPMCOUNTERHBASE+`COUNTERS) CSRCReadValM = HPMCOUNTERH_REGW[CSRAdrM-HPMCOUNTERHBASE];
|
||||||
else case (CSRAdrM)
|
else case (CSRAdrM)
|
||||||
MTIMEadr: CSRCReadValM = MTIME[31:0];
|
MTIME: CSRCReadValM = MTIME_CLINT[31:0];
|
||||||
MTIMECMPadr: CSRCReadValM = MTIMECMP[31:0];
|
MTIMECMP: CSRCReadValM = MTIMECMP_CLINT[31:0];
|
||||||
MCYCLE: CSRCReadValM = CYCLE_REGW[31:0];
|
MCYCLE: CSRCReadValM = CYCLE_REGW[31:0];
|
||||||
MINSTRET: CSRCReadValM = INSTRET_REGW[31:0];
|
MINSTRET: CSRCReadValM = INSTRET_REGW[31:0];
|
||||||
//MHPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW[31:0];
|
//MHPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW[31:0];
|
||||||
//MHPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW[31:0];
|
//MHPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW[31:0];
|
||||||
TIME: CSRCReadValM = MTIME[31:0];
|
TIME: CSRCReadValM = MTIME_CLINT[31:0];
|
||||||
CYCLE: CSRCReadValM = CYCLE_REGW[31:0];
|
CYCLE: CSRCReadValM = CYCLE_REGW[31:0];
|
||||||
INSTRET: CSRCReadValM = INSTRET_REGW[31:0];
|
INSTRET: CSRCReadValM = INSTRET_REGW[31:0];
|
||||||
//HPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW[31:0];
|
//HPMCOUNTER3: CSRCReadValM = HPMCOUNTER3_REGW[31:0];
|
||||||
//HPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW[31:0];
|
//HPMCOUNTER4: CSRCReadValM = HPMCOUNTER4_REGW[31:0];
|
||||||
MTIMEHadr: CSRCReadValM = MTIME[63:32];
|
MTIMEH: CSRCReadValM = MTIME_CLINT[63:32];
|
||||||
MTIMECMPHadr: CSRCReadValM = MTIMECMP[63:32];
|
MTIMECMPH: CSRCReadValM = MTIMECMP_CLINT[63:32];
|
||||||
MCYCLEH: CSRCReadValM = CYCLE_REGW[63:32];
|
MCYCLEH: CSRCReadValM = CYCLE_REGW[63:32];
|
||||||
MINSTRETH: CSRCReadValM = INSTRET_REGW[63:32];
|
MINSTRETH: CSRCReadValM = INSTRET_REGW[63:32];
|
||||||
//MHPMCOUNTER3H: CSRCReadValM = HPMCOUNTER3_REGW[63:32];
|
//MHPMCOUNTER3H: CSRCReadValM = HPMCOUNTER3_REGW[63:32];
|
||||||
//MHPMCOUNTER4H: CSRCReadValM = HPMCOUNTER4_REGW[63:32];
|
//MHPMCOUNTER4H: CSRCReadValM = HPMCOUNTER4_REGW[63:32];
|
||||||
TIMEH: CSRCReadValM = MTIME[63:32];
|
TIMEH: CSRCReadValM = MTIME_CLINT[63:32];
|
||||||
CYCLEH: CSRCReadValM = CYCLE_REGW[63:32];
|
CYCLEH: CSRCReadValM = CYCLE_REGW[63:32];
|
||||||
INSTRETH: CSRCReadValM = INSTRET_REGW[63:32];
|
INSTRETH: CSRCReadValM = INSTRET_REGW[63:32];
|
||||||
//HPMCOUNTER3H: CSRCReadValM = HPMCOUNTER3_REGW[63:32];
|
//HPMCOUNTER3H: CSRCReadValM = HPMCOUNTER3_REGW[63:32];
|
||||||
|
@ -52,7 +52,7 @@ module privileged (
|
|||||||
input logic LoadMisalignedFaultM,
|
input logic LoadMisalignedFaultM,
|
||||||
input logic StoreMisalignedFaultM,
|
input logic StoreMisalignedFaultM,
|
||||||
input logic TimerIntM, ExtIntM, SwIntM,
|
input logic TimerIntM, ExtIntM, SwIntM,
|
||||||
input logic [63:0] MTIME, MTIMECMP,
|
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
||||||
input logic [`XLEN-1:0] InstrMisalignedAdrM, MemAdrM,
|
input logic [`XLEN-1:0] InstrMisalignedAdrM, MemAdrM,
|
||||||
input logic [4:0] SetFflagsM,
|
input logic [4:0] SetFflagsM,
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ module uncore (
|
|||||||
output logic [31:0] GPIOPinsOut, GPIOPinsEn,
|
output logic [31:0] GPIOPinsOut, GPIOPinsEn,
|
||||||
input logic UARTSin,
|
input logic UARTSin,
|
||||||
output logic UARTSout,
|
output logic UARTSout,
|
||||||
output logic [63:0] MTIME, MTIMECMP
|
output logic [63:0] MTIME_CLINT, MTIMECMP_CLINT
|
||||||
);
|
);
|
||||||
|
|
||||||
logic [`XLEN-1:0] HWDATA;
|
logic [`XLEN-1:0] HWDATA;
|
||||||
@ -76,17 +76,6 @@ module uncore (
|
|||||||
// unswizzle HSEL signals
|
// unswizzle HSEL signals
|
||||||
assign {HSELBootTim, HSELTim, HSELCLINT, HSELGPIO, HSELUART, HSELPLIC} = HSELRegions;
|
assign {HSELBootTim, HSELTim, HSELCLINT, HSELGPIO, HSELUART, HSELPLIC} = HSELRegions;
|
||||||
|
|
||||||
/* PMA checker now handles decoding addresses. *** This can be deleted.
|
|
||||||
// AHB Address decoder
|
|
||||||
adrdec timdec(HADDR, `TIMBASE, `TIMRANGE, HSELTim);
|
|
||||||
adrdec boottimdec(HADDR, `BOOTTIMBASE, `BOOTTIMRANGE, HSELBootTim);
|
|
||||||
adrdec clintdec(HADDR, `CLINTBASE, `CLINTRANGE, HSELCLINT);
|
|
||||||
adrdec plicdec(HADDR, `PLICBASE, `PLICRANGE, HSELPLIC);
|
|
||||||
adrdec gpiodec(HADDR, `GPIOBASE, `GPIORANGE, HSELGPIO);
|
|
||||||
adrdec uartdec(HADDR, `UARTBASE, `UARTRANGE, PreHSELUART);
|
|
||||||
assign HSELUART = PreHSELUART && (HSIZE == 3'b000); // only byte writes to UART are supported
|
|
||||||
*/
|
|
||||||
|
|
||||||
// subword accesses: converts HWDATAIN to HWDATA
|
// subword accesses: converts HWDATAIN to HWDATA
|
||||||
subwordwrite sww(.*);
|
subwordwrite sww(.*);
|
||||||
|
|
||||||
@ -95,7 +84,7 @@ module uncore (
|
|||||||
dtim #(.BASE(`BOOTTIMBASE), .RANGE(`BOOTTIMRANGE)) bootdtim(.HSELTim(HSELBootTim), .HREADTim(HREADBootTim), .HRESPTim(HRESPBootTim), .HREADYTim(HREADYBootTim), .*);
|
dtim #(.BASE(`BOOTTIMBASE), .RANGE(`BOOTTIMRANGE)) bootdtim(.HSELTim(HSELBootTim), .HREADTim(HREADBootTim), .HRESPTim(HRESPBootTim), .HREADYTim(HREADYBootTim), .*);
|
||||||
|
|
||||||
// memory-mapped I/O peripherals
|
// memory-mapped I/O peripherals
|
||||||
clint clint(.HADDR(HADDR[15:0]), .*);
|
clint clint(.HADDR(HADDR[15:0]), .MTIME(MTIME_CLINT), .MTIMECMP(MTIMECMP_CLINT), .*);
|
||||||
plic plic(.HADDR(HADDR[27:0]), .*);
|
plic plic(.HADDR(HADDR[27:0]), .*);
|
||||||
gpio gpio(.HADDR(HADDR[7:0]), .*); // *** may want to add GPIO interrupts
|
gpio gpio(.HADDR(HADDR[7:0]), .*); // *** may want to add GPIO interrupts
|
||||||
uart uart(.HADDR(HADDR[2:0]), .TXRDYb(), .RXRDYb(), .INTR(UARTIntr), .SIN(UARTSin), .SOUT(UARTSout),
|
uart uart(.HADDR(HADDR[2:0]), .TXRDYb(), .RXRDYb(), .INTR(UARTIntr), .SIN(UARTSin), .SOUT(UARTSout),
|
||||||
|
@ -34,7 +34,7 @@ module wallypipelinedhart (
|
|||||||
input logic TimerIntM, ExtIntM, SwIntM,
|
input logic TimerIntM, ExtIntM, SwIntM,
|
||||||
input logic InstrAccessFaultF,
|
input logic InstrAccessFaultF,
|
||||||
input logic DataAccessFaultM,
|
input logic DataAccessFaultM,
|
||||||
input logic [63:0] MTIME, MTIMECMP,
|
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
||||||
// Bus Interface
|
// Bus Interface
|
||||||
input logic [15:0] rd2, // bogus, delete when real multicycle fetch works
|
input logic [15:0] rd2, // bogus, delete when real multicycle fetch works
|
||||||
input logic [`AHBW-1:0] HRDATA,
|
input logic [`AHBW-1:0] HRDATA,
|
||||||
|
@ -63,7 +63,7 @@ module wallypipelinedsoc (
|
|||||||
logic [5:0] HSELRegions;
|
logic [5:0] HSELRegions;
|
||||||
logic InstrAccessFaultF, DataAccessFaultM;
|
logic InstrAccessFaultF, DataAccessFaultM;
|
||||||
logic TimerIntM, SwIntM; // from CLINT
|
logic TimerIntM, SwIntM; // from CLINT
|
||||||
logic [63:0] MTIME, MTIMECMP; // from CLINT to CSRs
|
logic [63:0] MTIME_CLINT, MTIMECMP_CLINT; // from CLINT to CSRs
|
||||||
logic ExtIntM; // from PLIC
|
logic ExtIntM; // from PLIC
|
||||||
logic [2:0] HADDRD;
|
logic [2:0] HADDRD;
|
||||||
logic [3:0] HSIZED;
|
logic [3:0] HSIZED;
|
||||||
|
@ -493,7 +493,12 @@ module testbench();
|
|||||||
end
|
end
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext);
|
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext);
|
||||||
PCtext2 = "";
|
PCtext2 = "";
|
||||||
|
$display("loading tests");
|
||||||
|
$display("PCtext = %s\n", PCtext);
|
||||||
while (PCtext2 != "***") begin
|
while (PCtext2 != "***") begin
|
||||||
|
$display("debugging\n");
|
||||||
|
$display("PCtext is %s\n", PCtext);
|
||||||
|
$display("PCtext %s PCtext2 %s\n", PCtext, PCtext2);
|
||||||
PCtext = {PCtext, " ", PCtext2};
|
PCtext = {PCtext, " ", PCtext2};
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext2);
|
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext2);
|
||||||
end
|
end
|
||||||
|
@ -494,11 +494,14 @@ module testbench();
|
|||||||
logic [31:0] InstrMask;
|
logic [31:0] InstrMask;
|
||||||
logic forcedInstr;
|
logic forcedInstr;
|
||||||
logic [63:0] lastPCD;
|
logic [63:0] lastPCD;
|
||||||
|
|
||||||
always @(dut.hart.ifu.PCD or dut.hart.ifu.InstrRawD or reset or negedge dut.hart.ifu.StallE) begin
|
always @(dut.hart.ifu.PCD or dut.hart.ifu.InstrRawD or reset or negedge dut.hart.ifu.StallE) begin
|
||||||
if(~HWRITE) begin
|
if(~HWRITE) begin
|
||||||
#2;
|
#2;
|
||||||
|
$display("test point");
|
||||||
if (~reset && dut.hart.ifu.InstrRawD[15:0] !== {16{1'bx}} && dut.hart.ifu.PCD !== 64'h0 && ~dut.hart.ifu.StallE) begin
|
if (~reset && dut.hart.ifu.InstrRawD[15:0] !== {16{1'bx}} && dut.hart.ifu.PCD !== 64'h0 && ~dut.hart.ifu.StallE) begin
|
||||||
if (dut.hart.ifu.PCD !== lastPCD) begin
|
if (dut.hart.ifu.PCD !== lastPCD) begin
|
||||||
|
$display("tp2");
|
||||||
lastCheckInstrD = CheckInstrD;
|
lastCheckInstrD = CheckInstrD;
|
||||||
lastPC <= dut.hart.ifu.PCD;
|
lastPC <= dut.hart.ifu.PCD;
|
||||||
lastPC2 <= lastPC;
|
lastPC2 <= lastPC;
|
||||||
@ -525,16 +528,22 @@ module testbench();
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
$display("tp4");
|
||||||
if($feof(data_file_PC)) begin
|
if($feof(data_file_PC)) begin
|
||||||
$display("no more PC data to read");
|
$display("no more PC data to read");
|
||||||
`ERROR
|
`ERROR
|
||||||
end
|
end
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtextD);
|
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtextD);
|
||||||
PCtext2 = "";
|
PCtext2 = "";
|
||||||
|
$display("tp5 PCtextD = %s PCtext2 = %s\n", PCtextD, PCtext2);
|
||||||
while (PCtext2 != "***") begin
|
while (PCtext2 != "***") begin
|
||||||
|
$display("tp6 PCtextD = %s PCtext2 = %s\n", PCtextD, PCtext2);
|
||||||
PCtextD = {PCtextD, " ", PCtext2};
|
PCtextD = {PCtextD, " ", PCtext2};
|
||||||
|
$display("tp8");
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext2);
|
scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext2);
|
||||||
|
$display("tp9");
|
||||||
end
|
end
|
||||||
|
$display("tp7 PCtextD = %s PCtext2 = %s\n", PCtextD, PCtext2);
|
||||||
scan_file_PC = $fscanf(data_file_PC, "%x\n", CheckInstrD);
|
scan_file_PC = $fscanf(data_file_PC, "%x\n", CheckInstrD);
|
||||||
if(dut.hart.ifu.PCD === pcExpected) begin
|
if(dut.hart.ifu.PCD === pcExpected) begin
|
||||||
if((dut.hart.ifu.InstrRawD[6:0] == 7'b1010011) || // for now, NOP out any float instrs
|
if((dut.hart.ifu.InstrRawD[6:0] == 7'b1010011) || // for now, NOP out any float instrs
|
||||||
@ -607,6 +616,7 @@ module testbench();
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
// Track names of instructions
|
// Track names of instructions
|
||||||
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
|
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
|
||||||
logic [31:0] InstrW;
|
logic [31:0] InstrW;
|
||||||
|
Loading…
Reference in New Issue
Block a user