[LSQ] generation of both verilog and VHDL#914
Conversation
This reverts commit 86dc63f.
…ead of group allocator
…e are no registers
…ntation from assign.py to ir.py
… in verilog emitter
… not done or tested yet
…function signatures
|
@JasmijnB Thanks for the effort! We should add you to the GitHub project so we know if your implementation passes all the CI tests. This PR is way too long for us to give a meaningful evaluation---could you please break this PR into smaller PRs that we can easily map to the description in your report? For instance, this paragraph in your report
describes a very self-contained change and is within our reviewing workload. |
|
Hey @JasmijnB this looks like a very cool experiment/idea 😁😁- unfortunately we have modifications to the LSQ python script that we intend to merge soon, and we cannot merge both sets of changes due to how extensive this PR is. Once we merge the new features, this PR will then be unfortunately out of date. Are you going to be working more on this in the future, and can adapt to the incoming changes? Otherwise I am not sure how we can proceed... |
|
@Jiahui17 This is less straightforward than it seems, since e.g. the replacement of Op already involves updating all the generators and supporting functions + declaration of the IR + implementation of the emitter, so that is already 90% of the changed lines. I can maybe try splitting the updates into smaller parts however, for example a separate pull request which only updates the group allocator? This would mean that for the partial pull requests it is not possible to test the verilog generation, but I suppose this is fine since the verilog generation only involves the implementation of one extra emitter. |
|
@murphe67 Depending on the size and nature of the changes I think it should be pretty straightforward to adapt, I can't guarantee that I'll have the time but probably let's first wait for the PR to merge and then I can take a look :) |
|
@JasmijnB Number of lines changed should not matter if you can convince the reviewers that those changes are easy to review and easy to rebase For instance, I noticed that there are hardly any differences besides one variable is replaced with the new IR (which is a great change that can be independently contributed):
One corresponding PR would be |
|
One extra thing: maybe you used a different line break (the windows' one?) than what's being consistently used in the project (only LF i think https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types Normally GitHub is able to correspond the changed lines much better but now it is completely clueless |
|
@Jiahui17 I think the fundamental issue is that I moved the files from The first PR replacing the Op would account for (almost) all changed lines in the existing code (generators signals, and operators). All these changes are indeed just replacing the |
|
Not sure about the last one but the first two seem easy to review and react to @MaxWipfli what do you think |
|
Thanks for asking, @Jiahui17. From an admin POV, the timing of this is pretty unfortunate. As @murphe67 already said, we may apply some pretty broad changes to the LSQ as part of my current thesis work. I won't have time to completely refactor and (importantly) retest all the changes. So either this PR has to wait, or someone else (@murphe67, I guess) would have to do the final PRs to upstream my work. This has to be decided by @murphe67. From a technical POV, I think this is a good improvement (assuming the need to generate both Verilog and VHDL is given). From a workflow POV, I agree that this PR should probably be split into multiple smaller PRs to be more reviewable. I am also happy to do some reviewing on this, as I am probably the person most familiar with the LSQ generator right now. |
|
@MaxWipfli I think for now it's smart to wait for your PR to be merged. If your changes don't use any new VHDL features, and depend on the same existing generation framework (so used |

A modified LSQ generation script which is able to generate the LSQ in both VHDL and Verilog.
The structure of the generated code is the exact same as the original, however statements are now constructed using a simple IR and then written using two separate emitters which output vhdl and verilog. A small report can be found here :)
Unfortunately there is a huge amount of changes because it was necessary to change all the
Opcalls.