@@ -362,6 +362,51 @@ class Main() extends Module {
362362
363363 printf(" [SLTU] Rs1: %d Rs2: %d Rd: %d\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
364364 }
365+
366+ // XOR
367+ is(" b100_0110011" .U ) {
368+ registers.io.read_address_a := decoder.io.rs1;
369+ registers.io.read_address_b := decoder.io.rs2;
370+
371+ registers.io.write_address := decoder.io.rd;
372+ registers.io.write_enable := true .B ;
373+ registers.io.in := registers.io.out_a ^ registers.io.out_b;
374+
375+ program_pointer := program_pointer + 1 .U ;
376+ stage := 0 .U ;
377+
378+ printf(" [XOR] Rs1: %d Rs2: %d Rd: %d\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
379+ }
380+
381+ // OR
382+ is(" b110_0110011" .U ) {
383+ registers.io.read_address_a := decoder.io.rs1;
384+ registers.io.read_address_b := decoder.io.rs2;
385+
386+ registers.io.write_address := decoder.io.rd;
387+ registers.io.write_enable := true .B ;
388+ registers.io.in := registers.io.out_a | registers.io.out_b;
389+
390+ program_pointer := program_pointer + 1 .U ;
391+ stage := 0 .U ;
392+
393+ printf(" [OR] Rs1: %d Rs2: %d Rd: %d\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
394+ }
395+
396+ // AND
397+ is(" b111_0110011" .U ) {
398+ registers.io.read_address_a := decoder.io.rs1;
399+ registers.io.read_address_b := decoder.io.rs2;
400+
401+ registers.io.write_address := decoder.io.rd;
402+ registers.io.write_enable := true .B ;
403+ registers.io.in := registers.io.out_a & registers.io.out_b;
404+
405+ program_pointer := program_pointer + 1 .U ;
406+ stage := 0 .U ;
407+
408+ printf(" [AND] Rs1: %d Rs2: %d Rd: %d\n " , decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
409+ }
365410 }
366411 }
367412
0 commit comments