-
Notifications
You must be signed in to change notification settings - Fork 653
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Retire usage of deprecated SFC and use MFC exclusively #1623
Comments
What command are you running? I believe we should have isolated the SFC flow so the standard verilog generation step doesn't invoke SFC at all, but there could be a bug we overlooked |
This command fails in firtool:
The errors all have to do with dontTouch().... I can't run the test as I write this, but the errors are of the form:
|
I see. The sky-130 tutorial you are attempting relies on Yosy, which (at the time at least) had trouble parsing CIRCT-generated Verilog. Running SFC in the sky130 flow was a workaround for this. @nayiri-k or @abejgonzalez do you remember what the precise limitation was? Perhaps with newer CIRCT, or some emission option, we can bypass the SFC flow entirely for this tutorial. |
Trying:
However, it still fails:
Though, I think this is might be fixed in the latest version of firtool... Testing firtool 1.57.1... It gets further, but it still fails...
|
@jackkoenig Any idea?
Output:
|
@jerryz123 @yupferris FYI llvm/circt#6402 fixes llvm/circt#5355 and llvm/circt#6324 and #1623 (comment) |
@jerryz123 Trying with firtool after llvm/circt#6402 was merged, the build now makes it further, but runs into some smaller and some bigger snags. Deleting this option, gets it a bit further...
Deleting the first line in the .fir file, gets it a bit futher...
Before finally it fails on these annotations:
|
That error looks to be using a pretty old message. However, I think it's saying that the target specified by the annotation doesn't exist. E.g., inside The SFC was looser around this as it treated annotations differently. They were a separate data structure that was updated while the circuit is compiled. MFC actually inserts these annotations into the circuit, so they have to have legal values. Also, given the old error message, I'd expect it to complain like:
This may indicate that you're on an old version of |
@seldridge To reproduce, unzip firtool2.zip
|
This looks like a situation where the annotation file is from Chisel and the FIRRTL has been run through SFC to the point of lowering types. That should produce an annotation file that has the lowered types in it. However, the original annotation file will not work. E.g., there's this annotation targeting {
"class": "firrtl.transforms.DontTouchAnnotation",
"target": "~TestHarness|BoomCore>debug_jals"
} Inside
This is likely indicating that there is a problem with the Chipyard flow such that it is not sending the SFC-output annotation file to MFC. Alternatively, and more work, moving fully to an MFC flow would fix this. We've recently added support for both custom annotations and out-of-tree passes injected at specific locations in the pipeline. This may ease the migration. |
With the hack below, which disables the SFC step of the flow and only uses MFC, and the latest firtool with llvm/circt#6402 and firtool completes without errors when I run:
The flow does fail later, but I think that is probably because I mangled Chipyard to get the build past the firtool error. |
Background Work
Feature Description
Retire SFC usage and use MFC exclusively. SFC is deprecated already in Chisel and mixing SFC and MFC is not supported.
Motivating Example
The mix of SFC and MFC creates problems with dontTouch e.g. in MegaBoom: comment by @jerryz123 in llvm/circt#6143 (comment)
Another example of SFC/MFC trouble #1309
The text was updated successfully, but these errors were encountered: