script async='async' crossorigin='anonymous' src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6016566166623052'/> Verilog coding: What should be the best way to learn VLSI design

Tuesday, 11 April 2023

What should be the best way to learn VLSI design

 VLSI (Very Large Scale Integration) is a field of electronics that involves the design of integrated circuits by combining thousands of transistors into a single chip. If you're interested in pursuing a career in VLSI, you'll need to acquire a range of skills related to digital design, circuit analysis, and computer programming. In this blog post, we'll discuss three important skills that are essential for VLSI engineers: protocol/algorithm implementation, timing analysis, and scripting/UNIX basics.

As an aspiring VLSI engineer, I have come to appreciate the depth and breadth of this field. From RTL design and functional, physical, and timing verification to testing, DFT, synthesis, physical design, standard cell design, and much more, VLSI engineering is a vast and complex field with many interdependent and correlated topics.

To succeed in the field of ASIC and SoC design, there are a few fundamental skills you must possess. The following are the basic things that you must know to establish a strong foundation to be a successful VLSI engineer.

  1. Logic Design: Logic design is the single most important skill that you must possess as a VLSI engineer. It is the thinking process that underlies the programming of your idea. You must be able to design a module using a minimum number of gates, minimum power, and maximum performance. This step comes higher in the design hierarchy and affects the entire flow from thereon. Therefore, it is essential to have a strong grasp of your logic design concepts. Examples of logic design include FSM design, MUX-based design, flops-latches based design, sync-async design, among others. To learn logic design, take an interesting problem statement, come up with an optimized FSM design, and try to implement the same using a minimum of resources at the gate-level.

  2. HDL/RTL/HVL Coding: The industry requires you to code and code well. There is a difference between RTL coding and C-coding, where timing comes into play. Therefore, you must learn to code in either Verilog/VHDL (I learned Verilog). With RTL, you are expressing the logic design you came up with in step 1 using a hardware language. To learn RTL coding, start coding simple modules right away, express the module behavior in RTL, and the compiler will teach you the rest. Start writing simple testbenches to verify its logic/functional correctness. Then, later learn Synthesizable RTL Coding. One step further would be learning SV, UVM, RAL, SVA, etc. to write fully automated TBs. This is a vast field in itself. If you like coding, this is for you.

  3. CMOS Fundamentals: This is highly needed in backend design/physical design and full-custom circuit design/standard cell design. But having good MOS basics is always a bonus. It is a must-need for all R&D jobs. To learn CMOS fundamentals, start designing a simple circuit like an SRAM/DRAM block, and verify its timing and functional correctness using SPICE simulations.

  4. EDA Tools: Since almost the entire VLSI flow is automated using EDA tools, it is a must to gain expertise in handling them. I have learned Cadence Virtuoso, Synopsys ICC, DC, PT, etc. It is a must for almost all backend jobs. The tools are expensive, but if you are lucky to get an internship in a semiconductor company, it is even better.

  5. Computer Architecture/Microprocessor Basics: Almost all chips designed today are ASICs/SoCs. Therefore, you must understand how the CPU is organized and how the various parts work together. You will ultimately end up working on just a single block within the CPU, but having knowledge of many blocks will help you better understand the chip and ease integration. To learn computer architecture and microprocessor basics, first learn the basic theory, then try to design and implement a single CPU component, such as an ALU or a DMA controller. Take it through the entire flow from RTL->Netlist->PD.

  6. Protocol/Algorithm implementation: As a VLSI engineer, you'll be designing chips for specific applications such as image processors, networking processors, wireless chips, and more. Therefore, it's important to understand the common on-chip protocols and implement them on hardware like FPGA. One way to learn this is to take a simple crypto algorithm like RC6 and implement it on an FPGA. Another step would be to learn AMBA protocols like AHB, APB, AXI, etc.

  7. Timing Analysis: Timing Analysis is the backbone of VLSI design. It's important to understand clocks, metastability, STA (Static Timing Analysis), and analyzing a circuit for setup and hold violations, and ways to fix them. One way to learn timing analysis is to start with STA theory. Synopsys PT/ICC is needed to generate timing reports, analyze them, and later fix those violations. If you're interested in the backend flow of VLSI, working on STA could be a good option.

  8. Scripting & UNIX basics: Scripting is essential to automate routine tasks in both the frontend and backend flow of VLSI design. In frontend flow, Perl scripting is predominantly used for regression testing, register verification, etc. In the backend flow, Tcl scripting is used to execute various commands for PD (Physical Design). Learning basic UNIX commands is also crucial. You can start learning by checking out numerous online tutorials and writing simple scripts to execute routine tasks. It's also essential to leave Windows and start using UNIX as you must know the UNIX environment well.

  9. In conclusion, VLSI engineering is a highly specialized field that requires a range of skills from digital design to programming. This blog post has discussed three essential skills for VLSI engineers, but there are many more to learn. If you're interested in pursuing a career in VLSI, it's important to keep learning and updating your skills. If you have any questions, feel free to PM the author to know more                                                                                                                                    

    What is the best way to learn FPGA professionally?

    To begin with, it is advisable to have some knowledge of C programming. However, when it comes to HDL programming, it's better to have less knowledge of C programming so that you can learn faster. This is not to discourage C programmers from learning HDL successfully, but rather to acknowledge that the two methods of coding can be confusing, especially for beginners.

    Since you have a Spartan board, you can start with some demo codes and work your way up from there. Here's how to go about it:

    1. Start with basic input/output operations such as DIP switches to LEDs.
    2. Move on to smaller projects like blinking LEDs or scrolling LEDs, which use sequential and combo logic.
    3. Once you have a good grasp of timer, delay, and sequential with combo logics, move on to FSM logics for more advanced coding skills.

    Practical examples will help you learn the basics of HDL language more effectively, so it's best to focus on hands-on exercises rather than theory. You can find demo programs for your board and study how they work. Running simulations and observing the logic on every clock change is also a good way to learn.

    It's important to have a good understanding of digital electronics as well, and you can join forums like edaboard where you can get help from experts for free. For general learning, the Spartan board is sufficient. If you have a background in C programming, Verilog may be easier for you to learn. However, if you're new to programming, VHDL may be a better choice to help you become an excellent hardware engineer.

    In conclusion, keep practicing and don't be afraid to ask for help. Good luck on your HDL programming journey!

No comments:

Post a Comment