This is some advice, use it, or ignore it, who cares.
Try to figure out what makes you happy, and do more of that
If you don't know how to say sorry when you do something stupid, learn.
When life sucks, run, or exercise, it's the only thing that works
Get a mac, time machine, and offsite backup. That ensures you'll never lose data.
Find a problem that you really want to solve, and learn a programming language to solve it. There is absolutely no point in saying "I want to learn programming", then sitting down with a book to read about programming, and expect that you will learn programming that way. It will not happen. The only way to learn programming is to program, a lot.
Learn to check your assumptions. You will make mistakes, and you need to get good at finding the mistakes you made.
Take your time to write a verification plan. And stick to it. Without sufficient simulation your circuit will not work.
The table below is my current view of the abstraction levels of analog design automation - what is solved, what is in progress, and what is still risky:
| Status | Abstraction | Design | Layout | Why |
|---|---|---|---|---|
| :construction: | Chip | SystemVerilog | digital | Complex connections, few analog interfaces |
| :construction: | Module | SystemVerilog | digital | Large amount of digital signals, few analog signals |
| :warning: | Block | Schematic | programmatic | Large amount of critical analog interfaces, few digital |
| :white_check_mark: | Cell | Netlist/JSON | compiled | Few analog interfaces, few digital interfaces |
| :white_check_mark: | Device | JSON | compiled | Polygon pushing |
| :white_check_mark: | Technology | JSON/Rules | compiled | Custom for each technology |
Find a problem that you really want to solve, and learn programming to solve it. There is no point in saying "I want to learn programming", then sit down with a book to read about programming, and expect that you will learn programming that way. It will not happen. The only way to learn programming is to do it, a lot. -- Carsten Wulff
s/programming/analog design/ig
On failure, go back as far as necessary
Over a period of 10 months I was fortunate to spend some time at Electronics and Computer Engineering Department, University of Toronto. I was there as a grad student doing research on Comparator Based Switched Capacitor Circuits. Each Wednesday we had a meeting with the other Ph.D. and Master students, which was attended by Professor Ken Martin, Professor David Johns and Professor Trond Ytterdal. The quotes and tips here should not be taken as facts, but rather as ``heads-up'' statements. Take these tips as something that should be checked and thought about. I do not remember which quotes/tips came from which professor, or indeed which student. So here goes
This is important: Do not worry about unknowns. Make a list of unknowns and find a test to check whether the unknown is a problem. Fixing things based on guesses will cause trouble.
In SPICE there is usually a switch or capacitor/inductor that has the behavior of being open at AC and closed at DC or visa versa. Useful for setting common mode voltages in simulation of differential operational transconductance amplifiers.
To measure capacitance on a node in a circuit simulation.
Bias the block Put a small dc current into the node Measure the delta V over a short time period Calculate capacitance from i = C dv/dt Always include a replica with a known capacitance value, i.e. a capacitor, to check your testbench.
Normally source jitter will dominate
This comment was made in reference to a 10-bit 50MHz ADC. So if you're designing such a ADC you probably don't have to worry about jitter in the clock circuit. However, you should be careful about your clock input. I know some people do differential sinusoidal clocks and create a square wave clock on the inside of the chip. Using differential signaling will help with possible interference from nearby lines.
When you go to high resolutions (> 10 bit) and high speed (>50MHz) the non-linear capacitance of the ESD protection starts to matter. If you're doing an ADC above this area you should read Analysis and Measurement of Signal Distortion due to ESD Protection Circuits.
Always add net names to layout nets, this will help LVS to match nets. It will also save you when tracking down shorts.
In current mirrors, decouple to the source node. By decoupling between source and for example vss, any high frequency jumps on vss will also appear on the gate, thus the gate source voltage will stay constant and current will not change
Metal wires on-chip have a maximum allowed dc current. This is due, among other things, to electromigration. At high current densities the aluminum atoms may migrate, and thus leave a void that might grow over time into a discontinuity. Why exactly >20um I don't know, but it was mentioned in a meeting as a rule of thumb. Current densities are usually around 1mA/square, but varies with technology
If you're doing an ADC, or indeed any circuit, that requires > 10 bit accuracy you should shield your signal lines. On chip you use metal below, above and sides. The same for PCBs. Sensitive signals can be routed in in-between layers.
An inverter ring fed from a current source oscillates at a frequency set by the current rather than the supply, which buys supply rejection - see the current-starved ring in the oscillator chapter.
For non overlapping clocks you should check that the two clocks just meet in slow corner, high temperature and low vdd. By meet I mean one clock should start to rise when the other is almost at zero. Supposedly this PVT corner is the worst for non-overlap, but I have not checked.
If possible, you should sample analog just before digital IO switches. In other words, sample during quiet time.
You get less capacitance this way.
By separating substrates you improve noise immunity
Same thing as above
Mismatch between parasitic capacitances/resistors in differential signal routing ( differential means; two signals where one signal is phase shifted 180 degrees) can introduce errors. The error is reduced if the parasitics are matched, since the differential system cancels some of the errors.
Remember to check whether you need on-chip decoupling of references and power. In most designs you do need decoupling, especially if you run at high speeds (> 10MHz).
If jitter is not important, and you want a variable delayed clock, you can use a current starved inverter Place a current source inside or on the outside of your inverter, and use a current mirror to control the maximum current.
Use serial shift registers for calibration bits
It is common to include some off-line startup calibration circuits in ICs. For example to tune transconductances, resistances, capacitances, offset voltages etc. Usually this leads to some form of DAC that needs a digital input. For these digital inputs a serial shift register should be used. Indeed for any digital input that does not have to be synchronous, use serial shifting. The best is to have a commercial bus like SPI or I2S, but this might be overkill.
Two registers should be used, one long shift register and one parallel load register. First you shift in all you calibration bits, then you load them into the parallel register. The calibration DACs are connected to the parallel register. This is to avoid any funny stuff happening when you load your bits. It's good to have control over the state of your circuit at all times. A long shift register is not a problem, it does not cost much to add some more bits. In a recent ADC I made, the shift register was 272 bits long.
The calibration register should have 4 inputs: data, data clock, reset, load. The load signal is used to do the parallel load after shifting in all the bits. You should also include a data output so you can check what was loaded in.
On all inputs you should use a Schmitt trigger to improve noise immunity. Especially since the input data and clock may be fed from a computer with slow rise and fall times.
Make sure that all on-chip DC voltages (bias points, power, references) are available off-chip for measurement. Either through probe pads or analog test multiplexers.
Use analog test multiplexer
Use an analog test multiplexer with T-switches to give you access to internal nodes. A T-switch has two transmission gates and one NMOS. The first transmission gate is placed close to the analog node you want to test, the second close the test output. The NMOS is placed on the output side (not analog node side) of the first transmission gate. When the T-switch is ON the two transmission gates are closed and the NMOS is open. When the T-switch is OFF the NMOS grounds the long line between the transmission gates, thus preventing leakage between different test points of the analog multiplexer.
If you have a current source with off-line calibration, the calibration current should be +- 50% versus nominal.
For calibration DACs use 3 or 4 thermometer encoded bits and the LSBs binary encoded.
If you're using gain boosters the boost voltage should be accessible off-chip.
The calibration DACs should start up in a default state close to the expected state. Use inverters between the calibration register and calibration DACs to set the default state.
Crystal oscillators are used to generate a clean, low phase noise (low jitter), clock signal.
If you move into the +10 bit accuracy range the circuit board (PCB) becomes important. Especially if you're running at high frequencies. If you have designed and produced an ADC, you want to test the ADC performance, not the PCB. So you might want to exclude the circuit board as an error source. To do this you can include a parallel ADC of same or higher resolution to test the PCB performance.
I know of cases where a guy did a 12 bit ADC, made a circuit board, and tested. The test showed very poor performance < 10 bit, and it turned out to be the circuit board. Most of the extra noise was because he hadn't shielded his input signal and taken care of routing of input signal. He spent in excess of 3 months to track down the problem. And the solution was to redo the circuit board and take better care of the input signal.
Short circuit input on your ADC to measure noise floor
In the range 0Hz - 2MHz you can use ADC driver, AD8138 Analog Devices For single ended to differential conversion in the range > 2MHz a transformer should be used.
When measuring your ADC, if you have spurs that are not harmonics in your FFT you should try to change the clock frequency (sampling frequency) to see if the spurs change frequency as well. If they do, they may be aliased interference from nearby RF transmitters.
Handbook on filter synthesizing: Martin Snelgrove Phd thesis
State-Space Adaptive IIR Filters, David A. Johns
The Data Conversion Handbook, Walt Kester