Skip to content

Instantly share code, notes, and snippets.

@diningyo
Last active November 23, 2020 11:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diningyo/e20e0fff9e18235be04dd608202b6bac to your computer and use it in GitHub Desktop.
Save diningyo/e20e0fff9e18235be04dd608202b6bac to your computer and use it in GitHub Desktop.
Chisel 3.3.2 vs. Chisel 3.4.0 (dirv-idu moudle)
// Chisel 3.4.0 w/ compiler pulg-in version
module Idu(
input io_ifu2idu_valid,
output io_ifu2idu_ready,
input [31:0] io_ifu2idu_inst,
input io_idu2exu_inst_ready,
output io_idu2exu_inst_valid,
output [31:0] io_idu2exu_inst_bits_rawData,
output [6:0] io_idu2exu_inst_bits_funct7,
output [4:0] io_idu2exu_inst_bits_rs2,
output [4:0] io_idu2exu_inst_bits_rs1,
output [2:0] io_idu2exu_inst_bits_funct3,
output [4:0] io_idu2exu_inst_bits_rd,
output io_idu2exu_inst_bits_illegal,
output io_idu2exu_inst_bits_valid,
output io_idu2exu_inst_bits_illegalOpcode,
output io_idu2exu_inst_bits_csrrw,
output io_idu2exu_inst_bits_csrrs,
output io_idu2exu_inst_bits_csrrc,
output io_idu2exu_inst_bits_csrrwi,
output io_idu2exu_inst_bits_csrrsi,
output io_idu2exu_inst_bits_csrrci,
output io_idu2exu_inst_bits_csrUimmValid,
output io_idu2exu_inst_bits_csrValid,
output io_idu2exu_inst_bits_fenceI,
output io_idu2exu_inst_bits_jalr,
output io_idu2exu_inst_bits_mret,
output io_idu2exu_inst_bits_ecall,
output io_idu2exu_inst_bits_ebreak,
output io_idu2exu_inst_bits_wfi,
output io_idu2exu_inst_bits_loadValid,
output io_idu2exu_inst_bits_lb,
output io_idu2exu_inst_bits_lh,
output io_idu2exu_inst_bits_lw,
output io_idu2exu_inst_bits_lbu,
output io_idu2exu_inst_bits_lhu,
output io_idu2exu_inst_bits_add,
output io_idu2exu_inst_bits_sub,
output io_idu2exu_inst_bits_sll,
output io_idu2exu_inst_bits_slt,
output io_idu2exu_inst_bits_sltu,
output io_idu2exu_inst_bits_xor,
output io_idu2exu_inst_bits_srl,
output io_idu2exu_inst_bits_sra,
output io_idu2exu_inst_bits_or,
output io_idu2exu_inst_bits_and,
output io_idu2exu_inst_bits_aluValid,
output io_idu2exu_inst_bits_aluImm,
output io_idu2exu_inst_bits_addi,
output io_idu2exu_inst_bits_slti,
output io_idu2exu_inst_bits_sltiu,
output io_idu2exu_inst_bits_andi,
output io_idu2exu_inst_bits_ori,
output io_idu2exu_inst_bits_xori,
output io_idu2exu_inst_bits_slli,
output io_idu2exu_inst_bits_srli,
output io_idu2exu_inst_bits_srai,
output [4:0] io_idu2exu_inst_bits_shamt,
output io_idu2exu_inst_bits_illegalShamt,
output io_idu2exu_inst_bits_storeValid,
output io_idu2exu_inst_bits_sb,
output io_idu2exu_inst_bits_sh,
output io_idu2exu_inst_bits_sw,
output io_idu2exu_inst_bits_mul,
output io_idu2exu_inst_bits_mulh,
output io_idu2exu_inst_bits_mulhsu,
output io_idu2exu_inst_bits_mulhu,
output io_idu2exu_inst_bits_div,
output io_idu2exu_inst_bits_divu,
output io_idu2exu_inst_bits_rem,
output io_idu2exu_inst_bits_remu,
output io_idu2exu_inst_bits_beq,
output io_idu2exu_inst_bits_bne,
output io_idu2exu_inst_bits_blt,
output io_idu2exu_inst_bits_bge,
output io_idu2exu_inst_bits_bltu,
output io_idu2exu_inst_bits_bgeu,
output io_idu2exu_inst_bits_lui,
output io_idu2exu_inst_bits_auipc,
output io_idu2exu_inst_bits_jal
);
wire _T = io_ifu2idu_valid & io_ifu2idu_ready; // @[Idu.scala 373:32]
wire [6:0] inst_funct7 = io_ifu2idu_inst[31:25]; // @[Idu.scala 190:19]
wire [4:0] inst_rs2 = io_ifu2idu_inst[24:20]; // @[Idu.scala 191:16]
wire [2:0] inst_funct3 = io_ifu2idu_inst[14:12]; // @[Idu.scala 193:19]
wire [6:0] inst_opcode = io_ifu2idu_inst[6:0]; // @[Idu.scala 195:19]
wire inst_jalr = inst_opcode == 7'h67; // @[Idu.scala 197:20]
wire inst_fenceValid = inst_opcode == 7'hf; // @[Idu.scala 198:26]
wire _inst_fence_T = inst_funct3 == 3'h0; // @[Idu.scala 200:22]
wire _inst_fenceI_T = inst_funct3 == 3'h1; // @[Idu.scala 201:23]
wire inst_loadValid = inst_opcode == 7'h3; // @[Idu.scala 222:25]
wire _inst_lw_T = inst_funct3 == 3'h2; // @[Idu.scala 225:19]
wire _inst_lbu_T = inst_funct3 == 3'h4; // @[Idu.scala 226:20]
wire _inst_lhu_T = inst_funct3 == 3'h5; // @[Idu.scala 227:20]
wire inst_storeValid = inst_opcode == 7'h23; // @[Idu.scala 229:26]
wire inst_system = inst_opcode == 7'h73; // @[Idu.scala 236:23]
wire _inst_csrrc_T = inst_funct3 == 3'h3; // @[Idu.scala 239:22]
wire inst_csrrwi = _inst_lhu_T & inst_system; // @[Idu.scala 240:37]
wire _inst_csrrsi_T = inst_funct3 == 3'h6; // @[Idu.scala 241:23]
wire inst_csrrsi = inst_funct3 == 3'h6 & inst_system; // @[Idu.scala 241:37]
wire _inst_csrrci_T = inst_funct3 == 3'h7; // @[Idu.scala 242:23]
wire inst_csrrci = inst_funct3 == 3'h7 & inst_system; // @[Idu.scala 242:37]
wire inst_csrValid = inst_system & inst_funct3 != 3'h0; // @[Idu.scala 244:24]
wire inst_excValid = inst_system & _inst_fence_T; // @[Idu.scala 248:41]
wire inst_aluReg = inst_opcode == 7'h33; // @[Idu.scala 257:22]
wire _inst_add_T_1 = _inst_fence_T & inst_aluReg; // @[Idu.scala 258:34]
wire inst_arith = inst_funct7[5]; // @[Idu.scala 303:20]
wire _inst_add_T_2 = ~inst_arith; // @[Idu.scala 258:48]
wire _inst_srl_T_1 = _inst_lhu_T & inst_aluReg; // @[Idu.scala 264:34]
wire inst_aluImm = inst_opcode == 7'h13; // @[Idu.scala 270:22]
wire inst_auipc = inst_opcode == 7'h17; // @[Idu.scala 319:21]
wire inst_lui = inst_opcode == 7'h37; // @[Idu.scala 318:19]
wire inst_slli = _inst_fenceI_T & inst_aluImm; // @[Idu.scala 300:35]
wire _inst_srli_T_1 = _inst_lhu_T & inst_aluImm; // @[Idu.scala 301:35]
wire inst_srli = _inst_lhu_T & inst_aluImm & _inst_add_T_2; // @[Idu.scala 301:45]
wire inst_srai = _inst_srli_T_1 & inst_arith; // @[Idu.scala 302:45]
wire inst_shiftValid = inst_slli | inst_srli | inst_srai; // @[Idu.scala 298:32]
wire inst_aluValid = inst_aluImm | inst_aluReg | inst_auipc | inst_lui | inst_shiftValid; // @[Idu.scala 277:50]
wire inst_illegalShamt = ~(inst_funct7 == 7'h0 | inst_funct7 == 7'h20) & inst_shiftValid; // @[Idu.scala 299:79]
wire m = inst_funct7[0]; // @[Idu.scala 286:19]
wire _inst_mul_T = inst_aluReg & m; // @[Idu.scala 287:23]
wire inst_bValid = inst_opcode == 7'h63; // @[Idu.scala 308:23]
wire inst_jal = inst_opcode == 7'h6f; // @[Idu.scala 323:19]
wire _inst_valid_T_4 = inst_csrValid | inst_aluValid | inst_jalr | inst_loadValid | inst_excValid | inst_fenceValid; // @[Idu.scala 212:68]
wire inst_valid = _inst_valid_T_4 | inst_jal | inst_storeValid | inst_lui | inst_auipc | inst_bValid; // @[Idu.scala 213:58]
wire inst_illegalOpcode = ~inst_valid & _T; // @[Idu.scala 214:29]
assign io_ifu2idu_ready = io_idu2exu_inst_ready; // @[Idu.scala 376:20]
assign io_idu2exu_inst_valid = io_ifu2idu_valid; // @[Idu.scala 379:25]
assign io_idu2exu_inst_bits_rawData = io_ifu2idu_inst; // @[Idu.scala 371:18 Idu.scala 218:30]
assign io_idu2exu_inst_bits_funct7 = io_ifu2idu_inst[31:25]; // @[Idu.scala 190:19]
assign io_idu2exu_inst_bits_rs2 = io_ifu2idu_inst[24:20]; // @[Idu.scala 191:16]
assign io_idu2exu_inst_bits_rs1 = io_ifu2idu_inst[19:15]; // @[Idu.scala 192:16]
assign io_idu2exu_inst_bits_funct3 = io_ifu2idu_inst[14:12]; // @[Idu.scala 193:19]
assign io_idu2exu_inst_bits_rd = io_ifu2idu_inst[11:7]; // @[Idu.scala 194:15]
assign io_idu2exu_inst_bits_illegal = inst_illegalShamt | inst_illegalOpcode; // @[Idu.scala 215:29]
assign io_idu2exu_inst_bits_valid = _inst_valid_T_4 | inst_jal | inst_storeValid | inst_lui | inst_auipc | inst_bValid
; // @[Idu.scala 213:58]
assign io_idu2exu_inst_bits_illegalOpcode = ~inst_valid & _T; // @[Idu.scala 214:29]
assign io_idu2exu_inst_bits_csrrw = _inst_fenceI_T & inst_system; // @[Idu.scala 237:36]
assign io_idu2exu_inst_bits_csrrs = _inst_lw_T & inst_system; // @[Idu.scala 238:36]
assign io_idu2exu_inst_bits_csrrc = inst_funct3 == 3'h3 & inst_system; // @[Idu.scala 239:36]
assign io_idu2exu_inst_bits_csrrwi = _inst_lhu_T & inst_system; // @[Idu.scala 240:37]
assign io_idu2exu_inst_bits_csrrsi = inst_funct3 == 3'h6 & inst_system; // @[Idu.scala 241:37]
assign io_idu2exu_inst_bits_csrrci = inst_funct3 == 3'h7 & inst_system; // @[Idu.scala 242:37]
assign io_idu2exu_inst_bits_csrUimmValid = inst_csrrwi | inst_csrrsi | inst_csrrci; // @[Idu.scala 243:38]
assign io_idu2exu_inst_bits_csrValid = inst_system & inst_funct3 != 3'h0; // @[Idu.scala 244:24]
assign io_idu2exu_inst_bits_fenceI = inst_funct3 == 3'h1 & inst_fenceValid; // @[Idu.scala 201:37]
assign io_idu2exu_inst_bits_jalr = inst_opcode == 7'h67; // @[Idu.scala 197:20]
assign io_idu2exu_inst_bits_mret = inst_excValid & inst_rs2[1]; // @[Idu.scala 250:22]
assign io_idu2exu_inst_bits_ecall = inst_excValid & inst_rs2[1:0] == 2'h0; // @[Idu.scala 251:23]
assign io_idu2exu_inst_bits_ebreak = inst_excValid & inst_rs2[1:0] == 2'h1; // @[Idu.scala 252:24]
assign io_idu2exu_inst_bits_wfi = inst_excValid & inst_rs2[2]; // @[Idu.scala 249:21]
assign io_idu2exu_inst_bits_loadValid = inst_opcode == 7'h3; // @[Idu.scala 222:25]
assign io_idu2exu_inst_bits_lb = _inst_fence_T & inst_loadValid; // @[Idu.scala 223:33]
assign io_idu2exu_inst_bits_lh = _inst_fenceI_T & inst_loadValid; // @[Idu.scala 224:33]
assign io_idu2exu_inst_bits_lw = inst_funct3 == 3'h2 & inst_loadValid; // @[Idu.scala 225:33]
assign io_idu2exu_inst_bits_lbu = inst_funct3 == 3'h4 & inst_loadValid; // @[Idu.scala 226:34]
assign io_idu2exu_inst_bits_lhu = inst_funct3 == 3'h5 & inst_loadValid; // @[Idu.scala 227:34]
assign io_idu2exu_inst_bits_add = _inst_fence_T & inst_aluReg & ~inst_arith; // @[Idu.scala 258:44]
assign io_idu2exu_inst_bits_sub = _inst_add_T_1 & inst_arith; // @[Idu.scala 259:44]
assign io_idu2exu_inst_bits_sll = _inst_fenceI_T & inst_aluReg; // @[Idu.scala 260:34]
assign io_idu2exu_inst_bits_slt = _inst_lw_T & inst_aluReg; // @[Idu.scala 261:34]
assign io_idu2exu_inst_bits_sltu = _inst_csrrc_T & inst_aluReg; // @[Idu.scala 262:35]
assign io_idu2exu_inst_bits_xor = _inst_lbu_T & inst_aluReg; // @[Idu.scala 263:34]
assign io_idu2exu_inst_bits_srl = _inst_lhu_T & inst_aluReg & _inst_add_T_2; // @[Idu.scala 264:44]
assign io_idu2exu_inst_bits_sra = _inst_srl_T_1 & inst_arith; // @[Idu.scala 265:44]
assign io_idu2exu_inst_bits_or = _inst_csrrsi_T & inst_aluReg; // @[Idu.scala 266:33]
assign io_idu2exu_inst_bits_and = _inst_csrrci_T & inst_aluReg; // @[Idu.scala 267:34]
assign io_idu2exu_inst_bits_aluValid = inst_aluImm | inst_aluReg | inst_auipc | inst_lui | inst_shiftValid; // @[Idu.scala 277:50]
assign io_idu2exu_inst_bits_aluImm = inst_opcode == 7'h13; // @[Idu.scala 270:22]
assign io_idu2exu_inst_bits_addi = _inst_fence_T & inst_aluImm; // @[Idu.scala 271:35]
assign io_idu2exu_inst_bits_slti = _inst_lw_T & inst_aluImm; // @[Idu.scala 272:35]
assign io_idu2exu_inst_bits_sltiu = _inst_csrrc_T & inst_aluImm; // @[Idu.scala 273:36]
assign io_idu2exu_inst_bits_andi = _inst_csrrci_T & inst_aluImm; // @[Idu.scala 276:35]
assign io_idu2exu_inst_bits_ori = _inst_csrrsi_T & inst_aluImm; // @[Idu.scala 275:34]
assign io_idu2exu_inst_bits_xori = _inst_lbu_T & inst_aluImm; // @[Idu.scala 274:35]
assign io_idu2exu_inst_bits_slli = _inst_fenceI_T & inst_aluImm; // @[Idu.scala 300:35]
assign io_idu2exu_inst_bits_srli = _inst_lhu_T & inst_aluImm & _inst_add_T_2; // @[Idu.scala 301:45]
assign io_idu2exu_inst_bits_srai = _inst_srli_T_1 & inst_arith; // @[Idu.scala 302:45]
assign io_idu2exu_inst_bits_shamt = io_ifu2idu_inst[24:20]; // @[Idu.scala 191:16]
assign io_idu2exu_inst_bits_illegalShamt = ~(inst_funct7 == 7'h0 | inst_funct7 == 7'h20) & inst_shiftValid; // @[Idu.scala 299:79]
assign io_idu2exu_inst_bits_storeValid = inst_opcode == 7'h23; // @[Idu.scala 229:26]
assign io_idu2exu_inst_bits_sb = _inst_fence_T & inst_storeValid; // @[Idu.scala 230:33]
assign io_idu2exu_inst_bits_sh = _inst_fenceI_T & inst_storeValid; // @[Idu.scala 231:33]
assign io_idu2exu_inst_bits_sw = _inst_lw_T & inst_storeValid; // @[Idu.scala 232:33]
assign io_idu2exu_inst_bits_mul = inst_aluReg & m & _inst_fence_T; // @[Idu.scala 287:28]
assign io_idu2exu_inst_bits_mulh = _inst_mul_T & _inst_fenceI_T; // @[Idu.scala 288:29]
assign io_idu2exu_inst_bits_mulhsu = _inst_mul_T & _inst_lw_T; // @[Idu.scala 289:31]
assign io_idu2exu_inst_bits_mulhu = _inst_mul_T & _inst_csrrc_T; // @[Idu.scala 290:30]
assign io_idu2exu_inst_bits_div = _inst_mul_T & _inst_lbu_T; // @[Idu.scala 291:28]
assign io_idu2exu_inst_bits_divu = _inst_mul_T & _inst_lhu_T; // @[Idu.scala 292:29]
assign io_idu2exu_inst_bits_rem = _inst_mul_T & _inst_csrrsi_T; // @[Idu.scala 293:28]
assign io_idu2exu_inst_bits_remu = _inst_mul_T & _inst_csrrci_T; // @[Idu.scala 294:29]
assign io_idu2exu_inst_bits_beq = _inst_fence_T & inst_bValid; // @[Idu.scala 309:34]
assign io_idu2exu_inst_bits_bne = _inst_fenceI_T & inst_bValid; // @[Idu.scala 310:34]
assign io_idu2exu_inst_bits_blt = _inst_lbu_T & inst_bValid; // @[Idu.scala 311:34]
assign io_idu2exu_inst_bits_bge = _inst_lhu_T & inst_bValid; // @[Idu.scala 312:34]
assign io_idu2exu_inst_bits_bltu = _inst_csrrsi_T & inst_bValid; // @[Idu.scala 313:35]
assign io_idu2exu_inst_bits_bgeu = _inst_csrrci_T & inst_bValid; // @[Idu.scala 314:35]
assign io_idu2exu_inst_bits_lui = inst_opcode == 7'h37; // @[Idu.scala 318:19]
assign io_idu2exu_inst_bits_auipc = inst_opcode == 7'h17; // @[Idu.scala 319:21]
assign io_idu2exu_inst_bits_jal = inst_opcode == 7'h6f; // @[Idu.scala 323:19]
endmodule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment