FPGA & RISC-V Tutorials
Tutorials to get you started and improve your design skills. See also Recommended FPGA sites.
FPGA Graphics
Learn graphics at the hardware level and improve your FPGA design skills.
- Beginning FPGA Graphics - video signals and basic graphics
- Racing the Beam - simple demo effects with minimal logic
- FPGA Pong - recreate the classic arcade on an FPGA
- Display Signals - revisit display signals and meet colour palettes
- Hardware Sprites - fast, colourful graphics for games
- Framebuffers - bitmap graphics featuring Michelangelo’s David
- Lines and Triangles - drawing lines and triangles
- 2D Shapes - filled shapes and simple pictures
- Animated Shapes - animation and double-buffering
RISC-V Assembler
Get comfortable with RISC-V assembler.
- Arithmetic - load immediate (li, lui), addition (add, addi), and subtraction (sub)
- Logical - bitwise logical instructions, such as and, not, and xori
- Shift - shift instructions, such as sll, srl, and srai
- Load and Store - load and store instructions, such as lw, sw, and lbu
- Branch and Set - branch and set instructions, such as beq, bltu, bgez, and slt
- Jump and Function - jump instructions: jal and jalr, function calls, and RISC-V ABI
- Multiply and Divide - multiply and divide instructions, such as mul, mulh, and div
- Compiler Explorer - use Compiler Explorer to generate RISC-V assembly code
- Assembler Cheat Sheet - 32-bit RISC-V instruction reference, registers, and concepts
Hello FPGA
An introduction to FPGA development and Verilog with the Digilent Arty or Nexys Video boards.
- Part 1: Hello Arty 1 & Hello Nexys 1
- Part 2: Hello Arty 2 & Hello Nexys 2
- Part 3: Hello Arty 3
Maths and Algorithms
Learn about numbers and put maths to work in Verilog algorithms.
- Numbers in Verilog - introduction to numbers in Verilog
- Vectors and Arrays - working with Verilog vectors and arrays
- Multiplication with DSPs - efficient FPGA multiplication
- Fixed-Point Numbers - precision without complexity
- Division in Verilog - divided we stand
FPGA How To
Handy recipes for solving FPGA problems. See the Tools page for FPGA dev and testing tools.
Hardware & Devices
- SPRAM on iCE40 FPGA - use SPRAM with Yosys and compare it with Block RAM
- Memory Types - understand FPGA memory types, including BRAM, HBM, SRAM, and DRAM
- Initialize Memory in Verilog - use $readmemh and $readmemb to initialize RAM or ROM
- Video Timings: VGA, SVGA, 720p, 1080p - work with standard monitors and TVs
Maths
See the new Maths Tutorials for topics including vectors, fixed-point numbers, division, and DSPs.
- Sine & Cosine - lookup sine and cosine from ROM
- Square Root - calculate square roots for integers and fixed-point