ECO Flow in Synopsys Design Compiler (DC):

ECO can be done by using Synopsys DC to manually add/remove cells or wires by using DC cmds.

DC cmds for ECO:

In all of below cmds, we need to set current design using "current_design" cmd before running any of below cmds, since these cmds work on current design.

1. create_cell => Creates leaf or hierarchical cells in the current design or its subdesigns. The created cells are unplaced. To place them use "set_cell_location" cmd. cell can be removed by using cmd remove_cell.

ex: create_cell {mid1/cell1} my_lib/AND2 => creates a cell named cell1 under the subdesign corresponding to the mid1 cell. This new cell references lib cell my_lib/AND2. Ports on the reference determine the name, number, and direction of pins on the new cell. The actual reference library cell to be used is determined by the current link library settings (i.e not necessarily from my_lib). Reference cell is needed unless we are using "-logic 0" or "-logic 1"  which specifies cell is logic0 or logic1 cell (tie-off cells).

ex: create_cell eco121_inv [get_lib_cells */INV1_LVT] => creates leaf cell named "eco121_inv" which references INV1_LVT

2. create_net => Creates nets in the current design or its subdesign.

ex: create_net {eco121_net1 eco121_net2} => creates these 2 nets. By default, it creates signal net. To create power or ground net, use option -power or -ground

3. create_port => Creates ports in the current design or its subdesign. Default direction for port is "in" or input port (possible values are in, out, inout)

ex: create_port -direction "out" {A1 A2 A3 A4} => creates 4 o/p ports

4. disconnect_net => it breaks the connections between a net or a net instance and its pins or ports. The net, pins, and ports are not removed.

ex: disconnect_net NET0 [get_pins U1/A] => Disconnectes net 'NET0' from pin 'U1/A'.

ex: disconnect_net MY_NET_1 -all => -all option causes all pins and ports connected to this net to be disconnected.

5. connect_net => Connects the specified net to the specified pins or ports. There are 2 rules for connect_net cmd to work:

  1. Connection can't be done across hierarchical bdry. The net can be at any level of hierarchy (by providing full hier of the net) but the pins or ports must be at the same level.Since ports are only at top level, that implies that to connect to ports, your net has to be at top level.
  2. You can't connect net to a pin/port that is already connected. I believe this is because the net will get connected to another net with different name, i.e same net with 2 different names. You should first disconnect existing net from the pin/port, and then connect to your new net. NOTE: A net can be connected to many pins or ports; however, you cannot connect a pin or port to more than one net.

syntax: connect_net  <net_name> <pins_or_ports_list>

ex: connect_net  [get_net net_eco1] [get_pin eco1_and_gate/A*] => connects net to i/p pins (A1 and A2) of and gate

6. connect_pin => Connects pins or ports at any level of hierarchy. This cmd can punch thru ports automatically across hier (make new ports and nets in submodules if needed), so useful since "connect_pin" cmd doesn't allow the pin or port to be at different hier. New nets are created to make connections. Name of new net is name of connecting port or new name is generated.

NOTE: This cmd is avilable in DC, but NOT in PT.

ex: connect_pin -from [get_pins U1/Z] -to [get_pins mid1/bot1/U3/A] => connects specified pins.

ex: connect_pin -from [get_pins U1/Z] -to [get_pins mod1/U2/A]  -port_name mod1_port1 => creates a port named mod1_port1 on "mod1" module, and connects the o/p and i/p pins they this port

 

ECO flow:

Above 6 cmds used extensively during ECO process. To view and make sure that all connections are as intended, we can use following cmds to help us view connections:

Finding all connections on a net => To display pins and ports on a net, use either the all_connected or get_nets -of $net command. This is needed when doing connect/disconnect nets for an eco, as many times it's not easy to see all the places the net is connected to. So, connect/disconnect cmds may leave nets in incorrect state. "report_net -connections" and "report_cell -connections" are also useful cmds to view connections.

Finding pins/nets of objects => Sometimes, we may not want to put exact net name connected to pin of a gate in eco script, as name of that net may be prone to change from netlist to netlist. Also, sometimes it may just be too time consuming trying to find net name connected to some cell by tracing the netlist. In such cases, it's easier to use get_net cmd with -of_objects option, i.e "get_net -of_objects mod1/cell1/A1". This will give the net name correctly all the times, so can be used in eco.tcl script below, instead of using "get_net mod1/net1".

Below is a sample of cmds that can be added to a tcl file to be sourced in DC.

ex: eco.tcl: Adds an inverter to flop i/p

current_design mod1
create_cell         eco_inv_I0 [get_lib_cells */INV_D1]
create_net         eco_net1_bar


connect_net      [get_net -of [get_pin my_reg/D]]   [get_pin eco_inv_I0/A] #connect net from i/p pin of flop to i/p pin of new inverter

disconnect_net  [get_net -of [get_pin my_reg/D]]  [get_pin my_reg/D]      #now disconnect net from i/p pin of flop. Thus D pin to net connection is broken. This disconnect needs to come to come after connect cmd above, order can't be reversed.
connect_net      [get_net eco_net1_bar]         [get_pin eco_inv_I0/Y]        #connect o/p pin of new inverter to new net
connect_net      [get_net eco_net1_bar]         [get_pin my_reg/D]            #now connect this new net to i/p pin of flop

 

ECO = Engineering Change Order

ECO is a common term used in Engineering. It refers to documentation process for any design changes made to an existing design to fix a bug. These design changes are usually small, so we make localized changes and document these. It's used in vlsi a lot, since early chips mostly have design bugs, which can only be fixed by making changes to the design. The issue is identified, fix proposed, then it's implemented and new design released. This is all documented as an ECO.

When we need to fix a vlsi design, we basically insert/delete gates or change wires. This alters the mask for metal layers or base layers. ECO is the process of minimizing those changes in mask, so that we don't make too many changes to mask set. If we have to make too many changes, then there's no benefit of doing an ECO. In such cases, we should start design from step 1 instead of marking changes as ECO.

The initial design for any project is named as 1p0 or A0 design. We release the mask set for this to fab, and get the fabricated chip. If the chip comes back with bugs, we try to find out if those bugs can be fixed by just changing metal masks (instead of changing base layer mask too). If we can fix bugs by just changing metal masks, it's less costly both in terms of time and money. This new design with only metal mask changes is usually called as 1p1, 1p2 or A1, A2 etc. However, if the changes are more complex, we may need to make changes to base layer masks too. This new design with base layer mask changes are usually called 2p0, 2p1 or B0, C0, etc. Thus A, B, C refers to major design changes involving base mask, while B1, B2, B3 etc refer to minor design changes involving metal mask only.

If the change can be done by changing metal layers only, then it's called "metal eco", while if it involves base mask changes, then it's called "all layer eco". so, "metal eco" are minor revisions as B1, B2, etc, while "all layer eco" are major revision as A0, B0, C0, etc.

ECO type: pre-mask vs post-mask: ECO can be of 2 types based on when the change is made in design:

1. pre-mask => premask is when mask isn't ready yet, i.e for making very small changes while the design is still not taped out. Here, no masks have been ordered. So we can make any change we want. However, we do not want to run the entire design from step 1, since we may have fixed a lot of issues manually in the design, and ripping the whole design to fix some minor issues is prohibitive in terms of cost and time. So, we put the design in pre-mask eco mode, which says that the changes will be localized to affected areas only, so do not disrupt the whole design. Keep changes as small as possible. Here we can change both metal layer as well as base layer. So we are allowed to make complex design changes here, as we have the flexibility to change any gate or wire. We use the term pre-mask to mean that base layer changes are allowed in design. So, an "all layer eco" is basically called pre-mask eco, even though mask may have already been released.

2. postmask => postmask is for making changes after the mask has been released. We find out late that their is a bug in design. In such cases, we make metal mask and/or base layer mask changes. We need base layer mask changes when the changes are extensive and more complex. These get classified as pre-mask eco, even though they are post-mask. However, if the changes are small and can be implemented by changing metal layers only, we call it "metal eco". This is what is usually referred to as "post mask". For postmask eco, spare cells are used (as it's metal only), while for premask, new cells are added or existing cells modified.

 

ECO type: Functional vs Non-Functional: ECO can be of 2 types based on what kind of change is involved:


1. Functional ECO: change the functionality of the design. i.e when an and gate is added to some logic path, that is a Functional ECO.


2. Non-Functional ECO: does NOT change the functionality of the design, but deal with timing, design rule or signal integrity. i.e when a wire is moved to make extra spacing, it's a Non-Functional ECO.

 

Both Synopsys and Cadence tools support ECO flow, so that changes can be easily made from within the tools.

For Cadence, Conformal tool is usually used for making ECO, while for Synopsys, Design Compiler (DC) tool is used.

 

 

 

Movies, Shows and TV channels

This section deals with Indian movies, shows, channels that you can avail of in USA. It also lists American shows, channels, movies that may be worth your time.To watch American movies/shows is really easy as too many options are available (listed below). Watching Indian movies/shows is little bit of work and costs a bit more.

Indian Movies/Shows: One of the first things, Indian look for in USA is watching Indian shows and movies. You can watch almost all Indian channels (i.e StarPlus, Zee, Sony, etc) here is USA, via a lot of companies. Below are some options:

1. Dish network (www.dishnetwork.com): This used to be the only provider of Indian channels for a long time. They provide you service via satellite (so you need an antenna on the rooftop). Their service is good. However they are expensive and cost you around $50/month. Definitely avoid it. I had been a dish network customer for 15 years, but recently ditched it, as there are a lot of low cost providers available. You can always call them, and tell them that you are cancelling service. To keep you they will offer you a lower price, but even with that, they are definitely expensive.

2. Sling (www.sling.com/international/desi-tv/hindi): This company is very popular, and provides Indian channels via your internet connection (streaming service). Service is good and I've never seen any interruption. It's also expensive at $60/month for Hindi gold package, which includes all channels. However, they allow you to watch on 3 TV simultaneously, so 3 people can share the same account, and bill will drop down to $20/month for each user. You need a roku player to connect to your tv depending on how old your tv is (if your tv isn't smart and hence has no wifi adapter on it + no sling app on it, then you need roku player, which can be had for $30 or less). You may not need a roku player if you have a TV which is smart (i.e which allows you to download different apps as sling, etc). Generally TVs since 2015 may not need roku player.

3. IPTV Providers: There are lot of IPTV providers whose concept is same as sling TV, but they offer you services at fraction of price. They usually cost < $300 for 5 year subscription. Comes out to $5/month, which is the cheapest streaming that you can get. There are 100's of them tageting indian customers. They have bunch of Indian movies, shows, series.They also have all channels as ZEE, Sony, Star. They also have English shows, movies. in their video section (most of them 1080p), with new ones being added weekly. So, you can watch almost all high quality Indian movies for no extra charge. The amount of content is huge. Tough all of these IPTV providers advertise their content as being superior to other, I believe they all come from same source, so their content and quality is mostly similar. Some provide their own Boxes (i.e Streaming box similar to Amazon Fire stick) or will ask you to install an app, thru which you connect to their services. Boxes provide better experience as they automatically connect. The ones with app may sometimes not connect at all.  Below are few popular ones that I've tried. Always go for 5 year plan, as they are the cheapest. If you ask them, they will gladly give you 6 months extra for free.

  1. boxiptv (www.boxiptv.xyz): They charge $270 for 5 year subscription. Comes out to $5/month, which is the one of the cheapest. They provide you both options => one with box and one without. The one w/o box costs $220 for 5 years. They allow you to stream on only 1 device with one box. For the non-box option, I'm not sure.They charge you in canadian dollars, so depending on your credit card, there may be a currency conversion fee (so use a credit card, which doesn't charge you any conversion fee). Their service is good, and interface for finding movies, shows etc was also pretty intuitive. I had them for 5 years. The only issue I found was that the streaming was laggy, and would get stuck every minute. After some investigation, it turned out that the streaming box provided by them doesn't have good pickup for routers placed at more than 10 ft apart. So, once I placed the router very close to their streaming box, I never had any lagging issue. Or even better, if you have ethernet port close by, connect the box to the ethernet port directly using a ethernet cable. That gets rid of most of the lagging issues.
  2. Rahuliptv (https://www.rahuliptv.com/): They are app based (no box). You have to download 3rd party app  "IPTV Smarters Pro" and it may not be free depending on the device. Their downlaod may also be convoluted, as the app doesn't appear for direct install. You have to download "Downloader" app, and then download some files to get the app. So you are really at the mercy of some unknown 3rd party app. Their prices are the lowest with 5 year plan for $225. I've tried their for a few months, and looks good. They allow to stream on up to 2 devices which is convenient. However, they have no customer service number or no o
    1. UPDATE 02/20/2025: 
  3. towniptv (https://www.towniptve.com/): NOTE: the webaddr has a e in end i. it's "towniptve". I haven't tried this service, but looks very similar to boxiptv. They charge $340 for 5 years, which is more expensive than boxiptv. But it never hurts to ask them to match.
  4. Misc: I keep getting phone calls from bunch of iptv providers for Indian channels. I don't know how they get my number, but they all have similar prices and hard to know whom to trust. Because once you pay the money, there's no way to recover that. They all use third party payment processors who charge extra 3% for processing. So, always use a "Chase Credit card", as Chase will cover you even after 1st 3 months. And always go for short term contract, even though it may be more expensive. These iptv providers may disappear any time.

I haven't found a cheap source of watching Indian movies. boxiptv above has bunch of Indian movies, which you can definitely watch if you get their service. So far, netflix and amazon prime also offer limited movies, but they cost more. You will be surprised to know that youtube has lots of "Full Length Indian movies" with good quality, which are absolutely free to watch.

4. Large Streaming Companies:
You will hear a lot of marketing material on how everyone needs a netflix and amazon streaming services. There are also Disney, HBO, and many others that offer their original content. All of them are very expensive (costing >$100/yr). All of them have very limited selection of Indian movies/shows. IPTV providers provide a lot of their content, so if you go with IPTV providers, you have no reason to get netflix, etc.

  1. Netflix (www.netflix.com): They have a huge selection of American movies, and about 500 or so Indian movies. Though their selection of Indian movies is not that great, they have their own produced Indian shows, documentaries, etc which are quite good. It costs around $15/month to watch on 2 TV simultaneously. So, if 2 people share it, the cost would be $8/month. You can buy discounted netflix giftcards once in a while from Bestbuy, Walgreens, etc at 20% off. Then apply those to your account and you could save 20% or more on your bills. Since netflix goes month to month, and they have free monthly trial, you might want to get netflix free trial every year, watch all the movies/shows for free, and repeat the same next year. Really no need to pay $200/year for it.
  2. Amazon (www.amazon.com): If you are amazon prime member, amazon movies is included in your subscription at no extra cost. They have even limited selection than netflix, but may be worth it for free. I would n't go and pay for this service, as you can find all the content of amazon on other subscription service (i.e on youtube, iptv, etc)

 


 

American Movies/shows: American channels (i.e ABC, FOX, etc) can be watched directly on TV by having an HD Antenna. Or also via apps if you have smart TV. They show a lot of Hollywood movies, shows, news, etc. American movies can also be watched via netlix or amazon. However, none of the latest release are available. For that you will have to go to a movie theatre. If you can wait a little longer (usually a month or two), you can watch them on DVDs.

1. redbox (www.redbox.com): They have stand alone redbox kisok outside/inside major grocery stores (kroger, walmart, etc), drug stores (walgreens, CVS, etc) and many other places. Most of the times they have coupon code for free rental. If you have Tmobile Tuesday app (by being a customer of T-mobile cellular services), about once a month, they send you such code. Also, if you sign up for their emails on their website, they will send you such codes. From time to time, you can find such codes on slickdeals.net (just search for redbox). I have never paid a single cent for renting movies on redbox, and have already watched 100 or so movies via them. Be careful with the return of the DVD though. You have until 9pm (local time) next day to return a DVD. If you miss that deadline, you have to pay next day rental which is expensive at $2/day. That is where Redbox makes most of the money.

2. Libraries: All local libraries in USA are free to join. They have huge selection of movies. If you are in one of the big cities or suburbs, you can get almost any popular movie which is more than 6 months old. They also keep a decent selection of Indian movies. This is your cheapest source for watching free movies.

3. Misc: Netflix, amazon, HBOMax, and many other streaming services provide a lot of movies and shows for a fixed monthly price. They make their own movies and shows and show it only on their platform to subscribers who pay for thier service. They charge monthly subscription fee of $10-$15 per month. However, there is no annual contarct, so you can get out at any time. What I do is to cancel the service after a couple of months, when I'm done watching all their good shows/movies. Then after a year or so, you may join again, if you see they have gotten any new shows/movies that are of interest to you. One word of caution is that these companies keep on removing their popular shows/movies from their services every month, and the one of the reason may be to force people to stay with the service long term. More info about these is in "Other Movies and shows" subsection.

 


 

Movie Websites:

Below are some of the best resources for finding everything about the movies:

IMDB: IMDB (Internet Movie Data Base) is the most comprehensive website for finding details on any movie. If you need to look for any movie mentioned below, search it on imdb and match it with year and director as there are usually multiple movies with the same name. You should be able to find both Hollywood and Bollywood movies here.

Wikipedia is other very good resource for almost anything.

Rotten Tomatoes: This website has gotten very popular recently as it relies on people's vote and critic's vote to get the rating.

More categories under entertainment show popular bollywood and hollywood movies. I've also listed cheap theaters available around USA.I'll add more sections as I find more material.

 


 

Chip design - clock tree

Clock is the most important signal in a chip. It runs all the synchronous elements in design, and is running all the time. It consumes about 30% of chip power, so it's important to design it efficiently.

In an ideal world, we want clk to all the sequential elements to reach at the same time. That's called an ideal clock. However, in reality, clock needs to go thru multiple drivers before reaching the seq flops, and we need multiple drivers to drive 1000's of flops on chip. The goal of any clock design is to meet setup and hold timing for all paths, with minimal use of logic gates. There are 2 strategies for designing clock:

1. clock tree: In this kind of design, clk is built as a tree. So, we start with clk originating point in the center of chip, and then make branches and sub branches (as in a tree). The delay from clk starting point to final clk endpoint which drives the flop, has to be the same for all diff flops on chip, in order to get as close to an ideal clk. The difference in timing b/w different end points of clk is called skew. Ideally we want 0 skew. By minimizing skew, we can make clks as ideal as possible, and that requires fewer gates to fix setup/hold violations in paths. This design is the one that is used in most of the chips and SOCs being built today, as these consume low power.

2. clock mesh: In this kind of design, clk is still built as tree, but the leaf driver of each branch is then connected to other leaf drivers thru a mesh of wires. This mesh is similar to power grid where you have X and Y wires running in different layers. Here there is additional clock mesh connecting all final driver output. The advantage of this scheme is that now the skew is minimized even further, since 2 leaf drivers o/p are connected, so they will rise/fall at same time. The only little skew comes from this final clk point which is input port to the module to the final clk load being driven inside the module. However, this huge skew minimizations comes at large power cost, since now we have a large grid that is being driven by clk drivers all the time. For very high speed designs (i.e couple of GHz clk speed), clock mesh is preferred. Clock mesh is still used in multi GHz processor design at Intel/AMD.

 

Clk tree design:

First Question is => on which nets to build clk tree? For this, we use 2 SDC cmds => create_clock and create_generated_clock. Those are used as root points and clks starting from those point on are treated as clks, until they hit a sink point 9i.e clk pin of flop). For generated clk, the path is traced backward to the master clk, and all such possible paths are treated as clk trees.

Below are few rules which are adhered to in building clk tree:

1. Cells used for clk tree are specifically designed to be used for clk tree, i.e you can't use regular inverters and buffers used in design for clk tree as they may not have same rise/fall time, or they may not be designed for continuous switching, etc. These clk cells are usually called CK* (i.e CLKBUF, CKINV, etc). These clk cells have lots of vias in their layout to have better current flow, and also to mitigate IR drop and to have low Electromigration effect.

2. Clk tree cells should be of same VT type, i.e if using LVT cells, use LVT for all cells on clk tree. Different VT types don't track each other well (i.e their coorelation may not be good), so clk tree built using diff VT types may not show up real silicon variations in simulations, resulting in broken chip. Usually LVT cells used on clk tree for good clk slew (see bullet 7 below).

3. For very high freq clks, we use even more special clk cells which have inbuilt DeCap (Decoupling Capacitor) on supply lines to reduce Voltage variations on these cells. These cells are usually named DCCK*, and are used for clks > 1GHz freq.

4. Mix of buffers and inverters is not recommended on clk tree. This is again due to the fact that buffers and inverters may not track each other at different PVT corners. Usually only inverters used.

5. All clk routes should be shielded so that they don't get any cross talk or noise from neighboring routes. Shielding is provided by running VDD or VSS lines parallel to these clk routed lines. Also clk routes are made thicker (double wide), so that their resistance and process variation is low. Places where it's not possible to have VDD/VSS lines, metal fills should be used, so that we have uniform clk skew for all clk routes. Also lots of vias should be used on clk routes to mitigate IR drop and have low Electro Migration (EM) effect.

6. Clk routes should be placed under chip bumps. This is because a lot of current flows thru the chip bumps, and it can cause noise on these clk routes, resulting in un accounted delay or crosstalk. Cross talk on clk nets shouldn't exceed a certain threshold, usually 24%.

7. Clk slew (rise or fall transition time) should be low, so that we have crisp edges for clk waveforms. Usually we try to keep slew to be less than 1/10 of cycle time. this requires having large drivers with low fanout on the output of drivers. We still try to get to as large of a fanout as possible without degrading the slew rate too much. In the past for tech > 90nm, HVT cells were used exclusively as clk cells. They provided good enough slew rate and were less leaky. As tech progressed towards < 3nm, these HVT cells started getting replaced by LVT and eventually by ULVT cells. Reason is that power supply voltage are dropping to < 0.5V for low nm tech, and HVT cells don't have very crisp slew rate due to very low voltage headroom (Vgs - Vth). Here, LVT cells are more commonly used on clk tree path. Even though they may be more leaky than High VT cells, the provide crisp edges at these low voltages. If we use High VT. then we may have to provide more buffers to maintain crisp edge edge. This may eventually cause High VT to consume more dynamic power than Low VT cells, even though they leak less. In clock tree path, we are more concerned about dynamic power than leakage power, since cells on clock tree are switching most of the times. So, LVT or ULVT cells are OK to use to clk cells. 

Clock uncertainty:

Clock period is usually defined as a fixed number, let's say period=100MHz or period=10ns. However, if you look at 1000's of such successive clk waveforms, not each clk waveform period will be exactly 10ns. Some will be 9.9ns, while some may be 10.1ns and so on. You can view clk period as a gaussian curve whose mean is at 10ns, but sigma is around 0.1ns or so. The middle edge of the clk (i.e half period of the clk) also has uncertainty, just like the other edges. This variation from clock to clock edges across millions of clk cycles is called clk uncertainty. It can be from rise to rise edge (for full cycle) or rise to fall edge (for half cycle) or vice-versa. Uncertainty in middle edge of clk hurts more, since those are mostly half cycle paths (which have half the time to meet timing) and accounting for uncertainty leaves us with even less time to meet timing for that path. We have to account for this uncertainty in our timing runs, as worst case setup timing must now be smallest clk waveform that can be formed with these uncertainties. There is no way that any timing tool has any knowledge of such clk deviation as it assumes ideal clk coming in that we specify the freq for.

There are several sources of clk uncertainty:

1. jitter: jitter is the moving of clk edge due to clk generator ckt, noise, power supply variations, temperature variations, interference from nearby ckt, etc. It's the main component of clk uncertainty, and most of the times, people refer to jitter and clk uncertainty as the same thing. However, jitter is not the only component of clk uncertainty, though it's the major one. jitter is usually found from sims and may be expressed as Δt per mv of power supply variation.

There's a short article on various clk jitter terms here: https://vlsi.pro/clock-jitter/

RMS jitter: average value of of clock period deviation over the selected number of cycles (usually a very large number of cycles are considered)

Peak to peak jitter: difference between maximum deviation & minimum deviation within the selected number of cycles (usually a very large number of cycles are considered)

Above jitter values are calculated over all clock cycles, i.e the 1st clock cycle or the 1000th clock cycle. This is known as the clock period jitter and is the most common way of reporting jitter. Sometimes we are also interested in the cycle to cycle jitter, which is the deviation in cycle of of two adjacent clock cycles over a random number of clock cycles (usually a very large number of cycles are considered). This jitter value can be calculated for both RMS jitter or Peak to peak jitter. This value is useful in DDR and other very fast GHz clks.

Total jitter includes two components:

  • Bounded (or deterministic) jitter (DJ) => Deterministic jitter is a predictable and repeatable behavior which can be expressed as a peak-to-peak value. Deterministic jitter can be of 2 types:
    • data dependent jitter => It's correlated to the data stream. There are 2 types of data dependent jitter:
      • duty-cycle dependent jitter (also known as duty-cycle distortion or DCD) =>
      • Inter Symbol Interference (ISI) =>
    • bounded uncorrelated jitter (BUJ) => It's uncorrelated to the data stream. It's least understood in jitter family. It is considered “uncorrelated” since it’s statistically not possible to correlate it with other parts of the system. BUJ is caused by system phenomena, though. An example of BUJ would be noise inside a chip caused by sources external to the chip, be it power-rail ripple or RF interference. A number of tools are available to help model crosstalk and identify aggressor signals, but causes of BUJ are generally outside of the designer’s control.
    • Periodic jitter (PJ) =>
  • Unbounded (or random) jitter (RJ) => Random jitter is the unbounded jitter part of Total jitter, usually expressed as Rms value. It's not expressed as peak to peak value, as peak to peak is unbounded (can be infinite). It is mainly caused by unpredictible thermal noise, flicker noise or shot noise. These are all studied in device physics. Random jitter typically follows a normal distribution (gaussian curve). Since Total jitter plot of any clock shows a gaussian distribution, that implies that RJ is the main component of total jitter.

NOTE: Jitter is due to variations occurring due to different time of the edges, i.e starting edge of clk may see a different voltage, temperature, etc than the next edge of clk. So, this will cause jitter and will need to be accounted for in timing runs, since now the full cycle cycle may not be available for the paths due to jitter component. So, all full cycle setup timing runs need to consider this jitter in the clk path since the launch and capture are 2 different edges. However, full cycle hold timing runs don't consider this jitter, since both the launch and capture clk are on same edge and occur at almost same time. However, if one of the launch or capture clk is too much skewed wrt the other capture or launch path so that they are shifted in time too much, then we'll need to consider jitter in hold path too. In timing tools, we can specify clk certainty for both setup and hold (usually jitter component is removed from hold clk uncertainty). However, jitter is considered for both setup and hold for half cycle paths, since they are time shifted.

When we calculate jitter for a clock path, we separate it out in 2 components:

  1. Source jitter: This is the jitter coming from PLL or clk source. For a 24MHz oscillator, it may be something like 3ps/mV. PLL may add it's own jitter to this clk. So, for a PLL clk with freq of 1GHz, jitter may be 25ps (which is 2.5% of 1ns cycle time).
  2. Network jitter: This jitter is extra jitter added in clock network, where the clk is getting routed. This jitter is caused due to clk network supply voltage and temperature fluctuations. 5% power supply noise very common on chips with < 1V power supply, and having varying IR drops. This can easily cause jitter of 50ps or so.

Total jitter = √ (jitterpll2 + jitterstage12 + jitterstage22 + ... jitterstageN2) where N is the number of stages in clk tree. jitter per stage is usually provided in a tabular form from running sims, and may be 5ps/stage or something like that. So, more the number of stages in clk tree, more the jitter.

2. DCD (duty cycle distortion): This is applicable for half cycle paths only, so DCD doesn't contribute anything for full cycle paths. As mentioned above, DCD is actually "data dependednt deterministic jitter". This also has 2 components:

  1. Source DCD: This is the DCD coming from PLL or clk source
  2. Network DCD: This DCD is extra DCD added in clock network, due to clk network supply voltage and temperature fluctuations. Network structural (mean) and variation (sigma) DCD are now handled natively in timing tools as PrimeTime.

3. Convergence uncertainties: These are NOT real uncertainty caused by devices. Here we model some other effect of clock as uncertainty, when we do not know the impact of such effect. As an ex, consider Synthesis stage of design, where we are optimizing circuit. In synthesis stage, clock tree is assumed to be ideal (as clock tree is not built during synthesis, but during PnR stage). However, we do know that there we will be some skew b/w different end points of clk. To model this skew, we set clk uncertainty equal to an educated guess for skew. That way, the logic gets optimized with that clk uncertainty, so that later in PnR stage, we do not get too many timing violations due to skew. So, here we modeled skew as "clk uncertainty", even though it's not a component of clk uncertainty. In PnR stage, the real skew gets added for each and every path, so there is no need to add this skew as clk uncertainty in that stage. Similarly clk ocv (on chip variation) and clk xtalk (cross talk) are also modeled as clk uncertainty during synthesis stage, so that sythesis stage sees clk uncertainty as close as possible to what will be seen after CTS build in PnR stage.

NOTE: clk uncertainty may be different for different clocks, depending on their PLL source, network and other effects unique to each clk.

Derate: There may still be unaccounted jitter and DCD in clk path. To model for this, we add a derating factor, which basically worsens jitter and DCD by a given percentage. This provides us extra margin in simulations, incase silicon shows extra jitter and DCD than what sims showed.

set_clock_uncertainty: All of the clock uncertainty above are summed up and provided as a single number to the timing tool via "set_clock_uncertainty" cmd. More details on this cmd are in "PT- clock command" section.

 

Clock Tree construction:

Clock tree construction is done during the backend PnR stage. It's not done during synthesis, as we assume ideal clk during synthesis. It's done during PnR, as clk tree construction needs placement information of all cells, to come up with optimal clk tree. Clk tree construction is also called CTS (Clk Tree Synthesis). Imp parameters for any clk tree are jitter, DCD, slew and skew.

We'll look at CTS in more detail under PnR section.

 


 

Housing in USA:

This section deals with housing in USA, whether you are renting or live in your owned house. It deals with all housing issues: buying, selling, renting, mortgage, utility bills,  etc. But before we get in the details, let's take a look at some basic housing stats in USA. Just like all other USA stats, housing stats before 1980 are useless, as gold standard was abolished in early 1980, which allowed government to print infinite money. This ability to print and dump infinite money in markets, allowed assets to be priced differently. Housing is no different.

Basic housing stats from year 2018:

There are 132 Million housing units (house, apartment, or any separate living quarter), which is 20% more than the number of households (which is 112M as shown in basic facts section). As per 2009 AHS survey on HUD website, There are 130 Million residential housing units in the U.S.of which only 86 percent are occupied.

That implies 112 Million units were occupied, which matches closely to the number of households. Of these 112M occupied units, 76M were owner occupied and 36M were rented. Of the remaining 19M that were not occupied, 5M were for rent/sale (of these 1M were already rented or sold, but no one had moved in yet), 2M were for sale only, 5M were seasonal homes and 7M were others (foreclosures, etc). So, in essence, most of these vacant housing units are the ones that are in flux, where someone has moved out or is going to move in.

Of 132M housing units, 83M units are single detached houses, 7M are attached houses (as townhomes), 9M are condo, 1M are co-ops, 9M are manufactured or mobile homes, and remaining 23M are apartments. Since 36M units are rented, that implies about 13M units rented are houses rented by individuals.

So, there's a glut of 4M units (5M that were up for rental or sale minus 1M that were already rented or sold) that need rentals but there are no renters available, as everyone has a unit occupied !!! That's reasonable, since some % of population is always moving, so there will always be vacant houses at a given time. Since apartments try to remain close to 90% occupancy, they have about 2.5M units for rent with remaining 1.5M available from individuals as houses, condo, etc. Looked in other way, out of 40 million units looking for renters, only 36M were rented, which implies 90% occupancy rate. What that implies is that if you were to rent your house, count on it being occupied only 90% of the time.

A very detailed list of housing units can be found here at AHS: http://www.census.gov/housing/ahs/data/ahs2009.html

Table 1-1 gives the most basic information.

House sales: There are about 110M housing units which are not apartments. These are owned by individuals, and go on sale or rent. About 5M homes sell in a year, of which 4M are existing single family homes, 0.5M are existing condo, townhome, co-op, and remaining 0.5M are new homes. This implies that 5% of the households buy or sell house every year, with 0.5% new buyers entering the housing market every year. Since population increases by 1M households every year, 0.5M buy new houses, while 0.5M get into apartments. Since 1959, there have been more than 1M new house construction every year ( https://www.census.gov/construction/nrc/pdf/bpann.pdf ). This includes stand alone houses, condos/townhomes as well as rental apartments (with each unit of rental apartment counting as 1 housing unit). Also, new apartment units have averaged about 0.2M per year, but since 2016, they have crossed 0.3M per year ( https://www.rentcafe.com/blog/rental-market/us-apartment-construction-at-a-20-year-high-in-2017/ ). This implies that 2017 onwards, there are about 0.9M new house/condo/townhomes + 0.35M apt built every year, while household are increasing by only 1M per year, leaving a glut of 0.3M new residential units every year, on top of 4M housing glut that was already there from 2009.

One data that you will usually see in news is "new housing starts" and "new home sales" in monthly reports. One data that will stand out is that "new housing starts" are always 2 times or more of the "new home sales". You would expect both of them to be roughly the same. Reason for this discrepancy is that "new housing starts" include all construction = stand alone home/condo/townhome/rental apt, etc, while "new home sales" are recorded only for stand alone 1 unit homes. As you can see from link above, for 2017, there were 0.9M house/condo/townhome, and 0.35M apt. What we care about is the "new housing starts" as that is the number that is going to absorb the population growth.

Since 1959, 78M housing units have been built, while number of households increased from 50M to 125M. So, increase in housing units have been pretty much in line with increase in households. But as population increase slows down, either more people living separately are needed, or more immigrants are needed to consume glut of housing supply. Again, immigrants and divorces come to the rescue of housing

house price since 1991 is available at this link (based on mortgage purchase price): https://www.fhfa.gov/DataTools/Downloads/Pages/House-Price-Index-Datasets.aspx#mpo

One of these links here gives housing data for top 100 metroploitan areas since 1991: https://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_PO_metro.txt

There is a graph for 100 years of housing prices: http://observationsandnotes.blogspot.com/2011/06/us-housing-prices-since-1900.html

Other housing price data: https://dqydj.com/historical-home-prices/

If you see data for USA, you will notice that prices doubled in 24 years from 1991 to 2013, implying 3% annual appreciation. Looking at 100 years of data, we again see the same trend. House prices had 3% appreciation while avg inflation was also 3%. So, house prices remained the same over 100 years when accounted for inflation. This is because, cost of everything related to building house (labour, material, land, etc) goes at the same rate as inflation. However, since 2012 house prices have started appreciating much faster than inflation. If house prices double every 10 years, that implies 7% annual appreciation. Assuming mortgage rates are 5%, property taxes + insurance of about 2%, that implies that you are living in the house for free, since all your house expenses are paid for by appreciation of the house. So, once you buy a house, you have entitled yourself and your future generations for free rental as long as sun exists. Assuming, you never pay off your mortgage (keep on refinancing it every 5 years to next 30 years). This also means that you can buy a property financed 100% with a loan, rent it for free, and still not lose money, since price appreciation will make you whole.

 


 

Home Prices Vs GDP:

To the first order, GDP is a measure of total amount of money circulating in the system. It makes sense that home prices will follow the GDP. IF we look at GDP and home prices over last 75 years, we can see a correlation. Below is the graph for median home prices:

https://fred.stlouisfed.org/series/MSPUS

We'll assume 40M houses (excluding apartments) for year 1950, and add 1M houses every year. GDP stood at $300B in 1950, while median home prices were about $18K. Assuming 40M houses with avg price of $18K, total housing value was 40M*$18K=$720B in 1950 which is about 2.5X of GDP.

By 1980, GDP went up 10X to $3T, while median home prices rose 3X to $60K. Assuming 70M houses and median price of $65K, that gives total housing valuation of $4.5T, which is 1.5X of GDP. In these 30 years, GDP increased much faster than home prices. Fast forward to 2007 (before the big recession), GDP was $15T (5X increase), while median prices were $260K (4X increase), implying total housing worth = 110M*$220K=$25T, which is about 1.6X of GDP. As of 2022, GDP=$26T (1.6X increase), while median home prices are almost $500K (2.2X increase). Assuming 120M houses, that total housing worth = 120M*500K = $60T. I read in an article that total US housing was worth $50T. Either way, housing market is 2X the GDP.

In the years starting from 2000, home prices increased faster than GDP. GDP went from $10T to $25T (2.5X), while median home prices went from $170K to $480K (2.8X). In the years since the pandemic of 2020, home prices accelerated much faster than GDP. GDP went from $20T to $25T (25% increase),while median home prices surged from $320K to $480K (50% increase) from 2019 to 2022.

 


 

Home Prices Vs Mortgage Loans:

Based on 2024 report, Home equity of US homeowners stood at record high of $32T as of 1st qtr of 2024.

CNBC: https://www.cnbc.com/2024/09/11/home-equity-is-at-a-record-high-heres-how-to-tap-it.html

Based on stats here: https://www.lendingtree.com/home/mortgage/u-s-mortgage-market-statistics/

  • There are 84M Mortgages in USA