SpeakHDL is a command based FPGA design entry tool focused on ease of use and FPGA rapid prototyping. The novel approach of SpeakHDL is that it utilizes both procedural programming techniques and user voice or hotkey commands to increase FPGA design productivity. SpeakHDL utilizes an API library of procedure calls implemented in native VHDL that generalize a state machine interface as a hardware abstraction layer. It then uses this hardware abstraction layer to interconnect components and implement sequential logic circuits such as state machines, fifos, counters, ect.
Under the hood, SpeakHDL utilizes a
patented design strategy
with a
flat design architecture
which makes procedural programming useful for synthesizable FPGA design. The design pattern, which is essentially a hybrid between a
facade design pattern
and a
state design pattern
, masks much of the FPGA design complexity. However, the design pattern can be somewhat tedious to implement using traditional
RTL
coding techniques. SpeakHDL adds many usability features to the design pattern. It provides a way to map voice commands and hotkey sequences to VHDL procedure calls without imposing a steep learning curve on the user.
From a users stand point, SpeakHDL is essentially just a background application running along side a text editor that enforces a specific VHDL coding structure. Consider the normal FPGA design flow, where a text editor is used to create some
.vhd
files which are subsequently used as input to a simulation and synthesis tool chain.
SpeakHDL does not change that flow. SpeakHDL serves an entry point for scripting which helps speed up development time. User commands can either be given by voice or by typing on the last line of the editor. When a command is recognized, SpeakHDL writes to one or more design files and updates the text editor with the new file structure.
One of main advantages of using SpeakHDL over many GUI based FPGA design approaches is portability. All that is needed to run SpeakHDL is a text editor with a minimal set of features and an API library targeted for a vendor specific toolchain. Because the output of SpeakHDL are just text files containing native VHDL source code, it is possible to use SpeakHDL in a browser based text editor with no software installation or OS dependencies.
SpeakHDL's use of user commands and procedural programming is not only productive for FPGA design, but also provides more meaningful semantics than a traditional RTL coding style. Consider the SpeakHDL command sequence and the resultant VHDL code:
One could argue that any developer with a modest software background could figure out the intent of the VHDL code. The use of the
TRANSITION
procedure call handles state transitions which are only a function of time and the
CONDITIONAL_TRANSITION
procedure call replaces the need for an '
if-then-else
' statement when a state transition is dependent on a signal.
Command based programming provides a mechanism to easily
learn the API
without generating VHDL syntax errors. It eliminates the need to memorize the number, order, and data types of the parameters for each procedure call.
Traditional HDL code reuse is obtained primarily through the use of
components. Component reuse is ideal for FPGA developers wishing to reuse local functionality. However, it is the integration and control of these components that often leads to an adhoc FPGA design with
tightly coupled
modules requiring a massive amount of signals declarations.
SpeakHDL adds to the traditional component reuse model by allowing for architectural reuse within an FPGA design. SpeakHDL provides a
reusable framework
that handles control and communication between
application modules
in a uniform way through the use of
overloaded procedure calls
. This improves VHDL code readability,
loosens the coupling
between application modules, and dramatically reduces the number of signals that need to be declared for interconnection purposes.
SpeakHDL's approach to FPGA design productivity is to provide the developer with an API and an
architectural framework
that can achieve more code reuse than traditional FPGA design strategies.
SpeakHDL makes use of proven software abstraction techniques to hide FPGA design complexity
by:
SpeakHDL's modification of a software design pattern to make it suitable for synthesizable HDL code development is deserving of some academic merit of its own. Long before it became practical to create a new programming language to address a specific problem set, software developers turned to design patterns to address many of their challenges. SpeakHDL shows that using a design pattern approach can be very effective not only for developing software but also in FPGA hardware development.
In addition, the VHDL language has historically been criticized as being overly verbose. This is mainly due to the language being strongly typed. Ironically enough, it is the strong type system of VHDL that makes the use of overloaded procedure calls even possible. SpeakHDL takes advantage of the languages native support for overloading procedure calls which is a feature that is seldom used in synthesizable HDL code. When using a design pattern, VHDL can actually be very a succinct and readable language for the same reason which makes it verbose.