X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Fdsd-paper.git;a=blobdiff_plain;f=c%CE%BBash.lhs;h=5553760b957cfeb82083f2a6e68940693534830b;hp=b11aefee9381921bcd0e9927bf8f5c1edfcb1ca6;hb=311d4b7f61e3aa289a5110ed0836d3f4eedc4b3f;hpb=0303e8f865c9beacde0e1911c936eb7ed476eea6 diff --git "a/c\316\273ash.lhs" "b/c\316\273ash.lhs" index b11aefe..5553760 100644 --- "a/c\316\273ash.lhs" +++ "b/c\316\273ash.lhs" @@ -516,11 +516,11 @@ functional languages has been proposed \cite{Cardelli1981,muFP,DAISY, T-Ruby,HML2,Hydra,Hawk1,Lava,Wired,ForSyDe1,reFLect}. The idea of using functional languages for hardware descriptions started in the early 1980s \cite{Cardelli1981,muFP,DAISY}, a time which also saw the birth of the -currently popular hardware description languages, such as \VHDL. Functional +currently popular \acrop{HDL}, such as \VHDL. Functional languages are especially well suited to describe hardware because combinational circuits can be directly modeled as mathematical functions and -functional languages are very good at describing and composing these -mathematical functions. +functional languages are very good at describing and composing these +functions. In an attempt to decrease the amount of work involved in creating all the required tooling, such as parsers and type-checkers, many functional @@ -535,7 +535,7 @@ processed by an embedded circuit compiler which can perform for example simulation or synthesis. As Haskell's choice elements (\hs{if}-expressions, \hs{case}-expressions, etc.) are evaluated at the time the domain-specific datatype is being build, they are no longer visible to the embedded compiler -that processes the datatype. Consequently, it is impossible the capture +that processes the datatype. Consequently, it is impossible to capture Haskell's choice elements within a circuit description when taking the embedded language approach. This does not mean that circuits specified in an embedded language can not contain choice, just that choice elements only @@ -548,7 +548,8 @@ the purpose of describing hardware. By taking this approach, this research \emph{can} capture certain language constructs, such as Haskell's choice elements, within circuit descriptions. To the best knowledge of the authors, supporting polymorphism, higher-order functions and such an extensive array of -choice-elements is new in the domain of (functional) \acrop{HDL}. +choice-elements, combined with a very concise way of specifying circuits is +new in the domain of (functional) \acrop{HDL}. % As the hardware descriptions are plain Haskell % functions, these descriptions can be compiled to an executable binary % for simulation using an optimizing Haskell compiler such as the Glasgow @@ -1502,9 +1503,8 @@ automated synthesis is restricted to the synchronous model of computation. Though ForSyDe offers higher-order functions and polymorphism, ForSyDe's choice elements are limited to \hs{if} and \hs{case} expressions. ForSyDe's explicit conversions, where function have to be wrapped in processes and -process have to be wrapped in systems, combined with the explicit -instantiations of components also makes ForSyDe more verbose than -\CLaSH. +processes have to be wrapped in systems, combined with the explicit +instantiations of components, also makes ForSyDe more verbose than \CLaSH. Lava~\cite{Lava} is a hardware description language, embedded in Haskell, and focuses on the structural representation of hardware. Like \CLaSH, Lava has @@ -1516,9 +1516,7 @@ elements to be captured within the circuit descriptions. In this respect \CLaSH\ differs from Lava, in that all of Haskell's choice elements, such as \hs{case}-expressions and pattern matching, are synthesized to choice elements in the eventual circuit. Consequently, descriptions containing rich control -structures can be specified in a far more user-friendly way in \CLaSH\ than -possible within Lava. As a result, the control structures are also less -error-prone. +structures can be specified in a more user-friendly way in \CLaSH\ than possible within Lava, and are hence less error-prone. Bluespec~\cite{Bluespec} is a high-level synthesis language that features guarded atomic transactions and allows for the automated derivation of control