{"id":21341197,"url":"https://github.com/choaib-elmadi/fpga-programming-for-beginners","last_synced_at":"2026-01-02T23:05:53.903Z","repository":{"id":241633515,"uuid":"804908033","full_name":"Choaib-ELMADI/fpga-programming-for-beginners","owner":"Choaib-ELMADI","description":"A collection of notes, summaries, and projects based on the book \"FPGA Programming for Beginners\" by Frank Bruno.","archived":false,"fork":false,"pushed_at":"2024-08-25T11:55:00.000Z","size":31854,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-22T15:35:31.373Z","etag":null,"topics":["electronics","embedded","embedded-systems","fpga","fpga-board","fpga-programming","fpga-soc","systemverilog","verilog","vhdl"],"latest_commit_sha":null,"homepage":"","language":"Tcl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Choaib-ELMADI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-23T13:58:56.000Z","updated_at":"2024-11-22T11:44:43.000Z","dependencies_parsed_at":"2025-01-22T15:41:42.762Z","dependency_job_id":null,"html_url":"https://github.com/Choaib-ELMADI/fpga-programming-for-beginners","commit_stats":null,"previous_names":["choaib-elmadi/fpga-programming-for-beginners"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choaib-ELMADI%2Ffpga-programming-for-beginners","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choaib-ELMADI%2Ffpga-programming-for-beginners/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choaib-ELMADI%2Ffpga-programming-for-beginners/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choaib-ELMADI%2Ffpga-programming-for-beginners/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Choaib-ELMADI","download_url":"https://codeload.github.com/Choaib-ELMADI/fpga-programming-for-beginners/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243817896,"owners_count":20352626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electronics","embedded","embedded-systems","fpga","fpga-board","fpga-programming","fpga-soc","systemverilog","verilog","vhdl"],"created_at":"2024-11-22T00:55:38.695Z","updated_at":"2026-01-02T23:05:53.886Z","avatar_url":"https://github.com/Choaib-ELMADI.png","language":"Tcl","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Choaib ELMADI - FPGA](https://img.shields.io/badge/Choaib_ELMADI-FPGA-8800dd)](https://elmadichoaib.vercel.app) ![Status - Learning](https://img.shields.io/badge/Status-Learning-2bd729)\n\n# FPGA Programming for Beginners\n\nThis repository contains my notes and insights from reading the book \"FPGA Programming for Beginners\" by Frank Bruno. The book serves as an introductory guide to FPGA (Field-Programmable Gate Array) programming, and this repository will document my learning journey.\n\n\u003cdiv align=\"center\"\u003e\n\n![Basys3 FPGA Board](./Images/basys-3__3.png)\n\n\u003c/div\u003e\n\n## Contents\n\n- **FPGA-Programming-for-Beginners.pdf**: The original PDF file of the book.\n- **Docs**: A directory containing my chapter-by-chapter docs, summaries, and key takeaways.\n- **Notes**: A directory containing my notes and key takeaways.\n- **Exercises**: Solutions and explanations for the exercises provided in the book.\n- **Projects**: Any practical projects or examples I work on while following the book.\n\n## Goals\n\n- To gain a solid understanding of FPGA programming concepts and techniques.\n- To create a comprehensive set of notes and resources that can help others who are learning FPGA programming.\n- To document my progress and reflections as I go through the book.\n\n## Technical requirements\n\nUnlike programming languages, `SystemVerilog` is a _hardware description language (HDL)_, and to really see the fruits of your work in this book, you will need an FPGA board to load your designs into. The two recommended boards are:\n\n- Nexys A7\n- Basys 3 Artix-7\n\n## How to Use This Repository\n\n- **Reading the Book**: Start by downloading the PDF file `FPGA-Programming-for-Beginners.pdf` and follow along.\n- **Notes and Summaries**: Check the `Notes` directory for detailed notes and summaries of each chapter. These can be used as a quick reference or refresher.\n- **Exercises and Projects**: Explore the `Exercises` and `Projects` directories to see practical implementations and examples.\n\nFeel free to explore each folder to access the resources and projects provided.\n\n\u003cbr\u003e\n\n![What is an FPGA?](https://img.shields.io/badge/What_is_an_FPGA%3F-fb151a?style=for-the-badge)\n\nLet's say that you write some code:\n\n```python\ndef adder(a, b):\n    res = a + b\n    return res\n```\n\nThe way this code usually works is that it gets `compiled` into instructions that run on a `processor`.\n\nYou can write this code differently and it will get `synthesized` to effectively run on an `FPGA`.\n\n```verilog\nmodule adder (\n    input  wire [4:0] a,\n    input  wire [4:0] b,\n    output wire [4:0] y\n);\n    assign y = a + b;\n\nendmodule\n```\n\nThis kind of code is called: `Hardware Description Language (HDL)`.\n\n- **Synthesis** is the process of mapping this code into physical hardware blocks.\n\n- These hardware blocks are comprised completely of registers and logic gates.\n\n- Logic gates can be implemented using `look-up tables (LUT)`. So, using a bunch of programmable LUTs and a routing fabric -that can connect them all together-, and then allow the user to reprogram the LUTs to whatever he wants, you get a single device that can run whatever code we want. We call that device an **`FPGA`**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchoaib-elmadi%2Ffpga-programming-for-beginners","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchoaib-elmadi%2Ffpga-programming-for-beginners","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchoaib-elmadi%2Ffpga-programming-for-beginners/lists"}