coreplex: retire RTCPeriod & introduce PeripheryBusParams.frequency (#887)
This commit is contained in:
parent
68ed055f6d
commit
c9e467a668
@ -35,6 +35,7 @@ class BaseCoreplexConfig extends Config ((site, here, up) => {
|
|||||||
case DebugModuleParams => DefaultDebugModuleParams(site(XLen))
|
case DebugModuleParams => DefaultDebugModuleParams(site(XLen))
|
||||||
case PLICParams => PLICParams()
|
case PLICParams => PLICParams()
|
||||||
case ClintParams => ClintParams()
|
case ClintParams => ClintParams()
|
||||||
|
case DTSTimebase => BigInt(1000000) // 1 MHz
|
||||||
// TileLink connection global parameters
|
// TileLink connection global parameters
|
||||||
case TLMonitorBuilder => (args: TLMonitorArgs) => Some(LazyModule(new TLMonitor(args)))
|
case TLMonitorBuilder => (args: TLMonitorArgs) => Some(LazyModule(new TLMonitor(args)))
|
||||||
case TLCombinationalCheck => false
|
case TLCombinationalCheck => false
|
||||||
@ -281,10 +282,6 @@ class WithNExtTopInterrupts(nExtInts: Int) extends Config((site, here, up) => {
|
|||||||
case NExtTopInterrupts => nExtInts
|
case NExtTopInterrupts => nExtInts
|
||||||
})
|
})
|
||||||
|
|
||||||
class WithRTCPeriod(nCycles: Int) extends Config((site, here, up) => {
|
|
||||||
case RTCPeriod => nCycles
|
|
||||||
})
|
|
||||||
|
|
||||||
class WithNMemoryChannels(n: Int) extends Config((site, here, up) => {
|
class WithNMemoryChannels(n: Int) extends Config((site, here, up) => {
|
||||||
case BankedL2Params => up(BankedL2Params, site).copy(nMemoryChannels = n)
|
case BankedL2Params => up(BankedL2Params, site).copy(nMemoryChannels = n)
|
||||||
})
|
})
|
||||||
|
@ -7,12 +7,15 @@ import freechips.rocketchip.config.{Field, Parameters}
|
|||||||
import freechips.rocketchip.diplomacy._
|
import freechips.rocketchip.diplomacy._
|
||||||
import freechips.rocketchip.tilelink._
|
import freechips.rocketchip.tilelink._
|
||||||
|
|
||||||
|
import freechips.rocketchip.config.Field
|
||||||
|
|
||||||
case class PeripheryBusParams(
|
case class PeripheryBusParams(
|
||||||
beatBytes: Int,
|
beatBytes: Int,
|
||||||
blockBytes: Int,
|
blockBytes: Int,
|
||||||
masterBuffering: BufferParams = BufferParams.default,
|
masterBuffering: BufferParams = BufferParams.default,
|
||||||
slaveBuffering: BufferParams = BufferParams.none,
|
slaveBuffering: BufferParams = BufferParams.none,
|
||||||
arithmetic: Boolean = true
|
arithmetic: Boolean = true,
|
||||||
|
frequency: BigInt = BigInt(100000000) // 100 MHz as default bus frequency
|
||||||
) extends TLBusParams {
|
) extends TLBusParams {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,21 +3,22 @@
|
|||||||
package freechips.rocketchip.coreplex
|
package freechips.rocketchip.coreplex
|
||||||
|
|
||||||
import Chisel._
|
import Chisel._
|
||||||
import freechips.rocketchip.config.Field
|
import freechips.rocketchip.diplomacy.{LazyMultiIOModuleImp, DTSTimebase}
|
||||||
import freechips.rocketchip.diplomacy.LazyMultiIOModuleImp
|
|
||||||
import freechips.rocketchip.devices.tilelink.HasPeripheryClint
|
import freechips.rocketchip.devices.tilelink.HasPeripheryClint
|
||||||
|
|
||||||
/** Real-time clock is based on RTCPeriod relative to system clock.
|
|
||||||
*/
|
|
||||||
case object RTCPeriod extends Field[Option[Int]]
|
|
||||||
|
|
||||||
trait HasRTCModuleImp extends LazyMultiIOModuleImp {
|
trait HasRTCModuleImp extends LazyMultiIOModuleImp {
|
||||||
val outer: HasPeripheryClint
|
val outer: HasPeripheryClint
|
||||||
private val internalPeriod: Option[Int] = outer.p(RTCPeriod)
|
private val pbusFreq = outer.p(PeripheryBusParams).frequency
|
||||||
require(internalPeriod.isDefined, "RTCPeriod is not defined")
|
private val rtcFreq = outer.p(DTSTimebase)
|
||||||
|
private val internalPeriod: BigInt = pbusFreq / rtcFreq
|
||||||
|
|
||||||
|
// check whether pbusFreq >= rtcFreq
|
||||||
|
require(internalPeriod > 0)
|
||||||
|
// check wehther the integer division is within 5% of the real division
|
||||||
|
require((pbusFreq - rtcFreq * internalPeriod) * 100 / pbusFreq <= 5)
|
||||||
|
|
||||||
// Use the static period to toggle the RTC
|
// Use the static period to toggle the RTC
|
||||||
val (_, int_rtc_tick) = Counter(true.B, internalPeriod.get)
|
val (_, int_rtc_tick) = Counter(true.B, internalPeriod.toInt)
|
||||||
|
|
||||||
outer.clint.module.io.rtcTick := int_rtc_tick
|
outer.clint.module.io.rtcTick := int_rtc_tick
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,6 @@ class BaseConfig extends Config(new BaseCoreplexConfig().alter((site,here,up) =>
|
|||||||
// DTS descriptive parameters
|
// DTS descriptive parameters
|
||||||
case DTSModel => "freechips,rocketchip-unknown"
|
case DTSModel => "freechips,rocketchip-unknown"
|
||||||
case DTSCompat => Nil
|
case DTSCompat => Nil
|
||||||
case DTSTimebase => BigInt(1000000) // 1 MHz
|
|
||||||
case RTCPeriod => Some(1000) // Implies coreplex clock is DTSTimebase * RTCPeriod = 1 GHz
|
|
||||||
// External port parameters
|
// External port parameters
|
||||||
case IncludeJtagDTM => false
|
case IncludeJtagDTM => false
|
||||||
case JtagDTMKey => new JtagDTMKeyDefault()
|
case JtagDTMKey => new JtagDTMKeyDefault()
|
||||||
|
Loading…
Reference in New Issue
Block a user