Use multi-clock config. frags to determine VCU118 clk freq
This commit is contained in:
@@ -17,7 +17,7 @@ import sifive.fpgashells.shell.xilinx.{VCU118ShellPMOD, VCU118DDRSize}
|
|||||||
|
|
||||||
import testchipip.{SerialTLKey}
|
import testchipip.{SerialTLKey}
|
||||||
|
|
||||||
import chipyard.{BuildSystem, ExtTLMem}
|
import chipyard.{BuildSystem, ExtTLMem, DefaultClockFrequencyKey}
|
||||||
|
|
||||||
class WithDefaultPeripherals extends Config((site, here, up) => {
|
class WithDefaultPeripherals extends Config((site, here, up) => {
|
||||||
case PeripheryUARTKey => List(UARTParams(address = BigInt(0x64000000L)))
|
case PeripheryUARTKey => List(UARTParams(address = BigInt(0x64000000L)))
|
||||||
@@ -26,11 +26,10 @@ class WithDefaultPeripherals extends Config((site, here, up) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
class WithSystemModifications extends Config((site, here, up) => {
|
class WithSystemModifications extends Config((site, here, up) => {
|
||||||
case PeripheryBusKey => up(PeripheryBusKey, site).copy(dtsFrequency = Some(site(FPGAFrequencyKey).toInt*1000000))
|
case DTSTimebase => BigInt((1e6).toLong)
|
||||||
case DTSTimebase => BigInt(1000000)
|
|
||||||
case BootROMLocated(x) => up(BootROMLocated(x), site).map { p =>
|
case BootROMLocated(x) => up(BootROMLocated(x), site).map { p =>
|
||||||
// invoke makefile for sdboot
|
// invoke makefile for sdboot
|
||||||
val freqMHz = site(FPGAFrequencyKey).toInt * 1000000
|
val freqMHz = (site(DefaultClockFrequencyKey) * 1e6).toLong
|
||||||
val make = s"make -C fpga/src/main/resources/vcu118/sdboot PBUS_CLK=${freqMHz} bin"
|
val make = s"make -C fpga/src/main/resources/vcu118/sdboot PBUS_CLK=${freqMHz} bin"
|
||||||
require (make.! == 0, "Failed to build bootrom")
|
require (make.! == 0, "Failed to build bootrom")
|
||||||
p.copy(hang = 0x10000, contentFileName = s"./fpga/src/main/resources/vcu118/sdboot/build/sdboot.bin")
|
p.copy(hang = 0x10000, contentFileName = s"./fpga/src/main/resources/vcu118/sdboot/build/sdboot.bin")
|
||||||
@@ -52,7 +51,9 @@ class WithVCU118Tweaks extends Config(
|
|||||||
new WithSystemModifications ++ // setup busses, use sdboot bootrom, setup ext. mem. size
|
new WithSystemModifications ++ // setup busses, use sdboot bootrom, setup ext. mem. size
|
||||||
new chipyard.config.WithNoDebug ++ // remove debug module
|
new chipyard.config.WithNoDebug ++ // remove debug module
|
||||||
new freechips.rocketchip.subsystem.WithoutTLMonitors ++
|
new freechips.rocketchip.subsystem.WithoutTLMonitors ++
|
||||||
new freechips.rocketchip.subsystem.WithNMemoryChannels(1))
|
new freechips.rocketchip.subsystem.WithNMemoryChannels(1) ++
|
||||||
|
new WithFPGAFrequency(100) // default 100MHz freq
|
||||||
|
)
|
||||||
|
|
||||||
class RocketVCU118Config extends Config(
|
class RocketVCU118Config extends Config(
|
||||||
new WithVCU118Tweaks ++
|
new WithVCU118Tweaks ++
|
||||||
@@ -64,9 +65,7 @@ class BoomVCU118Config extends Config(
|
|||||||
new WithVCU118Tweaks ++
|
new WithVCU118Tweaks ++
|
||||||
new chipyard.MegaBoomConfig)
|
new chipyard.MegaBoomConfig)
|
||||||
|
|
||||||
class WithFPGAFrequency(MHz: Double) extends Config((site, here, up) => {
|
class WithFPGAFrequency(fMHz: Double) extends chipyard.config.WithPeripheryBusFrequency(fMHz)
|
||||||
case FPGAFrequencyKey => MHz
|
|
||||||
})
|
|
||||||
|
|
||||||
class WithFPGAFreq25MHz extends WithFPGAFrequency(25)
|
class WithFPGAFreq25MHz extends WithFPGAFrequency(25)
|
||||||
class WithFPGAFreq50MHz extends WithFPGAFrequency(50)
|
class WithFPGAFreq50MHz extends WithFPGAFrequency(50)
|
||||||
|
|||||||
@@ -17,12 +17,10 @@ import sifive.blocks.devices.uart._
|
|||||||
import sifive.blocks.devices.spi._
|
import sifive.blocks.devices.spi._
|
||||||
import sifive.blocks.devices.gpio._
|
import sifive.blocks.devices.gpio._
|
||||||
|
|
||||||
import chipyard.{HasHarnessSignalReferences, HasTestHarnessFunctions, BuildTop, ChipTop, ExtTLMem, CanHaveMasterTLMemPort}
|
import chipyard.{HasHarnessSignalReferences, HasTestHarnessFunctions, BuildTop, ChipTop, ExtTLMem, CanHaveMasterTLMemPort, DefaultClockFrequencyKey}
|
||||||
import chipyard.iobinders.{HasIOBinders}
|
import chipyard.iobinders.{HasIOBinders}
|
||||||
import chipyard.harness.{ApplyHarnessBinders}
|
import chipyard.harness.{ApplyHarnessBinders}
|
||||||
|
|
||||||
case object FPGAFrequencyKey extends Field[Double](100.0)
|
|
||||||
|
|
||||||
class VCU118FPGATestHarness(override implicit val p: Parameters) extends VCU118ShellBasicOverlays {
|
class VCU118FPGATestHarness(override implicit val p: Parameters) extends VCU118ShellBasicOverlays {
|
||||||
|
|
||||||
def dp = designParameters
|
def dp = designParameters
|
||||||
@@ -55,7 +53,8 @@ class VCU118FPGATestHarness(override implicit val p: Parameters) extends VCU118S
|
|||||||
harnessSysPLL := sysClkNode
|
harnessSysPLL := sysClkNode
|
||||||
|
|
||||||
// create and connect to the dutClock
|
// create and connect to the dutClock
|
||||||
val dutClock = ClockSinkNode(freqMHz = dp(FPGAFrequencyKey))
|
println(s"VCU118 FPGA Base Clock Freq: ${dp(DefaultClockFrequencyKey)} MHz")
|
||||||
|
val dutClock = ClockSinkNode(freqMHz = dp(DefaultClockFrequencyKey))
|
||||||
val dutWrangler = LazyModule(new ResetWrangler)
|
val dutWrangler = LazyModule(new ResetWrangler)
|
||||||
val dutGroup = ClockGroup()
|
val dutGroup = ClockGroup()
|
||||||
dutClock := dutWrangler.node := dutGroup := harnessSysPLL
|
dutClock := dutWrangler.node := dutGroup := harnessSysPLL
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ class AbstractConfig extends Config(
|
|||||||
new chipyard.config.WithNoSubsystemDrivenClocks ++ // drive the subsystem diplomatic clocks from ChipTop instead of using implicit clocks
|
new chipyard.config.WithNoSubsystemDrivenClocks ++ // drive the subsystem diplomatic clocks from ChipTop instead of using implicit clocks
|
||||||
new chipyard.config.WithInheritBusFrequencyAssignments ++ // Unspecified clocks within a bus will receive the bus frequency if set
|
new chipyard.config.WithInheritBusFrequencyAssignments ++ // Unspecified clocks within a bus will receive the bus frequency if set
|
||||||
new chipyard.config.WithPeripheryBusFrequencyAsDefault ++ // Unspecified frequencies with match the pbus frequency (which is always set)
|
new chipyard.config.WithPeripheryBusFrequencyAsDefault ++ // Unspecified frequencies with match the pbus frequency (which is always set)
|
||||||
new chipyard.config.WithMemoryBusFrequency(100.0) ++ // Default 100 MHz mbus
|
|
||||||
new chipyard.config.WithPeripheryBusFrequency(100.0) ++ // Default 100 MHz pbus
|
new chipyard.config.WithPeripheryBusFrequency(100.0) ++ // Default 100 MHz pbus
|
||||||
new freechips.rocketchip.subsystem.WithJtagDTM ++ // set the debug module to expose a JTAG port
|
new freechips.rocketchip.subsystem.WithJtagDTM ++ // set the debug module to expose a JTAG port
|
||||||
new freechips.rocketchip.subsystem.WithNoMMIOPort ++ // no top-level MMIO master port (overrides default set in rocketchip)
|
new freechips.rocketchip.subsystem.WithNoMMIOPort ++ // no top-level MMIO master port (overrides default set in rocketchip)
|
||||||
|
|||||||
Reference in New Issue
Block a user