From 80035d2a7b94faf9bfef962f83f9257f57419a35 Mon Sep 17 00:00:00 2001 From: Megan Wachs Date: Thu, 14 Jul 2022 08:30:13 -0700 Subject: 3.5x: Make explicit copy constructors for ExplicitCompileOptions (#2629) * Add copy constructors for compile options * Add tests for the copy constructors Co-authored-by: Jiuyang Liu --- core/src/main/scala/chisel3/CompileOptions.scala | 48 +++++++++++++++++++++- .../scala/chiselTests/CompileOptionsTest.scala | 28 +++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/core/src/main/scala/chisel3/CompileOptions.scala b/core/src/main/scala/chisel3/CompileOptions.scala index d7d30306..aca00d1f 100644 --- a/core/src/main/scala/chisel3/CompileOptions.scala +++ b/core/src/main/scala/chisel3/CompileOptions.scala @@ -82,7 +82,28 @@ object ExplicitCompileOptions { explicitInvalidate = false, inferModuleReset = false ) { + override def migrateInferModuleReset = false override def emitStrictConnects = false + override def copy( + connectFieldsMustMatch: Boolean = false, + declaredTypeMustBeUnbound: Boolean = false, + dontTryConnectionsSwapped: Boolean = false, + dontAssumeDirectionality: Boolean = false, + checkSynthesizable: Boolean = false, + explicitInvalidate: Boolean = false, + inferModuleReset: Boolean = false + ) = new CompileOptionsClass( + connectFieldsMustMatch, + declaredTypeMustBeUnbound, + dontTryConnectionsSwapped, + dontAssumeDirectionality, + checkSynthesizable, + explicitInvalidate, + inferModuleReset + ) { + override def migrateInferModuleReset = false + override def emitStrictConnects = false + } } // Collection of "strict" connection compile options, preferred for new code. @@ -94,5 +115,30 @@ object ExplicitCompileOptions { checkSynthesizable = true, explicitInvalidate = true, inferModuleReset = true - ) + ) { + + override def migrateInferModuleReset = false + override def emitStrictConnects = true + + override def copy( + connectFieldsMustMatch: Boolean = true, + declaredTypeMustBeUnbound: Boolean = true, + dontTryConnectionsSwapped: Boolean = true, + dontAssumeDirectionality: Boolean = true, + checkSynthesizable: Boolean = true, + explicitInvalidate: Boolean = true, + inferModuleReset: Boolean = true + ) = new CompileOptionsClass( + connectFieldsMustMatch, + declaredTypeMustBeUnbound, + dontTryConnectionsSwapped, + dontAssumeDirectionality, + checkSynthesizable, + explicitInvalidate, + inferModuleReset + ) { + override def migrateInferModuleReset = false + override def emitStrictConnects = true + } + } } diff --git a/src/test/scala/chiselTests/CompileOptionsTest.scala b/src/test/scala/chiselTests/CompileOptionsTest.scala index 3ec59954..b39d8ee3 100644 --- a/src/test/scala/chiselTests/CompileOptionsTest.scala +++ b/src/test/scala/chiselTests/CompileOptionsTest.scala @@ -163,4 +163,32 @@ class CompileOptionsSpec extends ChiselFlatSpec with Utils { } } + "Strict.copy()" should "be equivalent in all CompileOptions traits" in { + import chisel3.ExplicitCompileOptions.Strict + val copiedCompileOptions = Strict.copy() + assert(copiedCompileOptions.connectFieldsMustMatch == Strict.connectFieldsMustMatch) + assert(copiedCompileOptions.declaredTypeMustBeUnbound == Strict.declaredTypeMustBeUnbound) + assert(copiedCompileOptions.dontTryConnectionsSwapped == Strict.dontTryConnectionsSwapped) + assert(copiedCompileOptions.dontAssumeDirectionality == Strict.dontAssumeDirectionality) + assert(copiedCompileOptions.checkSynthesizable == Strict.checkSynthesizable) + assert(copiedCompileOptions.explicitInvalidate == Strict.explicitInvalidate) + assert(copiedCompileOptions.inferModuleReset == Strict.inferModuleReset) + assert(copiedCompileOptions.migrateInferModuleReset == Strict.migrateInferModuleReset) + assert(copiedCompileOptions.emitStrictConnects == Strict.emitStrictConnects) + } + + "NotStrict.copy()" should "be equivalent in all CompileOptions traits" in { + import chisel3.ExplicitCompileOptions.NotStrict + val copiedCompileOptions = NotStrict.copy() + assert(copiedCompileOptions.connectFieldsMustMatch == NotStrict.connectFieldsMustMatch) + assert(copiedCompileOptions.declaredTypeMustBeUnbound == NotStrict.declaredTypeMustBeUnbound) + assert(copiedCompileOptions.dontTryConnectionsSwapped == NotStrict.dontTryConnectionsSwapped) + assert(copiedCompileOptions.dontAssumeDirectionality == NotStrict.dontAssumeDirectionality) + assert(copiedCompileOptions.checkSynthesizable == NotStrict.checkSynthesizable) + assert(copiedCompileOptions.explicitInvalidate == NotStrict.explicitInvalidate) + assert(copiedCompileOptions.inferModuleReset == NotStrict.inferModuleReset) + assert(copiedCompileOptions.migrateInferModuleReset == NotStrict.migrateInferModuleReset) + assert(copiedCompileOptions.emitStrictConnects == NotStrict.emitStrictConnects) + } + } -- cgit v1.2.3