It is a sizzling -15 degrees outside and moony (?), once again no wind what so ever, 10 cm of snow. So, exactly the same thing as last week except for the full moon.
In this list I wanted to give my view on the additional tools/etc. that you should use as an analog designer. What are the most frequently used tools for your design work. I will also give some tips for each one of the individual tips. I have been trying to list them as I would need them when I work in the analog flow. I have not mentioned project management tools and other fuzzy things – I am talking about those things that make my life as an analog designer a bit easier.
- #10: Shell environment
Maybe a bit silly, but set up the environment. In this case I refer to the computer environment and not really the environment around you. A tip for you here is to make your environment process independent. Try to make the look-and-fell the same regardless if you use a TSMC, STM, UMC, AMS, etc., process. It will make you much more efficient if you recognize your self in the environment. I also use environment variables extensively such that I can access important information about my current setup, why not use things like
$CURRENT_CHIPID, etc., that you can access and plot in e.g. schematics and/or documentation. For this purpose, I developed the daisy flow which setups a common, process-independent environment and supports cadence, mentor, matlab, and documentation flows. Set up shell scripts too that simplifies your daily work. Ways to move/copy files, set up databases, send notifying e-mails when simulations are done, etc., etc.
Take control of your environment variables.
- #9: Perl/python, whater programming language
Scripts are your friend (see #10 and #2 on this list)… but programming languages are of course very important too. There are plenty of things you want to do around your design and your work using a programming language. This could of course be embedded in your design tools (see #2 again) or used in a helping tool (see #5). Perl is fantastic for e.g. text manipulation. For the analog designer it is quite vital to e.g. browse netlists to look for information when debugging your design (if you would ever do any errors, of course, I normally don’t – eergh). You might also want to do some manipulation of runs using some higher-level language like python. Write a program that surveils your directories containing simulation data. Monitor when simulations have finished and take some kind of action. Or write a program that distributes your simulations over several machines (if you are not happy with lsub) and capture data dependent on the results, makes statistics, etc.
- #8: Spreadsheet
Spreadsheets are quite handy … and you probably use it quite a lot to present your data. Unfortunately the graphs are horrible – even in OpenOffice.Org) though, so #5 on the list make more sense for that purpose. Anyway: a spreadsheet is wonderful for setting up design requirements, it gives a quick feedback for the user (me), and can be used for a specification-demo for the manager. I can quickly tip in those numbers, then estimate the size of my circuit, expected performance, number of bits, etc., etc. Another case when I use it extensively is for verification of simulation data. I pick up parameters saved by scripts (#2), then automatically put them into the spread sheet and check if specification is met or net. The data can then be exported in a nice table format directly into the documentation tool (#5).
- #7: Emacs buffer (no Kiran, no Prashant – not vi, vim, nor gvim)
I do not know how many times the emacs buffer has saved precious time. Sorting-lines, search-and-replacing, programming emacs macro to search-and-replace certain text, etc., etc. Quite often you might have to investigate the netlist or even hack it (hrrrmmpf) and of course you could sed or tr the text, but with the emacs buffer you get a better view. Further on, with the useful emacs modes, like skill-mode, matlab-mode, shell-mode, latex-mode, lisp-mode, perl-mode, life is so kind to me. So, the short message: don’t be afraid to use macros in emacs.
- #6: MATLAB/octave
I guess extra comments are not really needed to this bullet. One comment could be that MATLAB probably should be much higher up on the list, but I left it here. Further on, I would really like to recommend using octave as it is quite good and can be used in conjunction with a free-ware flow. The daisy flow of course has multiple MATLAB functions available.
- #5: Documentation tool (no, not Word)
So, for some odd reasons documentation needs to be done. Some people like it some people hate it… as some of my students probably have found out – I like it 🙂 An advantage with documentation is that you understand what you are doing if you write about it. Normally, you wouldn’t get time to do the documentation. It is mostly stressful, you have a tapeout and several deadlines and time is not left for documentation. That’s a pity. As one of the big bosses at a certain German semiconductor business said: “It is all in the head of the designer”.
My tip here is that you make life easy for your self. Re-use as much material as possible. Stick to a standard. Write scripts that automagically refreshes with latest simulation data, latest schematic plots, layout plots, etc. Do not be afraid to add too much information to the reports. The reader of your reports is normally not stupid and (s)he is mature enough to skip a few pages. If you learn how to properly use paragraph headings, (s)he will be able to jump to chapter X by looking at the titles only.
Anyways: by writing your work down, you will learn more.
- #4: Internet/resources/books
Well, comments are not really needed here either. Stay tuned with the latest development in your field. Conservative as we are, we will probably still be too afraid to use the latest results out there, but anyway…
- #3: Pen and paper
Yepp. Pen and papers are my friends … by scribbling down those formulas or drawing those schematics I understand more about what I want to do, what I would expect, etc. It is also easier for me to tell someone else what I am doing by drawing on the board. Normally, when I have finalized my writing, I tip it into the computer if it is worth saving. Otherwise it goes to the bin (the recycling bin, remember #10 – respect your environment).
Isn’t it a shame that those handwritten notes can’t be scanned and interpreted by the computers yet? It would be so nice to draw a sloppy circuit schematics and then get it neatly into cadence…
- #2: Scripts
Scripts are your friend and closely related to #9 and #10. With this bullet I envision two types of scripts: those that you use inside your design tool and those outside 🙂
Think of how many manual things you do everyday with your design tool … write a script that solves them instead. Spending those extra minutes will save loads of time. (Well, I am not talking about the get-out-of-bed-have-a-cup-of-coffee-get-to-work sequence. Maybe something more like: update schematic, cross-check with symbol, verilog, plot schematic to file, update revision history, update documentation, check in, release, etc.). Sit down and think about it and organize those scripts and share them with others. Ask your colleagues to share theirs too. The daisy flow incorporates quite a lot of scripts – mainly for MATLAB and cadence – many of them being life savers. Some of my favourites are very simple, small snippets like alignment of objects in the layout, microstepping of objects in layout, adding wire lables to transistor terminals (like the bulk node which 90% of the semiconductor PDKs put at same vertical level as the gate !$¤#@@!).
Simulation scripts are also a must. You cannot live without them. I will post a top-ten list further on, on simulation tips-and-tricks. So I will leave the comments for that list.
- #1: Experience
Sorry youngsters! You need experience and that’s why I have put this on the top of the list today. To be skilled, fast, and efficient, you must have encountered a lot of similar issues before. You also need experienced people around you to advance. I am putting this as a “tool” during your design work, as I encourage you to drive yourself forward and to search for places where you can find good, experienced people. Notice that it is not always good to be best in your group.
Build your network, interact, discuss, engage yourself, etc. Or as my old professor, Prof. Nick Tan, tends to say: “Fall in love with your circuit”. (Actually, he said something else, but close enough…)
So, any comments? Please post your idea of what would be the “correct” list.