1
0

coreplex: retire RTCPeriod & introduce PeripheryBusParams.frequency (#887)

This commit is contained in:
Yunsup Lee 2017-07-25 00:55:55 -07:00 committed by GitHub
parent 68ed055f6d
commit c9e467a668
4 changed files with 15 additions and 16 deletions

View File

@ -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)
}) })

View File

@ -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 {
} }

View File

@ -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
} }

View File

@ -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()