{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,2]],"date-time":"2026-06-02T03:46:06Z","timestamp":1780371966362,"version":"3.54.1"},"reference-count":41,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2022,8,29]],"date-time":"2022-08-29T00:00:00Z","timestamp":1661731200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2022,8,29]]},"abstract":"<jats:p>The most widely used languages and methods used for designing digital hardware fall into two rough categories.  \nOne of them, register transfer level (RTL), requires specifying each and every component in the designed circuit.  \nThis gives the designer full control, but burdens the designer with many trivial details.  \nThe other, the high-level synthesis (HLS) method, allows the designer to abstract the details of hardware away and focus on the problem being solved.  \nThis method however cannot be used for a class of hardware design problems because the circuit's clock is also abstracted away.<\/jats:p>\n          <jats:p>We present YieldFSM, a hardware description language that uses the generator abstraction to represent clock-level timing in a digital circuit.  \nIt represents a middle ground between the RTL and HLS approaches: the abstraction level is higher than in RTL, but thanks to explicit information about clock-level timing, it can be used in applications where RTL is traditionally used.  \nWe also present the YieldFSM compiler, which uses methods developed by the functional programming community -- including continuation-passsing style translation and defunctionalization -- to translate YieldFSM programs to Mealy machines.  \nIt is implemented using Template Haskell and the Clash functional hardware description language.  \nWe show that this approach leads to short and conceptually simple hardware descriptions.<\/jats:p>","DOI":"10.1145\/3549821","type":"journal-article","created":{"date-parts":[[2022,8,31]],"date-time":"2022-08-31T19:39:26Z","timestamp":1661974766000},"page":"52-79","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":2,"title":["Generating circuits with generators"],"prefix":"10.1145","volume":"6","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-0908-4859","authenticated-orcid":false,"given":"Marek","family":"Materzok","sequence":"first","affiliation":[{"name":"University of Wroc\u0142aw, Poland"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2022,8,31]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1109\/DSD.2010.21"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-45340-3_2"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2228360.2228584"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/2436696.2443836"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/258948.258953"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3371116"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/1950413.1950423"},{"key":"e_1_2_1_8_1","unstructured":"Xavier Clerc and Arsenly Alekseyev. 2018. Hardcaml. https:\/\/github.com\/janestreet\/hardcaml \t\t\t\t  Xavier Clerc and Arsenly Alekseyev. 2018. Hardcaml. https:\/\/github.com\/janestreet\/hardcaml"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/362929.362947"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/173262.155113"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.1995.523251"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/3386377"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/3282307"},{"key":"e_1_2_1_14_1","unstructured":"1998. HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller\/Driver. \t\t\t\t  1998. HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller\/Driver."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF00976239"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/242224.242477"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1109\/IEEESTD.2018.8299595"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1109\/IEEESTD.2019.8938196"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-15975-4_37"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/359763.359789"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/3338698.3338892"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/1291201.1291211"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.6874025"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1002\/j.1538-7305.1955.tb03788.x"},{"key":"e_1_2_1_25_1","volume-title":"The 9th Annual Synopsys (& EPIC) Users Group Meeting (SNUG\u201999)","author":"Mills Don","year":"1999","unstructured":"Don Mills and Clifford E Cummings . 1999 . RTL coding styles that yield simulation and synthesis mismatches . In The 9th Annual Synopsys (& EPIC) Users Group Meeting (SNUG\u201999) . San Jose, CA, USA. 16 pages. Don Mills and Clifford E Cummings. 1999. RTL coding styles that yield simulation and synthesis mismatches. In The 9th Annual Synopsys (& EPIC) Users Group Meeting (SNUG\u201999). San Jose, CA, USA. 16 pages."},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1515\/9781400882618-006"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2847538.2847541"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.32.5"},{"key":"e_1_2_1_29_1","unstructured":"Jesse op den Brouw. 2012. Simple HD44780 Driver. https:\/\/opencores.org\/projects\/hd44780_driver \t\t\t\t  Jesse op den Brouw. 2012. Simple HD44780 Driver. https:\/\/opencores.org\/projects\/hd44780_driver"},{"key":"e_1_2_1_30_1","volume-title":"European Meeting in 2017 (FOSDEM","author":"Papon Charles","year":"2017","unstructured":"Charles Papon . 2017 . SpinalHDL: An alternative hardware description language. Feb., https:\/\/archive.fosdem.org\/2017\/schedule\/event\/spinal_hdl\/ Presented on the Free and Open Source Software Developers\u2019 European Meeting in 2017 (FOSDEM 2017). Charles Papon. 2017. SpinalHDL: An alternative hardware description language. Feb., https:\/\/archive.fosdem.org\/2017\/schedule\/event\/spinal_hdl\/ Presented on the Free and Open Source Software Developers\u2019 European Meeting in 2017 (FOSDEM 2017)."},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1109\/FPL.2013.6645550"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.entcs.2004.08.008"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(75)90017-1"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/800194.805852"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1109\/MDT.2009.84"},{"key":"e_1_2_1_36_1","unstructured":"Neil Schemenauer Tim Peters and Magnus Lie Hetland. 2001. Simple Generators. https:\/\/www.python.org\/dev\/peps\/pep-0255\/ \t\t\t\t  Neil Schemenauer Tim Peters and Magnus Lie Hetland. 2001. Simple Generators. https:\/\/www.python.org\/dev\/peps\/pep-0255\/"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1109\/MM.2010.81"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1109\/FCCM.2019.00010"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.SNAPL.2019.7"},{"key":"e_1_2_1_40_1","unstructured":"2019. The RISC-V Instruction Set Manual Volume I: User-Level ISA Document Version 2019121 Andrew Waterman and Krste Asanovi\u0107 (Eds.). \t\t\t\t  2019. The RISC-V Instruction Set Manual Volume I: User-Level ISA Document Version 2019121 Andrew Waterman and Krste Asanovi\u0107 (Eds.)."},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3408877.3432472"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3549821","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3549821","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T18:09:55Z","timestamp":1750183795000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3549821"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022,8,29]]},"references-count":41,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2022,8,29]]}},"alternative-id":["10.1145\/3549821"],"URL":"https:\/\/doi.org\/10.1145\/3549821","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2022,8,29]]},"assertion":[{"value":"2022-08-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}