Push-Button-Calyx-FPGA Lab Notebook #1701
Replies: 5 comments 9 replies
-
Sep 4, 2023 Most of this week was spent setting up and refamiliarizing myself with AXI.
Having a better grasp of the tools we have, the next work I intend to pursue will be going through xilinx backends and looking through notes & XXXs & TODOs there. I seem to recall that we could only execute programs with less than 512 bytes of input/output but the memory is hazy. Hoping I'll be able to repro this issue quickly and see what can be done to fix this. Fixing up our generated Verilog as stated above is all in the name of getting more familiar with implementing AXI so that we can then move on to creating a stand alone Calyx-AXI-Generator that takes in some description of interfaces generated by Calyx, then outputs more Calyx that implements an AXI interface based on that description. (Detailed issue forthcoming, for now see Phase 1 and #1084). Some legwork will probably be needed before working on the above in earnest, namely separation of AXI and XML generation tools. To SummarizeAction items seem to be
As always, happy to hear thoughts! |
Beta Was this translation helpful? Give feedback.
-
Sept 11, 2023 This week was spent trying to get fixedpoint programs to work on fpgas (after manually compiling xclbins for them). See #1721. The goal here is to have a larger set of tests with which we can validate the envisioned calyx-axi-implementation. The concrete work likely involves refactoring a bit of the current json_to_dat functionality to some sort of abstract Fortunately, the above is not blocking per say (although is definitely something to get done, especially given that it shouldn't take too long to implement). So plan is to work on above and also future work detailed below in parallel. Spoke with @sampsyo today about concrete steps for creating a backend that outputs information we would need about programs. Seemed like there was agreement that we can be solely interested in memory names, width, and size, and leave off things such as types, which came up as an idea. I have quite a bit to learn about compilers in general, and Calyx in particular. Plan on looking at first couple of 6120 lectures as an overview. Then, if there are any recommended resources in the vein of "Intro to Calyx backends" I'll look into those (cc @rachitnigam?). Even if such a thing doesn't exist, at a high level I don't think it sounds too complex to pattern match on existing backends and takes a representation of a program's memories and output them as a list. Although, the devil is often in the details. As always, appreciate all comments/questions/concerns! |
Beta Was this translation helpful? Give feedback.
-
This week's work largely consisted of going down the rabbit hole of running programs on actual FPGAs, which I had mistakenly previously thought was working as intended. This took a while to repro and comprehend. Concretely, this week I intend to continue digging into bolstering our |
Beta Was this translation helpful? Give feedback.
-
This week we got a minimal working version of our IDL backend #1729. Some things left to do is small refactoring and renaming. Going forward it seems like next steps are to get familiar with calyx-py through its tutorials. Goal is to make a small program with it as a means to get familiarized. Maybe basic matrix multiplier into an attempt at a systolic version? We will see. The next week or so are quite busy for me so the going might be a bit slow. But looking forward to getting to AXI generation on the near future. |
Beta Was this translation helpful? Give feedback.
-
Been a bit since the last update since until now hasn't been a lot to talk about. Today a synchronous discussion with @sampsyo led to a better understanding of how we should move forward with our calyx implementation. Option 1:
And then have a control sequence
That will perform a transfer. We can imagine surrounding this in a Option 2:
This can get a bit verbose and is probably not as nice to reason about. So this is intended to be a fallback if things don't go well with our break-up-into-groups approach doesn't work well for some reason. We will basically be writing verilog in calyx, as these continuous assignment map closely to verilog continuous assignments. With these 2 options in mind, I think the way forward is getting read channel transfers to work, then read address channel transfers, then combine them into getting read transactions to work. If any of this seems confusing, one thing that might be relevant to note is the difference between a transfer and a transaction:
As always, happy to hear any thoughts on any of the above! |
Beta Was this translation helpful? Give feedback.
-
This is a place where I will be tracking issues, progress, and thoughts on the effort to get FPGA execution to an easy-to-use state. Feedback, comments, questions, nits, and anything else is always super appreciated. Please don't hesitate to leave comments or reach out!
This work is building off of some of the work tracked in a previous notebook.
For a fantastic high-mid level overview see @sampsyo's writeup #1756
To briefly go over that writeup, planned steps are as follows:
The goal at the end of this stage is to have a basic one-button-flow that lets us execute (small) programs on our FPGAs using our Verilog AXI implementation.
Separate AXI generation from the Calyx compiler. To do this, a standard "Interface Description Language" would need to be created that described the input/outputs of an accelerator based on our programs.
Our goal here is to have a concrete IDL that is expressive enough to use for AXI interface generation and readmemh wrapper generation.
Create a tool that would consume the IDL described above and generate an implementation of this interface.
Our goal is to have tools that consume said IDL to generate AXI interfaces implemented in Calyx (using
calyx-py
).Further, long-term steps can be seen in the writeup linked above.
Beta Was this translation helpful? Give feedback.
All reactions