
Learn to set up a Python interpreter and a free IDE by downloading Python 3.12.1 from python.org and installing PyCharm Community Edition from JetBrains, preparing your system for coding.
Install the Python interpreter and PyCharm IDE, create a new project, run a hello script, and begin preparing a verification environment for RTL verification.
Learn to print strings and variables in Python using print and the end parameter, explore concatenation versus comma separation, and compare print with logging for debugging on the console.
Compare print and logging for analyzing signal values in a Python verification environment, using a monitor to show a, b, and y, and logging for files and message filtering.
Import and use Python's logging library, explore levels: debug, info, warning, error, and critical, and learn how setLevel filters console output.
Configure Python logging for verification by using a custom format showing level name, component, message, and time, and apply format specifiers for decimal, octal, hexadecimal, and binary.
Log data to a file for large report sets by creating a file handle, using logging.Formatter, and attaching a file handler to the logger to store logs in data.txt.
Explore Python's dynamic typing, where variables infer integer, float, and complex types from values, without explicit declarations. Use type() to verify types for RTL verification.
Explore how Python stores single values in variables across data types like strings, integers, and booleans, and how quotes, comments, and printing work.
Practice Python fundamentals by declaring integer, float, and complex variables, printing values, and using strings to debug an RTL verification environment with generator, driver, monitor, and interface.
Explore boolean types for true and false in conditionals, and learn binary types for 8-bit data with bytes, bytearray, and memoryview, including declaring bytes with b'...', up to 255.
Explore 8-bit bytes, byte arrays, and memory view in Python fundamentals, including declaring byte sequences, hex formatting (ff), indexing updates, and sharing data across objects for RTL verification.
Drive a DUT with inputs A and B in a cocotb testbench to verify a simple half adder, where sum is A xor B and carry is A and B.
Explore Python arithmetic operators, including addition, subtraction, multiplication, division, floor division, modulo, and power, with demonstrations using 3+4 and 3/4 for verification and comparisons.
Explore two types of logical operators: boolean operators that yield true or false, and bitwise operators that depend on left and right values, including and, or, not, xor and shifts.
Explore how binary, octal, and hexadecimal values are represented and converted in Python. Use 0b and 0x prefixes with bin, int, oct, hex, and formatting to display accurate results.
Learn to use f-strings to format values in binary, octal, and hexadecimal with a defined bit width, controlling leading zeros and including MSB zeros.
Explore bitwise operators in Python, including and, or, xor, not, and left and right shifts, using binary values 1100 and 011, with f-string displaying 4-bit results and two's complement concepts.
Explore sign-magnitude versus complement representations, highlighting zero ambiguity and overflow issues, and learn why two's complement is preferred in digital design.
Understand one's complement and two's complement representations, including how to negate bits and add one. See how binary subtraction uses carries and how Python represents negative numbers with two's complement.
Explain left and right shift operators by two on values a and b, using 8-bit format to show bit positions, then introduce bitwise logical operators for RTL verification.
Learn the assignment operator and how it updates variables with arithmetic and bitwise operations, including a = a + 12 and a += 12, plus relational operators.
Explore Python's conditional loops—if, while, and for—and learn to implement a 2-to-1 multiplexer using an if-else block to choose Y between A and B based on select.
Demonstrate using an if-elif-else block to implement a 4-to-1 mux with inputs A, B, C, D and a two-bit select; use a default and declare y outside the block.
Explore Python fundamentals: use for loops for exact repetitions with range, compare with while loops, and learn else, break, and continue to control flow.
Learn break and continue in Python for loops, where break exits the loop on a condition and continue skips an iteration, influencing the running sum in a verification model.
Explore how to use a while loop in Python fundamentals, comparing it with a for loop, driving a sum over an array until the value 11 is reached.
Explore using an if statement to compare y with the sum of A and B, validate that y equals A+B, and mark tests as passed or failed against golden data.
Explore the while loop use case for a memory output flag, driving random address and d_in values until the full flag signals memory full, as preparation for cocotb testbenches.
Discover how to store a collection of data in Python using lists, tuples, sets, and dictionaries. Practice indexing, order, duplicates, and common methods like print and len in verification environments.
Discover how to update lists with append and insert in Python, where append adds at the end like a FIFO, and insert places at a specific index with length shifting.
Learn how to extend list_a with list_B in Python, appending an existing list to another, and compare extend with append and insert.
Learn how to manage list elements in Python with clear, remove, pop, and del; clear preserves the list while removing items, and del can remove the list or an element.
Learn how to convert between lists and tuples in Python, using list to tuple and tuple to list conversions, and verify types by printing.
Extend python tuples with concat to add elements. Repeat values with the asterisk; deleting a single item isn't allowed, delete the tuple with del, and use len to get length.
Learn how to slice tuples using the slicing operator to select values by index, with the start index included and the end index ignored, for example [0:2] and [2:].
Learn how negative indices in Python lists start from the end, using -1 to begin at the last element and -4 to reach earlier items, then apply slicing.
Explore how to access dictionary data in Python by using values, keys, and items, and learn to copy and clear dictionaries to manage contents.
Learn to access and remove dictionary items with get, pop, and popitem (which returns the last item), copy dictionaries, and compare del and clear methods.
Explore defining Python functions with def, using zero-argument calls, and distinguishing function objects from executed calls by calling with parentheses and understanding indentation.
Learn how to define functions with required and default arguments, accept strings and numbers, print combined messages, and handle multiple arguments and type concatenation in Python.
Explore how Python handles finite and indefinite function arguments using *args. Demonstrate that finite args yield specific types, while indefinite ones form a tuple.
Explore how to handle an arbitrary number of arguments in Python by iterating over an immutable tuple using length and range, and printing values with comma separation.
learn how to define a Python function that accepts a variable number of arguments and sums them, iterating over the arguments to return the total (demo yields 44).
Learn how a function can accept an arbitrary number of keyword arguments, producing a dictionary, and access its keys, values, and items with a for loop.
Explore the power of functions in Python for building a test bench and rtl verification, including how to define functions, pass arguments, print outputs, and nest function calls.
Learn how a Python function can return another function and how decorators enhance functionality without changing the original function, enabling advanced behavior through function references.
learn how to build and apply a decorator that wraps functions, prints start and end messages, and applies stimuli, logging, and failure reporting in cocotb.
Extend python with extensions to convert code into synthesizable rtl and support the entire asic design flow from specification to bitstream, using tools like PyRTL, Cocotb, PyUVM, PyVSC, and Yosys.
Install NumPy and Matplotlib extensions, import them in Python, generate sine wave data, and plot it with pyplot to create a 2D waveform.
Demonstrate generating a sine wave using numpy extensions and plotting with matplotlib by building time and amplitude arrays, then computing sin(x).
Learn how to generate random stimuli for a DUT using Python's random library, including random(), randint(), and looping for multiple values, plus seed, getstate, and setstate to reproduce exact sequences.
Explore generating random numbers with getrandbits, randrange, choice, and choices, including bit-size ranges, weighting, and using k to control list size.
In today's rapidly evolving landscape of Very Large Scale Integration (VLSI) engineering, proficiency in Python programming has become indispensable. This comprehensive course is meticulously crafted to empower VLSI engineers with the foundational skills necessary to navigate the complexities of modern VLSI design and verification processes. Python, renowned for its versatility and power, stands at the forefront of programming languages, offering a robust toolkit that aligns seamlessly with the unique demands of VLSI engineering.
The course is strategically designed to address the specific needs and challenges inherent in the VLSI domain. Participants will embark on a journey that not only introduces them to the fundamental principles of Python programming but also delves deeply into its tailored applications within VLSI design and verification. As technology continues to advance, Python has emerged as a linchpin in the VLSI engineer's toolkit, providing a flexible and efficient platform for addressing the intricate demands of Very Large Scale Integration.
Python's ascendancy in VLSI engineering is underscored by its ability to enhance productivity, automate routine tasks, and seamlessly integrate with existing hardware description languages (HDLs) and simulation tools. As the VLSI landscape continues to demand innovation and efficiency, this course serves as a crucial bridge, empowering engineers to harness the full potential of Python in their daily workflows.