diff --git a/cycles.txt b/cycles.txt new file mode 100644 index 0000000..2f86175 --- /dev/null +++ b/cycles.txt @@ -0,0 +1,1728 @@ +{ + "RV32GC" : [ + { + "name" : "LUI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AUIPC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JAL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JALR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "BEQ", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BNE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLT", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLTU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGEU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "LB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LBU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LHU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTIU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ANDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRAI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SUB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLT", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XOR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "OR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AND", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE_I", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ECALL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "EBREAK", + "size" : 32, + "delay" : 1 + }, + { + "name" : "URET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "MRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "WFI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SFENCE.VMA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRS", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRWI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRSI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRCI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "MUL", + "size" : 32, + "delay" : 5 + }, + { + "name" : "MULH", + "size" : 32, + "delay" : 5 + }, + { + "name" : "MULHSU", + "size" : 320, + "delay" : 5 + }, + { + "name" : "MULHU", + "size" : 32, + "delay" : 5 + }, + { + "name" : "DIV", + "size" : 32, + "delay" : 10 + }, + { + "name" : "DIVU", + "size" : 32, + "delay" : 10 + }, + { + "name" : "REM", + "size" : 32, + "delay" : 10 + }, + { + "name" : "REMU", + "size" : 32, + "delay" : 10 + }, + { + "name" : "LR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SC.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOSWAP.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOADD.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOXOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOAND.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMIN.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAX.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMINU.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAXU.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "C.ADDI4SPN", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADDI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.NOP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JAL", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LUI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADDI16SP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SRLI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SRAI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ANDI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SUB", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.XOR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.OR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.AND", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.J", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.BEQZ", + "size" : 16, + "delay" : [1, 3] + }, + { + "name" : "C.BNEZ", + "size" : 16, + "delay" : [1, 3] + }, + { + "name" : "C.SLLI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.MV", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADD", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JALR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.EBREAK", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "DII", + "size" : 16, + "delay" : 1 + }, + { + "name" : "FLW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMADD.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMSUB.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FNMADD.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FNMSUB.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FADD.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSUB.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMUL.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FDIV.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSQRT.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJ.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJN.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJX.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMIN.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMAX.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.W.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.WU.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FEQ.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FLT.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FLE.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCLASS.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.S.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.S.WU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMV.X.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMV.W.X", + "size" : 32, + "delay" : 1 + }, + { + "name" : "C.FLW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FSW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FLWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FSWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "FLD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMADD.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMSUB.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FNMADD.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FNMSUB.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FADD.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSUB.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMUL.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FDIV.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSQRT.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJ.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJN.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FSGNJX.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMIN.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FMAX.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.S.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.D.S", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FEQ.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FLT.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FLE.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCLASS.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.W.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.WU.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.D.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FCVT.D.WU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "C.FLD", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FSD", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FLDSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.FSDSP", + "size" : 16, + "delay" : 1 + } + ], + "RV32IMAC" : [ + { + "name" : "LUI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AUIPC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JAL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JALR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "BEQ", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BNE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLT", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLTU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGEU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "LB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LBU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LHU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTIU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ANDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRAI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SUB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLT", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XOR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "OR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AND", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE_I", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ECALL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "EBREAK", + "size" : 32, + "delay" : 1 + }, + { + "name" : "URET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "MRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "WFI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SFENCE.VMA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRS", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRWI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRSI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRCI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "MUL", + "size" : 32, + "delay" : 5 + }, + { + "name" : "MULH", + "size" : 32, + "delay" : 5 + }, + { + "name" : "MULHSU", + "size" : 32, + "delay" : 5 + }, + { + "name" : "MULHU", + "size" : 32, + "delay" : 5 + }, + { + "name" : "DIV", + "size" : 32, + "delay" : 10 + }, + { + "name" : "DIVU", + "size" : 32, + "delay" : 10 + }, + { + "name" : "REM", + "size" : 32, + "delay" : 10 + }, + { + "name" : "REMU", + "size" : 32, + "delay" : 10 + }, + { + "name" : "LR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SC.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOSWAP.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOADD.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOXOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOAND.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMIN.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAX.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMINU.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAXU.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "C.ADDI4SPN", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SW", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADDI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.NOP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JAL", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LUI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADDI16SP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SRLI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SRAI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ANDI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SUB", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.XOR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.OR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.AND", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.J", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.BEQZ", + "size" : 16, + "delay" : [1, 3] + }, + { + "name" : "C.BNEZ", + "size" : 16, + "delay" : [1, 3] + }, + { + "name" : "C.SLLI", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.LWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.MV", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.ADD", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.JALR", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.EBREAK", + "size" : 16, + "delay" : 1 + }, + { + "name" : "C.SWSP", + "size" : 16, + "delay" : 1 + }, + { + "name" : "DII", + "size" : 16, + "delay" : 1 + } + ], + "RV64IA" : [ + { + "name" : "LWU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRLI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRAI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADDIW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLLIW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRLIW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRAIW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADDW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SUBW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLLW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRLW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRAW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LUI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AUIPC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JAL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "JALR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "BEQ", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BNE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLT", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGE", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BLTU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "BGEU", + "size" : 32, + "delay" : [1, 3] + }, + { + "name" : "LB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LBU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LHU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SH", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTIU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ORI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ANDI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ADD", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SUB", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLT", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SLTU", + "size" : 32, + "delay" : 1 + }, + { + "name" : "XOR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "OR", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AND", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE", + "size" : 32, + "delay" : 1 + }, + { + "name" : "FENCE_I", + "size" : 32, + "delay" : 1 + }, + { + "name" : "ECALL", + "size" : 32, + "delay" : 1 + }, + { + "name" : "EBREAK", + "size" : 32, + "delay" : 1 + }, + { + "name" : "URET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "MRET", + "size" : 32, + "delay" : 1 + }, + { + "name" : "WFI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SFENCE.VMA", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRW", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRS", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRC", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRWI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRSI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "CSRRCI", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LR.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SC.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOSWAP.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOADD.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOXOR.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOAND.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOOR.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMIN.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAX.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMINU.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAXU.D", + "size" : 32, + "delay" : 1 + }, + { + "name" : "LR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "SC.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOSWAP.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOADD.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOXOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOAND.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOOR.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMIN.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAX.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMINU.W", + "size" : 32, + "delay" : 1 + }, + { + "name" : "AMOMAXU.W", + "size" : 32, + "delay" : 1 + } + ] +} \ No newline at end of file diff --git a/dbt-core b/dbt-core index 555bff0..393c374 160000 --- a/dbt-core +++ b/dbt-core @@ -1 +1 @@ -Subproject commit 555bff0a20cfbf775994ed74b188b9af480df883 +Subproject commit 393c374cac4950e629036dda1615abedf866961f diff --git a/etc/dbt-riscv Debug hello w plugin.launch b/etc/dbt-riscv Debug hello w plugin.launch new file mode 100644 index 0000000..f46628e --- /dev/null +++ b/etc/dbt-riscv Debug hello w plugin.launch @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/etc/dbt-riscv dhrystone.launch b/etc/dbt-riscv dhrystone.launch index a00fc10..a666818 100644 --- a/etc/dbt-riscv dhrystone.launch +++ b/etc/dbt-riscv dhrystone.launch @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + diff --git a/riscv/incl/iss/arch/riscv_hart_msu_vp.h b/riscv/incl/iss/arch/riscv_hart_msu_vp.h index dede9de..9e820ce 100644 --- a/riscv/incl/iss/arch/riscv_hart_msu_vp.h +++ b/riscv/incl/iss/arch/riscv_hart_msu_vp.h @@ -55,7 +55,7 @@ namespace arch { enum { tohost_dflt = 0xF0001000, fromhost_dflt = 0xF0001040 }; -enum csr_name { +enum riscv_csr { /* user-level CSR */ // User Trap Setup ustatus = 0x000, diff --git a/riscv/src/main.cpp b/riscv/src/main.cpp index a241da0..f3132a9 100644 --- a/riscv/src/main.cpp +++ b/riscv/src/main.cpp @@ -66,7 +66,8 @@ int main(int argc, char *argv[]) { ("dump-ir", "dump the intermediate representation") ("elf", po::value>(), "ELF file(s) to load") ("mem,m", po::value(), "the memory input file") - ("isa", po::value()->default_value("rv32imac"), "isa to use for simulation"); + ("plugin,p", po::value>(), "plugin to activate") + ("isa", po::value()->default_value("rv32gc"), "isa to use for simulation"); // clang-format on auto parsed = po::command_line_parser(argc, argv).options(desc).allow_unregistered().run(); try { @@ -97,30 +98,55 @@ int main(int argc, char *argv[]) { LOG_OUTPUT(connection)::stream() = f; } + std::vector plugin_list; + auto res=0; try { // application code comes here // iss::init_jit(argc, argv); bool dump = clim.count("dump-ir"); // instantiate the simulator std::unique_ptr vm{nullptr}; + std::unique_ptr cpu{nullptr}; std::string isa_opt(clim["isa"].as()); -// iss::plugin::instruction_count ic_plugin("riscv/gen_input/src-gen/rv32imac_cyles.txt"); -// iss::plugin::cycle_estimate ce_plugin("riscv/gen_input/src-gen/rv32imac_cyles.txt"); - if (isa_opt.substr(0, 4)=="rv64") { - iss::arch::rv64ia* cpu = new iss::arch::riscv_hart_msu_vp(); - vm = iss::create(cpu, clim["gdb-port"].as()); - } else if (isa_opt.substr(0, 5)=="rv32i") { - iss::arch::rv32imac* cpu = new iss::arch::riscv_hart_msu_vp(); - vm = iss::create(cpu, clim["gdb-port"].as()); - //vm->register_plugin(ce_plugin); - } else if (isa_opt.substr(0, 5)=="rv32g") { - iss::arch::rv32gc* cpu = new iss::arch::riscv_hart_msu_vp(); - vm = iss::create(cpu, clim["gdb-port"].as()); - //vm->register_plugin(ce_plugin); + if (isa_opt=="rv64ia") { + iss::arch::rv64ia* lcpu = new iss::arch::riscv_hart_msu_vp(); + vm = iss::create(lcpu, clim["gdb-port"].as()); + cpu.reset(lcpu); + } else if (isa_opt=="rv32imac") { + iss::arch::rv32imac* lcpu = new iss::arch::riscv_hart_msu_vp(); + vm = iss::create(lcpu, clim["gdb-port"].as()); + cpu.reset(lcpu); + } else if (isa_opt=="rv32gc") { + iss::arch::rv32gc* lcpu = new iss::arch::riscv_hart_msu_vp(); + vm = iss::create(lcpu, clim["gdb-port"].as()); + cpu.reset(lcpu); } else { LOG(ERROR) << "Illegal argument value for '--isa': " << clim["isa"].as() << std::endl; return 127; } + if (clim.count("plugin")) { + for (std::string opt_val : clim["plugin"].as>()){ + auto plugin_name{opt_val}; + std::string filename{"cycles.txt"}; + std::size_t found = opt_val.find('='); + if (found!=std::string::npos){ + plugin_name=opt_val.substr(0, found); + filename=opt_val.substr(found+1, opt_val.size()); + } + if(plugin_name=="ic"){ + auto* ic_plugin= new iss::plugin::instruction_count(filename); + vm->register_plugin(*ic_plugin); + plugin_list.push_back(ic_plugin); + } else if(plugin_name=="ce"){ + auto* ce_plugin= new iss::plugin::cycle_estimate(filename); + vm->register_plugin(*ce_plugin); + plugin_list.push_back(ce_plugin); + } else { + LOG(ERROR) << "Unknown plugin name: " << plugin_name << ", valid names are 'ce', 'ic'"<setDisassEnabled(true); LOGGER(disass)::reporting_level() = logging::INFO; @@ -151,9 +177,14 @@ int main(int argc, char *argv[]) { } vm->reset(start_address); auto cycles = clim["instructions"].as(); - return vm->start(cycles, dump); + res = vm->start(cycles, dump); } catch (std::exception &e) { LOG(ERROR) << "Unhandled Exception reached the top of main: " << e.what() << ", application will now exit" << std::endl; - return 2; + res=2; } + // cleanup to let plugins report of needed + for(auto* p:plugin_list){ + delete p; + } + return res; } diff --git a/riscv/src/plugin/cycle_estimate.cpp b/riscv/src/plugin/cycle_estimate.cpp index e5270bd..2a68c61 100644 --- a/riscv/src/plugin/cycle_estimate.cpp +++ b/riscv/src/plugin/cycle_estimate.cpp @@ -63,7 +63,7 @@ bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& if(!arch_instr) return false; const std::string core_name = arch_instr->core_type_name(); Json::Value &val = root[core_name]; - if(val.isArray()){ + if(!val.isNull() && val.isArray()){ delays.reserve(val.size()); for(auto it:val){ auto name = it["name"]; @@ -76,6 +76,8 @@ bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& delays.push_back(instr_desc{size.asUInt(), delay[0].asUInt(), delay[1].asUInt()}); } } + } else { + LOG(ERROR)<<"plugin cycle_estimate: could not find an entry for "<get_next_pc()-arch_instr->get_pc()) != (entry.size/8); - if(taken && entry.taken > 1 ) // 1 is the default increment per instruction - arch_instr->set_curr_instr_cycles(entry.taken); - if(!taken && entry.not_taken > 1) // 1 is the default increment per instruction - arch_instr->set_curr_instr_cycles(entry.not_taken); + uint32_t delay = taken ? entry.taken : entry.not_taken; + if(delay>1) arch_instr->set_curr_instr_cycles(delay); } diff --git a/riscv/src/plugin/instruction_count.cpp b/riscv/src/plugin/instruction_count.cpp index 282b173..eedb59a 100644 --- a/riscv/src/plugin/instruction_count.cpp +++ b/riscv/src/plugin/instruction_count.cpp @@ -68,7 +68,7 @@ bool iss::plugin::instruction_count::registration(const char* const version, vm_ if(!instr_if) return false; const std::string core_name = instr_if->core_type_name(); Json::Value &val = root[core_name]; - if(val.isArray()){ + if(!val.isNull() && val.isArray()){ delays.reserve(val.size()); for(auto it:val){ auto name = it["name"]; @@ -84,6 +84,8 @@ bool iss::plugin::instruction_count::registration(const char* const version, vm_ } } rep_counts.resize(delays.size()); + } else { + LOG(ERROR)<<"plugin instruction_count: could not find an entry for "<