@@ -74,19 +74,41 @@ object Backend {
7474 }
7575
7676 /** Apply uniform parallelism to Verilation. This maps to `-j`. */
77- case class Uniform (num : Int ) extends Type {
77+ class Uniform private (num : Int ) extends Type {
7878 override def toCompileFlags = Seq (" -j" , num.toString)
79+
80+ private def copy (num : Int ): Uniform = new Uniform (num = num)
81+
82+ def withNum (num : Int ): Uniform = copy(num = num)
83+ }
84+
85+ object Uniform {
86+ def default : Uniform = new Uniform (num = 0 )
7987 }
8088
8189 /** Apply non-uniform parallelism to Verilation. This allows control of
8290 * `--build-jobs` and `--verilate-jobs` separately.
8391 */
84- case class Different (build : Option [Int ] = None , verilate : Option [Int ] = None ) extends Type {
92+ class Different private (build : Option [Int ], verilate : Option [Int ]) extends Type {
8593 override def toCompileFlags : Seq [String ] = {
8694 val buildJobs : Seq [String ] = build.map(num => Seq (" --build-jobs" , num.toString)).toSeq.flatten
8795 val verilateJobs : Seq [String ] = verilate.map(num => Seq (" --verilate-jobs" , num.toString)).toSeq.flatten
8896 buildJobs ++ verilateJobs
8997 }
98+
99+ private def copy (build : Option [Int ] = this .build, verilate : Option [Int ] = this .verilate): Different =
100+ new Different (
101+ build = build,
102+ verilate = verilate
103+ )
104+
105+ def withBuild (build : Option [Int ]): Different = copy(build = build)
106+
107+ def withVerilate (verilate : Option [Int ]): Different = copy(verilate = verilate)
108+ }
109+
110+ object Different {
111+ def default = new Different (build = None , verilate = None )
90112 }
91113 }
92114
@@ -107,7 +129,7 @@ object Backend {
107129 disableFatalExitOnWarnings,
108130 enableAllAssertions,
109131 timing,
110- Some (CompilationSettings .Parallelism .Uniform ( 0 ) )
132+ Some (CompilationSettings .Parallelism .Uniform .default )
111133 )
112134
113135 @ deprecated(" avoid use of unapply" , " Chisel 7.1.0" )
@@ -143,7 +165,7 @@ object Backend {
143165 disableFatalExitOnWarnings : Boolean = false ,
144166 enableAllAssertions : Boolean = false ,
145167 timing : Option [CompilationSettings .Timing .Type ] = None ,
146- parallelism : Option [CompilationSettings .Parallelism .Type ] = Some (CompilationSettings .Parallelism .Uniform ( 0 ) )
168+ parallelism : Option [CompilationSettings .Parallelism .Type ] = Some (CompilationSettings .Parallelism .Uniform .default )
147169 ) extends svsim.Backend .Settings {
148170 def this (
149171 traceStyle : Option [CompilationSettings .TraceStyle ],
@@ -161,7 +183,27 @@ object Backend {
161183 disableFatalExitOnWarnings,
162184 enableAllAssertions,
163185 timing,
164- Some (CompilationSettings .Parallelism .Uniform (0 ))
186+ Some (CompilationSettings .Parallelism .Uniform .default)
187+ )
188+
189+ def _copy (
190+ traceStyle : Option [CompilationSettings .TraceStyle ] = this .traceStyle,
191+ outputSplit : Option [Int ] = this .outputSplit,
192+ outputSplitCFuncs : Option [Int ] = this .outputSplitCFuncs,
193+ disabledWarnings : Seq [String ] = this .disabledWarnings,
194+ disableFatalExitOnWarnings : Boolean = this .disableFatalExitOnWarnings,
195+ enableAllAssertions : Boolean = this .enableAllAssertions,
196+ timing : Option [CompilationSettings .Timing .Type ] = this .timing,
197+ parallelism : Option [CompilationSettings .Parallelism .Type ] = this .parallelism
198+ ): CompilationSettings = CompilationSettings (
199+ traceStyle = traceStyle,
200+ outputSplit = outputSplit,
201+ outputSplitCFuncs = outputSplitCFuncs,
202+ disabledWarnings = disabledWarnings,
203+ disableFatalExitOnWarnings = disableFatalExitOnWarnings,
204+ enableAllAssertions = enableAllAssertions,
205+ timing = timing,
206+ parallelism = parallelism
165207 )
166208
167209 @ deprecated(" don't use the copy method, use 'with<name>' single setters" , " Chisel 7.1.0" )
@@ -173,7 +215,7 @@ object Backend {
173215 disableFatalExitOnWarnings : Boolean = this .disableFatalExitOnWarnings,
174216 enableAllAssertions : Boolean = this .enableAllAssertions,
175217 timing : Option [CompilationSettings .Timing .Type ] = this .timing
176- ): CompilationSettings = CompilationSettings (
218+ ): CompilationSettings = _copy (
177219 traceStyle = traceStyle,
178220 outputSplit = outputSplit,
179221 outputSplitCFuncs = outputSplitCFuncs,
@@ -194,104 +236,33 @@ object Backend {
194236 enableAllAssertions : Boolean ,
195237 timing : Option [CompilationSettings .Timing .Type ],
196238 parallelism : Option [CompilationSettings .Parallelism .Type ]
197- ): CompilationSettings = CompilationSettings (
239+ ): CompilationSettings = _copy (
198240 traceStyle = traceStyle,
199241 outputSplit = outputSplit,
200242 outputSplitCFuncs = outputSplitCFuncs,
201243 disabledWarnings = disabledWarnings,
202244 disableFatalExitOnWarnings = disableFatalExitOnWarnings,
203245 enableAllAssertions = enableAllAssertions,
204246 timing = timing,
205- parallelism = Some (CompilationSettings .Parallelism .Uniform ( 0 ) )
247+ parallelism = Some (CompilationSettings .Parallelism .Uniform .default )
206248 )
207249
208- def withTraceStyle (traceStyle : Option [CompilationSettings .TraceStyle ]) = CompilationSettings (
209- traceStyle,
210- this .outputSplit,
211- this .outputSplitCFuncs,
212- this .disabledWarnings,
213- this .disableFatalExitOnWarnings,
214- this .enableAllAssertions,
215- this .timing,
216- this .parallelism
217- )
250+ def withTraceStyle (traceStyle : Option [CompilationSettings .TraceStyle ]) = _copy(traceStyle = traceStyle)
218251
219- def withOutputSplit (outputSplit : Option [Int ]) = CompilationSettings (
220- this .traceStyle,
221- this .outputSplit,
222- outputSplitCFuncs,
223- this .disabledWarnings,
224- this .disableFatalExitOnWarnings,
225- this .enableAllAssertions,
226- this .timing,
227- this .parallelism
228- )
252+ def withOutputSplit (outputSplit : Option [Int ]) = _copy(outputSplit = outputSplit)
229253
230- def withOutputSplitCFuncs (outputSplitCFuncs : Option [Int ]) = CompilationSettings (
231- this .traceStyle,
232- this .outputSplit,
233- outputSplitCFuncs,
234- this .disabledWarnings,
235- this .disableFatalExitOnWarnings,
236- this .enableAllAssertions,
237- this .timing,
238- this .parallelism
239- )
254+ def withOutputSplitCFuncs (outputSplitCFuncs : Option [Int ]) = _copy(outputSplitCFuncs = outputSplitCFuncs)
240255
241- def withDisabledWarnings (disabledWarnings : Seq [String ]) = CompilationSettings (
242- this .traceStyle,
243- this .outputSplit,
244- this .outputSplitCFuncs,
245- disabledWarnings,
246- this .disableFatalExitOnWarnings,
247- this .enableAllAssertions,
248- this .timing,
249- this .parallelism
250- )
256+ def withDisabledWarnings (disabledWarnings : Seq [String ]) = _copy(disabledWarnings = disabledWarnings)
251257
252- def withDisableFatalExitOnWarnings (disableFatalExitOnWarnings : Boolean ) = CompilationSettings (
253- this .traceStyle,
254- this .outputSplit,
255- this .outputSplitCFuncs,
256- this .disabledWarnings,
257- disableFatalExitOnWarnings,
258- this .enableAllAssertions,
259- this .timing,
260- this .parallelism
261- )
258+ def withDisableFatalExitOnWarnings (disableFatalExitOnWarnings : Boolean ) =
259+ _copy(disableFatalExitOnWarnings = disableFatalExitOnWarnings)
262260
263- def withEnableAllAssertions (enableAllAssertions : Boolean ) = CompilationSettings (
264- this .traceStyle,
265- this .outputSplit,
266- this .outputSplitCFuncs,
267- this .disabledWarnings,
268- this .disableFatalExitOnWarnings,
269- enableAllAssertions,
270- this .timing,
271- this .parallelism
272- )
261+ def withEnableAllAssertions (enableAllAssertions : Boolean ) = _copy(enableAllAssertions = enableAllAssertions)
273262
274- def withTiming (timing : Option [CompilationSettings .Timing .Type ]) = CompilationSettings (
275- this .traceStyle,
276- this .outputSplit,
277- this .outputSplitCFuncs,
278- this .disabledWarnings,
279- this .disableFatalExitOnWarnings,
280- this .enableAllAssertions,
281- timing,
282- this .parallelism
283- )
263+ def withTiming (timing : Option [CompilationSettings .Timing .Type ]) = _copy(timing = timing)
284264
285- def withParallelism (parallelism : Option [CompilationSettings .Parallelism .Type ]) = CompilationSettings (
286- this .traceStyle,
287- this .outputSplit,
288- this .outputSplitCFuncs,
289- this .disabledWarnings,
290- this .disableFatalExitOnWarnings,
291- this .enableAllAssertions,
292- this .timing,
293- parallelism
294- )
265+ def withParallelism (parallelism : Option [CompilationSettings .Parallelism .Type ]) = _copy(parallelism = parallelism)
295266 }
296267
297268 def initializeFromProcessEnvironment () = {
@@ -338,7 +309,7 @@ final class Backend(executablePath: String) extends svsim.Backend {
338309
339310 backendSpecificSettings.parallelism match {
340311 case Some (parallelism) => addArg(parallelism.toCompileFlags)
341- case None =>
312+ case None => ()
342313 }
343314
344315 commonSettings.libraryExtensions.foreach { extensions =>
0 commit comments