blob: 696beb4369d9239659898cba35eae8498a7ca860 [file] [log] [blame]
/****************************************************************************
* fwrisc_formal_opcode_defines.svh
****************************************************************************/
`ifndef INCLUDED_FWRISC_FORMAL_OPCODE_DEFINES_SVH
`define INCLUDED_FWRISC_FORMAL_OPCODE_DEFINES_SVH
`define rtype(target, funct7, rs2, rs1, funct3, rd, opcode) \
assign target[31:25] = funct7; \
assign target[24:20] = rs2; \
assign target[19:15] = rs1; \
assign target[14:12] = funct3; \
assign target[11:7] = rd; \
assign target[6:0] = opcode
`define itype(target, imm, rs1, funct3, rd, opcode) \
assign target[31:20] = imm; \
assign target[19:15] = rs1; \
assign target[14:12] = funct3; \
assign target[11:7] = rd; \
assign target[6:0] = opcode
`define stype(target, imm, rs1, funct3, rd, opcode) \
assign target[31:25] = (imm >> 5); \
assign target[19:15] = rs1; \
assign target[14:12] = funct3; \
assign target[11:7] = imm; \
assign target[6:0] = opcode
`define btype(target, imm, rs1, rs2, funct3, opcode) \
assign target[31] = (imm >> 12); \
assign target[30:25] = (imm >> 5); \
assign target[24:20] = rs2; \
assign target[19:15] = rs1; \
assign target[14:12] = funct3; \
assign target[11:8] = (imm >> 1); \
assign target[7] = (imm >> 11); \
assign target[6:0] = opcode
`define utype(target, imm, rd, opcode) \
assign target[31:12] = (imm >> 12); \
assign target[11:7] = rd; \
assign target[6:0] = opcode
`define jtype(target, imm, rd, opcode) \
assign target[31] = (imm >> 20); \
assign target[30:21] = (imm >> 1); \
assign target[20] = (imm >> 11); \
assign target[19:12] = (imm >> 12); \
assign target[11:7] = rd; \
assign target[6:0] = opcode
`define opcode(instr) instr[6:0]
`define rs1(instr) instr[19:15]
`define rs2(instr) instr[24:20]
`define rd(instr) instr[11:7]
`define i_imm(instr) instr[31:20]
`define funct7(instr) instr[31:25]
`define funct3(instr) instr[14:12]
`define crtype(target, funct4, rd_rs1, rs2, op) \
assign target[15:12] = funct4; \
assign target[11:7] = rd_rs1; \
assign target[6:2] = rs2; \
assign target[1:0] = op
`define citype(target, funct3, imm, rd_rs1, op) \
assign target[15:13] = funct3; \
assign target[12] = imm[5]; \
assign target[11:7] = rd_rs1; \
assign target[6:2] = imm[4:0]; \
assign target[1:0] = op
`define cjtype(target, funct3, jtarg, op) \
assign target[15:13] = funct3; \
assign target[12] = imm[11]; \
assign target[11] = imm[4]; \
assign target[10:9] = imm[9:8]; \
assign target[8] = imm[10]; \
assign target[7] = imm[6]; \
assign target[6] = imm[7]; \
assign target[5:3] = imm[3:1]; \
assign target[2] = imm[5]; \
assign target[1:0] = op
`define imm_jtype(instr) $signed({instr[31], instr[19:12], instr[20], instr[30:21],1'b0})
`define lui(target, imm, rd) `utype(target, imm, rd, 7'b0110111)
`define auipc(target, imm, rd) `utype(target, imm, rd, 7'b0010111)
`define jal(target, imm, rd) `jtype(target, imm, rd, 7'b1101111)
`define jalr(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b000, rd, 7'b1100111)
`define itype_add(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b000, rd, 7'b0010011)
`define itype_slt(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b010, rd, 7'b0010011)
`define itype_sltu(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b011, rd, 7'b0010011)
`define itype_xor(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b100, rd, 7'b0010011)
`define itype_or(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b110, rd, 7'b0010011)
`define itype_and(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b111, rd, 7'b0010011)
//`define itype_sll(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b001, rd, 7'b0010011)
//`define itype_srl(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b101, rd, 7'b0010011)
//`define itype_sra(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b101, rd, 7'b0010011)
`define btype_beq(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b000, 7'b1100011)
`define btype_bne(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b001, 7'b1100011)
`define btype_blt(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b100, 7'b1100011)
`define btype_bge(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b101, 7'b1100011)
`define btype_bltu(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b110, 7'b1100011)
`define btype_bgeu(target, imm, rs1, rs2) `btype(target, imm, rs1, rs2, 3'b111, 7'b1100011)
`define rtype_add(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b000, rd, 7'b0110011)
`define rtype_and(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b111, rd, 7'b0110011)
`define rtype_or(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b110, rd, 7'b0110011)
`define rtype_sll(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b001, rd, 7'b0110011)
`define rtype_srl(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b101, rd, 7'b0110011)
`define rtype_sra(target, rs2, rs1, rd) `rtype(target, 7'b0100000, rs2, rs1, 3'b101, rd, 7'b0110011)
`define rtype_slt(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b010, rd, 7'b0110011)
`define rtype_sltu(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b011, rd, 7'b0110011)
`define rtype_sub(target, rs2, rs1, rd) `rtype(target, 7'b0100000, rs2, rs1, 3'b000, rd, 7'b0110011)
`define rtype_xor(target, rs2, rs1, rd) `rtype(target, 7'b0000000, rs2, rs1, 3'b100, rd, 7'b0110011)
`define rtype_mul(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b000, rd, 7'b0110011)
`define rtype_mulh(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b001, rd, 7'b0110011)
`define rtype_mulhsu(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b010, rd, 7'b0110011)
`define rtype_mulhu(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b011, rd, 7'b0110011)
`define rtype_div(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b100, rd, 7'b0110011)
`define rtype_divu(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b101, rd, 7'b0110011)
`define rtype_rem(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b110, rd, 7'b0110011)
`define rtype_remu(target, rs2, rs1, rd) `rtype(target, 7'b0000001, rs2, rs1, 3'b111, rd, 7'b0110011)
`define utype_lui(target, imm, rd) `utype(target, imm, rd, 7'b0110111)
`define utype_auipc(target, imm, rd) `utype(target, imm, rd, 7'b0010111)
`endif /* INCLUDED_FWRISC_FORMAL_OPCODE_DEFINES_SVH */