mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
floating point infinite loop removed from imperas tests
This commit is contained in:
parent
2feb9309bb
commit
9464c9022d
@ -31,7 +31,7 @@
|
|||||||
`define XLEN 64
|
`define XLEN 64
|
||||||
|
|
||||||
//`define MISA (32'h00000105)
|
//`define MISA (32'h00000105)
|
||||||
`define MISA (32'h00000104 | 1<<5 | 1<<18 | 1 << 20 | 1 << 12 | 1 << 0)
|
`define MISA (32'h00000104 | 1<<5 | 1<<18 | 1 << 20 | 1 << 12 | 1 << 0 | 1 << 3)
|
||||||
`define A_SUPPORTED ((`MISA >> 0) % 2 == 1)
|
`define A_SUPPORTED ((`MISA >> 0) % 2 == 1)
|
||||||
`define C_SUPPORTED ((`MISA >> 2) % 2 == 1)
|
`define C_SUPPORTED ((`MISA >> 2) % 2 == 1)
|
||||||
`define D_SUPPORTED ((`MISA >> 3) % 2 == 1)
|
`define D_SUPPORTED ((`MISA >> 3) % 2 == 1)
|
||||||
|
@ -200,7 +200,7 @@ module fctrl (
|
|||||||
// fmv.d.w = ?101
|
// fmv.d.w = ?101
|
||||||
// {?, is mv, is store, is double or fcvt.d.w}
|
// {?, is mv, is store, is double or fcvt.d.w}
|
||||||
3'b111 : OpCtrlD = {1'b0, OpD[6:5], Funct3D[0] | (OpD[6]&Funct7D[0])};
|
3'b111 : OpCtrlD = {1'b0, OpD[6:5], Funct3D[0] | (OpD[6]&Funct7D[0])};
|
||||||
default : begin OpCtrlD = 4'bxxxx; IllegalFPUInstrD = isFP; end
|
default : begin OpCtrlD = 4'bxxxx; IllegalFPUInstrD = 1'b1; end
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -48,9 +48,9 @@ module fpu (
|
|||||||
localparam PipeEnable = 1'b1;
|
localparam PipeEnable = 1'b1;
|
||||||
always_comb begin
|
always_comb begin
|
||||||
|
|
||||||
PipeEnableDE = StallE;
|
PipeEnableDE = ~StallE;
|
||||||
PipeEnableEM = StallM;
|
PipeEnableEM = ~StallM;
|
||||||
PipeEnableMW = StallW;
|
PipeEnableMW = ~StallW;
|
||||||
PipeClearDE = FlushE;
|
PipeClearDE = FlushE;
|
||||||
PipeClearEM = FlushM;
|
PipeClearEM = FlushM;
|
||||||
PipeClearMW = FlushW;
|
PipeClearMW = FlushW;
|
||||||
|
@ -47,7 +47,7 @@ module privdec (
|
|||||||
assign wfiM = PrivilegedM & (InstrM[31:20] == 12'b000100000101);
|
assign wfiM = PrivilegedM & (InstrM[31:20] == 12'b000100000101);
|
||||||
assign sfencevmaM = PrivilegedM & (InstrM[31:25] == 7'b0001001);
|
assign sfencevmaM = PrivilegedM & (InstrM[31:25] == 7'b0001001);
|
||||||
assign IllegalPrivilegedInstrM = PrivilegedM & ~(uretM|sretM|mretM|ecallM|ebreakM|wfiM|sfencevmaM);
|
assign IllegalPrivilegedInstrM = PrivilegedM & ~(uretM|sretM|mretM|ecallM|ebreakM|wfiM|sfencevmaM);
|
||||||
assign IllegalInstrFaultM = IllegalIEUInstrFaultM | IllegalFPUInstrM | IllegalPrivilegedInstrM | IllegalCSRAccessM | IllegalFPUInstrM; // *** generalize this for other instructions
|
assign IllegalInstrFaultM = (IllegalIEUInstrFaultM & IllegalFPUInstrM) | IllegalPrivilegedInstrM | IllegalCSRAccessM; // *** generalize this for other instructions
|
||||||
|
|
||||||
// *** initially, wfi and sfencevma are nop
|
// *** initially, wfi and sfencevma are nop
|
||||||
// *** zfenci extension?
|
// *** zfenci extension?
|
||||||
|
@ -52,6 +52,7 @@ module privileged (
|
|||||||
input logic TimerIntM, ExtIntM, SwIntM,
|
input logic TimerIntM, ExtIntM, SwIntM,
|
||||||
input logic [`XLEN-1:0] InstrMisalignedAdrM, MemAdrM,
|
input logic [`XLEN-1:0] InstrMisalignedAdrM, MemAdrM,
|
||||||
input logic [4:0] SetFflagsM,
|
input logic [4:0] SetFflagsM,
|
||||||
|
output logic IllegalFPUInstrE,
|
||||||
output logic [1:0] PrivilegeModeW,
|
output logic [1:0] PrivilegeModeW,
|
||||||
output logic [`XLEN-1:0] SATP_REGW,
|
output logic [`XLEN-1:0] SATP_REGW,
|
||||||
output logic STATUS_MXR, STATUS_SUM,
|
output logic STATUS_MXR, STATUS_SUM,
|
||||||
@ -78,7 +79,7 @@ module privileged (
|
|||||||
logic uretM, sretM, mretM, ecallM, ebreakM, wfiM, sfencevmaM;
|
logic uretM, sretM, mretM, ecallM, ebreakM, wfiM, sfencevmaM;
|
||||||
logic IllegalCSRAccessM;
|
logic IllegalCSRAccessM;
|
||||||
logic IllegalIEUInstrFaultE, IllegalIEUInstrFaultM;
|
logic IllegalIEUInstrFaultE, IllegalIEUInstrFaultM;
|
||||||
logic IllegalFPUInstrE, IllegalFPUInstrM;
|
logic IllegalFPUInstrM;
|
||||||
logic LoadPageFaultM, StorePageFaultM;
|
logic LoadPageFaultM, StorePageFaultM;
|
||||||
logic InstrPageFaultF, InstrPageFaultD, InstrPageFaultE, InstrPageFaultM;
|
logic InstrPageFaultF, InstrPageFaultD, InstrPageFaultE, InstrPageFaultM;
|
||||||
logic InstrAccessFaultF, InstrAccessFaultD, InstrAccessFaultE, InstrAccessFaultM;
|
logic InstrAccessFaultF, InstrAccessFaultD, InstrAccessFaultE, InstrAccessFaultM;
|
||||||
|
@ -96,7 +96,7 @@ module wallypipelinedhart (
|
|||||||
logic SquashSCW;
|
logic SquashSCW;
|
||||||
logic [31:0] FSROutW;
|
logic [31:0] FSROutW;
|
||||||
logic DivSqrtDoneE;
|
logic DivSqrtDoneE;
|
||||||
logic IllegalFPUInstrD;
|
logic IllegalFPUInstrD, IllegalFPUInstrE;
|
||||||
logic [`XLEN-1:0] FPUResultW;
|
logic [`XLEN-1:0] FPUResultW;
|
||||||
|
|
||||||
// memory management unit signals
|
// memory management unit signals
|
||||||
|
@ -52,11 +52,110 @@ module testbench();
|
|||||||
"rv64mmu/WALLY-VIRTUALMEMORY", "2000"
|
"rv64mmu/WALLY-VIRTUALMEMORY", "2000"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
string tests32f[] = '{
|
||||||
|
"rv32f/I-FADD-S-01", "2000",
|
||||||
|
"rv32f/I-FCLASS-S-01", "2000",
|
||||||
|
"rv32f/I-FCVT-S-L-01", "2000",
|
||||||
|
"rv32f/I-FCVT-S-LU-01", "2000",
|
||||||
|
"rv32f/I-FCVT-S-W-01", "2000",
|
||||||
|
"rv32f/I-FCVT-S-WU-01", "2000",
|
||||||
|
"rv32f/I-FCVT-L-S-01", "2000",
|
||||||
|
"rv32f/I-FCVT-LU-S-01", "2000",
|
||||||
|
"rv32f/I-FCVT-W-S-01", "2000",
|
||||||
|
"rv32f/I-FCVT-WU-S-01", "2000",
|
||||||
|
"rv32f/I-FDIV-S-01", "2000",
|
||||||
|
"rv32f/I-FEQ-S-01", "2000",
|
||||||
|
"rv32f/I-FLE-S-01", "2000",
|
||||||
|
"rv32f/I-FLT-S-01", "2000",
|
||||||
|
"rv32f/I-FMADD-S-01", "2000",
|
||||||
|
"rv32f/I-FMAX-S-01", "2000",
|
||||||
|
"rv32f/I-FMIN-S-01", "2000",
|
||||||
|
"rv32f/I-FMSUB-S-01", "2000",
|
||||||
|
"rv32f/I-FMUL-S-01", "2000",
|
||||||
|
"rv32f/I-FMV-W-X-01", "2000",
|
||||||
|
"rv32f/I-FMV-X-W-01", "2000",
|
||||||
|
"rv32f/I-FNMADD-S-01", "2000",
|
||||||
|
"rv32f/I-FNMSUB-S-01", "2000",
|
||||||
|
"rv32f/I-FSGNJ-S-01", "2000",
|
||||||
|
"rv32f/I-FSGNJN-S-01", "2000",
|
||||||
|
"rv32f/I-FSGNJX-S-01", "2000",
|
||||||
|
"rv32f/I-FSQRT-S-01", "2000",
|
||||||
|
"rv32f/I-FSW-01", "2000",
|
||||||
|
"rv32f/I-FLW-01", "2000",
|
||||||
|
"rv32f/I-FSUB-S-01", "2000"
|
||||||
|
};
|
||||||
|
|
||||||
string tests64f[] = '{
|
string tests64f[] = '{
|
||||||
"rv64f/I-FADD-S-01", "2000",
|
"rv64f/I-FADD-S-01", "2000",
|
||||||
"rv64f/I-FCLASS-S-01", "2000"
|
"rv64f/I-FCLASS-S-01", "2000",
|
||||||
|
"rv64f/I-FCVT-S-L-01", "2000",
|
||||||
|
"rv64f/I-FCVT-S-LU-01", "2000",
|
||||||
|
"rv64f/I-FCVT-S-W-01", "2000",
|
||||||
|
"rv64f/I-FCVT-S-WU-01", "2000",
|
||||||
|
"rv64f/I-FCVT-L-S-01", "2000",
|
||||||
|
"rv64f/I-FCVT-LU-S-01", "2000",
|
||||||
|
"rv64f/I-FCVT-W-S-01", "2000",
|
||||||
|
"rv64f/I-FCVT-WU-S-01", "2000",
|
||||||
|
"rv64f/I-FDIV-S-01", "2000",
|
||||||
|
"rv64f/I-FEQ-S-01", "2000",
|
||||||
|
"rv64f/I-FLE-S-01", "2000",
|
||||||
|
"rv64f/I-FLT-S-01", "2000",
|
||||||
|
"rv64f/I-FMADD-S-01", "2000",
|
||||||
|
"rv64f/I-FMAX-S-01", "2000",
|
||||||
|
"rv64f/I-FMIN-S-01", "2000",
|
||||||
|
"rv64f/I-FMSUB-S-01", "2000",
|
||||||
|
"rv64f/I-FMUL-S-01", "2000",
|
||||||
|
"rv64f/I-FMV-W-X-01", "2000",
|
||||||
|
"rv64f/I-FNMADD-S-01", "2000",
|
||||||
|
"rv64f/I-FNMSUB-S-01", "2000",
|
||||||
|
"rv64f/I-FSGNJ-S-01", "2000",
|
||||||
|
"rv64f/I-FSGNJN-S-01", "2000",
|
||||||
|
"rv64f/I-FSGNJX-S-01", "2000",
|
||||||
|
"rv64f/I-FSQRT-S-01", "2000",
|
||||||
|
"rv64f/I-FSW-01", "2000",
|
||||||
|
"rv64f/I-FLW-01", "2000",
|
||||||
|
"rv64f/I-FSUB-S-01", "2000"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
string tests64d[] = '{
|
||||||
|
"rv64d/I-FMV-X-D-01", "2000",
|
||||||
|
"rv64d/I-FADD-D-01", "2000",
|
||||||
|
"rv64d/I-FCLASS-D-01", "2000",
|
||||||
|
"rv64d/I-FCVT-D-L-01", "2000",
|
||||||
|
"rv64d/I-FCVT-D-LU-01", "2000",
|
||||||
|
"rv64d/I-FCVT-D-S-01", "2000",
|
||||||
|
"rv64d/I-FCVT-D-W-01", "2000",
|
||||||
|
"rv64d/I-FCVT-D-WU-01", "2000",
|
||||||
|
"rv64d/I-FCVT-L-D-01", "2000",
|
||||||
|
"rv64d/I-FCVT-LU-D-01", "2000",
|
||||||
|
"rv64d/I-FCVT-S-D-01", "2000",
|
||||||
|
"rv64d/I-FCVT-W-D-01", "2000",
|
||||||
|
"rv64d/I-FCVT-WU-D-01", "2000",
|
||||||
|
"rv64d/I-FDIV-D-01", "2000",
|
||||||
|
"rv64d/I-FEQ-D-01", "2000",
|
||||||
|
"rv64d/I-FLD-D-01", "2000",
|
||||||
|
"rv64d/I-FLE-D-01", "2000",
|
||||||
|
"rv64d/I-FLT-D-01", "2000",
|
||||||
|
"rv64d/I-FMADD-D-01", "2000",
|
||||||
|
"rv64d/I-FMAX-D-01", "2000",
|
||||||
|
"rv64d/I-FMIN-D-01", "2000",
|
||||||
|
"rv64d/I-FMSUB-D-01", "2000",
|
||||||
|
"rv64d/I-FMUL-D-01", "2000",
|
||||||
|
"rv64d/I-FMV-D-X-01", "2000",
|
||||||
|
"rv64d/I-FNMADD-D-01", "2000",
|
||||||
|
"rv64d/I-FNMSUB-D-01", "2000",
|
||||||
|
"rv64d/I-FSD-01", "2000",
|
||||||
|
"rv64d/I-FSGNJ-D-01", "2000",
|
||||||
|
"rv64d/I-FSGNJN-D-01", "2000",
|
||||||
|
"rv64d/I-FSGNJX-D-01", "2000",
|
||||||
|
"rv64d/I-FSQRTD-01", "2000",
|
||||||
|
"rv64d/I-FSUB-D-01", "2000"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string tests64a[] = '{
|
string tests64a[] = '{
|
||||||
"rv64a/WALLY-AMO", "2110",
|
"rv64a/WALLY-AMO", "2110",
|
||||||
"rv64a/WALLY-LRSC", "2110"
|
"rv64a/WALLY-LRSC", "2110"
|
||||||
@ -426,10 +525,10 @@ module testbench();
|
|||||||
if (`C_SUPPORTED) tests = {tests, tests64ic};
|
if (`C_SUPPORTED) tests = {tests, tests64ic};
|
||||||
else tests = {tests, tests64iNOc};
|
else tests = {tests, tests64iNOc};
|
||||||
if (`M_SUPPORTED) tests = {tests, tests64m};
|
if (`M_SUPPORTED) tests = {tests, tests64m};
|
||||||
// if (`F_SUPPORTED) tests = {tests64f, tests};
|
|
||||||
// if (`D_SUPPORTED) tests = {tests64d, tests};
|
|
||||||
if (`A_SUPPORTED) tests = {tests, tests64a};
|
if (`A_SUPPORTED) tests = {tests, tests64a};
|
||||||
if (`MEM_VIRTMEM) tests = {tests, tests64mmu};
|
if (`MEM_VIRTMEM) tests = {tests, tests64mmu};
|
||||||
|
// if (`F_SUPPORTED) tests = {tests64f, tests};
|
||||||
|
// if (`D_SUPPORTED) tests = {tests64d, tests};
|
||||||
end
|
end
|
||||||
//tests = {tests64a, tests};
|
//tests = {tests64a, tests};
|
||||||
end else begin // RV32
|
end else begin // RV32
|
||||||
@ -555,6 +654,7 @@ module testbench();
|
|||||||
errors = errors+1;
|
errors = errors+1;
|
||||||
$display(" Error on test %s result %d: adr = %h sim = %h, signature = %h",
|
$display(" Error on test %s result %d: adr = %h sim = %h, signature = %h",
|
||||||
tests[test], i, (testadr+i)*`XLEN/8, dut.uncore.dtim.RAM[testadr+i], signature[i]);
|
tests[test], i, (testadr+i)*`XLEN/8, dut.uncore.dtim.RAM[testadr+i], signature[i]);
|
||||||
|
// $stop;//***debug
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
@ -633,11 +733,13 @@ module instrNameDecTB(
|
|||||||
logic [2:0] funct3;
|
logic [2:0] funct3;
|
||||||
logic [6:0] funct7;
|
logic [6:0] funct7;
|
||||||
logic [11:0] imm;
|
logic [11:0] imm;
|
||||||
|
logic [4:0] rs2;
|
||||||
|
|
||||||
assign op = instr[6:0];
|
assign op = instr[6:0];
|
||||||
assign funct3 = instr[14:12];
|
assign funct3 = instr[14:12];
|
||||||
assign funct7 = instr[31:25];
|
assign funct7 = instr[31:25];
|
||||||
assign imm = instr[31:20];
|
assign imm = instr[31:20];
|
||||||
|
assign rs2 = instr[24:20];
|
||||||
|
|
||||||
// it would be nice to add the operands to the name
|
// it would be nice to add the operands to the name
|
||||||
// create another variable called decoded
|
// create another variable called decoded
|
||||||
@ -761,6 +863,67 @@ module instrNameDecTB(
|
|||||||
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D";
|
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D";
|
||||||
else name = "ILLEGAL";
|
else name = "ILLEGAL";
|
||||||
10'b0001111_???: name = "FENCE";
|
10'b0001111_???: name = "FENCE";
|
||||||
|
10'b1000011_???: name = "FMADD";
|
||||||
|
10'b1000111_???: name = "FMSUB";
|
||||||
|
10'b1001011_???: name = "FNMSUB";
|
||||||
|
10'b1001111_???: name = "FNMADD";
|
||||||
|
10'b1010011_000: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||||
|
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||||
|
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||||
|
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||||
|
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00000) name = "FCVT.W.S";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00000) name = "FCVT.S.W";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||||
|
else if (funct7 == 7'b1110000 && rs2 == 5'b00000) name = "FMV.X.W";
|
||||||
|
else if (funct7 == 7'b1111000 && rs2 == 5'b00000) name = "FMV.W.X";
|
||||||
|
else if (funct7 == 7'b1110001 && rs2 == 5'b00000) name = "FMV.X.W"; // DOUBLE
|
||||||
|
else if (funct7 == 7'b1111001 && rs2 == 5'b00000) name = "FMV.W.X"; // DOUBLE
|
||||||
|
else if (funct7[6:2] == 5'b00100) name = "FSGNJ";
|
||||||
|
else if (funct7[6:2] == 5'b00101) name = "FMIN";
|
||||||
|
else if (funct7[6:2] == 5'b10100) name = "FLE";
|
||||||
|
else name = "ILLEGAL";
|
||||||
|
10'b1010011_001: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||||
|
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||||
|
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||||
|
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||||
|
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00000) name = "FCVT.W.S";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00000) name = "FCVT.S.W";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||||
|
else if (funct7[6:2] == 5'b00100) name = "FSGNJN";
|
||||||
|
else if (funct7[6:2] == 5'b00101) name = "FMAX";
|
||||||
|
else if (funct7[6:2] == 5'b10100) name = "FLT";
|
||||||
|
else if (funct7[6:2] == 5'b11100) name = "FCLASS";
|
||||||
|
else name = "ILLEGAL";
|
||||||
|
10'b0101111_010: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||||
|
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||||
|
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||||
|
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||||
|
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00000) name = "FCVT.W.S";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00000) name = "FCVT.S.W";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||||
|
else if (funct7[6:2] == 5'b00100) name = "FSGNJX";
|
||||||
|
else if (funct7[6:2] == 5'b10100) name = "FEQ";
|
||||||
|
else name = "ILLEGAL";
|
||||||
|
10'b1010011_???: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||||
|
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||||
|
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||||
|
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||||
|
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00000) name = "FCVT.W.S";
|
||||||
|
else if (funct7 == 7'b1100000 && rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00000) name = "FCVT.S.W";
|
||||||
|
else if (funct7 == 7'b1101000 && rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||||
|
else name = "ILLEGAL";
|
||||||
|
10'b0000111_010: name = "FLW";
|
||||||
|
10'b0100111_010: name = "FSW";
|
||||||
|
10'b0000111_010: name = "FLD";
|
||||||
|
10'b0100111_010: name = "FSD";
|
||||||
default: name = "ILLEGAL";
|
default: name = "ILLEGAL";
|
||||||
endcase
|
endcase
|
||||||
endmodule
|
endmodule
|
||||||
|
Loading…
Reference in New Issue
Block a user