Static Timing Analysis (STA) Flow:

Once we have converted RTL to netlist, it's time to run Timing analysis on gate level netlist. When we have RTL, there is no concept of gates or delay. RTL is modeled as zero delay, so there is no delay, and as such no setup or hold times to meet. However, once this RTL is converted to gates, we have real delays for these gates. In order for this netlist to behave the same as RTL, all paths need to meet timing.

Static Timing Analysis commonly known as STA is the flow where we run a timing tool that analyzes all paths and finds out f there is any setup/hold violation on any of these paths.

Tools:

There are STA software available from both cadence and synopsys as well in open source world. PrimeTime (PT) from Synopsys is considered the gold standard for STA. Cadence has it's own tool called Encounter Timing System aka ETS. These are the 2 timing tools that are used by almost all the companies to run STA. From open source side, we have Vesta written by Tim Edwards. There is also another open source STA called OpenTimer. We'll discuss about each of these tools separately in their own sections.

STA timing corners:

STA requires running design at various corners. Recall that a tarnsistor's delay depends on PVT (see in solid state devices section for more details).

We run timing on max, min and typ corners. We run both "setup" and "hold" runs across all 3 corners (typ corner is optional, and many times just running max and min corner suffices)

 

 

 

 

Raspberry 4:

This is the latest and most powerful raspberry pi, released in 2019. It's also known as Raspberry Pi 4B (there is no Raspberry Pi 4A). There are three current Raspberry Pi 4 models that are identical, except for the amount of RAM. Cheapest one at 2GB ram, next one at 4GB ram, and highest performing one at 8GB. Even the 2GB one is powerful enough to work as a desktop. 4GB version suffices for almost any application, as Raspbian OS is very memory efficient, and never exceeds 4GB even with bunch of tabs and processes running. It is powered by a new processor, the Broadcom BCM2711B0, which is built in 28nm, and is based on ARM Cortex-A72 core, instead of earlier ARM Cortex A53 core. it has 4 CPU and clock speed of 1.5GHz. It also has a GPU from Broadcom called VideoCore VI, running at 500MHz.

Installation:

To use Raspberry pi, you will need to raspbian as explained in previous "Raspberry" section. Then you install vncserveer for raspbian, so that you can work on the raspberry w/o having a monitor and keyboard. Once vncserver is running, you access raspberry pi using vncviewer from some other laptop. Now you can start working on this great little machine.

Getting started:

Open a terminal, and type "pinout" cmd. This gives info on all the pins on the header that can be used for our purpose.

Setup time  and Hold time:

Any logic you design from RTL, you will always hear about setup time and hold time, when running timing tools. Sequential elements such as flops and latches have setup and hold time requirements, in order to function correctly.Let's explore this important concept.

Origin of setup and hold time:

In broader terms, any circuit that stores value has a back to back inverter or some other back to back gates to hold the value. However such a circuit is not of much use, unless we can control the value that's stored in this back to back inverter. This is done via a signal to enable or disable the write, and another signal which transmits the value to be written into. This signal which enables or disables the write has a timing relation wrt to the signal that we are trying to write in. The value to be written in has to be stable around the time, the enable/disable signal changes, or else we may not store the desired value. This time window where we want our input signal to be stable is called setup time and hold time.

Setup time: The time before the enable signal that the input signal has to be stable

Hold time: The time after the enable signal that the input signal has to be stable

 The sum of "setup_time + hold_time" is the window where the input signal shouldn't change, or else the value stored in the seq element would be unpredictable.

This link does a superb job of explaining them:

https://www.edn.com/understanding-the-basics-of-setup-and-hold-time/

Setup and hold time in circuit paths:

We understand the setup/hold time of flops/latches, etc. But let's say we have a path from 1 flop to other flop. The 2nd flop can't have it's data change within it's setup/hold window.

Let's see a simple 2 bit counter. Violating setup time (too slow) or hold time (too fast) causes counter to have incorrect values as shown in the diagram.

Attach diagram FIXME

Eqn is:

That's why the 0 cycle path is called the hold timing for the path, as "hold time" of the capturing flop is involved in the eqn. Being a 0 cycle path, the freq of the clk has no impact on whether the path meets the "hold time". So, these paths are independent of freq.

Similarly 1 cycle path is called the setup timing for the path, as "setup time" of the capturing flop is involved in the eqn. Being a 1 cycle path, the freq of the clk will impact on whether the path meets the "setup time". So, these paths are dependent on freq, and setup time of the path can be fixed by relaxing the clk freq.

 

Timing Tools applying setup and hold time:

In PT and other timing tools, single cycle paths are easy to analyze. Usually paths are from flop to flop. So, most of the designs have 0 cycle hold paths and 1 cycle setup paths. When we have multiple clks with diff freq, then relationship gets more complex. Discuss MCP, and how setup/hold are calculated by timing tools

 

 

 

 

Deep Learning

Most of the material here is from Andrew Ng's AI course on couesera.org. It's called Deep Learning specialization. Even though it's called Deep Learning, it starts with basic concepts of AI, and then moves to ML, ANN and finally to CNN. It consists of 5 courses as outlined in link below:

https://www.coursera.org/specializations/deep-learning

The 5 courses in deep learning specialization are as follows:

Course 1: Neural Networks and Deep Learning: => Has 4 weeks worth of material, requiring about 20 hrs to complete.

Course 2: Hyperparameter tuning, Regularization and Optimization => Has 3 weeks worth of material, requiring about 18 hrs to complete.

Course 3: Structuring ML projects => Has 2 weeks worth of material, requiring about 5 hrs to complete.

Course 4: Convolutional Neural Networks (CNN) => Has 4 weeks worth of material, requiring about 20 hrs to complete. CNN is the most popular NN

Course 5: Sequence models => Has 3 weeks worth of material, requiring about 15 hrs to complete.

More AI related reserach and info is available on https://www.deeplearning.ai/

Before we go into the course work, we have to get prepared for doing exercises in Python. Without doing exercises and playing around, you will never get a feel of AI. AI is a very fast field, and we will never be able to learn even a little fraction of it, but whatever we learn, we should make sure we learn the basics well.

Installation of Python and various modules:

Below are some of the pgm you will need to install on your computer, before you can do any exercises on coursera. Ofcourse they have Jupyter Notebook for you to work in (Jupyter Notebook migrated to Coursera Lab environment starting Sept, 2020). Jupyter Notebook is an app that allows you to run python and many other pgm languages from within it. However, you may not be able to understand all bits and pieces of how things are working. Also, as these keep changing on Coursera website (i.e you are at the mercy of coursera on how long they continue with which app), I highly encourage you to install python and other needed modules on your local machine (running any Linux OS, I'm running it on CentOS 7), and do all the programming exercises locally. It'll be much more fun. I'm doing it locally myself, so will post all needed info below.

Python: Visit the section under Python programming. Install Python3 (python 3.6 as of July, 2020) as detailed in that section, and then install these other modules.

NumPy: Install NumPy package for python as detailed there, and go thru the basic tutorial

H5py: Install H5py package for python which is used to read data files in HDF5 format. This format is used for our exercises to store large amounts of data.

matplotlib: Install matplotlib module for python and go thru tutorials as explained in that section

PIL: Install Pillow module for python, which we'll use widely for reading images, as compared to matplotlib and scipy. See PIL/Pillow section.

Downloading various local functions and datasets:

There are many functions and datasets that you will see being imported in python pgms on coursera. You do not see them on main notebook page. One way to see all the files being used in python pgm is to go to Jupyter Notebook, and click on File->open on the top of the page. This will take you to a new page, which will show all the folders and files for that programming assignment. There is a "download" button on top, so download all the files that you need (one file at a time, if you try to download multiple files, the download button disappears)


 

 

Machine Learning (ML):

ML is a particular subset of AI. ML itself has many branches. One such particular algorithmic approach of machine learning is called artificial neural networks (ANN) which was loosely based on how human brains work. In this section, we'll learn very basic concepts of ML.