The ALCHA project, including the language grammar and, by extension, this
wiki, is under development. This wiki serves as a documentation of the
project goals and aspirations, which are inherently unstable and subject to
change without notice.
ALCHA (architectural level computational hardware abstraction) is a command-line tool to generate vendor-specific FPGA projects from largely vendor-neutral text-based source code. The image below provides a rough overview of the intended tool-chain.
ALCHA is aimed at unifying the various aspects of FPGA firmware design (RTL design, finite state machines, timing and design constraints, as well as scripting) into a single language.
ALCHA is designed to be as portable, concise and expressive as possible, without the loss of low-level control. It provides a development platform that promises reduced development time and maintenance effort.
The ALCHA compiler applies various optimisations before project synthesis, most of which are related to finite state machine resource usage. The details of this is outside the scope of this wiki. One notable optimisation, however, is automated multi-cycle analysis.
Unless specified otherwise, the circuit synthesis process assumes that all register-to-register paths have to have a delay of less than one clock period. This is not true for all paths in a typical state-machine. It is likely that a particular signal path have multiple clock-cycles in which to pass through the combinational cloud, thereby requiring less stringent timing constraints than the synthesis tool initially assumes.
Manually specifying multi-cycle paths is a labour-intensive and tedious process. ALCHA performs this task automatically whenever the design is compiled, thereby generating code that is easier to synthesise, resulting in reduced compilation times.
The source is available from the git repository and GitHub.
Many of the ideas of ALCHA are borrowed from other existing languages. These include, among others:
J Taylor
ALCHA - Architectural Level Computational Hardware Abstraction: A New Programming Language for FPGA Projects
PhD thesis, University of Cape Town, Faculty of Engineering and the Built Environment, Department of Electrical Engineering, August 2022
J Taylor and S Winberg
ALCHA: An Alternative Programming Model for FPGA Firmware
Proceedings of International Radar Conference, Boston, IEEE, April 2019
J Taylor and S Winberg
ALCHA: Introducing Arbitrary Fixed-point and Procedural Programming to FPGA Firmware Design
Proceedings of International Workshop on Signal Processing Systems, IEEE, October 2018
J Taylor and S Winberg
ALCHA: New Object Oriented Approach to FPGA Project Development
Proceedings of International Conference on Industrial Technology, IEEE, March 2016, Pages 707 – 712
K Chapman
Get your Priorities Right -- Make your Design Up to 50% Smaller
Xilinx white paper, 2007
K Chapman
Get Smart About Reset: Think Local, Not Global
Xilinx white paper, 2008
P Coussy and A Morawiec
High-Level Synthesis: from Algorithm to Digital Circuit
Springer, 2008, ISBN 978-1-4020-8587-1, e-ISBN 978-1-4020-8588-8
J DeLaere and S Zammattio
Top 7 Reasons to Replace Your Microcontroller with a MAX 10 FPGA
Altera, June 2015
A Feller, R Noto and A M Smith
Standard Cell Approach for Generating Custom CMOS/SOS Devices Using a Fully Automatic Layout Program
IEEE Circuits and Systems Magazine, September 1981, Volume 3, Number 3, Pages 9 – 13
L Fousse, G Hanrot, V Lefèvre, P Pélissier and P Zimmermann
MPFR: A Multiple-precision Binary Floating-point Library with Correct Rounding
ACM Transactions on Mathematical Software (TOMS), June 2007, Volume 33, Number 2
M Frigo and S G Johnson
The Design and Implementation of FFTW3
Proceedings of the IEEE, February 2005, Volume 93, Number 2, Pages 216 – 231
T Granlund and the GMP development team
GNU MP: The GNU Multiple Precision Arithmetic Library
2015, Version 6.1.0
P Luksch, U Maier, S Rathmayer, M Weidmann, F Unger, P Bastian, V Reichenberger and A Haas
Software Engineering in Parallel and Distributed Scientific Computing: a Case Study from Industrial Practice
Proceedings of International Symposium on Software Engineering for Parallel and Distributed Systems, IEEE, April 1998, Pages 187 – 1997
R Nane, V M Sima, C Pilato and J Choi
A Survey and Evaluation of FPGA High-Level Synthesis Tools
IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, December 2015
R R Seban
An Overview of Object-Oriented Design and C++
Proceedings of Aerospace Applications Conference, IEEE, February 1994, Pages 65 – 86
J Stephenson
Design Guidelines for Optimal Results in FPGAs
Altera Corporation, 2005
IEEE 1800-2012
IEEE Standard for SystemVerilog – Unified Hardware Design, Specification, and Verification Language
IEEE, February 2013
T van Court and M C Herbordt
Requirements for any HPC/FPGA Application Development Tool Flow
Proceedings of the fourth Annual Boston Area Computer Architecture Workshop, 2006
H Zheng, S T Gurumani, L Yang, D Chen and K Rupnow
High-Level Synthesis with Behavioral-Level Multicycle Path Analysis
Transactions on Computer-Aided Design of Integrated Circuits and Systems, IEEE, December 2014, Volume 33, Number 12, Pages 1832 – 1845