@@ -456,6 +456,102 @@ class Main() extends Module {
456456
457457 printf(" [JALR] RS1: %d Rd: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rd, decoder.io.immediate);
458458 }
459+
460+ // BEQ
461+ is(" b000_1100011" .U ) {
462+ registers.io.read_address_a := decoder.io.rs1;
463+ registers.io.read_address_b := decoder.io.rs2;
464+
465+ when(registers.io.out_a === registers.io.out_b) {
466+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
467+ }.otherwise {
468+ program_pointer := program_pointer + 1 .U ;
469+ }
470+
471+ stage := 0 .U ;
472+
473+ printf(" [BEQ] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
474+ }
475+
476+ // BNEQ
477+ is(" b001_1100011" .U ) {
478+ registers.io.read_address_a := decoder.io.rs1;
479+ registers.io.read_address_b := decoder.io.rs2;
480+
481+ when(registers.io.out_a =/= registers.io.out_b) {
482+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
483+ }.otherwise {
484+ program_pointer := program_pointer + 1 .U ;
485+ }
486+
487+ stage := 0 .U ;
488+
489+ printf(" [BNEQ] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
490+ }
491+
492+ // BLT
493+ is(" b100_1100011" .U ) {
494+ registers.io.read_address_a := decoder.io.rs1;
495+ registers.io.read_address_b := decoder.io.rs2;
496+
497+ when(registers.io.out_a.asSInt < registers.io.out_b.asSInt) {
498+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
499+ }.otherwise {
500+ program_pointer := program_pointer + 1 .U ;
501+ }
502+
503+ stage := 0 .U ;
504+
505+ printf(" [BLT] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
506+ }
507+
508+ // BGE
509+ is(" b101_1100011" .U ) {
510+ registers.io.read_address_a := decoder.io.rs1;
511+ registers.io.read_address_b := decoder.io.rs2;
512+
513+ when(registers.io.out_a.asSInt >= registers.io.out_b.asSInt) {
514+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
515+ }.otherwise {
516+ program_pointer := program_pointer + 1 .U ;
517+ }
518+
519+ stage := 0 .U ;
520+
521+ printf(" [BGE] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
522+ }
523+
524+ // BLTU
525+ is(" b110_1100011" .U ) {
526+ registers.io.read_address_a := decoder.io.rs1;
527+ registers.io.read_address_b := decoder.io.rs2;
528+
529+ when(registers.io.out_a < registers.io.out_b) {
530+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
531+ }.otherwise {
532+ program_pointer := program_pointer + 1 .U ;
533+ }
534+
535+ stage := 0 .U ;
536+
537+ printf(" [BLTU] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
538+ }
539+
540+ // BGEU
541+ is(" b111_1100011" .U ) {
542+ registers.io.read_address_a := decoder.io.rs1;
543+ registers.io.read_address_b := decoder.io.rs2;
544+
545+ when(registers.io.out_a >= registers.io.out_b) {
546+ program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
547+ }.otherwise {
548+ program_pointer := program_pointer + 1 .U ;
549+ }
550+
551+ stage := 0 .U ;
552+
553+ printf(" [BGEU] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.immediate);
554+ }
459555 }
460556 }
461557
0 commit comments