IBM / chiffre

A fault-injection framework using Chisel and FIRRTL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

about ScanChainTransform error

yangrj opened this issue · comments

Hello, I am very sorry to bother you. I have seen your paper "Chiffre: A Configurable Hardware Fault Injection Framework for RISC-V Systems " and I’m very interested in your Chiffre Fault Injection Framework.

I tried the Chiffer experiment but end up encountering a problem during the configuration of LeChiffre. According to the error log "value is not a member of firrtl.TargetDirAnnotation", I went to check the definition of TargetDirAnnotation in the firrtl source files, but found that the member ‘value’ does not exist.

I see that the FIRRTL project is still being updated. I don't know if it is the reason for the firrtl version to cause this error. I don't know much about the compilation process of firrtl, so I don't have an idea for this problem. I sincerely hope that I can get your help.

The error logs is as follows:
[error] /chiffre/rocket-chip/chiffre/src/main/scala/chiffre/passes/ScanChainTransform.scala:131:95: value value is not a member of firrtl.TargetDirAnnotation
[error] val targetDir = new File(state.annotations.collectFirst{ case a: TargetDirAnnotation => a.value}.getOrElse("."))
[error] ^
[warn] /chiffre/rocket-chip/src/main/scala/util/DescribedSRAM.scala:7:34: imported `Annotated' is permanently hidden by definition of object Annotated in package util
[warn] import freechips.rocketchip.util.Annotated
[warn] ^
[warn] one warning found
[error] one error found

One of the great advantages of Chiffre framework is that it only needs to make few modifications to the original circuit description. Refer to the method of writing chisel and firtrl transforms, I also would like to ask if I want to evaluate my own processor implemented in Chisel language, in addition to the fault injector controller, faulty component and firrtl transforms, what else do I need to do or pay attention to? Do you still have plans for memory fault injection?

Thanks for your time and look forward to your reply.

The current problem is that I have not updated Chiffre to work on the newest Rocket Chip. (Technically, I haven't tested it in some time, so I expect a few things are broken/out of sync.)

That specific error you mentioned is because TargetDirAnnotation changed (a change I introduced). TargetDirAnnotation is a case class with one public member "dir". In a further PR I updated it to be called "directory". I think, for the time being, the fix is to change a.value to a.dir.

Cool! I'm glad you find it useful. @azidar actually just filed a PR (chipsalliance/chisel#1077) which is intended to make the specification of things you want the compiler to modify (like fault injection points) NOT require source code modifications. Instead it's an argument you pass to the compiler. So... things are intending to get better in the future.

I also would like to ask if I want to evaluate my own processor implemented in Chisel language, in addition to the fault injector controller, faulty component and firrtl transforms, what else do I need to do or pay attention to?

That's probably about it. Obviously, getting started with Chiffre on smaller designs or looking at the tests will be more straightforward to understand. However, the intent is that you just specify what you want to make run-time injectable, and everything is taken care of for you. When/if things go wrong, file an issue.

Do you still have plans for memory fault injection?

Yes, I just haven't found the time, nor a specific user clamoring for this. If it's something you're interested in, I can see about looping back to this.