@@ -8,6 +8,7 @@ import freechips.rocketchip.tilelink.TLEdgeOut
8
8
import freechips .rocketchip .util ._
9
9
import freechips .rocketchip .rocket ._
10
10
import freechips .rocketchip .rocket .Instructions ._
11
+ import freechips .rocketchip .rocket .ALU ._
11
12
12
13
import shuttle .common ._
13
14
import shuttle .ifu ._
@@ -40,8 +41,6 @@ class ShuttleCore(tile: ShuttleTile, edge: TLEdgeOut)(implicit p: Parameters) ex
40
41
val vector = if (usingVector) Some (Flipped (new ShuttleVectorCoreIO )) else None
41
42
})
42
43
43
- val aluFn = new ALUFN
44
-
45
44
val debug_tsc_reg = RegInit (0 .U (64 .W ))
46
45
debug_tsc_reg := debug_tsc_reg + 1 .U
47
46
dontTouch(debug_tsc_reg)
@@ -162,7 +161,8 @@ class ShuttleCore(tile: ShuttleTile, edge: TLEdgeOut)(implicit p: Parameters) ex
162
161
(usingDebug.option(new DebugDecode )) ++:
163
162
(usingVector.option(new VCFGDecode )) ++:
164
163
(usingNMI.option(new NMIDecode )) ++:
165
- Seq (new FenceIDecode (false )) ++:
164
+ Seq (new FenceIDecode (false )) ++:
165
+ Seq (new ZbaDecode , new Zba64Decode , new ZbbDecode , new Zbb64Decode , new ZbsDecode ) ++:
166
166
Seq (new IDecode )
167
167
} flatMap(_.table)
168
168
@@ -250,7 +250,7 @@ class ShuttleCore(tile: ShuttleTile, edge: TLEdgeOut)(implicit p: Parameters) ex
250
250
rrd_uops(i).bits.xcpt_cause := cause
251
251
252
252
when (xcpt) {
253
- rrd_uops(i).bits.ctrl.alu_fn := aluFn. FN_ADD
253
+ rrd_uops(i).bits.ctrl.alu_fn := FN_ADD
254
254
rrd_uops(i).bits.ctrl.alu_dw := DW_XPR
255
255
rrd_uops(i).bits.ctrl.sel_alu1 := A1_RS1
256
256
rrd_uops(i).bits.ctrl.sel_alu2 := A2_ZERO
@@ -555,12 +555,16 @@ class ShuttleCore(tile: ShuttleTile, edge: TLEdgeOut)(implicit p: Parameters) ex
555
555
val sel_alu2 = WireInit (ctrl.sel_alu2)
556
556
val ex_op1 = MuxLookup (sel_alu1, 0 .S )(Seq (
557
557
A1_RS1 -> uop.rs1_data.asSInt,
558
- A1_PC -> uop.pc.asSInt
558
+ A1_PC -> uop.pc.asSInt,
559
+ A1_RS1SHL -> (Mux (uop.inst(3 ), uop.rs1_data(31 ,0 ), uop.rs1_data) << uop.inst(14 ,13 )).asSInt
559
560
))
561
+ val ex_op2_oh = UIntToOH (Mux (ctrl.sel_alu2(0 ), (uop.inst >> 20 ).asUInt, uop.rs2_data)(log2Ceil(xLen)- 1 ,0 )).asSInt
560
562
val ex_op2 = MuxLookup (sel_alu2, 0 .S )(Seq (
561
563
A2_RS2 -> uop.rs2_data.asSInt,
562
564
A2_IMM -> imm,
563
- A2_SIZE -> Mux (uop.rvc, 2 .S , 4 .S )
565
+ A2_SIZE -> Mux (uop.rvc, 2 .S , 4 .S ),
566
+ A2_RS2OH -> ex_op2_oh,
567
+ A2_IMMOH -> ex_op2_oh
564
568
))
565
569
566
570
alu.io.dw := ctrl.alu_dw
@@ -771,12 +775,16 @@ class ShuttleCore(tile: ShuttleTile, edge: TLEdgeOut)(implicit p: Parameters) ex
771
775
uop.rs2_data)
772
776
val ex_op1 = MuxLookup (sel_alu1, 0 .S )(Seq (
773
777
A1_RS1 -> rs1_data.asSInt,
774
- A1_PC -> uop.pc.asSInt
778
+ A1_PC -> uop.pc.asSInt,
779
+ A1_RS1SHL -> (Mux (uop.inst(3 ), rs1_data(31 ,0 ), rs1_data) << uop.inst(14 ,13 )).asSInt
775
780
))
781
+ val ex_op2_oh = UIntToOH (Mux (ctrl.sel_alu2(0 ), (uop.inst >> 20 ).asUInt, rs2_data)(log2Ceil(xLen)- 1 ,0 )).asSInt
776
782
val ex_op2 = MuxLookup (sel_alu2, 0 .S )(Seq (
777
783
A2_RS2 -> rs2_data.asSInt,
778
784
A2_IMM -> imm,
779
- A2_SIZE -> Mux (uop.rvc, 2 .S , 4 .S )
785
+ A2_SIZE -> Mux (uop.rvc, 2 .S , 4 .S ),
786
+ A2_RS2OH -> ex_op2_oh,
787
+ A2_IMMOH -> ex_op2_oh
780
788
))
781
789
alu.io.dw := ctrl.alu_dw
782
790
alu.io.fn := ctrl.alu_fn
0 commit comments