A Golden Age of Hardware Description Languages: Applying Programming Language Techniques to Improve Design Productivity

Authors Lenny Truong, Pat Hanrahan

Thumbnail PDF


  • Filesize: 428 kB
  • 21 pages

Document Identifiers

Author Details

Lenny Truong
  • Stanford University, USA
Pat Hanrahan
  • Stanford University, USA


The authors would like to thank the anonymous reviewers and Will Crichton for providing feedback on paper drafts. They would also like to thank their colleagues at Stanford, particularly members of the HardwarePL Reading Group and the AHA Agile Hardware Center, as many of the ideas in this paper are the direct or indirect result of the many intellectual discussions that they have collectively participated in. Finally, the authors would like to thank the organizers of SNAPL for creating a venue for visionary papers on programming languages.

Cite AsGet BibTex

Lenny Truong and Pat Hanrahan. A Golden Age of Hardware Description Languages: Applying Programming Language Techniques to Improve Design Productivity. In 3rd Summit on Advances in Programming Languages (SNAPL 2019). Leibniz International Proceedings in Informatics (LIPIcs), Volume 136, pp. 7:1-7:21, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2019)


Leading experts have declared that there is an impending golden age of computer architecture. During this age, the rate at which architects will be able to innovate will be directly tied to the design and implementation of the hardware description languages they use. Thus, the programming languages community stands on the critical path to this new golden age. This implies that we are also on the cusp of a golden age of hardware description languages. In this paper, we discuss the intellectual challenges facing researchers interested in hardware description language design, compilers, and formal methods. The major theme will be identifying opportunities to apply programming language techniques to address issues in hardware design productivity. Then, we present a vision for a multi-language system that provides a framework for developing solutions to these intellectual problems. This vision is based on a meta-programmed host language combined with a core embedded hardware description language that is used as the basis for the research and development of a sea of domain-specific languages. Central to the design of this system is the core language which is based on an abstraction that provides a general mechanism for the composition of hardware components described in any language.

Subject Classification

ACM Subject Classification
  • Hardware → Hardware description languages and compilation
  • Hardware Description Languages


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. A 4 bit up-counter with synchronous active high reset, 2009 (accessed April 5, 2019). URL: https://www.edaplayground.com/x/3cf.
  2. Davide Ancona, Viviana Bono, Mario Bravetti, Joana Campos, Giuseppe Castagna, Pierre-Malo Deniélou, Simon J Gay, Nils Gesbert, Elena Giachino, Raymond Hu, et al. Behavioral types in programming languages. Foundations and Trendsregistered in Programming Languages, 3(2-3):95-230, 2016. Google Scholar
  3. Krste Asanović and David A Patterson. Instruction sets should be free: The case for risc-v. EECS Department, University of California, Berkeley, Tech. Rep. UCB/EECS-2014-146, 2014. Google Scholar
  4. Jonathan Bachrach, Huy Vo, Brian Richards, Yunsup Lee, Andrew Waterman, Rimas Avižienis, John Wawrzynek, and Krste Asanović. Chisel: constructing hardware in a scala embedded language. In Proceedings of the 49th Annual Design Automation Conference, pages 1216-1225. ACM, 2012. Google Scholar
  5. Jos CM Baeten. A brief history of process algebra. Theoretical Computer Science, 335(2-3):131-146, 2005. Google Scholar
  6. Josephus Cornelis Maria Baeten and Cornelis Adam Middelburg. Process algebra with timing: real time and discrete time. In Handbook of process algebra, pages 627-684. Elsevier, 2001. Google Scholar
  7. M Barbacci, C Gordon Bell, and Allen Newell. ISP: A language to describe instruction sets and other register transfer systems. Citeseer, 1972. Google Scholar
  8. H.P. BARENDREGT. Chapter 1 - Introduction. In H.P. BARENDREGT, editor, The Lambda Calculus, volume 103 of Studies in Logic and the Foundations of Mathematics, pages 3-21. Elsevier, 1984. URL: http://dx.doi.org/10.1016/B978-0-444-87508-2.50009-5.
  9. Clark Barrett, Aaron Stump, Cesare Tinelli, et al. The smt-lib standard: Version 2.0. In Proceedings of the 8th International Workshop on Satisfiability Modulo Theories (Edinburgh, England), volume 13, page 14, 2010. Google Scholar
  10. Eli Bendersky. Co-routines as an alternative to state machines. https://eli.thegreenplace.net/2009/08/29/co-routines-as-an-alternative-to-state-machines, 2009.
  11. Per Bjesse, Koen Claessen, Mary Sheeran, and Satnam Singh. Lava: hardware design in Haskell. In ACM SIGPLAN Notices, volume 34(1), pages 174-184. ACM, 1998. Google Scholar
  12. Inc. Bluespec. BSV 101: DESIGNING A COUNTER Using the Bluespec Development Workstation, 2009 (accessed April 5, 2019). URL: http://wiki.bluespec.com/Home/Getting-Started/Tutorials.
  13. K Claessen and M Sheeran. A slightly revised tutorial on lava: A hardware description and verification system, 2007. Google Scholar
  14. Edmund M Clarke, Orna Grumberg, and David E Long. Model checking and abstraction. ACM transactions on Programming Languages and Systems (TOPLAS), 16(5):1512-1542, 1994. Google Scholar
  15. Ross Daly, Lenny Truong, and Pat Hanrahn. Invoking and Linking Generators from Multiple Hardware Languages using CoreIR. In Proceedings of the 1st Workshop on Open-Source EDA Technology, 2018. Google Scholar
  16. Zachary DeVito. Terra: Simplifying High-performance Programming Using Multi-stage Programming. PhD thesis, Stanford University, 2014. Google Scholar
  17. Zachary DeVito and Pat Hanrahan. The Design of Terra: Harnessing the best features of high-level and low-level languages. In LIPIcs-Leibniz International Proceedings in Informatics, volume 32. Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik, 2015. Google Scholar
  18. Zachary DeVito, James Hegarty, Alex Aiken, Pat Hanrahan, and Jan Vitek. Terra: a multi-stage language for high-performance computing. In ACM SIGPLAN Notices, volume 48(6), pages 105-116. ACM, 2013. Google Scholar
  19. Edgar Dijkstra. Edgar Dijkstra: Go To Statement Considered Harmful, 1968 (accessed February 6, 2019). URL: https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf.
  20. Carl Ebeling. CSE370 - XV - Verilog for Finite State Machines (Spring 2010), 2010 (accessed April 5, 2019). URL: https://courses.cs.washington.edu/courses/cse370/10sp/pdfs/lectures/15-VerilogIIPrint.pdf.
  21. Mike Field. Simple SDRAM Controller (Verilog Memory controller v0.1), 2014 (accessed April 5, 2019). URL: http://hamsterworks.co.nz/mediawiki/index.php/File:Verilog_Memory_controller_v0.1.zip.
  22. Frank Ghenassia et al. Transaction-level modeling with SystemC, volume 2. Springer, 2005. Google Scholar
  23. Steve Golson and Leah Clark. Language Wars in the 21st Century: Verilog versus VHDL–Revisited. In Synopsys Users Group (SNUG), 2016. Google Scholar
  24. Steve Golson, Gardner Hendrie, and Philip Moorby. Moorby, Phil (Philip Raymond) oral history, 2013 (accessed April 5, 2019). URL: https://www.computerhistory.org/collections/catalog/102746653.
  25. Ricardo E Gonzalez. Xtensa: A configurable and extensible processor. IEEE micro, 20(2):60-70, 2000. Google Scholar
  26. Andreas Haas, Andreas Rossberg, Derek L Schuff, Ben L Titzer, Michael Holman, Dan Gohman, Luke Wagner, Alon Zakai, and JF Bastien. Bringing the web up to speed with WebAssembly. In ACM SIGPLAN Notices, volume 52(6), pages 185-200. ACM, 2017. Google Scholar
  27. Pat Hanrahan. magma, 2019 (accessed February 6, 2019). URL: https://github.com/phanrahan/magma.
  28. Pat Hanrahan. peak, 2019 (accessed February 6, 2019). URL: https://github.com/phanrahan/peak.
  29. John Hennessy and David Patterson. A new golden age for computer architecture: Domain-specific hardware/software co-design, enhanced security, open instruction sets, and agile chip development. In 2018 ACM/IEEE 45th Annual International Symposium on Computer Architecture (ISCA), pages 27-29, June 2018. URL: http://dx.doi.org/10.1109/ISCA.2018.00011.
  30. John L Hennessy and David A Patterson. A new golden age for computer architecture. Communications of the ACM, 62(2):48-60, 2019. Google Scholar
  31. Charles Antony Richard Hoare. Communicating sequential processes. In The origin of concurrent programming, pages 413-443. Springer, 1978. Google Scholar
  32. James C Hoe et al. Hardware synthesis from term rewriting systems. In VLSI: Systems on a chip, pages 595-619. Springer, 2000. Google Scholar
  33. Kohei Honda, Nobuko Yoshida, and Marco Carbone. Multiparty asynchronous session types. ACM SIGPLAN Notices, 43(1):273-284, 2008. Google Scholar
  34. Adam Izraelevitz, Jack Koenig, Patrick Li, Richard Lin, Angie Wang, Albert Magyar, Donggyu Kim, Colin Schmidt, Chick Markley, Jim Lawson, et al. Reusability is FIRRTL ground: Hardware construction languages, compiler frameworks, and transformations. In Proceedings of the 36th International Conference on Computer-Aided Design, pages 209-216. IEEE Press, 2017. Google Scholar
  35. Steven Dexter Johnson. Synthesis of digital designs from recursion equations. PhD thesis, Indiana University, 1983. Google Scholar
  36. Michal Karczmarek et al. Synthesis of multi-cycle circuits from guarded atomic actions. PhD thesis, Massachusetts Institute of Technology, 2011. Google Scholar
  37. Brucek Khailany, Evgeni Khmer, Rangharajan Venkatesan, Jason Clemons, Joel S. Emer, Matthew Fojtik, Alicia Klinefelter, Michael Pellauer, Nathaniel Pinckney, Yakun Sophia Shao, Shreesha Srinath, Christopher Torng, Sam (Likun) Xi, Yanqing Zhang, and Brian Zimmer. A Modular Digital VLSI Flow for High-productivity SoC Design. In Proceedings of the 55th Annual Design Automation Conference, DAC '18, pages 72:1-72:6, New York, NY, USA, 2018. ACM. URL: http://dx.doi.org/10.1145/3195970.3199846.
  38. David Koeplinger, Matthew Feldman, Raghu Prabhakar, Yaqi Zhang, Stefan Hadjis, Ruben Fiszel, Tian Zhao, Luigi Nardi, Ardavan Pedram, Christos Kozyrakis, et al. Spatial: a language and compiler for application accelerators. In Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 296-311. ACM, 2018. Google Scholar
  39. M. Kooijman. Haskell as a higher order structural hardware description language, December 2009. URL: http://essay.utwente.nl/59381/.
  40. Chris Lattner and Vikram Adve. LLVM: A compilation framework for lifelong program analysis & transformation. In Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization, page 75. IEEE Computer Society, 2004. Google Scholar
  41. Arm Limited. Arm AMBA (Advanced Microcontroller Bus Architecture) Protocols, 2019 (accessed February 6, 2019). URL: https://developer.arm.com/products/architecture/system-architectures/amba.
  42. Colin McLarty. The Rising Sea: Grothendieck on simplicity and generality, 2007. Google Scholar
  43. G. H. Mealy. A method for synthesizing sequential circuits. The Bell System Technical Journal, 34(5):1045-1079, September 1955. URL: http://dx.doi.org/10.1002/j.1538-7305.1955.tb03788.x.
  44. mn416. Blarney - Example 7: Recipes, 2019 (accessed April 6, 2019). URL: https://github.com/mn416/blarney#example-7-recipes.
  45. Edward F Moore. Gedanken-experiments on sequential machines. Automata studies, 34:129-153, 1956. Google Scholar
  46. Razvan Nane, Vlad-Mihai Sima, Christian Pilato, Jongsok Choi, Blair Fort, Andrew Canis, Yu Ting Chen, Hsuan Hsiao, Stephen Brown, Fabrizio Ferrandi, et al. A survey and evaluation of FPGA high-level synthesis tools. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 35(10):1591-1604, 2016. Google Scholar
  47. Rishiyur Nikhil. Bluespec System Verilog: efficient, correct RTL from high level specifications. In Proceedings. Second ACM and IEEE International Conference on Formal Methods and Models for Co-Design, 2004. MEMOCODE'04., pages 69-70. IEEE, 2004. Google Scholar
  48. Rishiyur S Nikhil and Kathy R Czeck. BSV by Example. Createspace Independent Publishing Platform, 2010. Google Scholar
  49. Russell O'Connor. Simplicity: a new language for blockchains. In Proceedings of the 2017 Workshop on Programming Languages and Analysis for Security, pages 107-120. ACM, 2017. Google Scholar
  50. John O’Donnell. Hydra: hardware description in a functional language using recursion equations and high order combining forms. The Fusion of Hardware Design and Verification, pages 309-328, 1988. Google Scholar
  51. Gordon J Pace and Christian Tabone. Multi-Stage Languages in Hardware Design, 2008. Google Scholar
  52. Gordon D Plotkin. A structural approach to operational semantics, 1981. Google Scholar
  53. Jing Pu, Steven Bell, Xuan Yang, Jeff Setter, Stephen Richardson, Jonathan Ragan-Kelley, and Mark Horowitz. Programming heterogeneous systems from an image processing DSL. ACM Transactions on Architecture and Code Optimization (TACO), 14(3):26, 2017. Google Scholar
  54. Ofer Shacham, Omid Azizi, Megan Wachs, Wajahat Qadeer, Zain Asgar, Kyle Kelley, John P Stevenson, Stephen Richardson, Mark Horowitz, Benjamin Lee, et al. Rethinking digital design: Why design must change. IEEE micro, 30(6):9-24, 2010. Google Scholar
  55. Mary Sheeran. muFP, a language for VLSI design. In Proceedings of the 1984 ACM Symposium on LISP and functional programming, pages 104-112. ACM, 1984. Google Scholar
  56. Satnam Singh and Philip James-Roxby. Lava and JBits: From HDL to bitstream in seconds. In The 9th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'01), pages 91-100. IEEE, 2001. Google Scholar
  57. IEEE Computer Society and the IEEE Standards Association Corporate Advisory Group. IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language. IEEE Std 1800-2017 (Revision of IEEE Std 1800-2012), pages 1-1315, February 2018. URL: http://dx.doi.org/10.1109/IEEESTD.2018.8299595.
  58. Paul Teehan, Mark Greenstreet, and Guy Lemieux. A survey and taxonomy of GALS design styles. IEEE Design & Test of Computers, 24(5), 2007. Google Scholar
  59. Lenny Truong. fautl, 2019 (accessed February 6, 2019). URL: https://github.com/leonardt/fault.
  60. Lenny Truong. silica, 2019 (accessed February 6, 2019). URL: https://github.com/leonardt/silica.
  61. Aaron Turon. Abstraction without overhead: traits in Rust, 2015 (accessed April 5, 2019). URL: https://blog.rust-lang.org/2015/05/11/traits.html.
  62. Kees van Berkel, Joep Kessels, Marly Roncken, Ronald Saeijs, and Frits Schalij. The VLSI-programming language Tangram and its translation into handshake circuits. In Proceedings of the conference on European design automation, pages 384-389. IEEE Computer Society Press, 1991. Google Scholar
  63. S. van der Walt, S. C. Colbert, and G. Varoquaux. The NumPy Array: A Structure for Efficient Numerical Computation. Computing in Science Engineering, 13(2):22-30, March 2011. URL: http://dx.doi.org/10.1109/MCSE.2011.37.
  64. Andrew Waterman, Yunsup Lee, David A Patterson, and Krste Asanovi. The RISC-V Instruction Set Manual. Volume 1: User-Level ISA, Version 2.0. Technical report, CALIFORNIA UNIV BERKELEY DEPT OF ELECTRICAL ENGINEERING AND COMPUTER SCIENCES, 2014. Google Scholar
  65. Zhiru Zhang, Yiping Fan, Wei Jiang, Guoling Han, Changqi Yang, and Jason Cong. AutoPilot: A platform-based ESL synthesis system. In High-Level Synthesis, pages 99-112. Springer, 2008. Google Scholar
Questions / Remarks / Feedback

Feedback for Dagstuhl Publishing

Thanks for your feedback!

Feedback submitted

Could not send message

Please try again later or send an E-mail