Package: blu-blade
BLADE is a tool for generating hierarchical hardware designs from a YAML based input syntax. It allows front-end designers to work like IP integrators from day one, with the ability to describe blocks, interconnections, register and address maps and more with strict type checking and high-level design rule checks.When BLADE executes, it produces a DesignFormat blob describing the hardware - this interchange format, which is based on JSON, can drive templating engines, GUIs, CLIs and more. The whole process is agnostic of the design implementation language used, so templates can be easily crafted to work with development flows in SystemC, Verilog, VHDL, and more.Simple ExampleThe example below demonstrates how a module can be declared with ports and children, and how an explicit connection can be described between two child nodes. Further details on using BLADE can be found in the documentation and example designs.#include "axi4_lite.yaml"#include "wire.yaml"#include "watchdog_ctrl.yaml"#include "watchdog_tmr.yaml"-!Modname:watchdogld:A four channel watchdog timerports:-!HisRef[cfg,axi4_lite,"Configurationport",1,slave]-!HisRef[irq,wire,"Interruptoutputs",4,master]modules:-!ModInst[ctrl,watchdog_ctrl,"Controlblockforthetimers",1]-!ModInst[timer,watchdog_tmr,"Timermodules",4]connections:-!Connectpoints:-!Point[timer_enable,ctrl]-!Point[enable,timer]...Getting Started with BLADESystem RequirementsBLADE is a Python based tool, and has a few system dependencies:Python 3.6 or greaterPyYAML- Used to power the YAML parserMako- Templating engine used for generating reports, also used by the BLADE Templating EngineTQDM- CLI compatible progress barsDesignFormat- The interchange format used by BLADE$>pipinstallpyyamlmakotqdm
$>pipinstallgit+https://github.com/bluwireless/designformat#subdirectory=pythonAs BLADE designs can get quite big, we recommend using PyYAML's CLoader which uses LibYAML to accelerate the parsing process - it can result in some quite substantial speed ups when generating large designs.More details can be found here.The following dependencies are not mandatory, but are required for building the documentation:Sphinx- Powerful documentation generation toolRecommonmark- Markdown convertor for SphinxSphinx Markdown Tables- Markdown table convertor for SphinxSphinx RTD Theme- Read The Docs theme for Sphinx HTML$>pipinstallsphinxrecommonmarksphinx-markdown-tablessphinx-rtd-themeBuilding Your First DesignThe best way to test your installation is to clone a copy of theBLADE Exampleswhich demonstrate how to use the tool in a flow that generates RTL. Perhaps start with thebasic timertutorial and see how the hierarchy, registers, and wiring have been put together.Next StepsTake a look at theBLADEandDesignFormatdocumentation which is included with every release. It covers the architecture of the tool, the input syntax, and the API for interacting with the DesignFormat blob generated by BLADE.In the coming months we hope to put together some tutorials on how to build a design from scratch, taking you step-by-step from writing BLADE YAML to simulating the design. Watch this space!Future DevelopmentBLADE has been an internal Blu Wireless tool for close to ten years (in one form or another). It represents a substantial investment of effort from many members of the company, and it is a tool we are proud of. We use BLADE on a daily basis and continue to invest significant time and resources in developing new features to aid our design flow.This release to GitHub takes BLADE in a new and exciting direction, hopefully providing the opensource community with a valuable tool. We're very much looking forward to engaging with other developers to make this a springboard platform for hardware development.It is worth noting that the code currently released is not the wavefront of development - in fact the code in this initial release has been taken from the tape-out branch of our last SoC, about 6 months ago. Since the tape-out we've been trialing new features for BLADE, and we plan to introduce these into the GitHub repository over time.Howeverthis is not to say that we won't be continuing development on the opensourced code base. We have a shopping list of tasks (see below) that will be addresses over the coming months. We also welcome bug reports, questions, feature requests, and pull requests from the community.To-Do ListThe following tasks will be addressed over the next few months:Unit testing suite - tests for the preprocessor and parser are already written and will be integrated into this project, tests for the elaborator and checker will need to be developed.Tutorials and examples - whilesome designs and guidesare already available, we plan to create more to demonstrate some of the other features of BLADE.