Lava: hardware design in Haskell
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Domain specific embedded compilers
Proceedings of the 2nd conference on Domain-specific languages
muFP, a language for VLSI design
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Type-safe observable sharing in Haskell
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
ChalkBoard: mapping functions to polygons
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
Deriving an efficient FPGA implementation of a low density parity check forward error corrector
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Handshaking in kansas lava using patch logic
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Hi-index | 0.00 |
In this paper, we overview the design and implementation of our latest version of Kansas Lava. Driven by needs and experiences of implementing telemetry circuits, we have made a number of recent improvements to both the external API and the internal representations used. We have retained our dual shallow/deep representation of signals in general, but now have a number of externally visible abstractions for combinatorial, sequential, and enabled signals. We introduce these abstractions, as well as our new abstractions for memory and memory updates. Internally, we found the need to represent unknown values inside our circuits, so we made aggressive use of type families to lift our values in a principled and regular way. We discuss this design decision, how it unfortunately complicates the internals of Kansas Lava, and how we mitigate this complexity.