Andy Ray applies F# to hardware design and simulation, called HDFS, based on a port of HDCaml, by Tom Hawkins. Here's what Andy says about how he came to use F#:

Deciding to use F# for HDFS was purely accidental. I found the tool, decided to see what it could offer and got hooked. Firstly, the (informal) support provided by the F# team at Microsoft Research is top notch. Secondly, the .NET platform on which it runs is a lot more than the hype I had supposed it to be before actually trying it. The virtually seamless language interoperability is quite brilliant and the class library well documented and very useful. Basically it's ML programming crossed with a massive library and, I hope, a chance for this fantastic family of languages to reach a wider audience.

Here's the description:

HDFS is a library written in F# which allows hardware to be designed, simulated and then implemented (using standard design flows via Verilog or VHDL) in FPGA's or ASIC's.

  • Digital logic circuit design in F#
  • Structural and behavioural design styles
  • VHDL and Verilog netlist generation
  • Memory inference
  • Instantiation of external HDL models
  • Integrated simulator
  • Verilog co-simulation (Modelsim only at the moment)
  • C, C++ and C# simulation generation
  • Integrated waveform viewer
  • Resource reporting
  • Tree based hierarchy viewer
  • Small, but growing, library of utility circuits and functions
  • The library is based upon a project called HDCaml, authored by Tom Hawkins.


For those who don't know, languages like ML, OCaml, F# and Haskell have a history intertwined with languages and techniques used for hardware modelling, manipulation, verification, testing and analysis (e.g. among many, many others see the company Tenison, who implement hardware simulation technologies using an ML-family language, Singh and Koen's Lava library for Haskell, the HOL and Isabelle systems used for hardware verification of the ARM and other projects and the ForteFL language and verification techniques used at Intel, all of which use functional programming heavily).