sifive / freedom

Source files for SiFive's Freedom platforms
Apache License 2.0
1.1k stars 283 forks source link

Connect a signal from Rocket core class to FPGA chip class to test on FPGA board? #129

Open phuong2403 opened 5 years ago

phuong2403 commented 5 years ago

Hi everyone, I am a newbie in Chisel. Does anyone has experience in that case, please help me? Thank you so much for any kind helps.

My goal is to add a instruction detecting signal (in particular the DIVISION instruction) to the rocket class of the Rocket Core module of the freedom repository. I want to connect it to one of pin of JA on board Arty 35T to check that if I detect successfully while the chip is running on a FPGA.

I connect the signal from RocketCore -> RocketTile -> RocketSubsystem -> System -> Platform -> FPGAchip

However, when I compile to generate Verilog,the bugs are as following: [info] Running freechips.rocketchip.system.Generator /home/phuong/Test_Rocketchip/freedom/builds/e300artydevkit sifive.freedom.everywhere.e300artydevkit E300ArtyDevKitFPGAChip sifive.freedom.everywhere.e300artydevkit E300ArtyDevKitConfig [info] [0.000] Elaborating design... [error] (run-main-0) java.lang.reflect.InvocationTargetException [error] java.lang.reflect.InvocationTargetException [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [error] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [error] at freechips.rocketchip.util.HasGeneratorUtilities.$anonfun$elaborate$1(GeneratorUtils.scala:52) [error] at chisel3.core.Module$.do_apply(Module.scala:49) [error] at chisel3.Driver$.$anonfun$elaborate$1(Driver.scala:93) [error] at chisel3.internal.Builder$.$anonfun$build$1(Builder.scala:298) [error] at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) [error] at chisel3.internal.Builder$.build(Builder.scala:296) [error] at chisel3.Driver$.elaborate(Driver.scala:93) [error] at freechips.rocketchip.util.HasGeneratorUtilities.elaborate(GeneratorUtils.scala:57) [error] at freechips.rocketchip.util.HasGeneratorUtilities.elaborate$(GeneratorUtils.scala:48) [error] at freechips.rocketchip.system.Generator$.elaborate(Generator.scala:12) [error] at freechips.rocketchip.util.GeneratorApp.circuit(GeneratorUtils.scala:94) [error] at freechips.rocketchip.util.GeneratorApp.circuit$(GeneratorUtils.scala:94) [error] at freechips.rocketchip.system.Generator$.circuit$lzycompute(Generator.scala:12) [error] at freechips.rocketchip.system.Generator$.circuit(Generator.scala:12) [error] at freechips.rocketchip.util.GeneratorApp.generateFirrtl(GeneratorUtils.scala:100) [error] at freechips.rocketchip.util.GeneratorApp.generateFirrtl$(GeneratorUtils.scala:99) [error] at freechips.rocketchip.system.Generator$.generateFirrtl(Generator.scala:12) [error] at freechips.rocketchip.system.Generator$.delayedEndpoint$freechips$rocketchip$system$Generator$1(Generator.scala:88) [error] at freechips.rocketchip.system.Generator$delayedInit$body.apply(Generator.scala:12) [error] at scala.Function0.apply$mcV$sp(Function0.scala:34) [error] at scala.Function0.apply$mcV$sp$(Function0.scala:34) [error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) [error] at scala.App.$anonfun$main$1$adapted(App.scala:76) [error] at scala.collection.immutable.List.foreach(List.scala:389) [error] at scala.App.main(App.scala:76) [error] at scala.App.main$(App.scala:74) [error] at freechips.rocketchip.system.Generator$.main(Generator.scala:12) [error] at freechips.rocketchip.system.Generator.main(Generator.scala) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] at java.base/java.lang.reflect.Method.invoke(Method.java:566) [error] at sbt.Run.invokeMain(Run.scala:93) [error] at sbt.Run.run0(Run.scala:87) [error] at sbt.Run.execute$1(Run.scala:65) [error] at sbt.Run.$anonfun$run$4(Run.scala:77) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10) [error] at sbt.TrapExit$App.run(TrapExit.scala:252) [error] at java.base/java.lang.Thread.run(Thread.java:834) [error] Caused by: chisel3.internal.ChiselException: Error: Called Module() twice without instantiating a Module. See @[RocketTile.scala 44:22] [error] at chisel3.internal.throwException$.apply(Error.scala:13) [error] at chisel3.core.Module$.do_apply(Module.scala:32) [error] at freechips.rocketchip.tile.RocketTile.(RocketTile.scala:44) [error] at freechips.rocketchip.subsystem.HasRocketTiles.$anonfun$rocketTiles$1(RocketSubsystem.scala:48) [error] at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234) [error] at scala.collection.immutable.List.foreach(List.scala:389) [error] at scala.collection.TraversableLike.map(TraversableLike.scala:234) [error] at scala.collection.TraversableLike.map$(TraversableLike.scala:227) [error] at scala.collection.immutable.List.map(List.scala:295) [error] at freechips.rocketchip.subsystem.HasRocketTiles.$init$(RocketSubsystem.scala:47) [error] at freechips.rocketchip.subsystem.RocketSubsystem.(RocketSubsystem.scala:71) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitSystem.(System.scala:26) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitPlatform.$anonfun$sys$1(Platform.scala:58) [error] at chisel3.core.Module$.do_apply(Module.scala:49) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitPlatform.(Platform.scala:58) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitFPGAChip.$anonfun$new$5(FPGAChip.scala:41) [error] at chisel3.core.Module$.do_apply(Module.scala:49) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitFPGAChip.$anonfun$new$4(FPGAChip.scala:41) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at chisel3.core.withClockAndReset$.apply(MultiClock.scala:26) [error] at sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitFPGAChip.(FPGAChip.scala:40) [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [error] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [error] at freechips.rocketchip.util.HasGeneratorUtilities.$anonfun$elaborate$1(GeneratorUtils.scala:52) [error] at chisel3.core.Module$.do_apply(Module.scala:49) [error] at chisel3.Driver$.$anonfun$elaborate$1(Driver.scala:93) [error] at chisel3.internal.Builder$.$anonfun$build$1(Builder.scala:298) [error] at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) [error] at chisel3.internal.Builder$.build(Builder.scala:296) [error] at chisel3.Driver$.elaborate(Driver.scala:93) [error] at freechips.rocketchip.util.HasGeneratorUtilities.elaborate(GeneratorUtils.scala:57) [error] at freechips.rocketchip.util.HasGeneratorUtilities.elaborate$(GeneratorUtils.scala:48) [error] at freechips.rocketchip.system.Generator$.elaborate(Generator.scala:12) [error] at freechips.rocketchip.util.GeneratorApp.circuit(GeneratorUtils.scala:94) [error] at freechips.rocketchip.util.GeneratorApp.circuit$(GeneratorUtils.scala:94) [error] at freechips.rocketchip.system.Generator$.circuit$lzycompute(Generator.scala:12) [error] at freechips.rocketchip.system.Generator$.circuit(Generator.scala:12) [error] at freechips.rocketchip.util.GeneratorApp.generateFirrtl(GeneratorUtils.scala:100) [error] at freechips.rocketchip.util.GeneratorApp.generateFirrtl$(GeneratorUtils.scala:99) [error] at freechips.rocketchip.system.Generator$.generateFirrtl(Generator.scala:12) [error] at freechips.rocketchip.system.Generator$.delayedEndpoint$freechips$rocketchip$system$Generator$1(Generator.scala:88) [error] at freechips.rocketchip.system.Generator$delayedInit$body.apply(Generator.scala:12) [error] at scala.Function0.apply$mcV$sp(Function0.scala:34) [error] at scala.Function0.apply$mcV$sp$(Function0.scala:34) [error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) [error] at scala.App.$anonfun$main$1$adapted(App.scala:76) [error] at scala.collection.immutable.List.foreach(List.scala:389) [error] at scala.App.main(App.scala:76) [error] at scala.App.main$(App.scala:74) [error] at freechips.rocketchip.system.Generator$.main(Generator.scala:12) [error] at freechips.rocketchip.system.Generator.main(Generator.scala) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] at java.base/java.lang.reflect.Method.invoke(Method.java:566) [error] at sbt.Run.invokeMain(Run.scala:93) [error] at sbt.Run.run0(Run.scala:87) [error] at sbt.Run.execute$1(Run.scala:65) [error] at sbt.Run.$anonfun$run$4(Run.scala:77) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10) [error] at sbt.TrapExit$App.run(TrapExit.scala:252) [error] at java.base/java.lang.Thread.run(Thread.java:834) [error] java.lang.RuntimeException: Nonzero exit code: 1 [error] at sbt.Run$.executeTrapExit(Run.scala:124) [error] at sbt.Run.run(Run.scala:77) [error] at sbt.Defaults$.$anonfun$bgRunMainTask$6(Defaults.scala:1147) [error] at sbt.Defaults$.$anonfun$bgRunMainTask$6$adapted(Defaults.scala:1142) [error] at sbt.internal.BackgroundThreadPool.$anonfun$run$1(DefaultBackgroundJobService.scala:366) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at scala.util.Try$.apply(Try.scala:209) [error] at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:289) [error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [error] at java.base/java.lang.Thread.run(Thread.java:834) [error] (Compile / runMain) Nonzero exit code: 1 [error] Total time: 3 s, completed Aug 9, 2019, 4:48:11 PM common.mk:48: recipe for target '/home/phuong/Test_Rocketchip/freedom/builds/e300artydevkit/sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitConfig.fir' failed make: *** [/home/phuong/Test_Rocketchip/freedom/builds/e300artydevkit/sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitConfig.fir] Error 1

erikdanie commented 5 years ago

Hi! You might want to try posting on the SiFive Forums. You'll find more people there who are working on similar things.

Without being able to see your code, the pertinent part of this error message appears to be:

[error] Caused by: chisel3.internal.ChiselException: Error: Called Module() twice without instantiating a Module. See @[RocketTile.scala 44:22]

and that seems to be occurring indicated by this line:

sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitFPGAChip.$anonfun$new$5(FPGAChip.scala:41)

(line 41 of FPGAChip)

phuong2403 commented 5 years ago

Thank you for your reply @erikdanie. The thing is I tried to call the signal Trigger, which is in Rocket class, at the RocketTile class by the inheriting: val core = Module(new Rocket()). I did it because I saw that by calling this signal in this class, in the next wrap (SubSystem), the RocketTile class is inherited, so I can put the signal Trigger out to Top step by step.

However, in another class name RocketTileModuleImp, the Rocket class has already called: val core = Module(new Rocket()(outer.p)).

So could you give me some advice?

austinharris commented 5 years ago

You might want to look into this feature of chisel: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/experimental/BoringUtils.scala

phuong2403 commented 5 years ago

Woah, I have just looked around it. It seems to be useful to me. Thank you so much @austinharris. I will try with it now