-
Notifications
You must be signed in to change notification settings - Fork 8
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
CGRA configurable size and instruction update #21
Conversation
once this is merge, please @JuanSapriza update the simulator |
Thank you very much @benoitdenkinger !! This will be a great addition! |
@benoitdenkinger could you let @mbelda know when this needs testing? She has the use-case for this |
…sters configurable and the software driver compatible.
7b48fe5
to
69944f9
Compare
999e941
to
432fb07
Compare
@JuanSapriza @mbelda this PR is ready for review. I created a simple test app cgra_check_conf that creates a simple kernel for any CGRA size. I did some test and it seems to work. @mbelda, you can try with your own application and change the CGRA configuration in the heepsilon_cfg.hjson file. I only check the code with verilator for now. |
Now it is also working with modelsim. |
Hello @benoitdenkinger! |
Hello @JuanSapriza, I tested it with verilator and modelsim changing the CGRA parameters and everything worked fine (it was not extensive tests, but I think there is no major bug). I was not planning to add anything, but the only thing I didn't try is the FPGA implementation. |
I tried my code with a 5x4 CGRA using verilator and it worked fine. |
@mbelda @NicCarp11 would any of you mind testing on the FPGA (i no longer have an FPGA 😢 ) You might need to try something small, like a 3x2 because of resource availability |
This PR contains two important udpates:
The CGRA size can be changed in the heepsilon_cfg.hjson file. The complete platform (HW and SW) is adapted accordingly. The applications however are only compatible with some specific sizes, make sure the platform and your apps are aligned.
The direct load and store instructions (LWD and SWD) are no longer automatically incrementing their respective address by 4 for 32-bit accesses. Instead, the immediate field (13 bits) is sign extended and used to increment the address to give more flexibility. For old kernels to be compatible, an immediate value of 4 needs to be added to every LWD and SWD instruction.