Yes. Hamsterworks is a great resource. I learnt a fair bit from this site when I started with FPGAs. I'll add the archived version to my recommended resources page.
All that looks so fun! I'm in university right now and I have the means to do things - the uni provides an oscilloscope and a bunch of electronics free to use. I bought my own FPGA, but currently have no lecturers who know their way around them. I really want to do something cool with it, I've spent money on Udemy courses but everything is still so intimidating even after finishing them. I could at least interface with an i2c sensor. But man, even just a simple matrix multiplication module/architecture is beyond my means.
What should I do to learn so I can join in on making projects like in the FPGA Advent Calendar?
I think the key to learning FPGAs, as in most other languages, is to find a small project that really grabs you and blunder along with that until you've got something that works. Then you realise how you'd do it better and what you don't know and ...
For me and FPGA's it came out of a friend asking why you have 12 semitones in a scale, and what would happen if you had 13. The idea of a polyphonic synth with 13 semitones in a scale was born. That led to trying to understand clocks, dividers, metastability on inputs, synthesis for testing and test rigs, simple DAC and all sorts that I can't recall now.
And 13 semitones in a musical scale is a really dumb idea. A great way to twist the head of musician friends but dumb...
With FPGAs? It’s been a long time since college but I recall my FPGA experience being very much like programming once you realized all lines of code executed in parallel and “function” calls were just connecting wires. I don’t recall many issues. Maybe some things around synthesizability but I can’t recall anymore if this applied to FPGAs or just ASICs
The first half of Nand2Tetris is about synthesizing a small computer using a hardware definition language (HDL) that was invented for the book[0]. It's similar to Verilog.
It's true that creating a design in Verilog is similar to conventional programming, but looks are deceiving. While conventional software (in C, for example) is a series of sequential steps, Verilog has two types of statements: combinational, which combine inputs and outputs using boolean logic, and sequential, which are structures implemented by networks of flip-flops, and which are clocked and which act as memory elements. All the combinational statements take place "instantly", while all the sequential statements in the program are executed at the same time when the clock pulses. The clock causes the whole program to make a step and then re-evaluate the combinatorial statements in preparation for the next clock.
I suppose one could write Verilog code without any knowledge of electronics, and I imagine some programmers do that under the direction of engineers who do understand digital design.
The last halves of the two books I suggested teach digital design. I think it's necessary, at a minimum, to understand something about the possibilities, limitations, and conventional approaches before expecting to produce a useful FPGA design. You don't usually want to spend a lot of time re-implementing something in an FPGA that you could just buy from Mouser and which would be much cheaper and a lot faster.
Also, it's necessary to understand how to interface the FPGA to the real world, so a knowledge of digital design is required.
The first halves of those two books is about analog design, which is also useful when interfacing to real world sensors and actuators.
I found playing with ws2811 lights fun with an FPGA. I created a little double buffer in BRAM and was going to build an SPI interface to drive them via a Pi, which I need to get round to.
1. Recommended FPGA Sites: https://projectf.io/recommended-fpga-sites/
2. Project F: https://projectf.io/sitemap/
3. Project F GitHub: https://github.com/projf/projf-explore