summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMegan Wachs2022-07-14 08:30:13 -0700
committerGitHub2022-07-14 15:30:13 +0000
commit80035d2a7b94faf9bfef962f83f9257f57419a35 (patch)
treeffaffdd307b5febe561fca378ecc18e9b85b2a30
parentdbffb8779efca6bea8699ed80a04b1d47d657d93 (diff)
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 <liu@jiuyang.me>
-rw-r--r--core/src/main/scala/chisel3/CompileOptions.scala48
-rw-r--r--src/test/scala/chiselTests/CompileOptionsTest.scala28
2 files changed, 75 insertions, 1 deletions
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)
+ }
+
}