@@ -99,7 +99,7 @@ class Main() extends Module {
9999
100100 switch(decoder.io.operation) {
101101 // LW
102- is(" b010_00000_11 " .U ) {
102+ is(" b010_0000011 " .U ) {
103103 regFile.io.read_addr_A := decoder.io.rs1;
104104
105105 memory.readPorts(1 ).enable := true .B ;
@@ -109,7 +109,7 @@ class Main() extends Module {
109109 }
110110
111111 // SW
112- is(" b010_01000_11 " .U ) {
112+ is(" b010_0100011 " .U ) {
113113 regFile.io.read_addr_A := decoder.io.rs1;
114114 regFile.io.read_addr_B := decoder.io.rs2;
115115
@@ -124,7 +124,7 @@ class Main() extends Module {
124124 }
125125
126126 // LUI
127- is(" b01101_11 " .U ( 7 . W ) ) {
127+ is(" b0110111 " .U ) {
128128 regFile.io.write_addr := decoder.io.rd;
129129 regFile.io.write_enable := true .B ;
130130 regFile.io.in := decoder.io.immediate;
@@ -135,8 +135,20 @@ class Main() extends Module {
135135 printf(" [LUI] Rd: %d Immediate: %b\n " , decoder.io.rd, decoder.io.immediate);
136136 }
137137
138+ // AUIPC
139+ is(" b0010111" .U ) {
140+ regFile.io.write_addr := decoder.io.rd;
141+ regFile.io.write_enable := true .B ;
142+ regFile.io.in := program_pointer + decoder.io.immediate;
143+
144+ program_pointer := program_pointer + 1 .U ;
145+ stage := 0 .U ;
146+
147+ printf(" [AUIPC] Rd: %d Immediate: %b\n " , decoder.io.rd, decoder.io.immediate);
148+ }
149+
138150 // ADDI
139- is(" b000_00100_11 " .U ( 7 . W ) ) {
151+ is(" b000_0010011 " .U ) {
140152 regFile.io.read_addr_A := decoder.io.rs1;
141153
142154 regFile.io.write_addr := decoder.io.rd;
@@ -148,6 +160,44 @@ class Main() extends Module {
148160
149161 printf(" [ADDI] Rs1: %d Rd: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rd, decoder.io.immediate);
150162 }
163+
164+ // SLTI
165+ is(" b010_0010011" .U ) {
166+ regFile.io.read_addr_A := decoder.io.rs1;
167+
168+ regFile.io.write_addr := decoder.io.rd;
169+ regFile.io.write_enable := true .B ;
170+
171+ when(regFile.io.out_A.asSInt() < decoder.io.immediate.asSInt()) {
172+ regFile.io.in := 1 .U ;
173+ }.otherwise {
174+ regFile.io.in := 0 .U ;
175+ }
176+
177+ program_pointer := program_pointer + 1 .U ;
178+ stage := 0 .U ;
179+
180+ printf(" [SLTI] Rs1: %d Rd: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rd, decoder.io.immediate);
181+ }
182+
183+ // SLTIU
184+ is(" b011_0010011" .U ) {
185+ regFile.io.read_addr_A := decoder.io.rs1;
186+
187+ regFile.io.write_addr := decoder.io.rd;
188+ regFile.io.write_enable := true .B ;
189+
190+ when(regFile.io.out_A < decoder.io.immediate) {
191+ regFile.io.in := 1 .U ;
192+ }.otherwise {
193+ regFile.io.in := 0 .U ;
194+ }
195+
196+ program_pointer := program_pointer + 1 .U ;
197+ stage := 0 .U ;
198+
199+ printf(" [SLTIU] Rs1: %d Rd: %d Immediate: %b\n " , decoder.io.rs1, decoder.io.rd, decoder.io.immediate);
200+ }
151201 }
152202 }
153203
0 commit comments