@@ -119,6 +119,28 @@ class Main() extends Module {
119119 rd_buffer := decoder.io.rd;
120120
121121 switch(decoder.io.operation) {
122+ // LB
123+ is(" b000_0000011" .U ) {
124+ registers.io.read_address_a := decoder.io.rs1;
125+
126+ memory.readPorts(4 ).enable := true .B ;
127+ memory.readPorts(4 ).address := registers.io.out_a + decoder.io.immediate;
128+
129+ printf(" [LB] Rs1: %d Immediate: %b\n " , decoder.io.rs1, registers.io.out_a + decoder.io.immediate);
130+ }
131+
132+ // LH
133+ is(" b001_0000011" .U ) {
134+ registers.io.read_address_a := decoder.io.rs1;
135+
136+ memory.readPorts(4 ).enable := true .B ;
137+ memory.readPorts(4 ).address := registers.io.out_a + decoder.io.immediate;
138+ memory.readPorts(5 ).enable := true .B ;
139+ memory.readPorts(5 ).address := registers.io.out_a + decoder.io.immediate + 1 .U ;
140+
141+ printf(" [LH] Rs1: %d Immediate: %b\n " , decoder.io.rs1, registers.io.out_a + decoder.io.immediate);
142+ }
143+
122144 // LW
123145 is(" b010_0000011" .U ) {
124146 registers.io.read_address_a := decoder.io.rs1;
@@ -650,6 +672,28 @@ class Main() extends Module {
650672 stage := 0 .U ;
651673
652674 switch(operation_buffer) {
675+ // LB
676+ is(" b000_0000011" .U ) {
677+ registers.io.write_address := rd_buffer;
678+ registers.io.write_enable := true .B ;
679+ registers.io.in := Fill (24 , memory.readPorts(4 ).data(7 )) ## memory.readPorts(4 ).data;
680+
681+ program_pointer := program_pointer + 4 .U ;
682+
683+ printf(" [LB] Rd: %d Data: %b\n " , rd_buffer, Fill (24 , memory.readPorts(4 ).data(7 )) ## memory.readPorts(4 ).data);
684+ }
685+
686+ // LH
687+ is(" b001_0000011" .U ) {
688+ registers.io.write_address := rd_buffer;
689+ registers.io.write_enable := true .B ;
690+ registers.io.in := Fill (16 , memory.readPorts(5 ).data(7 )) ## memory.readPorts(5 ).data ## memory.readPorts(4 ).data;
691+
692+ program_pointer := program_pointer + 4 .U ;
693+
694+ printf(" [LH] Rd: %d Data: %b\n " , rd_buffer, Fill (16 , memory.readPorts(5 ).data(7 )) ## memory.readPorts(5 ).data ## memory.readPorts(4 ).data);
695+ }
696+
653697 // LW
654698 is(" b010_0000011" .U ) {
655699 registers.io.write_address := rd_buffer;
0 commit comments