> configure(npc)

ysyx_22040000 李心杨
 Linux calcite 6.6.19 #1-NixOS SMP PREEMPT_DYNAMIC Fri Mar  1 12:35:11 UTC 2024 x86_64 GNU/Linux
  11:40:05  up   1:16,  2 users,  load average: 0.90, 0.86, 0.79
This commit is contained in:
tracer-ysyx 2024-03-13 11:40:05 +08:00 committed by xinyangli
parent 2a27cd71c7
commit 110d8d5288
3 changed files with 278 additions and 16 deletions

View file

@ -8,33 +8,39 @@ class ALUControlInterface extends Bundle {
object OpSelect extends ChiselEnum {
val aOpAdd, aOpSub, aOpNot, aOpAnd, aOpOr, aOpXor, aOpSlt, aOpEq, aOpNop = Value
}
object SrcSelect extends ChiselEnum {
val aSrcRs2, aSrcImm = Value
}
val op = Input(OpSelect())
val src = Input(SrcSelect())
type CtrlTypes = OpSelect.Type :: HNil
type CtrlTypes = OpSelect.Type :: SrcSelect.Type :: HNil
def ctrlBindPorts: CtrlTypes = {
op :: HNil
op :: src :: HNil
}
}
class ALU[T <: UInt](tpe: T) extends Module {
val control = IO(new ALUControlInterface)
val in = IO(new Bundle {
val a = Input(tpe)
val a = Input(Vec(control.SrcSelect.getWidth, tpe))
val b = Input(tpe)
})
val out = IO(new Bundle {
val result = Output(tpe)
})
val a = in.a(control.src.asUInt)
// val adder_b = (Fill(tpe.getWidth, io.op(0)) ^ io.b) + io.op(0) // take (-b) if sub
val add = in.a + in.b
val sub = in.a - in.b
val and = in.a & in.b
val not = ~in.a
val or = in.a | in.b
val xor = in.a ^ in.b
val slt = in.a < in.b
val eq = in.a === in.b
val add = a + in.b
val sub = a - in.b
val and = a & in.b
val not = ~a
val or = a | in.b
val xor = a ^ in.b
val slt = a < in.b
val eq = a === in.b
import control.OpSelect._

View file

@ -38,23 +38,25 @@ class Control(width: Int) extends Module {
// TODO: Add .ctrlTypes together instead of writing them by hand.
type T =
Bool :: reg.WriteSelect.Type :: pc.SrcSelect.Type :: alu.OpSelect.Type :: HNil
Bool :: reg.WriteSelect.Type :: pc.SrcSelect.Type :: alu.OpSelect.Type :: alu.SrcSelect.Type :: HNil
val dst: T = reg.ctrlBindPorts ++ pc.ctrlBindPorts ++ alu.ctrlBindPorts
import reg.WriteSelect._
import pc.SrcSelect._
import alu.OpSelect._
import alu.SrcSelect._
import RV32Inst._
val ControlMapping: Array[(BitPat, T)] = Array(
// Regs :: PC :: Exe
// writeEnable :: writeSelect :: srcSelect ::
(addi, false.B :: rAluOut :: pStaticNpc :: aOpAdd :: HNil),
(addi, true.B :: rAluOut :: pStaticNpc :: aOpAdd :: aSrcImm :: HNil),
)
println(ControlMapping)
def toBits(t: T): BitPat = {
val list: List[Data] = t.toList
list.map(x => BitPat(x.litValue.toInt.U(x.getWidth.W))).reduceLeft(_ ## _)
}
val default = BitPat("b???????")
val default = BitPat("b????????")
reg.writeEnable := false.B
reg.writeSelect := reg.WriteSelect(0.U)
@ -126,6 +128,5 @@ class Flow extends Module {
alu.in.a := reg.out.src(0)
alu.in.b := reg.out.src(1)
printf("Yes\n")
dontTouch(control.out)
}

View file

@ -125,108 +125,363 @@ b00000000000000000000000000000000 I
b00000000000000000000000000000000 J
b00000000000000000000000000000000 K
b00000000000000000000000000000000 L
0M
1M
0N
b0000 O
0P
b0000000 Q
1R
#1
b00000000000000000000000000001000 &
b00000000000000000000000000000100 '
b0000000100 (
b00000000000010000100000100010011 )
b00010 *
b10000 +
0M
#2
1M
#3
b00000000000000000000000000001100 &
b00000000000000000000000000001000 '
b0000001000 (
0M
#4
1M
#5
b00000000000000000000000000010000 &
b00000000000000000000000000001100 '
b0000001100 (
0M
#6
1M
#7
b00000000000000000000000000010100 &
b00000000000000000000000000010000 '
b0000010000 (
b00000000000000000000000000000000 )
b00000 *
b00000 +
0M
#8
1M
#9
b00000000000000000000000000011000 &
b00000000000000000000000000010100 '
b0000010100 (
0M
#10
1M
#11
b00000000000000000000000000011100 &
b00000000000000000000000000011000 '
b0000011000 (
0M
#12
1M
#13
b00000000000000000000000000100000 &
b00000000000000000000000000011100 '
b0000011100 (
0M
#14
1M
#15
b00000000000000000000000000100100 &
b00000000000000000000000000100000 '
b0000100000 (
0M
#16
1M
#17
b00000000000000000000000000101000 &
b00000000000000000000000000100100 '
b0000100100 (
0M
#18
1M
#19
b00000000000000000000000000101100 &
b00000000000000000000000000101000 '
b0000101000 (
0M
#20
1M
#21
b00000000000000000000000000110000 &
b00000000000000000000000000101100 '
b0000101100 (
0M
#22
1M
#23
b00000000000000000000000000110100 &
b00000000000000000000000000110000 '
b0000110000 (
0M
#24
1M
#25
b00000000000000000000000000111000 &
b00000000000000000000000000110100 '
b0000110100 (
0M
#26
1M
#27
b00000000000000000000000000111100 &
b00000000000000000000000000111000 '
b0000111000 (
0M
#28
1M
#29
b00000000000000000000000001000000 &
b00000000000000000000000000111100 '
b0000111100 (
0M
#30
1M
#31
b00000000000000000000000001000100 &
b00000000000000000000000001000000 '
b0001000000 (
0M
#32
1M
#33
b00000000000000000000000001001000 &
b00000000000000000000000001000100 '
b0001000100 (
0M
#34
1M
#35
b00000000000000000000000001001100 &
b00000000000000000000000001001000 '
b0001001000 (
0M
#36
1M
#37
b00000000000000000000000001010000 &
b00000000000000000000000001001100 '
b0001001100 (
0M
#38
1M
#39
b00000000000000000000000001010100 &
b00000000000000000000000001010000 '
b0001010000 (
0M
#40
1M
#41
b00000000000000000000000001011000 &
b00000000000000000000000001010100 '
b0001010100 (
0M
#42
1M
#43
b00000000000000000000000001011100 &
b00000000000000000000000001011000 '
b0001011000 (
0M
#44
1M
#45
b00000000000000000000000001100000 &
b00000000000000000000000001011100 '
b0001011100 (
0M
#46
1M
#47
b00000000000000000000000001100100 &
b00000000000000000000000001100000 '
b0001100000 (
0M
#48
1M
#49
b00000000000000000000000001101000 &
b00000000000000000000000001100100 '
b0001100100 (
0M
#50
1M
#51
b00000000000000000000000001101100 &
b00000000000000000000000001101000 '
b0001101000 (
0M
#52
1M
#53
b00000000000000000000000001110000 &
b00000000000000000000000001101100 '
b0001101100 (
0M
#54
1M
#55
b00000000000000000000000001110100 &
b00000000000000000000000001110000 '
b0001110000 (
0M
#56
1M
#57
b00000000000000000000000001111000 &
b00000000000000000000000001110100 '
b0001110100 (
0M
#58
1M
#59
b00000000000000000000000001111100 &
b00000000000000000000000001111000 '
b0001111000 (
0M
#60
1M
#61
b00000000000000000000000010000000 &
b00000000000000000000000001111100 '
b0001111100 (
0M
#62
1M
#63
b00000000000000000000000010000100 &
b00000000000000000000000010000000 '
b0010000000 (
0M
#64
1M
#65
b00000000000000000000000010001000 &
b00000000000000000000000010000100 '
b0010000100 (
0M
#66
1M
#67
b00000000000000000000000010001100 &
b00000000000000000000000010001000 '
b0010001000 (
0M
#68
1M
#69
b00000000000000000000000010010000 &
b00000000000000000000000010001100 '
b0010001100 (
0M
#70
1M
#71
b00000000000000000000000010010100 &
b00000000000000000000000010010000 '
b0010010000 (
0M
#72
1M
#73
b00000000000000000000000010011000 &
b00000000000000000000000010010100 '
b0010010100 (
0M
#74
1M
#75
b00000000000000000000000010011100 &
b00000000000000000000000010011000 '
b0010011000 (
0M
#76
1M
#77
b00000000000000000000000010100000 &
b00000000000000000000000010011100 '
b0010011100 (
0M
#78
1M
#79
b00000000000000000000000010100100 &
b00000000000000000000000010100000 '
b0010100000 (
0M
#80
1M
#81
b00000000000000000000000010101000 &
b00000000000000000000000010100100 '
b0010100100 (
0M
#82
1M
#83
b00000000000000000000000010101100 &
b00000000000000000000000010101000 '
b0010101000 (
0M
#84
1M
#85
b00000000000000000000000010110000 &
b00000000000000000000000010101100 '
b0010101100 (
0M
#86
1M
#87
b00000000000000000000000010110100 &
b00000000000000000000000010110000 '
b0010110000 (
0M
#88
1M
#89
b00000000000000000000000010111000 &
b00000000000000000000000010110100 '
b0010110100 (
0M
#90
1M
#91
b00000000000000000000000010111100 &
b00000000000000000000000010111000 '
b0010111000 (
0M
#92
1M
#93
b00000000000000000000000011000000 &
b00000000000000000000000010111100 '
b0010111100 (
0M
#94
1M
#95
b00000000000000000000000011000100 &
b00000000000000000000000011000000 '
b0011000000 (
0M
#96
1M
#97
b00000000000000000000000011001000 &
b00000000000000000000000011000100 '
b0011000100 (
0M
#98
1M
#99
b00000000000000000000000011001100 &
b00000000000000000000000011001000 '
b0011001000 (
0M