@@ -135,6 +135,39 @@ class Main() extends Module {
135135 printf(" [LW] Rs1: %d Immediate: %b\n " , decoder.io.rs1, registers.io.out_a + decoder.io.immediate);
136136 }
137137
138+ // SB
139+ is(" b000_0100011" .U ) {
140+ registers.io.read_address_a := decoder.io.rs1;
141+ registers.io.read_address_b := decoder.io.rs2;
142+
143+ memory.writePorts(0 ).enable := true .B ;
144+ memory.writePorts(0 ).address := registers.io.out_a + decoder.io.immediate;
145+ memory.writePorts(0 ).data := registers.io.out_b(7 ,0 );
146+
147+ program_pointer := program_pointer + 4 .U ;
148+ stage := 0 .U ;
149+
150+ printf(" [SB] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, registers.io.out_a + decoder.io.immediate);
151+ }
152+
153+ // SH
154+ is(" b001_0100011" .U ) {
155+ registers.io.read_address_a := decoder.io.rs1;
156+ registers.io.read_address_b := decoder.io.rs2;
157+
158+ memory.writePorts(0 ).enable := true .B ;
159+ memory.writePorts(0 ).address := registers.io.out_a + decoder.io.immediate;
160+ memory.writePorts(0 ).data := registers.io.out_b(7 ,0 );
161+ memory.writePorts(1 ).enable := true .B ;
162+ memory.writePorts(1 ).address := registers.io.out_a + decoder.io.immediate + 1 .U ;
163+ memory.writePorts(1 ).data := registers.io.out_b(15 ,8 );
164+
165+ program_pointer := program_pointer + 4 .U ;
166+ stage := 0 .U ;
167+
168+ printf(" [SH] Rs1: %d Rs2: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rs2, registers.io.out_a + decoder.io.immediate);
169+ }
170+
138171 // SW
139172 is(" b010_0100011" .U ) {
140173 registers.io.read_address_a := decoder.io.rs1;
0 commit comments