I stumbled upon this amazing resource from make_your_own_x github repo the ray_tracing_in_one_weekend. It is through enough to create a solid background even for begineers. For the longest time i have only been continously learning and not applying that knowlege to build something. There are lot of things involved in this that i will encounter for the first time so i will create a section wise readme.md file to retain and reflect back on what i have learned.
- Output an Image
- The vec3 class
- Rays, a simple camera and background
- Adding a sphere
- Surface Normals and Multiple Objects
- Moving Camera code into its own class
- Antialiasing
- Diffuse Materials
- Metal
- Dielectrics
- Potitionable Camera
- Defocus Blur
- Understand Verilog syntax, semantics, and procedural blocks.
- Design and simulate digital circuits using Verilog.
- Gain proficiency with tools like Icarus Verilog, ModelSim, and Xilinx Vivado.
- Build portfolio-worthy projects, such as a 4-bit counter and an 8-bit ALU.
- Apply Verilog to real-world applications, including FPGA implementation.
The learning path is divided into phases with specific objectives, tasks, and projects to ensure steady progress.
- Objective: Learn Verilog basics and digital design concepts.
- Tasks:
- Study digital logic (gates, flip-flops, FSMs) using HDLBits.
- Read "Verilog HDL" by Samir Palnitkar (Chapters 1-4).
- Learn Verilog syntax: modules, ports, data types, and operators.
- Practice simple Verilog code (e.g., AND gate, multiplexer) on HDLBits.
- Project: Design a 4-bit counter in Verilog using EDA Playground.
- Milestone: Simulate and verify the 4-bit counter with a testbench.
- Objective: Master procedural blocks and set up development tools.
- Tasks:
- Study Verilog procedural blocks (
initial,always,task,function) and control flow (if,case,for). - Install and configure Icarus Verilog and ModelSim for simulation.
- Explore Xilinx Vivado for FPGA synthesis and implementation.
- Practice coding combinational and sequential circuits (e.g., shift register).
- Study Verilog procedural blocks (
- Project: Implement a finite state machine (FSM) for a traffic light controller.
- Milestone: Verify the FSM with a testbench and simulate in ModelSim.
- Objective: Apply Verilog to complex designs and optimize circuits.
- Tasks:
- Learn advanced Verilog concepts: parameterized modules, generate statements.
- Study timing analysis and optimization techniques in Vivado.
- Build and simulate an 8-bit arithmetic logic unit (ALU).
- Join Verilog communities on X or forums like Stack Overflow for feedback.
- Project: Design an 8-bit ALU with operations (add, subtract, AND, OR).
- Milestone: Simulate the ALU and generate timing reports in Vivado.
- Objective: Deploy designs on FPGA and create a portfolio.
- Tasks:
- Implement the 8-bit ALU on an FPGA board using Xilinx Vivado.
- Learn testbench design for verification and debugging.
- Document projects with simulation waveforms, code, and reports.
- Share projects on GitHub and discuss in X communities or EDA forums.
- Project: Build a simple RISC-V processor core or a digital communication system.
- Milestone: Demonstrate the project on hardware and publish to GitHub.
- Websites:
- Tools:
- Replit environment Pretty cool environment for developemnt in c++. Refer to this youtube video to get started. It also has readymade c++ templates for the repl environment. The AI is very helpful for the initial seting up of things.
Contributions to enhance this learning plan are welcome! To contribute:
- Fork this repository.
- Create a new branch (
git checkout -b feature/your-feature). - Make changes and commit (
git commit -m "Add your feature"). - Push to the branch (
git push origin feature/your-feature). - Open a pull request.
Ensure contributions align with the plan’s structure and goals.
This learning plan is licensed under the MIT License.