Merge pull request #1231 from jordancarlin/compressed_decode

Decode compressed instructions in instrNameDecTB
This commit is contained in:
David Harris 2025-01-13 11:01:25 -08:00 committed by GitHub
commit dac75fd17e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 403 additions and 322 deletions

View File

@ -22,337 +22,418 @@
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// decode the instruction name, to help the test bench // decode the instruction name, to help the test bench
module instrNameDecTB( module instrNameDecTB #(parameter XLEN) (
input logic [31:0] instr, input logic [31:0] instr,
output string name); output string name);
logic [6:0] op; logic [6:0] op;
logic funct1;
logic [1:0] funct2;
logic [2:0] funct3; logic [2:0] funct3;
logic [4:0] funct5;
logic [6:0] funct7; logic [6:0] funct7;
logic [11:0] imm; logic [11:0] imm;
logic [4:0] rs2, rd; logic [4:0] rs2, rd, CRrs2;
logic [1:0] compressedOp;
logic [5:0] compressed15_10;
assign op = instr[6:0]; assign op = instr[6:0];
assign funct1 = instr[6];
assign funct2 = instr[6:5];
assign funct3 = instr[14:12]; assign funct3 = instr[14:12];
assign funct5 = instr[6:2];
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]; assign rs2 = instr[24:20];
assign rd = instr[11:7]; assign rd = instr[11:7];
assign compressedOp = instr[1:0];
assign compressed15_10 = instr[15:10];
assign CRrs2 = instr[6:2];
// 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
always_comb always_comb
casez({op, funct3}) case (compressedOp)
10'b0000000_000: name = "BAD"; 2'b00:
10'b0000011_000: name = "LB"; casez (compressed15_10)
10'b0000011_001: name = "LH"; 6'b000???: if (instr[12:7] != 8'b0) name = "C.ADDI4SPN";
10'b0000011_010: name = "LW"; 6'b010???: name = "C.LW";
10'b0000011_011: name = "LD"; 6'b110???: name = "C.SW";
10'b0000011_100: name = "LBU"; 6'b011???: if (XLEN == 32'd32) name = "C.FLW";
10'b0000011_101: name = "LHU"; else name = "C.LD";
10'b0000011_110: name = "LWU"; 6'b111???: if (XLEN == 32'd32) name = "C.FSW";
10'b0010011_000: if (instr[31:15] == 0 & instr[11:7] ==0) name = "NOP/FLUSH"; else name = "C.SD";
else name = "ADDI"; 6'b100000: name = "C.LBU";
10'b0010011_001: if (funct7[6:1] == 6'b000000) name = "SLLI"; 6'b100001: if (funct1 == 1'b1) name = "C.LH";
else if (funct7[6:1] == 6'b010010) name = "BCLRI"; else if (funct1 == 1'b0) name = "C.LHU";
else if (funct7[6:1] == 6'b011010) name = "BINVI"; 6'b100010: name = "C.SB";
else if (funct7[6:1] == 6'b001010) name = "BSETI"; 6'b100011: if (funct1 == 1'b0) name = "C.SH";
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "ZIP"; 6'b001???: name = "C.FLD";
else if (funct7 == 7'b0011000 & rs2 == 5'b00000) name = "AES64IM"; 6'b101???: name = "C.FSD";
else if (funct7 == 7'b0011000 & rs2[4] == 1'b1) name = "AES64KS1I"; 6'b000000: if(op == 7'b0000000 & funct3 == 3'b000) name = "BAD";
else if (funct7 == 7'b0001000 & rs2 == 5'b00010) name = "SHA256SIG0"; default: name = "ILLEGAL";
else if (funct7 == 7'b0001000 & rs2 == 5'b00011) name = "SHA256SIG1"; endcase
else if (funct7 == 7'b0001000 & rs2 == 5'b00000) name = "SHA256SUM0"; 2'b01:
else if (funct7 == 7'b0001000 & rs2 == 5'b00001) name = "SHA256SUM1"; casez (compressed15_10)
else if (funct7 == 7'b0001000 & rs2 == 5'b00110) name = "SHA512SIG0"; 6'b000000: if (rd == 5'b00000 & instr[6:2] == 5'b00000) name = "C.NOP";
else if (funct7 == 7'b0001000 & rs2 == 5'b00111) name = "SHA512SIG1"; 6'b000???: if (rd != 5'b00000 & instr[6:2] != 5'b00000) name = "C.ADDI";
else if (funct7 == 7'b0001000 & rs2 == 5'b00100) name = "SHA512SUM0"; 6'b010???: if (rd != 5'b00000) name = "C.LI";
else if (funct7 == 7'b0001000 & rs2 == 5'b00101) name = "SHA512SUM1"; 6'b011???: if (rd != 5'b00000 & rd != 5'b00010 & instr[6:2] != 5'b00000) name = "C.LUI";
else if (funct7 == 7'b0110000) begin 6'b011???: if (rd == 5'b00010 & instr[6:2] != 5'b00000) name = "C.ADDI16SP";
case (rs2) 6'b100?00: name = "C.SRLI";
5'b00000: name = "CLZ"; 6'b100?01: name = "C.SRAI";
5'b00010: name = "CPOP"; 6'b100?10: name = "C.ANDI";
5'b00001: name = "CTZ"; 6'b100011: if (funct2 == 2'b00) name = "C.SUB";
5'b00100: name = "SEXT.B"; else if (funct2 == 2'b01) name = "C.XOR";
5'b00101: name = "SEXT.H"; else if (funct2 == 2'b10) name = "C.OR";
default: name = "ILLEGAL"; else if (funct2 == 2'b11) name = "C.AND";
endcase 6'b101???: name = "C.J";
end else name = "ILLEGAL"; 6'b110???: name = "C.BEQZ";
10'b0010011_010: name = "SLTI"; 6'b111???: name = "C.BNEZ";
10'b0010011_011: name = "SLTIU"; 6'b001???: if (XLEN == 32'd32) name = "C.JAL";
10'b0010011_100: name = "XORI"; else if (XLEN == 32'd64 & rd != 5'b00000) name = "C.ADDIW";
10'b0010011_101: if (funct7[6:1] == 6'b000000) name = "SRLI"; 6'b100111: if (XLEN == 32'd64 & funct2 == 2'b00) name = "C.SUBW";
else if (funct7[6:1] == 6'b010000) name = "SRAI"; else if (XLEN == 32'd64 & funct2 == 2'b01) name = "C.ADDW";
else if (funct7[6:1] == 6'b011010 & rs2 == 5'b11000) name = "REV8"; 6'b100111: if (funct5 == 5'b11000) name = "C.ZEXT.B";
else if (funct7[6:1] == 6'b011000) name = "RORI"; else if (funct5 == 5'b11001) name = "C.SEXT.B";
else if (funct7[6:1] == 6'b010010) name = "BEXTI"; else if (funct5 == 5'b11010) name = "C.ZEXT.H";
else if (funct7 == 7'b0010100 & rs2 == 5'b00111) name = "ORC.B"; else if (funct5 == 5'b11011) name = "C.SEXT.H";
else if (imm == 12'b011010000111) name = "BREV8"; else if (funct5 == 5'b11101) name = "C.NOT";
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "UNZIP"; else if (funct2 == 2'b10) name = "C.MUL";
else name = "ILLEGAL"; else if (funct5 == 5'b11100) name = "C.ZEXT.W";
10'b0010011_110: if (rd == 0 & rs2 == 0) name = "PREFETCH.I"; default: name = "ILLEGAL";
else if (rd == 0 & rs2 == 1) name = "PREFETCH.R"; endcase
else if (rd == 0 & rs2 == 3) name = "PREFETCH.W"; 2'b10:
else name = "ORI"; casez (compressed15_10)
10'b0010011_111: name = "ANDI"; 6'b000???: if (rd != 5'b00000) name = "C.SLLI";
10'b0010111_???: name = "AUIPC"; 6'b010???: if (rd != 5'b00000) name = "C.LWSP";
10'b0100011_000: name = "SB"; 6'b1000??: if (rd != 5'b00000 & CRrs2 == 5'b00000 ) name = "C.JR";
10'b0100011_001: name = "SH"; 6'b1000??: if (rd != 5'b00000 & CRrs2 != 5'b00000 ) name = "C.MV";
10'b0100011_010: name = "SW"; 6'b1001??: if (rd == 5'b00000 & CRrs2 == 5'b00000 ) name = "C.EBREAK";
10'b0100011_011: name = "SD"; 6'b1001??: if (rd != 5'b00000 & CRrs2 == 5'b00000 ) name = "C.JALR";
10'b0011011_000: name = "ADDIW"; 6'b1001??: if (rd != 5'b00000 & CRrs2 != 5'b00000 ) name = "C.ADD";
10'b0011011_001: if (funct7 == 7'b0000000 )name = "SLLIW"; 6'b110???: name = "C.SWSP";
else if (funct7[6:1] == 6'b000010) name = "SLLI.UW"; 6'b011???: if (XLEN == 32'd32) name = "C.FLWSP";
else if (funct7 == 7'b0110000) begin else if (rd != 5'b00000) name = "C.LDSP";
case (rs2) 6'b111???: if (XLEN == 32'd32) name = "C.FSWSP";
5'b00000: name = "CLZW"; else name = "C.SDSP";
5'b00010: name = "CPOPW"; 6'b001???: name = "C.FLDSP";
5'b00001: name = "CTZW"; 6'b101???: name = "C.FSDSP";
default: name = "ILLEGAL"; default: name = "ILLEGAL";
endcase endcase
end else name = "ILLEGAL"; 2'b11:
10'b0011011_101: if (funct7 == 7'b0000000) name = "SRLIW"; casez({op, funct3})
else if (funct7 == 7'b0100000) name = "SRAIW"; 10'b0000011_000: name = "LB";
else if (funct7 == 7'b0110000) name = "RORIW"; 10'b0000011_001: name = "LH";
else name = "ILLEGAL"; 10'b0000011_010: name = "LW";
10'b0111011_000: if (funct7 == 7'b0000000) name = "ADDW"; 10'b0000011_011: name = "LD";
else if (funct7 == 7'b0100000) name = "SUBW"; 10'b0000011_100: name = "LBU";
else if (funct7 == 7'b0000001) name = "MULW"; 10'b0000011_101: name = "LHU";
else if (funct7 == 7'b0000100) name = "ADD.UW"; 10'b0000011_110: name = "LWU";
else name = "ILLEGAL"; 10'b0010011_000: if (instr[31:15] == 0 & instr[11:7] ==0) name = "NOP/FLUSH";
10'b0111011_001: if (funct7 == 7'b0000000) name = "SLLW"; else name = "ADDI";
else if (funct7 == 7'b0000001) name = "DIVW"; 10'b0010011_001: if (funct7[6:1] == 6'b000000) name = "SLLI";
else if (funct7 == 7'b0110000) name = "ROLW"; else if (funct7[6:1] == 6'b010010) name = "BCLRI";
else name = "ILLEGAL"; else if (funct7[6:1] == 6'b011010) name = "BINVI";
10'b0111011_010: if (funct7 == 7'b0010000) name = "SH1ADD.UW"; else if (funct7[6:1] == 6'b001010) name = "BSETI";
else name = "ILLEGAL"; else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "ZIP";
10'b0111011_100: if (funct7 == 7'b0010000) name = "SH2ADD.UW"; else if (funct7 == 7'b0011000 & rs2 == 5'b00000) name = "AES64IM";
else if (funct7 == 7'b0000100) name = "ZEXT.H"; else if (funct7 == 7'b0011000 & rs2[4] == 1'b1) name = "AES64KS1I";
else name = "ILLEGAL"; else if (funct7 == 7'b0001000 & rs2 == 5'b00010) name = "SHA256SIG0";
10'b0111011_101: if (funct7 == 7'b0000000) name = "SRLW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00011) name = "SHA256SIG1";
else if (funct7 == 7'b0100000) name = "SRAW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00000) name = "SHA256SUM0";
else if (funct7 == 7'b0000001) name = "DIVUW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00001) name = "SHA256SUM1";
else if (funct7 == 7'b0110000) name = "RORW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00110) name = "SHA512SIG0";
else name = "ILLEGAL"; else if (funct7 == 7'b0001000 & rs2 == 5'b00111) name = "SHA512SIG1";
10'b0111011_110: if (funct7 == 7'b0000001) name = "REMW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00100) name = "SHA512SUM0";
else if (funct7 == 7'b0010000) name = "SH3ADD.UW"; else if (funct7 == 7'b0001000 & rs2 == 5'b00101) name = "SHA512SUM1";
else name = "ILLEGAL"; else if (funct7 == 7'b0110000) begin
10'b0111011_111: if (funct7 == 7'b0000001) name = "REMUW"; case (rs2)
else name = "ILLEGAL"; 5'b00000: name = "CLZ";
10'b0110011_000: if (funct7 == 7'b0000000) name = "ADD"; 5'b00010: name = "CPOP";
else if (funct7 == 7'b0000001) name = "MUL"; 5'b00001: name = "CTZ";
else if (funct7 == 7'b0100000) name = "SUB"; 5'b00100: name = "SEXT.B";
else if (funct7[4:0] == 5'b10101) name = "AES32DSI"; 5'b00101: name = "SEXT.H";
else if (funct7[4:0] == 5'b10111) name = "AES32DSMI"; default: name = "ILLEGAL";
else if (funct7 == 7'b0011101) name = "AES64DS"; endcase
else if (funct7 == 7'b0011111) name = "AES64DSM"; end else name = "ILLEGAL";
else if (funct7[4:0] == 5'b10001) name = "AES32ESI"; 10'b0010011_010: name = "SLTI";
else if (funct7[4:0] == 5'b10011) name = "AES32ESMI"; 10'b0010011_011: name = "SLTIU";
else if (funct7 == 7'b0011001) name = "AES64ES"; 10'b0010011_100: name = "XORI";
else if (funct7 == 7'b0011011) name = "AES64ESM"; 10'b0010011_101: if (funct7[6:1] == 6'b000000) name = "SRLI";
else if (funct7 == 7'b0111111) name = "AES64KS2"; else if (funct7[6:1] == 6'b010000) name = "SRAI";
else if (funct7 == 7'b0101110) name = "SHA512SIG0H"; else if (funct7[6:1] == 6'b011010 & rs2 == 5'b11000) name = "REV8";
else if (funct7 == 7'b0101010) name = "SHA512SIG0L"; else if (funct7[6:1] == 6'b011000) name = "RORI";
else if (funct7 == 7'b0101111) name = "SHA512SIG1H"; else if (funct7[6:1] == 6'b010010) name = "BEXTI";
else if (funct7 == 7'b0101011) name = "SHA512SIG1L"; else if (funct7 == 7'b0010100 & rs2 == 5'b00111) name = "ORC.B";
else if (funct7 == 7'b0101000) name = "SHA512SUM0R"; else if (imm == 12'b011010000111) name = "BREV8";
else if (funct7 == 7'b0101001) name = "SHA512SUM1R"; else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "UNZIP";
else name = "ILLEGAL"; else name = "ILLEGAL";
10'b0110011_001: if (funct7 == 7'b0000000) name = "SLL"; 10'b0010011_110: if (rd == 0 & rs2 == 0) name = "PREFETCH.I";
else if (funct7 == 7'b0000001) name = "MULH"; else if (rd == 0 & rs2 == 1) name = "PREFETCH.R";
else if (funct7 == 7'b0110000) name = "ROL"; else if (rd == 0 & rs2 == 3) name = "PREFETCH.W";
else if (funct7 == 7'b0000101) name = "CLMUL"; else name = "ORI";
else if (funct7 == 7'b0100100) name = "BCLR"; 10'b0010011_111: name = "ANDI";
else if (funct7 == 7'b0110100) name = "BINV"; 10'b0010111_???: name = "AUIPC";
else if (funct7 == 7'b0010100) name = "BSET"; 10'b0100011_000: name = "SB";
else name = "ILLEGAL"; 10'b0100011_001: name = "SH";
10'b0110011_010: if (funct7 == 7'b0000000) name = "SLT"; 10'b0100011_010: name = "SW";
else if (funct7 == 7'b0000001) name = "MULHSU"; 10'b0100011_011: name = "SD";
else if (funct7 == 7'b0010000) name = "SH1ADD"; 10'b0011011_000: name = "ADDIW";
else if (funct7 == 7'b0000101) name = "CLMULR"; 10'b0011011_001: if (funct7 == 7'b0000000 )name = "SLLIW";
else name = "ILLEGAL"; else if (funct7[6:1] == 6'b000010) name = "SLLI.UW";
10'b0110011_011: if (funct7 == 7'b0000000) name = "SLTU"; else if (funct7 == 7'b0110000) begin
else if (funct7 == 7'b0000001) name = "MULHU"; case (rs2)
else if (funct7 == 7'b0000101) name = "CLMULH"; 5'b00000: name = "CLZW";
else name = "ILLEGAL"; 5'b00010: name = "CPOPW";
10'b0110011_100: if (funct7 == 7'b0000000) name = "XOR"; 5'b00001: name = "CTZW";
else if (funct7 == 7'b0000001) name = "DIV"; default: name = "ILLEGAL";
else if (funct7 == 7'b0010000) name = "SH2ADD"; endcase
else if (funct7 == 7'b0000101) name = "MIN"; end else name = "ILLEGAL";
else if (funct7 == 7'b0100000) name = "ORN"; 10'b0011011_101: if (funct7 == 7'b0000000) name = "SRLIW";
else if (funct7 == 7'b0000100 & rs2 == 5'b00000) name = "ZEXT.H"; else if (funct7 == 7'b0100000) name = "SRAIW";
else if (funct7 == 7'b0000100 & op == 7'b0110011) name = "PACK"; else if (funct7 == 7'b0110000) name = "RORIW";
else if (funct7 == 7'b0000100 & op == 7'b0111011) name = "PACKW"; else name = "ILLEGAL";
else name = "ILLEGAL"; 10'b0111011_000: if (funct7 == 7'b0000000) name = "ADDW";
10'b0110011_101: if (funct7 == 7'b0000000) name = "SRL"; else if (funct7 == 7'b0100000) name = "SUBW";
else if (funct7 == 7'b0000001) name = "DIVU"; else if (funct7 == 7'b0000001) name = "MULW";
else if (funct7 == 7'b0100000) name = "SRA"; else if (funct7 == 7'b0000100) name = "ADD.UW";
else if (funct7 == 7'b0000101) name = "MINU"; else name = "ILLEGAL";
else if (funct7 == 7'b0110000) name = "ROR"; 10'b0111011_001: if (funct7 == 7'b0000000) name = "SLLW";
else if (funct7 == 7'b0100100) name = "BEXT"; else if (funct7 == 7'b0000001) name = "DIVW";
else if (funct7 == 7'b0000111) name = "CZERO.EQZ"; else if (funct7 == 7'b0110000) name = "ROLW";
else name = "ILLEGAL"; else name = "ILLEGAL";
10'b0110011_110: if (funct7 == 7'b0000000) name = "OR"; 10'b0111011_010: if (funct7 == 7'b0010000) name = "SH1ADD.UW";
else if (funct7 == 7'b0000001) name = "REM"; else name = "ILLEGAL";
else if (funct7 == 7'b0010000) name = "SH3ADD"; 10'b0111011_100: if (funct7 == 7'b0010000) name = "SH2ADD.UW";
else if (funct7 == 7'b0000101) name = "MAX"; else if (funct7 == 7'b0000100) name = "ZEXT.H";
else if (funct7 == 7'b0100000) name = "XNOR"; else name = "ILLEGAL";
else name = "ILLEGAL"; 10'b0111011_101: if (funct7 == 7'b0000000) name = "SRLW";
10'b0110011_111: if (funct7 == 7'b0000000) name = "AND"; else if (funct7 == 7'b0100000) name = "SRAW";
else if (funct7 == 7'b0000001) name = "REMU"; else if (funct7 == 7'b0000001) name = "DIVUW";
else if (funct7 == 7'b0000101) name = "MAXU"; else if (funct7 == 7'b0110000) name = "RORW";
else if (funct7 == 7'b0100000) name = "ANDN"; else name = "ILLEGAL";
else if (funct7 == 7'b0000111) name = "CZERO.NEZ"; 10'b0111011_110: if (funct7 == 7'b0000001) name = "REMW";
else name = "ILLEGAL"; else if (funct7 == 7'b0010000) name = "SH3ADD.UW";
10'b0110111_???: name = "LUI"; else name = "ILLEGAL";
10'b1100011_000: name = "BEQ"; 10'b0111011_111: if (funct7 == 7'b0000001) name = "REMUW";
10'b1100011_001: name = "BNE"; else name = "ILLEGAL";
10'b1100011_100: name = "BLT"; 10'b0110011_000: if (funct7 == 7'b0000000) name = "ADD";
10'b1100011_101: name = "BGE"; else if (funct7 == 7'b0000001) name = "MUL";
10'b1100011_110: name = "BLTU"; else if (funct7 == 7'b0100000) name = "SUB";
10'b1100011_111: name = "BGEU"; else if (funct7[4:0] == 5'b10101) name = "AES32DSI";
10'b1100111_000: name = "JALR"; else if (funct7[4:0] == 5'b10111) name = "AES32DSMI";
10'b1101111_???: name = "JAL"; else if (funct7 == 7'b0011101) name = "AES64DS";
10'b1110011_000: if (imm == 0) name = "ECALL"; else if (funct7 == 7'b0011111) name = "AES64DSM";
else if (imm == 1) name = "EBREAK"; else if (funct7[4:0] == 5'b10001) name = "AES32ESI";
else if (imm == 258) name = "SRET"; else if (funct7[4:0] == 5'b10011) name = "AES32ESMI";
else if (imm == 770) name = "MRET"; else if (funct7 == 7'b0011001) name = "AES64ES";
else if (funct7 == 9) name = "SFENCE.VMA"; else if (funct7 == 7'b0011011) name = "AES64ESM";
else if (funct7 == 11) name = "SINVAL.VMA"; else if (funct7 == 7'b0111111) name = "AES64KS2";
else if (funct7 == 12 & rs2 == 0) name = "SFENCE.W.INVAL"; else if (funct7 == 7'b0101110) name = "SHA512SIG0H";
else if (funct7 == 12 & rs2 == 1) name = "SFENCE.INVAL.IR"; else if (funct7 == 7'b0101010) name = "SHA512SIG0L";
else if (imm == 259) name = "WFI"; else if (funct7 == 7'b0101111) name = "SHA512SIG1H";
else if (imm == 261) name = "WFI"; else if (funct7 == 7'b0101011) name = "SHA512SIG1L";
else name = "ILLEGAL"; else if (funct7 == 7'b0101000) name = "SHA512SUM0R";
10'b1110011_001: name = "CSRRW"; else if (funct7 == 7'b0101001) name = "SHA512SUM1R";
10'b1110011_010: name = "CSRRS"; else name = "ILLEGAL";
10'b1110011_011: name = "CSRRC"; 10'b0110011_001: if (funct7 == 7'b0000000) name = "SLL";
10'b1110011_101: name = "CSRRWI"; else if (funct7 == 7'b0000001) name = "MULH";
10'b1110011_110: name = "CSRRSI"; else if (funct7 == 7'b0110000) name = "ROL";
10'b1110011_111: name = "CSRRCI"; else if (funct7 == 7'b0000101) name = "CLMUL";
10'b0101111_010: if (funct7[6:2] == 5'b00010) name = "LR.W"; else if (funct7 == 7'b0100100) name = "BCLR";
else if (funct7[6:2] == 5'b00011) name = "SC.W"; else if (funct7 == 7'b0110100) name = "BINV";
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.W"; else if (funct7 == 7'b0010100) name = "BSET";
else if (funct7[6:2] == 5'b00000) name = "AMOADD.W"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.W"; 10'b0110011_010: if (funct7 == 7'b0000000) name = "SLT";
else if (funct7[6:2] == 5'b01100) name = "AMOAND.W"; else if (funct7 == 7'b0000001) name = "MULHSU";
else if (funct7[6:2] == 5'b01000) name = "AMOOR.W"; else if (funct7 == 7'b0010000) name = "SH1ADD";
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.W"; else if (funct7 == 7'b0000101) name = "CLMULR";
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.W"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.W"; 10'b0110011_011: if (funct7 == 7'b0000000) name = "SLTU";
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.W"; else if (funct7 == 7'b0000001) name = "MULHU";
else name = "ILLEGAL"; else if (funct7 == 7'b0000101) name = "CLMULH";
10'b0101111_011: if (funct7[6:2] == 5'b00010) name = "LR.D"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b00011) name = "SC.D"; 10'b0110011_100: if (funct7 == 7'b0000000) name = "XOR";
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.D"; else if (funct7 == 7'b0000001) name = "DIV";
else if (funct7[6:2] == 5'b00000) name = "AMOADD.D"; else if (funct7 == 7'b0010000) name = "SH2ADD";
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.D"; else if (funct7 == 7'b0000101) name = "MIN";
else if (funct7[6:2] == 5'b01100) name = "AMOAND.D"; else if (funct7 == 7'b0100000) name = "ORN";
else if (funct7[6:2] == 5'b01000) name = "AMOOR.D"; else if (funct7 == 7'b0000100 & rs2 == 5'b00000) name = "ZEXT.H";
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.D"; else if (funct7 == 7'b0000100 & op == 7'b0110011) name = "PACK";
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.D"; else if (funct7 == 7'b0000100 & op == 7'b0111011) name = "PACKW";
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.D"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D"; 10'b0110011_101: if (funct7 == 7'b0000000) name = "SRL";
else name = "ILLEGAL"; else if (funct7 == 7'b0000001) name = "DIVU";
10'b0001111_000: name = "FENCE"; else if (funct7 == 7'b0100000) name = "SRA";
10'b0001111_001: name = "FENCE.I"; else if (funct7 == 7'b0000101) name = "MINU";
10'b0001111_010: if (instr[31:20] == 12'd0) name = "CBO.INVAL"; else if (funct7 == 7'b0110000) name = "ROR";
else if (instr[31:20] == 12'd1) name = "CBO.CLEAN"; else if (funct7 == 7'b0100100) name = "BEXT";
else if (instr[31:20] == 12'd2) name = "CBO.FLUSH"; else if (funct7 == 7'b0000111) name = "CZERO.EQZ";
else if (instr[31:20] == 12'd4) name = "CBO.ZERO"; else name = "ILLEGAL";
else name = "ILLEGAL"; 10'b0110011_110: if (funct7 == 7'b0000000) name = "OR";
10'b1000011_???: name = "FMADD"; else if (funct7 == 7'b0000001) name = "REM";
10'b1000111_???: name = "FMSUB"; else if (funct7 == 7'b0010000) name = "SH3ADD";
10'b1001011_???: name = "FNMSUB"; else if (funct7 == 7'b0000101) name = "MAX";
10'b1001111_???: name = "FNMADD"; else if (funct7 == 7'b0100000) name = "XNOR";
10'b1010011_???: if (funct7[6:2] == 5'b00000) name = "FADD"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b00001) name = "FSUB"; 10'b0110011_111: if (funct7 == 7'b0000000) name = "AND";
else if (funct7[6:2] == 5'b00010) name = "FMUL"; else if (funct7 == 7'b0000001) name = "REMU";
else if (funct7[6:2] == 5'b00011) name = "FDIV"; else if (funct7 == 7'b0000101) name = "MAXU";
else if (funct7[6:2] == 5'b01011) name = "FSQRT"; else if (funct7 == 7'b0100000) name = "ANDN";
else if (funct7 == 7'b1100000 & rs2 == 5'b00000) name = "FCVT.W.S"; else if (funct7 == 7'b0000111) name = "CZERO.NEZ";
else if (funct7 == 7'b1100000 & rs2 == 5'b00001) name = "FCVT.WU.S"; else name = "ILLEGAL";
else if (funct7 == 7'b1100000 & rs2 == 5'b00010) name = "FCVT.L.S"; 10'b0110111_???: name = "LUI";
else if (funct7 == 7'b1100000 & rs2 == 5'b00011) name = "FCVT.LU.S"; 10'b1100011_000: name = "BEQ";
else if (funct7 == 7'b1101000 & rs2 == 5'b00000) name = "FCVT.S.W"; 10'b1100011_001: name = "BNE";
else if (funct7 == 7'b1101000 & rs2 == 5'b00001) name = "FCVT.S.WU"; 10'b1100011_100: name = "BLT";
else if (funct7 == 7'b1101000 & rs2 == 5'b00010) name = "FCVT.S.L"; 10'b1100011_101: name = "BGE";
else if (funct7 == 7'b1101000 & rs2 == 5'b00011) name = "FCVT.S.LU"; 10'b1100011_110: name = "BLTU";
else if (funct7 == 7'b1100001 & rs2 == 5'b00000) name = "FCVT.W.D"; 10'b1100011_111: name = "BGEU";
else if (funct7 == 7'b1100001 & rs2 == 5'b00001) name = "FCVT.WU.D"; 10'b1100111_000: name = "JALR";
else if (funct7 == 7'b1100001 & rs2 == 5'b00010) name = "FCVT.L.D"; 10'b1101111_???: name = "JAL";
else if (funct7 == 7'b1100001 & rs2 == 5'b00011) name = "FCVT.LU.D"; 10'b1110011_000: if (imm == 0) name = "ECALL";
else if (funct7 == 7'b1101001 & rs2 == 5'b00000) name = "FCVT.D.W"; else if (imm == 1) name = "EBREAK";
else if (funct7 == 7'b1101001 & rs2 == 5'b00001) name = "FCVT.D.WU"; else if (imm == 258) name = "SRET";
else if (funct7 == 7'b1101001 & rs2 == 5'b00010) name = "FCVT.D.L"; else if (imm == 770) name = "MRET";
else if (funct7 == 7'b1101001 & rs2 == 5'b00011) name = "FCVT.D.LU"; else if (funct7 == 9) name = "SFENCE.VMA";
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D"; else if (funct7 == 11) name = "SINVAL.VMA";
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S"; else if (funct7 == 12 & rs2 == 0) name = "SFENCE.W.INVAL";
else if (funct7 == 7'b1100010 & rs2 == 5'b00000) name = "FCVT.W.H"; else if (funct7 == 12 & rs2 == 1) name = "SFENCE.INVAL.IR";
else if (funct7 == 7'b1100010 & rs2 == 5'b00001) name = "FCVT.WU.H"; else if (imm == 259) name = "WFI";
else if (funct7 == 7'b1100010 & rs2 == 5'b00010) name = "FCVT.L.H"; else if (imm == 261) name = "WFI";
else if (funct7 == 7'b1100010 & rs2 == 5'b00011) name = "FCVT.LU.H"; else name = "ILLEGAL";
else if (funct7 == 7'b1101010 & rs2 == 5'b00000) name = "FCVT.H.W"; 10'b1110011_001: name = "CSRRW";
else if (funct7 == 7'b1101010 & rs2 == 5'b00001) name = "FCVT.H.WU"; 10'b1110011_010: name = "CSRRS";
else if (funct7 == 7'b1101010 & rs2 == 5'b00010) name = "FCVT.H.L"; 10'b1110011_011: name = "CSRRC";
else if (funct7 == 7'b1101010 & rs2 == 5'b00011) name = "FCVT.H.LU"; 10'b1110011_101: name = "CSRRWI";
else if (funct7 == 7'b1100011 & rs2 == 5'b00000) name = "FCVT.W.Q"; 10'b1110011_110: name = "CSRRSI";
else if (funct7 == 7'b1100011 & rs2 == 5'b00001) name = "FCVT.WU.Q"; 10'b1110011_111: name = "CSRRCI";
else if (funct7 == 7'b1100011 & rs2 == 5'b00010) name = "FCVT.L.Q"; 10'b0101111_010: if (funct7[6:2] == 5'b00010) name = "LR.W";
else if (funct7 == 7'b1100011 & rs2 == 5'b00011) name = "FCVT.LU.Q"; else if (funct7[6:2] == 5'b00011) name = "SC.W";
else if (funct7 == 7'b1101011 & rs2 == 5'b00000) name = "FCVT.Q.W"; else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.W";
else if (funct7 == 7'b1101011 & rs2 == 5'b00001) name = "FCVT.Q.WU"; else if (funct7[6:2] == 5'b00000) name = "AMOADD.W";
else if (funct7 == 7'b1101011 & rs2 == 5'b00010) name = "FCVT.Q.L"; else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.W";
else if (funct7 == 7'b1101011 & rs2 == 5'b00011) name = "FCVT.Q.LU"; else if (funct7[6:2] == 5'b01100) name = "AMOAND.W";
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D"; else if (funct7[6:2] == 5'b01000) name = "AMOOR.W";
else if (funct7 == 7'b0100000 & rs2 == 5'b00010) name = "FCVT.S.H"; else if (funct7[6:2] == 5'b10000) name = "AMOMIN.W";
else if (funct7 == 7'b0100000 & rs2 == 5'b00011) name = "FCVT.S.Q"; else if (funct7[6:2] == 5'b10100) name = "AMOMAX.W";
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S"; else if (funct7[6:2] == 5'b11000) name = "AMOMINU.W";
else if (funct7 == 7'b0100001 & rs2 == 5'b00010) name = "FCVT.D.H"; else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.W";
else if (funct7 == 7'b0100001 & rs2 == 5'b00011) name = "FCVT.D.Q"; else name = "ILLEGAL";
else if (funct7 == 7'b0100010 & rs2 == 5'b00000) name = "FCVT.H.S"; 10'b0101111_011: if (funct7[6:2] == 5'b00010) name = "LR.D";
else if (funct7 == 7'b0100010 & rs2 == 5'b00001) name = "FCVT.H.D"; else if (funct7[6:2] == 5'b00011) name = "SC.D";
else if (funct7 == 7'b0100010 & rs2 == 5'b00011) name = "FCVT.H.Q"; else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.D";
else if (funct7 == 7'b0100011 & rs2 == 5'b00000) name = "FCVT.Q.S"; else if (funct7[6:2] == 5'b00000) name = "AMOADD.D";
else if (funct7 == 7'b0100011 & rs2 == 5'b00001) name = "FCVT.Q.D"; else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.D";
else if (funct7 == 7'b0100011 & rs2 == 5'b00010) name = "FCVT.Q.H"; else if (funct7[6:2] == 5'b01100) name = "AMOAND.D";
else if (funct7 == 7'b1110000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.W"; else if (funct7[6:2] == 5'b01000) name = "AMOOR.D";
else if (funct7 == 7'b1111000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.W.X"; else if (funct7[6:2] == 5'b10000) name = "AMOMIN.D";
else if (funct7 == 7'b1110001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.D"; else if (funct7[6:2] == 5'b10100) name = "AMOMAX.D";
else if (funct7 == 7'b1111001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.D.X"; else if (funct7[6:2] == 5'b11000) name = "AMOMINU.D";
else if (funct7 == 7'b1110010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.H"; else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D";
else if (funct7 == 7'b1111010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.H.X"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b000) name = "FSGNJ"; 10'b0001111_000: name = "FENCE";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b000) name = "FMIN"; 10'b0001111_001: name = "FENCE.I";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b000) name = "FLE"; 10'b0001111_010: if (instr[31:20] == 12'd0) name = "CBO.INVAL";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b001) name = "FSGNJN"; else if (instr[31:20] == 12'd1) name = "CBO.CLEAN";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b001) name = "FMAX"; else if (instr[31:20] == 12'd2) name = "CBO.FLUSH";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b001) name = "FLT"; else if (instr[31:20] == 12'd4) name = "CBO.ZERO";
else if (funct7[6:2] == 5'b11100 & funct3 == 3'b001) name = "FCLASS"; else name = "ILLEGAL";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b010) name = "FSGNJX"; 10'b1000011_???: name = "FMADD";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b010) name = "FEQ"; 10'b1000111_???: name = "FMSUB";
else if (funct7[6:2] == 5'b11110 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FLI"; 10'b1001011_???: name = "FNMSUB";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b010) name = "FMINM"; 10'b1001111_???: name = "FNMADD";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b011) name = "FMAXM"; 10'b1010011_???: if (funct7[6:2] == 5'b00000) name = "FADD";
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00100) name = "FROUND"; else if (funct7[6:2] == 5'b00001) name = "FSUB";
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00101) name = "FROUNDNX"; else if (funct7[6:2] == 5'b00010) name = "FMUL";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b100) name = "FLEQ"; else if (funct7[6:2] == 5'b00011) name = "FDIV";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b101) name = "FLTQ"; else if (funct7[6:2] == 5'b01011) name = "FSQRT";
else if (funct7 == 7'b1110001 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.D"; else if (funct7 == 7'b1100000 & rs2 == 5'b00000) name = "FCVT.W.S";
else if (funct7 == 7'b1110011 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.Q"; else if (funct7 == 7'b1100000 & rs2 == 5'b00001) name = "FCVT.WU.S";
else if (funct7 == 7'b1011001 & funct3 == 3'b000) name = "FMVP.D.X"; else if (funct7 == 7'b1100000 & rs2 == 5'b00010) name = "FCVT.L.S";
else if (funct7 == 7'b1011011 & funct3 == 3'b000) name = "FMVP.Q.X"; else if (funct7 == 7'b1100000 & rs2 == 5'b00011) name = "FCVT.LU.S";
else if (funct7 == 7'b1100001 & funct3 == 3'b001 & rs2 == 5'b01000) name = "FCVTMOD.W.D"; else if (funct7 == 7'b1101000 & rs2 == 5'b00000) name = "FCVT.S.W";
else name = "ILLEGAL"; else if (funct7 == 7'b1101000 & rs2 == 5'b00001) name = "FCVT.S.WU";
10'b0000111_001: name = "FLH"; else if (funct7 == 7'b1101000 & rs2 == 5'b00010) name = "FCVT.S.L";
10'b0000111_010: name = "FLW"; else if (funct7 == 7'b1101000 & rs2 == 5'b00011) name = "FCVT.S.LU";
10'b0000111_011: name = "FLD"; else if (funct7 == 7'b1100001 & rs2 == 5'b00000) name = "FCVT.W.D";
10'b0000111_100: name = "FLQ"; else if (funct7 == 7'b1100001 & rs2 == 5'b00001) name = "FCVT.WU.D";
10'b0100111_001: name = "FSH"; else if (funct7 == 7'b1100001 & rs2 == 5'b00010) name = "FCVT.L.D";
10'b0100111_010: name = "FSW"; else if (funct7 == 7'b1100001 & rs2 == 5'b00011) name = "FCVT.LU.D";
10'b0100111_011: name = "FSD"; else if (funct7 == 7'b1101001 & rs2 == 5'b00000) name = "FCVT.D.W";
10'b0100111_100: name = "FSQ"; else if (funct7 == 7'b1101001 & rs2 == 5'b00001) name = "FCVT.D.WU";
default: name = "ILLEGAL"; else if (funct7 == 7'b1101001 & rs2 == 5'b00010) name = "FCVT.D.L";
else if (funct7 == 7'b1101001 & rs2 == 5'b00011) name = "FCVT.D.LU";
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
else if (funct7 == 7'b1100010 & rs2 == 5'b00000) name = "FCVT.W.H";
else if (funct7 == 7'b1100010 & rs2 == 5'b00001) name = "FCVT.WU.H";
else if (funct7 == 7'b1100010 & rs2 == 5'b00010) name = "FCVT.L.H";
else if (funct7 == 7'b1100010 & rs2 == 5'b00011) name = "FCVT.LU.H";
else if (funct7 == 7'b1101010 & rs2 == 5'b00000) name = "FCVT.H.W";
else if (funct7 == 7'b1101010 & rs2 == 5'b00001) name = "FCVT.H.WU";
else if (funct7 == 7'b1101010 & rs2 == 5'b00010) name = "FCVT.H.L";
else if (funct7 == 7'b1101010 & rs2 == 5'b00011) name = "FCVT.H.LU";
else if (funct7 == 7'b1100011 & rs2 == 5'b00000) name = "FCVT.W.Q";
else if (funct7 == 7'b1100011 & rs2 == 5'b00001) name = "FCVT.WU.Q";
else if (funct7 == 7'b1100011 & rs2 == 5'b00010) name = "FCVT.L.Q";
else if (funct7 == 7'b1100011 & rs2 == 5'b00011) name = "FCVT.LU.Q";
else if (funct7 == 7'b1101011 & rs2 == 5'b00000) name = "FCVT.Q.W";
else if (funct7 == 7'b1101011 & rs2 == 5'b00001) name = "FCVT.Q.WU";
else if (funct7 == 7'b1101011 & rs2 == 5'b00010) name = "FCVT.Q.L";
else if (funct7 == 7'b1101011 & rs2 == 5'b00011) name = "FCVT.Q.LU";
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
else if (funct7 == 7'b0100000 & rs2 == 5'b00010) name = "FCVT.S.H";
else if (funct7 == 7'b0100000 & rs2 == 5'b00011) name = "FCVT.S.Q";
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
else if (funct7 == 7'b0100001 & rs2 == 5'b00010) name = "FCVT.D.H";
else if (funct7 == 7'b0100001 & rs2 == 5'b00011) name = "FCVT.D.Q";
else if (funct7 == 7'b0100010 & rs2 == 5'b00000) name = "FCVT.H.S";
else if (funct7 == 7'b0100010 & rs2 == 5'b00001) name = "FCVT.H.D";
else if (funct7 == 7'b0100010 & rs2 == 5'b00011) name = "FCVT.H.Q";
else if (funct7 == 7'b0100011 & rs2 == 5'b00000) name = "FCVT.Q.S";
else if (funct7 == 7'b0100011 & rs2 == 5'b00001) name = "FCVT.Q.D";
else if (funct7 == 7'b0100011 & rs2 == 5'b00010) name = "FCVT.Q.H";
else if (funct7 == 7'b1110000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.W";
else if (funct7 == 7'b1111000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.W.X";
else if (funct7 == 7'b1110001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.D";
else if (funct7 == 7'b1111001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.D.X";
else if (funct7 == 7'b1110010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.H";
else if (funct7 == 7'b1111010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.H.X";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b000) name = "FSGNJ";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b000) name = "FMIN";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b000) name = "FLE";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b001) name = "FSGNJN";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b001) name = "FMAX";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b001) name = "FLT";
else if (funct7[6:2] == 5'b11100 & funct3 == 3'b001) name = "FCLASS";
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b010) name = "FSGNJX";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b010) name = "FEQ";
else if (funct7[6:2] == 5'b11110 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FLI";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b010) name = "FMINM";
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b011) name = "FMAXM";
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00100) name = "FROUND";
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00101) name = "FROUNDNX";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b100) name = "FLEQ";
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b101) name = "FLTQ";
else if (funct7 == 7'b1110001 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.D";
else if (funct7 == 7'b1110011 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.Q";
else if (funct7 == 7'b1011001 & funct3 == 3'b000) name = "FMVP.D.X";
else if (funct7 == 7'b1011011 & funct3 == 3'b000) name = "FMVP.Q.X";
else if (funct7 == 7'b1100001 & funct3 == 3'b001 & rs2 == 5'b01000) name = "FCVTMOD.W.D";
else name = "ILLEGAL";
10'b0000111_001: name = "FLH";
10'b0000111_010: name = "FLW";
10'b0000111_011: name = "FLD";
10'b0000111_100: name = "FLQ";
10'b0100111_001: name = "FSH";
10'b0100111_010: name = "FSW";
10'b0100111_011: name = "FSD";
10'b0100111_100: name = "FSQ";
default: name = "ILLEGAL";
endcase
endcase endcase
endmodule endmodule

View File

@ -19,7 +19,7 @@
// and limitations under the License. // and limitations under the License.
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
module instrTrackerTB( module instrTrackerTB #(parameter XLEN) (
input logic clk, reset, FlushE, input logic clk, reset, FlushE,
input logic [31:0] InstrF, InstrD, input logic [31:0] InstrF, InstrD,
input logic [31:0] InstrE, InstrM, input logic [31:0] InstrE, InstrM,
@ -30,9 +30,9 @@ module instrTrackerTB(
// stage Instr to Writeback for visualization // stage Instr to Writeback for visualization
// flopr #(32) InstrWReg(clk, reset, InstrM, InstrW); // flopr #(32) InstrWReg(clk, reset, InstrM, InstrW);
instrNameDecTB fdec(InstrF, InstrFName); instrNameDecTB #(XLEN) fdec(InstrF, InstrFName);
instrNameDecTB ddec(InstrD, InstrDName); instrNameDecTB #(XLEN) ddec(InstrD, InstrDName);
instrNameDecTB edec(InstrE, InstrEName); instrNameDecTB #(XLEN) edec(InstrE, InstrEName);
instrNameDecTB mdec(InstrM, InstrMName); instrNameDecTB #(XLEN) mdec(InstrM, InstrMName);
instrNameDecTB wdec(InstrW, InstrWName); instrNameDecTB #(XLEN) wdec(InstrW, InstrWName);
endmodule endmodule

View File

@ -733,7 +733,7 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi);
int file; int file;
string LogFile; string LogFile;
if(`STD_LOG) begin if(`STD_LOG) begin
instrNameDecTB NameDecoder(rvvi.insn[0][0], instrWName); instrNameDecTB #(P.XLEN) NameDecoder(rvvi.insn[0][0], instrWName);
initial begin initial begin
LogFile = "logs/boottrace.log"; LogFile = "logs/boottrace.log";
file = $fopen(LogFile, "w"); file = $fopen(LogFile, "w");

View File

@ -669,7 +669,7 @@ module testbench;
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName; string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
logic [31:0] InstrW; logic [31:0] InstrW;
flopenr #(32) InstrWReg(clk, reset, ~dut.core.ieu.dp.StallW, InstrM, InstrW); flopenr #(32) InstrWReg(clk, reset, ~dut.core.ieu.dp.StallW, InstrM, InstrW);
instrTrackerTB it(clk, reset, dut.core.ieu.dp.FlushE, instrTrackerTB #(P.XLEN) it(clk, reset, dut.core.ieu.dp.FlushE,
dut.core.ifu.InstrRawF[31:0], dut.core.ifu.InstrRawF[31:0],
dut.core.ifu.InstrD, dut.core.ifu.InstrE, dut.core.ifu.InstrD, dut.core.ifu.InstrE,
InstrM, InstrW, InstrM, InstrW,