Developing an FPGA sandbox

Andreas made an excellent point about lowering bar to FPGA development.
So I created this thread to flesh out this idea. Please see his .
I am not aware of any fully functional open-source equivalent to the Xilinx tools - obviously that would be the ideal situation, and I believe the only way we will ever build the FPGA bitstream on the Parallella itself. So I'm limiting this to Xilinx. As you may know, under the hood, the Xilinx tools are CLI based. From Xilinx, here is an and here is the . From the tcl console in the Xilinx tools, we can determine what commands are being run. We will be able to extract the process and all parameters used for the Parallella platform.
So, some scripts are called for:
1. A build script which goes off and calls the required tools - we can outdo the UI here by actually rebuilding everything (if needed), I am sick of rebuilds excluding my XPS changes and wondering why my changes are having no effect. This would manage synthesis/implementation/bitstream generation
2. Then there is the matter of making the output usable - so parsing tool output for errors directly, or finding/parsing the logfile the tool generates.
I will search around because I'm sure many people will be doing this already. I expect this may still require downloading/installing the full WebPack (all 18G of it - yuck! My Vivado install is a mere 6G, perhaps they are improving?). Unless there is some sort of lightweight offering, I expect there would be legal issues with chopping it up for redistribution (if such a thing were possible).
As for providing a starting point, the output of (which provides an AXI4Lite peripheral), is what I have then used to go and build up a simple ALU. Beyond that point, the XPS is not needed, and all I do is use planAhead as an overblown editor and build system.
All that is really needed is an editor, some build scripts, and the build environment (CLI tools, probably complete WebPack).
In order to facilitate using different starting projects (7010, 7020, 16-core, 64-core, HDMI, headless), it would be tempting to provide the following:
* provide the AXI IP Core (pre-generated - same between 7010 and 7020 parts I assume)
* provide diffs to apply to the system.mhs to enable M_AXI_GP0 (for headless boards), and create an interconnect interfacing this to the new IP Core, and adding an instance of this core. system.xmp also gets a patch which includes the locked down address range, and path to edk repo. We may need as many as one diff per base project - it really depends on differences in the Processing System part of the FPGA design.
* provide the scripts and instructions on setting up WebPack
Then for Tutorial 2 which will use full AXI4, all that is needed is a PCore for new peripheral, and a different patch set (Processing System set up a little differently for the different AXI interface)
Then the user edits the VHDL/Verilog using editor of choice, reruns the build script, gets presented with errors/success, copies bitstream to parallella, and that is one part of the sandbox.
Copying the bitstream to the Parallella and loading it, then running the test script can be driven from the build script (and I want to do this anyway). I am close to having a python test script for one of my projects, and the copy / configure / run test makes for needless repetition.
Because these interfaces can be interacted with using /dev/mem, I think we should provide:
* A fixed up version of the tool from the tutorial to poke/read the registers by address.
* An example python script (or even a library) to read/write registers by their index.
My interest stops there, but if someone wanted to take this further (too far), they might consider:
* A UI front end for HDMI/web to allow entering/reading values
* A customisable version of the above. For the ALU example, operand textboxes, instruction radio buttons, result textbox, accessing underlying mechanism via the UI framework.
So I created this thread to flesh out this idea. Please see his .
I am not aware of any fully functional open-source equivalent to the Xilinx tools - obviously that would be the ideal situation, and I believe the only way we will ever build the FPGA bitstream on the Parallella itself. So I'm limiting this to Xilinx. As you may know, under the hood, the Xilinx tools are CLI based. From Xilinx, here is an and here is the . From the tcl console in the Xilinx tools, we can determine what commands are being run. We will be able to extract the process and all parameters used for the Parallella platform.
So, some scripts are called for:
1. A build script which goes off and calls the required tools - we can outdo the UI here by actually rebuilding everything (if needed), I am sick of rebuilds excluding my XPS changes and wondering why my changes are having no effect. This would manage synthesis/implementation/bitstream generation
2. Then there is the matter of making the output usable - so parsing tool output for errors directly, or finding/parsing the logfile the tool generates.
I will search around because I'm sure many people will be doing this already. I expect this may still require downloading/installing the full WebPack (all 18G of it - yuck! My Vivado install is a mere 6G, perhaps they are improving?). Unless there is some sort of lightweight offering, I expect there would be legal issues with chopping it up for redistribution (if such a thing were possible).
As for providing a starting point, the output of (which provides an AXI4Lite peripheral), is what I have then used to go and build up a simple ALU. Beyond that point, the XPS is not needed, and all I do is use planAhead as an overblown editor and build system.
All that is really needed is an editor, some build scripts, and the build environment (CLI tools, probably complete WebPack).
In order to facilitate using different starting projects (7010, 7020, 16-core, 64-core, HDMI, headless), it would be tempting to provide the following:
* provide the AXI IP Core (pre-generated - same between 7010 and 7020 parts I assume)
* provide diffs to apply to the system.mhs to enable M_AXI_GP0 (for headless boards), and create an interconnect interfacing this to the new IP Core, and adding an instance of this core. system.xmp also gets a patch which includes the locked down address range, and path to edk repo. We may need as many as one diff per base project - it really depends on differences in the Processing System part of the FPGA design.
* provide the scripts and instructions on setting up WebPack
Then for Tutorial 2 which will use full AXI4, all that is needed is a PCore for new peripheral, and a different patch set (Processing System set up a little differently for the different AXI interface)
Then the user edits the VHDL/Verilog using editor of choice, reruns the build script, gets presented with errors/success, copies bitstream to parallella, and that is one part of the sandbox.
Copying the bitstream to the Parallella and loading it, then running the test script can be driven from the build script (and I want to do this anyway). I am close to having a python test script for one of my projects, and the copy / configure / run test makes for needless repetition.
Because these interfaces can be interacted with using /dev/mem, I think we should provide:
* A fixed up version of the tool from the tutorial to poke/read the registers by address.
* An example python script (or even a library) to read/write registers by their index.
My interest stops there, but if someone wanted to take this further (too far), they might consider:
* A UI front end for HDMI/web to allow entering/reading values
* A customisable version of the above. For the ALU example, operand textboxes, instruction radio buttons, result textbox, accessing underlying mechanism via the UI framework.