hardcaml
nerves
hardcaml | nerves | |
---|---|---|
7 | 11 | |
613 | 2,150 | |
0.8% | 0.6% | |
6.4 | 8.4 | |
7 days ago | 11 days ago | |
OCaml | Elixir | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
hardcaml
-
Zero Knowledge FPGAs
title: Accelerating zk-SNARKs - MSM and NTT algorithms on FPGAs with Hardcaml
Any reason the title deviates so much from original? Is it because of all the cool acronyms and code words? Here's a decoder:
zk-SNARK: zero-knowledge Succinct Non-Interactive Argument of Knowledge
MSM: Multi-Scalar Multiplication
Hardcaml: OCaml lib for hardware: https://github.com/janestreet/hardcaml
NTT: Number Theoretic Transform
-
A circuit simulator that doesn't look like it was made in 2003
Perhaps peripheral (the original site has been hugged to death).
Both clashlang: https://clash-lang.org/
And Hardcaml: https://github.com/janestreet/hardcaml
have personally fueled my interest in hardware.
Dan Luu speaks eloquently and at length about how better options are needed for logic design. I would recommend both of the above to the enthusiastic novice.
- Functional programming language for embedded devices?
-
HRT or Jane Street?
Join JS and you can program FPGAs in a strongly typed, expressive, high level programming language (OCaml): https://github.com/janestreet/hardcaml
-
You need to stop idolizing programming languages.
[1] https://github.com/janestreet/hardcaml
-
Designing a MIPS CPU in Hardcaml (12 part series)
> You can put all the functions/tasks you want in that module.
Coming from a software background, the testing strategies available in Verilog seem very clunky and overly verbose. In comparison, Hardcaml's ASCII waveform expect-test solution feels extremely elegant and simple: https://blog.janestreet.com/using-ascii-waveforms-to-test-ha....
> And all of my development and that of my team happens through gitlab-CI.
That's probably more of a gap in my education than a fault of the ecosystem then.
---
Among other qualities, I prefer languages that let fewer mistakes slip through, and allow the developer to focus on the system they intend to build rather than avoiding bugs/misunderstandings that would be easy to catch otherwise. You bring up a lot of really good points, and I suspect that if we were doing Verilog "the right way", we would have probably run into fewer issues. But at the end of the day, developing in Hardcaml was a much more ergonomic experience: testing was straightforward, most "stupid mistakes" were impossible, setup was pretty easy, and the library provided a lot of really useful abstractions. For example, Hardcaml interfaces make it easy to represent practically any data structure that can be serialized to/from a bit vector, and the Always API allows for some pretty interesting non-trivial functional logic.
https://github.com/janestreet/hardcaml/blob/master/docs/hard...
-
Hardcaml MIPS CPU Learning Project and Blog
A few months ago, I came across the Signals and Threads Programmable Hardware episode. I really liked the idea of Hardcaml: a library to write and test hardware designs in OCaml. Representing circuits as functions felt like a good abstraction, and I’ve been wanting to learn OCaml for a while.
nerves
- Embedded Elixir
-
Where Nerves-related Mix tasks are defined?
The nerves package's README.md explains what each repository is responsible for with a comprehensive listing.
- Elixir for Ruby developers: the three most important differences
-
Firefly – A new compiler and runtime for BEAM languages
You may be already aware of it, but just in case, there is the Nerves project: https://nerves-project.org/
-
Mixing sync and async views in the same application
As for embedded... I've only dabbled. Yeah you're not going to run Elixir on an Arduino or other very minimal bare metal embedded processor. But the Nerves Project (https://nerves-project.org/) which runs Elixir directly on SBCs is very well regarded. But either way it doesn't matter, since I thought we were talking about web dev, which is where Phoenix and Elixir just make more sense, for me.
-
what is the common usage of elixir
For me particularly I like it for things like APIs, Web Platforms (lower resource usage than other languages), and embedded devices via Nerves. However I've also used it on my endpoints to monitor them via Erlang's built in os_mon. Another usage is the distributed nature of erlang can allow you to do things like connect two nodes and run code on a remote node via remote procedure calls. This would allow you to execute something in a nearby geolocated node and reduce latency. Fly.io did a talk on this feature.
-
Functional programming language for embedded devices?
Check out nerves, a set of tools and libraries for embedded development with Elixir.
- Craft and deploy bulletproof embedded software in Elixir
-
A native Go userland for your Raspberry Pi 3 or 4 appliances
Is this kinda like the Nerves approach but for Golang? (https://github.com/nerves-project/nerves)
-
Use case of elixir
Nerves is also popular for embedded.
What are some alternatives?
bitvec - A crate for managing memory bit by bit
tamago - TamaGo - ARM/RISC-V bare metal Go
bap - Binary Analysis Platform
libcluster - Automatic cluster formation/healing for Elixir applications
nerves_system_osd32mp1 - Base system for Octavo OSD32MP1
live_svelte - Svelte inside Phoenix LiveView with seamless end-to-end reactivity
qucs_s - Qucs-S is a circuit simulation program with Qt-based GUI
erlexec - Execute and control OS processes from Erlang/OTP
clash-ghc - Haskell to VHDL/Verilog/SystemVerilog compiler
cubdb - Elixir embedded key/value database
logisim-evolution - Digital logic design tool and simulator
nerves_livebook - Develop on embedded devices with Livebook and Nerves