Hey everyone, I followed the adder tutorial of diplomacy inside the rocket chip repo,
[info] [0.004] Elaborating design...
the width of the UpwardParam(4) in 4
[error] java.lang.IllegalArgumentException: requirement failed: outward, upward adder width must be equivalent
[error] ...
[error] at adder_diplomacy_example.Adder.$anonfun$node$5(Adder.scala:98)
[error] at freechips.rocketchip.diplomacy.MixedNexusNode.mapParamsU(Nodes.scala:1566)
[error] at freechips.rocketchip.diplomacy.MixedNode.liftedTree3$1(Nodes.scala:1178)
[error] at freechips.rocketchip.diplomacy.MixedNode.uiParams$lzycompute(Nodes.scala:1175)
[error] at freechips.rocketchip.diplomacy.MixedNode.uiParams(Nodes.scala:1174)
[error] at freechips.rocketchip.diplomacy.MixedNode.edgesIn$lzycompute(Nodes.scala:1197)
[error] at freechips.rocketchip.diplomacy.MixedNode.edgesIn(Nodes.scala:1197)
[error] at freechips.rocketchip.diplomacy.MixedNode.$anonfun$bundleIn$1(Nodes.scala:1216)
[error] at chisel3.internal.prefix$.apply(prefix.scala:47)
[error] at freechips.rocketchip.diplomacy.MixedNode.bundleIn$lzycompute(Nodes.scala:1216)
[error] at freechips.rocketchip.diplomacy.MixedNode.bundleIn(Nodes.scala:1216)
[error] at freechips.rocketchip.diplomacy.MixedNode.instantiate(Nodes.scala:1266)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$3(LazyModule.scala:287)
[error] at scala.collection.immutable.List.flatMap(List.scala:338)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate(LazyModule.scala:287)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate$(LazyModule.scala:273)
[error] at freechips.rocketchip.diplomacy.LazyModuleImp.instantiate(LazyModule.scala:348)
[error] at freechips.rocketchip.diplomacy.LazyModuleImp.<init>(LazyModule.scala:350)
[error] at adder_diplomacy_example.Adder$$anon$1.<init>(Adder.scala:103)
[error] at adder_diplomacy_example.Adder.module$lzycompute(Adder.scala:103)
[error] at adder_diplomacy_example.Adder.module(Adder.scala:103)
[error] at adder_diplomacy_example.Adder.module(Adder.scala:87)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$2(LazyModule.scala:280)
[error] at chisel3.Module$.do_apply(Module.scala:54)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$1(LazyModule.scala:280)
[error] at scala.collection.immutable.List.flatMap(List.scala:338)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate(LazyModule.scala:278)
[error] at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate$(LazyModule.scala:273)
[error] at freechips.rocketchip.diplomacy.LazyModuleImp.instantiate(LazyModule.scala:348)
[error] at freechips.rocketchip.diplomacy.LazyModuleImp.<init>(LazyModule.scala:350)
[error] at adder_diplomacy_example.AdderTestHarness$$anon$5.<init>(Adder.scala:163)
[error] at adder_diplomacy_example.AdderTestHarness.module$lzycompute(Adder.scala:163)
[error] at adder_diplomacy_example.AdderTestHarness.module(Adder.scala:163)
[error] at adder_diplomacy_example.diplomacyExample$.$anonfun$verilog$1(Adder.scala:173)
[error] ... (Stack trace trimmed to user code only, rerun with --full-stacktrace if you wish to see the full stack trace)
Exception in thread "main" firrtl.options.StageError:
at chisel3.stage.ChiselStage.run(ChiselStage.scala:58)
at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
at firrtl.options.Translator.transform(Phase.scala:248)
at firrtl.options.Translator.transform$(Phase.scala:248)
at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
at firrtl.options.Stage.$anonfun$transform$5(Stage.scala:47)
at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
at scala.collection.immutable.List.foldLeft(List.scala:89)
at firrtl.options.Stage.$anonfun$transform$3(Stage.scala:47)
at logger.Logger$.$anonfun$makeScope$2(Logger.scala:166)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at logger.Logger$.makeScope(Logger.scala:164)
at firrtl.options.Stage.transform(Stage.scala:47)
at firrtl.options.Stage.execute(Stage.scala:58)
at chisel3.stage.ChiselStage.emitVerilog(ChiselStage.scala:115)
at adder_diplomacy_example.diplomacyExample$.delayedEndpoint$adder_diplomacy_example$diplomacyExample$1(Adder.scala:173)
at adder_diplomacy_example.diplomacyExample$delayedInit$body.apply(Adder.scala:172)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1$adapted(App.scala:80)
at scala.collection.immutable.List.foreach(List.scala:392)
at scala.App.main(App.scala:80)
at scala.App.main$(App.scala:78)
at adder_diplomacy_example.diplomacyExample$.main(Adder.scala:172)
at adder_diplomacy_example.diplomacyExample.main(Adder.scala)
Caused by: chisel3.internal.ChiselException: Exception thrown when elaborating ChiselGeneratorAnnotation
at chisel3.stage.ChiselGeneratorAnnotation.elaborate(ChiselAnnotations.scala:65)
at chisel3.stage.phases.Elaborate.$anonfun$transform$1(Elaborate.scala:24)
at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:245)
at scala.collection.immutable.List.foreach(List.scala:392)
at scala.collection.TraversableLike.flatMap(TraversableLike.scala:245)
at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:242)
at scala.collection.immutable.List.flatMap(List.scala:355)
at chisel3.stage.phases.Elaborate.transform(Elaborate.scala:23)
at chisel3.stage.phases.Elaborate.transform(Elaborate.scala:16)
at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
at firrtl.options.Translator.transform(Phase.scala:248)
at firrtl.options.Translator.transform$(Phase.scala:248)
at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
at firrtl.options.DependencyManager.$anonfun$transform$3(DependencyManager.scala:278)
at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
at scala.collection.immutable.List.foldLeft(List.scala:89)
at firrtl.options.DependencyManager.transform(DependencyManager.scala:269)
at firrtl.options.DependencyManager.transform$(DependencyManager.scala:255)
at firrtl.options.PhaseManager.transform(DependencyManager.scala:436)
at chisel3.stage.ChiselStage.run(ChiselStage.scala:44)
... 29 more
Caused by: java.lang.IllegalArgumentException: requirement failed: outward, upward adder width must be equivalent
at scala.Predef$.require(Predef.scala:281)
at adder_diplomacy_example.Adder.$anonfun$node$5(Adder.scala:98)
at freechips.rocketchip.diplomacy.MixedNexusNode.mapParamsU(Nodes.scala:1566)
at freechips.rocketchip.diplomacy.MixedNode.liftedTree3$1(Nodes.scala:1178)
at freechips.rocketchip.diplomacy.MixedNode.uiParams$lzycompute(Nodes.scala:1175)
at freechips.rocketchip.diplomacy.MixedNode.uiParams(Nodes.scala:1174)
at freechips.rocketchip.diplomacy.MixedNode.edgesIn$lzycompute(Nodes.scala:1197)
at freechips.rocketchip.diplomacy.MixedNode.edgesIn(Nodes.scala:1197)
at freechips.rocketchip.diplomacy.MixedNode.$anonfun$bundleIn$1(Nodes.scala:1216)
at chisel3.internal.prefix$.apply(prefix.scala:47)
at freechips.rocketchip.diplomacy.MixedNode.bundleIn$lzycompute(Nodes.scala:1216)
at freechips.rocketchip.diplomacy.MixedNode.bundleIn(Nodes.scala:1216)
at freechips.rocketchip.diplomacy.MixedNode.instantiate(Nodes.scala:1266)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$3(LazyModule.scala:287)
at scala.collection.immutable.List.flatMap(List.scala:338)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate(LazyModule.scala:287)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate$(LazyModule.scala:273)
at freechips.rocketchip.diplomacy.LazyModuleImp.instantiate(LazyModule.scala:348)
at freechips.rocketchip.diplomacy.LazyModuleImp.<init>(LazyModule.scala:350)
at adder_diplomacy_example.Adder$$anon$1.<init>(Adder.scala:103)
at adder_diplomacy_example.Adder.module$lzycompute(Adder.scala:103)
at adder_diplomacy_example.Adder.module(Adder.scala:103)
at adder_diplomacy_example.Adder.module(Adder.scala:87)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$2(LazyModule.scala:280)
at chisel3.Module$.do_apply(Module.scala:54)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.$anonfun$instantiate$1(LazyModule.scala:280)
at scala.collection.immutable.List.flatMap(List.scala:338)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate(LazyModule.scala:278)
at freechips.rocketchip.diplomacy.LazyModuleImpLike.instantiate$(LazyModule.scala:273)
at freechips.rocketchip.diplomacy.LazyModuleImp.instantiate(LazyModule.scala:348)
at freechips.rocketchip.diplomacy.LazyModuleImp.<init>(LazyModule.scala:350)
at adder_diplomacy_example.AdderTestHarness$$anon$5.<init>(Adder.scala:163)
at adder_diplomacy_example.AdderTestHarness.module$lzycompute(Adder.scala:163)
at adder_diplomacy_example.AdderTestHarness.module(Adder.scala:163)
at adder_diplomacy_example.diplomacyExample$.$anonfun$verilog$1(Adder.scala:173)
at chisel3.Module$.do_apply(Module.scala:54)
at chisel3.stage.ChiselGeneratorAnnotation.$anonfun$elaborate$1(ChiselAnnotations.scala:60)
at chisel3.internal.Builder$.$anonfun$build$1(Builder.scala:625)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at chisel3.internal.Builder$.build(Builder.scala:622)
at chisel3.stage.ChiselGeneratorAnnotation.elaborate(ChiselAnnotations.scala:60)
... 50 more
I comment the two requires code and there is no error(with the verilog generated), then I add some println to print the dps and ups, I think the require should pass, I have no idea why this is wrong, and why you guys add the require there.
I have another confusion that why you use SimpleNodeImp as the Node implementation to conduct the param negotiation in this tutorial. The comment of the SimpleNodeImp says that A NodeImp where the inward and outward edge parameters are of the same type. But apparently there is no inward edge for a SourceNode, but a SourceNode can stll use the SimpleNodeImp as the Node implementation right?
In your API, every Node should have a node implementation as their class variable, but I feel like Node Implementation should go above node, can a sourceNode and the correspondingly paired sinknode have different Node Implementations? If yes, why? I thought the job of NodeImplementation is setting up the Edge param according to the up and down params, so the Node Implementation instance of the two paired node should be exactly the same.