> 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 00:33:44 up 3 days 15:24, 2 users, load average: 1.20, 0.75, 0.43
This commit is contained in:
parent
0cfa9d2eef
commit
aeed35376f
2 changed files with 18 additions and 26 deletions
|
@ -63,47 +63,39 @@ class Control(width: Int) extends Module {
|
||||||
alu.op := alu.OpSelect(0.U)
|
alu.op := alu.OpSelect(0.U)
|
||||||
pc.srcSelect := pc.SrcSelect(0.U)
|
pc.srcSelect := pc.SrcSelect(0.U)
|
||||||
|
|
||||||
// val out = decoder(
|
val out = decoder(
|
||||||
// inst,
|
inst,
|
||||||
// TruthTable(ControlMapping.map(it => (it._1 -> toBits(it._2))), default))
|
TruthTable(ControlMapping.map(it => (it._1 -> toBits(it._2))), default))
|
||||||
val table = TruthTable(
|
|
||||||
(0 until 16).map { i =>
|
|
||||||
BitPat(i.U(4.W)) -> BitPat((1 << i).U(16.W))
|
|
||||||
},
|
|
||||||
BitPat.dontCare(16)
|
|
||||||
)
|
|
||||||
|
|
||||||
val out = decoder.qmc(inst(3,0), table)
|
val dstList = dst.toList
|
||||||
|
val reversePrefixSum = dstList.scanLeft(0)(_ + _.getWidth).reverse
|
||||||
|
val slices = reversePrefixSum.zip(reversePrefixSum.tail)
|
||||||
|
val srcList = slices.map(s => out(s._1 - 1, s._2))
|
||||||
|
|
||||||
// val dstList = dst.toList
|
srcList
|
||||||
// val reversePrefixSum = dstList.scanLeft(0)(_ + _.getWidth).reverse
|
.zip(dstList)
|
||||||
// val slices = reversePrefixSum.zip(reversePrefixSum.tail)
|
.foreach({ case (src, dst) =>
|
||||||
// val srcList = slices.map(s => out(s._1 - 1, s._2))
|
dst := src.asTypeOf(dst)
|
||||||
|
})
|
||||||
// srcList
|
|
||||||
// .zip(dstList)
|
|
||||||
// .foreach({ case (src, dst) =>
|
|
||||||
// dst := src.asTypeOf(dst)
|
|
||||||
// })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
import flow.components.{RegisterFile, RegFileInterface, ProgramCounter, ALU}
|
import flow.components.{RegisterFile, RegFileInterface, ProgramCounter, ALU}
|
||||||
import chisel3.util.experimental.loadMemoryFromFileInline
|
import chisel3.util.experimental.loadMemoryFromFileInline
|
||||||
class Flow extends Module {
|
class Flow extends Module {
|
||||||
// val dataType = UInt(32.W)
|
val dataType = UInt(32.W)
|
||||||
|
|
||||||
val ram = SRAM(
|
val ram = SRAM(
|
||||||
size = 128 * 1024 * 1024,
|
size = 128 * 1024 * 1024,
|
||||||
tpe = UInt(32.W),
|
tpe = dataType,
|
||||||
numReadPorts = 2,
|
numReadPorts = 2,
|
||||||
numWritePorts = 1,
|
numWritePorts = 1,
|
||||||
numReadwritePorts = 0,
|
numReadwritePorts = 0,
|
||||||
// memoryFile = HexMemoryFile(memoryFile)
|
// memoryFile = HexMemoryFile(memoryFile)
|
||||||
)
|
)
|
||||||
val control = Module(new Control(32))
|
val control = Module(new Control(32))
|
||||||
val reg = RegisterFile(32, UInt(32.W), 2, 2)
|
val reg = RegisterFile(32, dataType, 2, 2)
|
||||||
val pc = Module(new ProgramCounter(UInt(32.W)))
|
val pc = Module(new ProgramCounter(dataType))
|
||||||
val alu = Module(new ALU(UInt(32.W)))
|
val alu = Module(new ALU(dataType))
|
||||||
|
|
||||||
ram.readPorts(0).enable := true.B
|
ram.readPorts(0).enable := true.B
|
||||||
ram.readPorts(0).address := pc.out - 0x80000000L.U
|
ram.readPorts(0).address := pc.out - 0x80000000L.U
|
||||||
|
|
|
@ -39,7 +39,7 @@ class RV32CPUSpec extends AnyFreeSpec with ChiselScalatestTester {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"should compile" in {
|
"should compile" in {
|
||||||
test(new Flow("../resource/addi.txt")).withAnnotations(Seq(WriteVcdAnnotation)) { c =>
|
test(new Flow).withAnnotations(Seq(WriteVcdAnnotation)) { c =>
|
||||||
c.clock.step(1)
|
c.clock.step(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue