Piplin can generate synthesizable Verilog that all FPGA tool chains can understand. You can use maps, enums, tagged unions, and fixed-point mathematics using regular Clojure syntax, but you can still use synthesizable code.
Piplin is just a Clojure code. In other words, you can use namespaces to organize your code, create reusable calculations, and use higher-order functions to implement a combination of powerful and abstract hardware features. In addition to these tools, Piplin uses Prismatic's piping diagram to combine functions and register them in the module.
Using Piplin, you can simulate the hardware and provide testable results in an easy-to-understand format. The simulation can also be graphically displayed as a waveform. Automatic verification simulation can also be implemented based on Verilog to guarantee the accuracy of the compiler.
I talked a lot about Haskell, so I would like to explain that Clojure works for all these problems. Clojure has a reference transparency, immutable data type, and you can not convert variables in places other than special transaction types called atoms. This is quite useful compared to Haskell and you need to scan the values on the stream just to record the values in an associative array in order to call it elsewhere. Clojure does not have a powerful type system or a powerful compiler like the Glasgow Haskell compiler. Clojure has a very valuable thing. In other words, functional mode is strongly recommended, and it is difficult to use in Clojure.
I think that it can not be said which is better which is different between Haskell and Clojure on the endless argument. Haskell is the basis of functional programming. The people of Haskell call themselves programming fundamentalists. Haskell is rugged, concrete, bulletproof, quick and compact. Clojure is malleable, abstract and authoritative. Clojure is written on the JVM so you can do anything with Clojure (and you can do anything in Java). Clojure allows you to do decades of work with a proven Java algorithm. Clojure also has a unique creative programmer culture, including very nice libraries like Overtone and Quill.
But sometimes you need to call the Clojure function from Java. People usually use Clojure as many people have applications written in Java. They may want to extend the application and create new functionality in Clojure. A number of advantages in Clojure's speed and clarity are ideal choices for integration into code libraries. I think that you will encounter the same situation by creating a new function as a Clojure function and hoping to call it in Java. Clojure provides the necessary classes to call and execute Clojure code in Java applications. The Clojure code goes through the interpreter as a side effect of Java, and you can import and analyze the results
There are two things about Clojure that I truly stand out: All of Clojure is the main data type called Clojure version of EDN - JSON. Rather than own objects and types, whatever you want to explain, everything is just a basic data structure. For example, JavaScript has a native Date object. But what if we want to serialize the date to JSON? Then you need to create your own custom serialization / deserializer. In Clojure, dates can be represented as associative arrays with time stamps and time zones (unless you are using a Java implementation). Any string formatting function assumes the same data structure. Clojure emphasizes data, data conversion, and data processing. Everything is data