CsrPlugin now support utime csr to avoid emulation
This commit is contained in:
parent
3dafe8708b
commit
71760ea372
|
@ -159,7 +159,10 @@ object Riscv{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def UCYCLE = 0xC00 // UR Machine ucycle counter.
|
def UCYCLE = 0xC00 // UR Machine ucycle counter.
|
||||||
def UCYCLEH = 0xC80
|
def UCYCLEH = 0xC80
|
||||||
|
def UTIME = 0xC01 // rdtime
|
||||||
|
def UTIMEH = 0xC81
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@ case class CsrPluginConfig(
|
||||||
scycleAccess : CsrAccess = CsrAccess.NONE,
|
scycleAccess : CsrAccess = CsrAccess.NONE,
|
||||||
sinstretAccess : CsrAccess = CsrAccess.NONE,
|
sinstretAccess : CsrAccess = CsrAccess.NONE,
|
||||||
satpAccess : CsrAccess = CsrAccess.NONE,
|
satpAccess : CsrAccess = CsrAccess.NONE,
|
||||||
|
utimeAccess :CsrAccess = CsrAccess.NONE,
|
||||||
medelegAccess : CsrAccess = CsrAccess.NONE,
|
medelegAccess : CsrAccess = CsrAccess.NONE,
|
||||||
midelegAccess : CsrAccess = CsrAccess.NONE,
|
midelegAccess : CsrAccess = CsrAccess.NONE,
|
||||||
withExternalMhartid : Boolean = false,
|
withExternalMhartid : Boolean = false,
|
||||||
|
@ -390,6 +391,7 @@ class CsrPlugin(val config: CsrPluginConfig) extends Plugin[VexRiscv] with Excep
|
||||||
var thirdPartyWake : Bool = null
|
var thirdPartyWake : Bool = null
|
||||||
var inWfi : Bool = null
|
var inWfi : Bool = null
|
||||||
var externalMhartId : UInt = null
|
var externalMhartId : UInt = null
|
||||||
|
var utime : UInt = null
|
||||||
|
|
||||||
override def askWake(): Unit = thirdPartyWake := True
|
override def askWake(): Unit = thirdPartyWake := True
|
||||||
|
|
||||||
|
@ -520,6 +522,7 @@ class CsrPlugin(val config: CsrPluginConfig) extends Plugin[VexRiscv] with Excep
|
||||||
pipeline.update(MPP, UInt(2 bits))
|
pipeline.update(MPP, UInt(2 bits))
|
||||||
|
|
||||||
if(withExternalMhartid) externalMhartId = in UInt(mhartidWidth bits)
|
if(withExternalMhartid) externalMhartId = in UInt(mhartidWidth bits)
|
||||||
|
if(utimeAccess != CsrAccess.NONE) utime = in UInt(64 bits) setName("utime")
|
||||||
}
|
}
|
||||||
|
|
||||||
def inhibateInterrupts() : Unit = allowInterrupts := False
|
def inhibateInterrupts() : Unit = allowInterrupts := False
|
||||||
|
@ -634,6 +637,11 @@ class CsrPlugin(val config: CsrPluginConfig) extends Plugin[VexRiscv] with Excep
|
||||||
ucycleAccess(CSR.UCYCLE, mcycle(31 downto 0))
|
ucycleAccess(CSR.UCYCLE, mcycle(31 downto 0))
|
||||||
ucycleAccess(CSR.UCYCLEH, mcycle(63 downto 32))
|
ucycleAccess(CSR.UCYCLEH, mcycle(63 downto 32))
|
||||||
|
|
||||||
|
if(utimeAccess != CsrAccess.NONE) {
|
||||||
|
utimeAccess(CSR.UTIME, utime(31 downto 0))
|
||||||
|
utimeAccess(CSR.UTIMEH, utime(63 downto 32))
|
||||||
|
}
|
||||||
|
|
||||||
pipeline(MPP) := mstatus.MPP
|
pipeline(MPP) := mstatus.MPP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue