Skip to content

Commit

Permalink
Merge branch 'fpu_internal' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Dolu1990 committed May 17, 2024
2 parents cf5d972 + e42bdb7 commit fff45d2
Show file tree
Hide file tree
Showing 73 changed files with 5,242 additions and 241 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ VexiiRiscv (Vex2Risc5) is the successor of VexRiscv. Work in progress, here are
- Pipeline visualisation in simulation via Konata
- Lock step simulation via RVLS and Spike

Overall the goal is to have a design which can stretch (through configuration) from Cortex M0 up to a Cortex A53 and potentialy beyond.

Here is the online documentation :

- https://spinalhdl.github.io/VexiiRiscv-RTD/master/VexiiRiscv/Introduction/#
Expand Down
2 changes: 1 addition & 1 deletion ext/SpinalHDL
Submodule SpinalHDL updated 87 files
+2 −1 README.md
+8 −0 core/src/main/java/spinal/core/modport.java
+18 −3 core/src/main/scala/spinal/core/AFix.scala
+2 −0 core/src/main/scala/spinal/core/BitVector.scala
+2 −1 core/src/main/scala/spinal/core/BlackBox.scala
+2 −0 core/src/main/scala/spinal/core/Bool.scala
+17 −0 core/src/main/scala/spinal/core/Bundle.scala
+24 −0 core/src/main/scala/spinal/core/Data.scala
+170 −0 core/src/main/scala/spinal/core/Interface.scala
+5 −1 core/src/main/scala/spinal/core/Spinal.scala
+1 −1 core/src/main/scala/spinal/core/Union.scala
+1 −0 core/src/main/scala/spinal/core/core.scala
+3 −2 core/src/main/scala/spinal/core/fiber/AsyncCtrl.scala
+22 −8 core/src/main/scala/spinal/core/formal/FormalBootstraps.scala
+2 −1 core/src/main/scala/spinal/core/formal/SymbiYosysBackend.scala
+1 −0 core/src/main/scala/spinal/core/formal/package.scala
+107 −8 core/src/main/scala/spinal/core/internals/ComponentEmitter.scala
+196 −24 core/src/main/scala/spinal/core/internals/ComponentEmitterVerilog.scala
+7 −1 core/src/main/scala/spinal/core/internals/ComponentEmitterVhdl.scala
+17 −7 core/src/main/scala/spinal/core/internals/Expression.scala
+11 −5 core/src/main/scala/spinal/core/internals/Phase.scala
+186 −3 core/src/main/scala/spinal/core/internals/PhaseVerilog.scala
+54 −16 core/src/main/scala/spinal/core/sim/SimBootstraps.scala
+69 −6 core/src/main/scala/spinal/core/sim/package.scala
+38 −3 lib/src/main/scala/spinal/lib/Flow.scala
+53 −17 lib/src/main/scala/spinal/lib/Utils.scala
+2 −2 lib/src/main/scala/spinal/lib/bus/amba3/apb/Apb3CCToggle.scala
+4 −4 lib/src/main/scala/spinal/lib/bus/amba4/axi/sim/Axi4Master.scala
+235 −0 lib/src/main/scala/spinal/lib/bus/amba4/axilite/sim/AxiLite4Master.scala
+1 −2 lib/src/main/scala/spinal/lib/bus/bmb/sim/BmbMemoryAgent.scala
+3 −1 lib/src/main/scala/spinal/lib/bus/bram/BRAM.scala
+1 −1 lib/src/main/scala/spinal/lib/bus/bram/BRAMDecoder.scala
+1 −0 lib/src/main/scala/spinal/lib/bus/bram/BRAMSlaveFactory.scala
+37 −0 lib/src/main/scala/spinal/lib/bus/bram/sim/BRAMDriver.scala
+30 −10 lib/src/main/scala/spinal/lib/bus/misc/BusSlaveFactory.scala
+43 −0 lib/src/main/scala/spinal/lib/bus/regif/BusIfAdapter/BRAMBusInterface.scala
+23 −14 lib/src/main/scala/spinal/lib/bus/regif/BusIfAdapter/WishboneBusInterface.scala
+6 −4 lib/src/main/scala/spinal/lib/bus/regif/BusInterface.scala
+1 −1 lib/src/main/scala/spinal/lib/bus/regif/Document/DocTemplate.scala
+1 −0 lib/src/main/scala/spinal/lib/bus/regif/Document/JsonGenerator.scala
+1 −0 lib/src/main/scala/spinal/lib/bus/tilelink/Decoder.scala
+34 −1 lib/src/main/scala/spinal/lib/bus/wishbone/Wishbone.scala
+42 −37 lib/src/main/scala/spinal/lib/bus/wishbone/WishboneArbiter.scala
+13 −9 lib/src/main/scala/spinal/lib/bus/wishbone/WishboneDecoder.scala
+14 −9 lib/src/main/scala/spinal/lib/bus/wishbone/WishboneIntercon.scala
+6 −6 lib/src/main/scala/spinal/lib/bus/wishbone/WishboneSlaveFactory.scala
+1 −1 lib/src/main/scala/spinal/lib/com/jtag/JtagTapInstructions.scala
+2 −2 lib/src/main/scala/spinal/lib/com/jtag/lattice/ecp5/JtagTapCommands.scala
+5 −0 lib/src/main/scala/spinal/lib/com/jtag/sim/JtagVpi.scala
+4 −2 lib/src/main/scala/spinal/lib/com/usb/ohci/UsbOhci.scala
+7 −3 lib/src/main/scala/spinal/lib/com/usb/ohci/UsbOhciAxi4.scala
+1 −2 lib/src/main/scala/spinal/lib/com/usb/ohci/UsbOhciGenerator.scala
+6 −3 lib/src/main/scala/spinal/lib/com/usb/ohci/UsbOhciWishbone.scala
+9 −4 lib/src/main/scala/spinal/lib/com/usb/phy/UsbHubPhy.scala
+1 −2 lib/src/main/scala/spinal/lib/com/usb/udc/UsbDeviceBmbGenerator.scala
+1 −2 lib/src/main/scala/spinal/lib/com/usb/udc/UsbDeviceWithPhyWishbone.scala
+2 −2 lib/src/main/scala/spinal/lib/eda/altera/QSys.scala
+2 −2 lib/src/main/scala/spinal/lib/fsm/State.scala
+27 −3 lib/src/main/scala/spinal/lib/io/InOutWrapper.scala
+1 −0 lib/src/main/scala/spinal/lib/logic/Decoder.scala
+2 −2 lib/src/main/scala/spinal/lib/memory/sdram/sdr/SdramCtrl.scala
+6 −4 lib/src/main/scala/spinal/lib/misc/pipeline/Builder.scala
+1 −2 lib/src/main/scala/spinal/lib/misc/pipeline/CtrlLink.scala
+2 −2 lib/src/main/scala/spinal/lib/misc/pipeline/Node.scala
+9 −1 lib/src/main/scala/spinal/lib/misc/plugin/Host.scala
+1 −1 lib/src/main/scala/spinal/lib/sim/bus/wishbone/WishboneDriver.scala
+93 −95 lib/src/main/scala/spinal/lib/system/dma/sg/DmaSg.scala
+15 −2 lib/src/main/scala/spinal/lib/system/dma/sg/MemoryCore.scala
+1 −1 lib/src/main/scala/spinal/lib/system/tag/Bus.scala
+13 −3 sim/src/main/scala/spinal/sim/GhdlBackend.scala
+3 −2 sim/src/main/scala/spinal/sim/VCSBackend.scala
+5 −4 sim/src/main/scala/spinal/sim/VerilatorBackend.scala
+2 −1 sim/src/main/scala/spinal/sim/VpiBackend.scala
+2 −1 tester/src/main/scala/spinal/lib/formal/SpinalFormalFunSuite.scala
+219 −0 tester/src/test/scala/spinal/core/InterfaceTester.scala
+24 −0 tester/src/test/scala/spinal/core/SpinalSimAFixTester.scala
+56 −0 tester/src/test/scala/spinal/lib/UtilsChecker.scala
+10 −0 tester/src/test/scala/spinal/lib/bus/regif/RegIfACC30.scala
+1 −0 tester/src/test/scala/spinal/lib/bus/regif/RegIfBasicAccessTester.scala
+18 −2 tester/src/test/scala/spinal/tester/PlayDev.scala
+18 −0 tester/src/test/scala/spinal/tester/code/Formal.scala
+2 −2 tester/src/test/scala/spinal/tester/scalatest/FormalSimpleTester.scala
+73 −0 tester/src/test/scala/spinal/tester/scalatest/IsUnknownTester.scala
+20 −0 tester/src/test/scala/spinal/tester/scalatest/SpinalSimLibTester.scala
+92 −0 tester/src/test/scala/spinal/tester/scalatest/SpinalSimWishboneBusInterfaceTester.scala
+20 −20 tester/src/test/scala/spinal/tester/scalatest/SpinalSimWishboneSimTester.scala
+52 −22 tester/src/test/scala/spinal/tester/scalatest/SpinalSimWishboneSlaveFactoryTester.scala
2 changes: 1 addition & 1 deletion ext/riscv-isa-sim
87 changes: 87 additions & 0 deletions src/main/scala/spinal/lib/misc/AstWalker.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
//package spinal.lib.misc
//
//import spinal.core._
//import spinal.core.internals.{BaseNode, Expression}
//
//import scala.collection.mutable
//import scala.collection.mutable.ArrayBuffer
//
//class AstWalker {
// def apply(from: BaseNode)(body : (BaseNode, Int) => Boolean): Unit = {
// val walkedId = GlobalData.get.allocateAlgoIncrementale()
//
// rec(from)
// def rec(driver : BaseNode) : Unit = {
// foreach(from) { (node, latency) =>
// if (body(node, latency)) {
// rec(driver)
// }
// }
// }
//
// def foreach(that: BaseNode)(onUp : (BaseNode, Int) => Unit): Unit = {
// if(that.algoIncrementale == walkedId)
// return
// that.algoIncrementale = walkedId
// if(that == from)
// return
//
// that match{
// case that : Mem[_] => {
// that.foreachStatements{
// case port : MemWrite =>
// port.foreachDrivingExpression(input => {
// onUp(input, 1)
// })
// case port : MemReadWrite =>
// port.foreachDrivingExpression(input => {
// onUp(input, 1)
// })
// case port : MemReadSync =>
// case port : MemReadAsync =>
// //TODO other ports
// }
// }
// case that : BaseType => { //TODO IR when conds
// def foreachInputs(func : (BaseNode) => Unit) = {
// that.foreachStatements(s => {
// s.foreachDrivingExpression(input => {
// func(input)
// })
// s.walkParentTreeStatementsUntilRootScope(tree => tree.foreachDrivingExpression(input => {
// func(input)
// }))
// })
// }
// if(that.isReg){
// foreachInputs(input => onUp(input, 1))
// } else {
// foreachInputs(input => {
// onUp(input, 0)
// })
// }
// }
// case that : MemReadSync =>
// that.foreachDrivingExpression(input => onUp(input, 1))
// onUp(that.mem, 1)
// case that : MemReadWrite =>
// that.foreachDrivingExpression{input =>
// val lat = if(input == that.data || input == that.mask) 2 else 1
// onUp(input, 1)
// }
// onUp(that.mem, 1)
// case that : MemReadAsync =>
// that.foreachDrivingExpression(input => {
// onUp(input, 0)
// })
// onUp(that.mem,0)
// case that : Expression => {
// that.foreachDrivingExpression(input => {
// onUp(input, 0)
// })
// }
// }
// }
//
// }
//}
55 changes: 55 additions & 0 deletions src/main/scala/spinal/lib/misc/pipeline/NodeLaneApi.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package spinal.lib.misc.pipeline

import spinal.core._

trait NodeLaneApi{
def nodeLink: Node
def laneName: String
def LANE_SEL: Payload[Bool] = CtrlLaneApi.LANE_SEL

private val _c = nodeLink

def isValid: Bool = _c.isValid
def isReady : Bool = _c.isReady
def isCancel : Bool = _c.isCancel

def apply[T <: Data](that: Payload[T]): T = _c.apply(that, laneName)
def apply[T <: Data](that: Payload[T], subKey : Any): T = _c.apply(that, laneName + "_" + subKey.toString)
def insert[T <: Data](that: T): Payload[T] = {
val p = Payload(that)
apply(p) := that
p
}


abstract class NodeMirror(node : Node) extends NodeBaseApi {
override def valid = node(LANE_SEL, laneName)
override def ready = node.ready
override def cancel = node.cancel
override def isValid: Bool = node(LANE_SEL, laneName)
override def isReady: Bool = node.isReady
override def isFiring = valid && isReady && !isCancel
override def isMoving = valid && (isReady || isCancel)
// override def isCancel: Bool = node.isCancel
override def isCanceling = valid && isCancel
override def apply(key: NamedTypeKey) = ???
override def apply[T <: Data](key: Payload[T]) = node(key, laneName)
override def apply(subKey: Seq[Any]) = ???
def transactionSpawn = valid && !RegNext(valid, False).clearWhen(isReady || isCancel)
}


implicit def stageablePiped2[T <: Data](stageable: Payload[T]): T = this (stageable)
implicit def bundlePimper[T <: Bundle](stageable: Payload[T]): BundlePimper[T] = new BundlePimper[T](this (stageable))
class BundlePimper[T <: Bundle](pimped: T) {
def :=(that: T): Unit = pimped := that
}

class Area(from : NodeLaneApi = this) extends NodeLaneMirror(from)
}

class NodeLaneMirror(from : NodeLaneApi) extends spinal.core.Area with NodeLaneApi {
override def nodeLink: Node = from.nodeLink
override def laneName: String = from.laneName
override def LANE_SEL: Payload[Bool] = from.LANE_SEL
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ object HeavyLock

class MultithreadedFunSuite(threadCount : Int) extends AnyFunSuite {
val finalThreadCount = if(threadCount > 0) threadCount else {
new oshi.SystemInfo().getHardware.getProcessor.getLogicalProcessorCount
new oshi.SystemInfo().getHardware.getProcessor.getLogicalProcessorCount*4
}
implicit val ec = ExecutionContext.fromExecutorService(
new ForkJoinPool(finalThreadCount, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true)
Expand Down
1 change: 1 addition & 0 deletions src/main/scala/vexiiriscv/Global.scala
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ object Global extends AreaRoot{
val TVAL = Payload(Bits(TVAL_WIDTH bits))
val TRAP = Payload(Bool())
val COMMIT = Payload(Bool())
val COMPLETED = Payload(Bool())

def HART_ID_WIDTH = log2Up(HART_COUNT)
val HART_ID = Payload(UInt(HART_ID_WIDTH bits))
Expand Down
Loading

0 comments on commit fff45d2

Please sign in to comment.