Skip to content

Commit bce60f9

Browse files
committed
alu left
1 parent 60157a9 commit bce60f9

1 file changed

Lines changed: 73 additions & 9 deletions

File tree

src/main/scala/RISCV/Main.scala

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,38 @@ class Main() extends Module {
140140
switch(decoder.io.opcode){
141141
//Load
142142
is("b0000011".U) {
143-
144143

144+
registers.io.read_address_a := decoder.io.rs1;
145+
146+
memory.io.read_1 := true.B
147+
memory.io.address_1 := (addr) / 4.U;
148+
memory.io.read_2 := true.B
149+
memory.io.address_2 := (addr) / 4.U + 1.U;
145150

146151
}
147152
//Store
148153
is("b0100011".U){
154+
registers.io.read_address_a := decoder.io.rs1;
155+
registers.io.read_address_b := decoder.io.rs2;
149156

150-
}
151-
//ALU Imm
152-
is("b0010011".U){
157+
memory.io.read_1 := true.B
158+
memory.io.address_1 := (addr) / 4.U;
159+
memory.io.read_2 := true.B
160+
memory.io.address_2 := (addr) / 4.U + 1.U;
153161

154162
}
155-
//ALU Reg
156-
is("b0110011".U){
163+
//ALU Imm,Reg
164+
is("b0010011".U, "b0110011".U){
165+
registers.io.read_address_a := decoder.io.rs1
166+
registers.io.read_address_b := decoder.io.rs2
167+
registers.io.write_address := decoder.io.rd
168+
registers.io.write_enable := true.B
169+
program_pointer := pc_plus_4
170+
stage := 0.U
157171

172+
val alu_b = Mux(deocer.io.opcode === "b0010011".U, decoder.io.immediate, registers.io.out_b)
158173
}
174+
159175
//Branch
160176
is("b1100011".U){
161177
registers.io.read_address_a := decoder.io.rs1;
@@ -167,36 +183,84 @@ class Main() extends Module {
167183
val lt_sel = Mux(decoder.io.func3(1), lt_unsigned,lt_signed)
168184
val lt_eq_sel = Mux(decoder.io.func3(2),lt_sel,eq)
169185
val take_branch = lt_eq_sel ^ decoder.io.func3(0)
170-
171186
program_pointer := Mux(take_branch, pc_plus_imm, pc_plus_4)
172187
}
173188
//LUI
174189
is("b0110111".U){
190+
registers.io.write_address := decoder.io.rd;
191+
registers.io.write_enable := true.B;
192+
registers.io.in := decoder.io.immediate;
193+
194+
program_pointer := pc_plus_4;
195+
stage := 0.U;
175196

197+
printf(
198+
"[LUI] Rd: %d Immediate: %b\n",
199+
decoder.io.rd,
200+
decoder.io.immediate
201+
);
176202
}
177203
//AUIPC
178204
is("b0010111".U){
205+
registers.io.write_address := decoder.io.rd;
206+
registers.io.write_enable := true.B;
207+
registers.io.in := pc_plus_imm;
179208

209+
program_pointer := pc_plus_4;
210+
stage := 0.U;
211+
212+
printf(
213+
"[AUIPC] Rd: %d Immediate: %b\n",
214+
decoder.io.rd,
215+
decoder.io.immediate
216+
);
180217
}
181218
//JAL
182219
is("b1101111".U){
220+
registers.io.write_address := decoder.io.rd;
221+
registers.io.write_enable := true.B;
222+
registers.io.in := pc_plus_4
223+
224+
program_pointer := pc_plus_imm;
225+
stage := 0.U;
183226

227+
printf(
228+
"[JAL] Rd: %d Immediate: %b\n",
229+
decoder.io.rd,
230+
decoder.io.immediate
231+
);
184232
}
185233
//JALR
186234
is("b1100111".U){
235+
registers.io.read_address_a := decoder.io.rs1;
236+
237+
registers.io.write_address := decoder.io.rd;
238+
registers.io.write_enable := true.B;
239+
registers.io.in :=pc_plus_4;
240+
241+
program_pointer := addr & ~1.U(32.W)
242+
stage := 0.U;
243+
244+
printf(
245+
"[JALR] RS1: %d Rd: %d Immediate: %b\n",
246+
decoder.io.rs1,
247+
decoder.io.rd,
248+
decoder.io.immediate
249+
);
187250

188251
}
189252
//FENCE
190253
is("b0001111".U){
254+
program_pointer := pc_plus_4;
255+
stage := 0.U;
256+
printf("[FENCE]");
191257

192258
}
193259

194260

195261

196262
}
197263

198-
199-
200264
switch(decoder.io.operation) {
201265
// LB
202266
is("b000_0000011".U) {

0 commit comments

Comments
 (0)