Skip to content

Commit 75171dc

Browse files
committed
[chiselsim] Add setting modification arguments
Add two new type class implementation arguments to simulation methods and use them to modify the common and backend settings. Signed-off-by: Schuyler Eldridge <[email protected]>
1 parent 82b78c4 commit 75171dc

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

src/main/scala/chisel3/simulator/Simulator.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,16 @@ trait Simulator[T <: Backend] {
9191
final def simulate[T <: RawModule, U](
9292
module: => T,
9393
chiselSettings: ChiselSettings[T] = ChiselSettings.defaultRaw[T]
94-
)(body: (SimulatedModule[T]) => U): Simulator.BackendInvocationDigest[U] = {
94+
)(body: (SimulatedModule[T]) => U)(
95+
implicit commonSettingsModifications: svsim.CommonSettingsModifications,
96+
backendSettingsModifications: svsim.BackendSettingsModifications
97+
): Simulator.BackendInvocationDigest[U] = {
9598
val workspace = new Workspace(path = workspacePath, workingDirectoryPrefix = workingDirectoryPrefix)
9699
workspace.reset()
97100
val elaboratedModule = workspace.elaborateGeneratedModule({ () => module }, firtoolArgs)
98101
workspace.generateAdditionalSources()
99102

100-
val commonCompilationSettingsUpdated = commonCompilationSettings.copy(
103+
val commonCompilationSettingsUpdated = commonSettingsModifications(commonCompilationSettings).copy(
101104
// Append to the include directorires based on what the
102105
// workspace indicates is the path for primary sources. This
103106
// ensures that `` `include `` directives can be resolved.
@@ -119,7 +122,7 @@ trait Simulator[T <: Backend] {
119122
.compile(backend)(
120123
tag,
121124
commonCompilationSettingsUpdated,
122-
backendSpecificCompilationSettings,
125+
backendSettingsModifications(backendSpecificCompilationSettings).asInstanceOf[backend.CompilationSettings],
123126
customSimulationWorkingDirectory,
124127
verbose
125128
)

src/main/scala/chisel3/simulator/SimulatorAPI.scala

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ trait SimulatorAPI {
2626
def simulateRaw[T <: RawModule](
2727
module: => T,
2828
chiselSettings: ChiselSettings[T] = ChiselSettings.defaultRaw[T]
29-
)(stimulus: (T) => Unit)(implicit hasSimulator: HasSimulator, testingDirectory: HasTestingDirectory): Unit = {
29+
)(stimulus: (T) => Unit)(
30+
implicit hasSimulator: HasSimulator,
31+
testingDirectory: HasTestingDirectory,
32+
commonSettingsModifications: svsim.CommonSettingsModifications,
33+
backendSettingsModifications: svsim.BackendSettingsModifications
34+
): Unit = {
3035

3136
hasSimulator.getSimulator
3237
.simulate(module, chiselSettings) { module =>
@@ -51,10 +56,14 @@ trait SimulatorAPI {
5156
module: => T,
5257
chiselSettings: ChiselSettings[T] = ChiselSettings.default[T],
5358
additionalResetCycles: Int = 0
54-
)(stimulus: (T) => Unit)(implicit hasSimulator: HasSimulator, testingDirectory: HasTestingDirectory): Unit =
55-
simulateRaw(module, chiselSettings) { dut =>
56-
ResetProcedure.module(additionalResetCycles)(dut)
57-
stimulus(dut)
58-
}
59+
)(stimulus: (T) => Unit)(
60+
implicit hasSimulator: HasSimulator,
61+
testingDirectory: HasTestingDirectory,
62+
commonSettingsModifications: svsim.CommonSettingsModifications,
63+
backendSettingsModifications: svsim.BackendSettingsModifications
64+
): Unit = simulateRaw(module, chiselSettings) { dut =>
65+
ResetProcedure.module(additionalResetCycles)(dut)
66+
stimulus(dut)
67+
}
5968

6069
}

src/test/scala-2/chiselTests/simulator/scalatest/ChiselSimSpec.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,12 @@ class ChiselSimSpec extends AnyFunSpec with Matchers with ChiselSim with FileChe
156156
val directory = Directory(FileSystems.getDefault().getPath("test_run_dir", "foo").toFile())
157157
directory.deleteRecursively()
158158

159-
simulate(new Foo()) { _ => }(hasSimulator = implicitly[HasSimulator], testingDirectory = fooDirectory)
159+
simulate(new Foo()) { _ => }(
160+
hasSimulator = implicitly[HasSimulator],
161+
testingDirectory = fooDirectory,
162+
implicitly,
163+
implicitly
164+
)
160165

161166
info(s"found expected directory: '$directory'")
162167
assert(directory.exists)

0 commit comments

Comments
 (0)