What would folks recommend for a beginner (electronics and coding experience but new to fpga)? Prefer open source toolchain if possible. Not too expensive. Starter tutorials would be nice.
TinyFPGA BX ([1]) and nmigen/yosys as the fully open source toolchain for generating logic with Python and formally verifying it ([2], [3]). There is a good nMigen tutorial by Robert Baruch ([4]. [5]).
Alternatively, if you really want to try Verilog first (not a bad idea), I enjoyed reading a book "Designing Video Game Hardware in Verilog" ([6]).
It's a fork, made for reasons, but more actively developed. whitequark (long time author/contributor) works on this fork, and no longer the M-Labs version.
To iterate on what other people have been saying, nMigen is great! But I probably wouldn't learn it as my first intro to HDLs because in my opinion it's best thought of as a macro-generator for Verilog.
I'd first go through the HDLbits online tutorials for Verilog (https://hdlbits.01xz.net/wiki/Problem_sets). They're a nice interactive intro to Verilog (and HDLs in general) and can be simulated directly in your browser without having to download any software. Even if you only plan to write nMigen, learning Verilog will be helpful when you inevitably need to inspect the nMigen generated Verilog.
I would say if you have the money for it, the Icebreaker FPGA dev board is really nice and integrates with the open source tools well. When prototyping I either use Verilog + Iverilog for simulation + yosys and icestrom tools for building, or more recently, I've been messing around with the active nmigen fork for python and doing design and simulation all in there which also links to the other tools for build as well. Honestly what software you like just depends on what you find best.
I have! SymbiFlow is very good for being a FOSS hardware toolchain, sometimes it has trouble with peculiar FPGA primitives but it's nothing you can't work around.
I've hacked around with my EOS S3 board less than my other boards (mostly because if I need a CPU I'll just add a VexRiscv soft-core in a regular FPGA), but I can definitely see it's use case if you'd like to accelerate sections of your software without building the entire design on an FPGA.
Honestly I think it's maybe the best way to write new digital circuits today. I tried nMigen but it doesn't seem suited to write local in at all. It's easy to connect things together but actually writing something is a PITA.
15 comments
[ 4.2 ms ] story [ 52.1 ms ] threadAlternatively, if you really want to try Verilog first (not a bad idea), I enjoyed reading a book "Designing Video Game Hardware in Verilog" ([6]).
1. https://tinyfpga.com/
2. https://m-labs.hk/gateware/nmigen/
3. http://www.clifford.at/yosys/
4. https://github.com/RobertBaruch/nmigen-tutorial
5. https://www.youtube.com/watch?v=85ZCTuekjGA&list=PLEeZWGE3Pw...
6. https://www.amazon.com/gp/product/1728619440/ref=ppx_yo_dt_b...
https://github.com/nmigen/nmigen
It's a fork, made for reasons, but more actively developed. whitequark (long time author/contributor) works on this fork, and no longer the M-Labs version.
https://github.com/RobertBaruch/n6800
I'd first go through the HDLbits online tutorials for Verilog (https://hdlbits.01xz.net/wiki/Problem_sets). They're a nice interactive intro to Verilog (and HDLs in general) and can be simulated directly in your browser without having to download any software. Even if you only plan to write nMigen, learning Verilog will be helpful when you inevitably need to inspect the nMigen generated Verilog.
There's some good resources to look if you're trying to get into nmigen.
Here's a 6502 written in Nmigen.
https://github.com/mmagm/m6502
I've hacked around with my EOS S3 board less than my other boards (mostly because if I need a CPU I'll just add a VexRiscv soft-core in a regular FPGA), but I can definitely see it's use case if you'd like to accelerate sections of your software without building the entire design on an FPGA.
Honestly I think it's maybe the best way to write new digital circuits today. I tried nMigen but it doesn't seem suited to write local in at all. It's easy to connect things together but actually writing something is a PITA.