Skip to main content

Hardware Design, Exploration, and Code Generation for SoC Designers

Project description

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 Example

The 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"

- !Mod
  name       : watchdog
  ld         : A four channel watchdog timer
  ports      :
  - !HisRef [cfg, axi4_lite, "Configuration port", 1, slave ]
  - !HisRef [irq, wire,      "Interrupt outputs",  4, master]
  modules    :
  - !ModInst [ctrl,  watchdog_ctrl, "Control block for the timers", 1]
  - !ModInst [timer, watchdog_tmr,  "Timer modules",                4]
  connections:
  - !Connect
    points:
    - !Point [timer_enable, ctrl ]
    - !Point [enable,       timer]
  ...

Getting Started with BLADE

System Requirements

BLADE is a Python based tool, and has a few system dependencies:

  • Python 3.6 or greater
  • PyYAML - Used to power the YAML parser
  • Mako - Templating engine used for generating reports, also used by the BLADE Templating Engine
  • TQDM - CLI compatible progress bars
  • DesignFormat - The interchange format used by BLADE
$> pip install pyyaml mako tqdm
$> pip install git+https://github.com/bluwireless/designformat#subdirectory=python

As 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:

$> pip install sphinx recommonmark sphinx-markdown-tables sphinx-rtd-theme

Building Your First Design

The best way to test your installation is to clone a copy of the BLADE Examples which demonstrate how to use the tool in a flow that generates RTL. Perhaps start with the basic timer tutorial and see how the hierarchy, registers, and wiring have been put together.

Next Steps

Take a look at the BLADE and DesignFormat documentation 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 Development

BLADE 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.

However this 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 List

The 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 - while some designs and guides are already available, we plan to create more to demonstrate some of the other features of BLADE.

Project details


Release history Release notifications | RSS feed

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blu-blade-1.0.tar.gz (95.0 kB view details)

Uploaded Source

Built Distribution

blu_blade-1.0-py3-none-any.whl (159.5 kB view details)

Uploaded Python 3

File details

Details for the file blu-blade-1.0.tar.gz.

File metadata

  • Download URL: blu-blade-1.0.tar.gz
  • Upload date:
  • Size: 95.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.4

File hashes

Hashes for blu-blade-1.0.tar.gz
Algorithm Hash digest
SHA256 caa50665b24865609802daa3437145d9a9fed67eb5c6bb80c039efeaed53306d
MD5 0f55a040aa4d7bbbf3571f91ca645689
BLAKE2b-256 1ca7dcb7759630e864ecddd1c5b80846ffa1a8bd0db0561735087ed7f9b4bc6b

See more details on using hashes here.

File details

Details for the file blu_blade-1.0-py3-none-any.whl.

File metadata

  • Download URL: blu_blade-1.0-py3-none-any.whl
  • Upload date:
  • Size: 159.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.4

File hashes

Hashes for blu_blade-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 80418c3bd4a448bc1241364cfa9fac97ede9f0034b19b7eb22553d0e1da63d31
MD5 421af20b8bab7e5f6fd959ca42a918c3
BLAKE2b-256 1fb7cad68b1ed611302da48c7206c307eeab8e1cdd48c298f182885db2e25adb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page