-
Notifications
You must be signed in to change notification settings - Fork 44
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
Add support for Avalon memory mapped peripherals #40
Comments
I was actually wondering about Avalon and whether it was still popular with Intel devices. I primarily work with ARM-based ASICs and Xilinx FPGAs so am not as familiar with Intel's ecosystem. Seems like a very reasonable thing to add support for. At first glance, it looks like the Avalon protocol has several different variants based on what interface properties are selected. Can you help me understand which permutations are more "popular"? The basic handshake looks quite similar to AMBA's APB which is quite simple. Specifically:
My initial hunch is that I would add this as two Avalon variants:
I still need to study it a bit more - it's possible the pipelined implementation will be quite simple and the non-pipelined one is not necessary. Unlike AXI, Avalon does not seem to require wait states on the responses, so that simplifies things quite a bit. Let me know what you think! |
Thanks for the detailed analysis. The most common variants I have seen are:
I have also seen and used burst transfers, but can definitely be skipped. I dont think Implementing the agent with fixed wait-states should be the easiest as it's just a single handshake unlike AXI-lite's multiple handshakes for address, data and response |
Great! Thanks for confirming. This doesn't seem too difficult to add. |
Turns out that Avalon adapts very cleanly to the internal protocol I use, so it was very quick to implement (see commit above) I still need to put together some proper testcases and documentation, but that should be pretty quick work. |
That was quick! Thank you so much I have left a comment on the commit |
Had to make a minor change to support proper pipelining, but it has been merged.
If you want to try it on your end, do the following: # Install PeakRDL first
python3 -m pip install peakrdl
# Replace the regblock generator installation with the pre-release
git clone git@github.com:SystemRDL/PeakRDL-regblock.git
python3 -m pip install ./PeakRDL-regblock/
# Generate an Avalon regblock from a SystemRDL definition
peakrdl regblock <your_rdl_file> --cpuif avalon-mm-flat -o output_dir/ Here is a simple RDL file you can use as a testcase: https://github.com/SystemRDL/PeakRDL-regblock/blob/main/tests/test_structural_sw_rw/regblock.rdl
It depends. By default the Avalon interface will have zero latency and therefore be very combinational. |
Thanks a lot! Will try on my end and let you know if there is anything odd |
Published in v0.14.0. |
The protocol is popular in Intel FPGAs. I am happy to help building support for this
The text was updated successfully, but these errors were encountered: