blob: 605cc64e90c32b82428883193669ce2f363e71b6 [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, funct3, rd, opcode) \
assign target[31] = (imm >> 12); \
assign target[30:25] = (imm >> 5); \
assign target[19:15] = rs1; \
assign target[14:12] = funct3; \
assign target[11:6] = (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 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_or(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b110, rd, 7'b0010011)
`define itype_sll(target, imm, rs1, rd) `itype(target, imm, rs1, 3'b001, 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 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 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 */