senshu
Joined 7 years ago
Joined 7 years ago
I use proprietary synthesis tools for FPGAs everyday but I do not develop them. My situation is similar to that of a software engineer who uses compilers and who could only explain how they work in general terms.
I think that your question assumes a model of computation similar to VHDL or Verilog. The techniques I use in Racket are similar to those used in Clash ( https://clash-lang.org/ ) In VHDL or Verilog, signals are updated in reaction to events. In Racket, I implement signals as lazy data streams: values are "pulled" from signals, which can trigger the evaluation of other signals. This is possible because I restrict my models to synchronous circuits with a single clock domain.
You can read more about it in this post: http://guillaume.baierouge.fr/2021/03/14/simulating-digital-...
This post is part of an ongoing experiment to use Racket as a platform for hardware description languages. Describing a RISC-V core in Racket is a step in this direction, but the ultimate goal is neither to use Racket itself as an HDL, nor to define an embedded hardware description DSL in Racket. The long-term goal is to create an HDL that would benefit from Racket's "language-oriented programming" facilities, with the ability to simulate digital hardware, but also to generate standard Verilog or VHDL.
I had to buy a new PC with an Intel 386 CPU, and add "extended memory" to run the IDE. It couldn't run with only 640 Ko of RAM.
The racket topic on SO does not seem very active, so I thought I could get answers here as well.
As explained in the first comment, one of the motivations for the project was to learn constraint programming. The tablature generator could be a nice example to compare different paradigms and algorithms.
It is a week-end project that I started for two reasons:
* As a software developer, I was looking for an original case study to learn constraint programming.
* As a guitar player whot is not fluent reading sheet music, I was interested in a tool to rapidly convert existing transcriptions of jazz solos into playable guitar tablatures.
TablaZinc is written in the MiniZinc language. https://www.minizinc.org Feedback from advanced users of MiniZinc and experts in constraint programming will be welcome.
> It’s nice that computing the good fingerings takes a while
Actually, a few tweaks and the use of optimization options allowed to dramatically reduce the execution time for my 20-note example.
> Would be good to see some harmony and how the solver would deal with multiple notes at once.
Yes. I think it would take some effort to adapt the current set of constraints but it should be feasible.
> If you’re seriously writing out tabs and need some software, I’ve been using Dorico and it’s pretty damn good
Thanks for the tip. They don't seem to offer a Linux version though.
While this is still a long-term goal, I am planning to experiment how formal verification can be used in Racket-based hardware tools.