homelist of postsdocs about & FAQ

Running Cadence / Mentor on new kernels

Both Cadence's Virtuoso and Mentor's Architect and Calibre family of tools require old linux infrastructure. The supported as of 2016 is usually RHEL 5 or 6. The problem is, I don't want to run RHEL at home, as it acts as a time-machine flying me 10 years into the past. It's a pain, although, a quite stable one.

Here's some quick insturctions on how you can prevent the following error messages and launch Virtuoso or Calibre on newer systems.

"Invalid Linux major version"

WARNING: HOST gyrator DOES NOT APPEAR TO BE A CADENCE SUPPORTED LINUX CONFIGURATION.


The strategy for this fix is very simple, but yet I am including it here as I've been asked by my group for help about this way too often now. Both design environments, when launched, use bash scripts to identify the running environment and invoke their corresponding binary executables.

In the case with Mentor's Calibre tools, the preloaded skill in Virtuoso looks for and invokes: "./pkgs/calibre_base.aoi/bin/calibre_vco". The latter executes some checks on the OS before launching Calibre's aoi executable. We look for the following if statement and hence, modify the case conditions.

...
if test -r /etc/redhat-release
then
major_rev=grep release /etc/redhat-release 2>/dev/null \
| sed -e 's/.*release *//' \
| sed -e 's/\..*//' \
| sed -e 's/ .*//'
case "$major_rev" in 5) echo ixl ;; [6-9]) echo aoi ;; *) echo "ERROR: Invalid Linux major version '$major_rev'" >&2
echo
exit 1
;;
esac
.
.
.... and so on


You can also remove the exit flags, or even forge the whole if branch (althoug I would not recommend it).

The same procedure applies to Virtuoso. You start by locating the staring korn shell with e.g. "which virtuoso", then you will find out that the script invokes something like "{ROOT_DIR}/share/bin/.cdnWrapper_core". Then by looking at the wrapper, you will find out that it looks for the "${oabindir}/sysname" script. By opening the last you find out that it performs some checks using stadard shell commands (uname -a). Then you look for the following if branches: ... case$machine in
ia64 )
sysname="linux_rhas21_ia64$compiler"; sysnames="$sysname $sysnames";; *86 | *86_64 ) case$version in
2.4.* )
compiler="_gcc411"
sysname="linux_rhel30$compiler"; sysnames="$sysname $sysnames";; 2.6.[0-9]-* ) compiler="_gcc44x" sysname="linux_rhel40$compiler"; sysnames="$sysname$sysnames";;
2.6.* | 4.1.*)
compiler="_gcc44x"
sysname="linux_rhel50$compiler"; sysnames="$sysname linux_rhel40$compiler$sysnames";;
* )
check_global;;
esac;;
... and so on ...


And here you can modify the conditions to the wanted kernel. In my case, just adding an additional OR | operator with my OS's kernel does the job.

The same applies for PVS, Spectre and the whole family of tools. I should warn however that using such CAD tools with an unsupported platform may lead to unexpexted results. In my case, I have noticed that such a new kernel, negatively affects the stability when performing SPICE simulations with Spectre/Ultrasim. Getting fake SPICE results without any error messages is the least that you want from a circuit simulator.

Date:Sun Mar 29 18:45:21 CET 2016

Le Duck!

And so, finally, things are wrapping-up and my 1-year chip-design "military service" is coming to an end. But hey, where am I going without this little fella :)

Le Duck!

Check out some more here.

Date:Sun Mar 29 16:45:47 CET 2016

A SKILL script to check and save all

Have you ever had this irritating issue with multiple unsaved schematic diagrams lower in the hierarchy preventing you from netlisting? Well, now we have a solution. Just bind that function to a handy key and blow the whistle when in trouble :)

; Checks and saves all cells in a given library name,
; Initial version A - Deyan Levski, 19.08.2015
;
;

procedure( checkAndSave(libName)
notSave = '()
lib     = ddGetObj( libName )
println(libName)
println(lib~>name)
cellList = lib~>cells~>name
foreach( cell cellList
cellview = dbOpenCellViewByType( libName cell "schematic" "" "a" )
if(cellview != nil then
schCheck(cellview)
dbSave(cellview)
dbClose(cellview)
println(cell)
println("saved")
else
notSave = append1(notSave cell)
)
)
println("Cells not checked:")
) ; procedure


A hint: you can use " libName = geGetEditCellView()~>libName " to automatically fetch the library name you are currently in.

Date:Sun Mar 26 22:34:47 CET 2016

Highlights from the image sensors session at ISSCC 2016

I thought that it might be a good idea to share the visuals from ISSCC with you and give short comments on some of the works I found intriguing from the CIS section. Please disregard my punctuation and language, this initially used to be a brief e-mail to my coworkers, however, I thought, "Why not get a free post out of it?" :) Unfortunately I am not allowed to upload any of the materials I sent them, thus you will have to refer to the original papers at IEEE XPlore.

Some new imaging materials made it to the CIS section this year, in particular there were two intriguing papers from Panasonic presenting an organic photoconductive global shutter imager with 120dB DR and speed of 60fps at almost 1MP with quite low read noise too!!! Also, note - they report a 600ke- FW capacity for a 6x6um pixel - impressive! There was a live demonstration of the imager, which looked rather sneaky as they used a very bright light (car headlamp) for illumination, which suggests low quantum efficiency of the sensor. Unfortunately, Panasonic did not provide any further comments on their work, apart from what is there in the slides. Some people asked direct questions on QE and process - answers were simply "I don't know".
The original paper is entitled as: An Over 120dB Simultaneous-Capture Wide-Dynamic-Range 1.6e- Ultra-Low-Reset-Noise Organic-Photoconductive-Film CMOS Image Sensor

Jan Bogaerts from CMOSIS presented an almost 400MP imager for airborne mapping, working at 1fps in 14-bit mode. Really impressive work from an engineering point of view. I managed to get hold of the sensor which has the size of a large smartphone, and one can clearly see the 6x3 pixel die blocks stitched together. The imager has no color filters, however the whole system uses 6 additional CCD sensors for color information extraction and a quite sophisticated optical stabilization system.
For more details refer to: 105x65mm2 391Mpixel CMOS Image Sensor with >78dB Dynamic Range for Airborne Mapping Applications

David Stoppa presented two works on SPAD imagers, one of which you can find in the visuals. The other presentation was given at a forum and have no electronic slides to show. The impressive point within these SPAD projects is that they report a read noise as low as 0.22 e-. This in terms allows them to measure photon shot noise and observe its poisson distribution! Theoretical physics works!
Paper title: A 64x64-Pixel Digital Silicon Photomultiplier Direct ToF Sensor with 100MPhotons/s/pixel Background Rejection and Imaging/Altimeter Mode with 0.14% Precision up to 6km for Spacecraft Navigation and Landing

TSMC, Toshiba and NHK presented works focusing on the ADC and analog signal processing in 3D stacked chips. Although, NHK and Toshiba present a refined version of their old cyclic ADC architecture, it is still worth noting that they report pure conversion time speeds of less than 0.9us, with relatively low energy per conversion. TSMC show detailed schematics of their Gray-coded ramp ADC, worth having a deeper investigation.
Paper titles accordingly: A 1.2e- Temporal Noise 3D-Stacked CMOS Image Sensor with Comparator-Based Multiple-Sampling PGA; A 1.1um 33Mpixel 240fps 3D-Stacked CMOS Image Sensor with 3-Stage Cyclic-Based Analog-to-Digital Converters

In addition TSMC's work features an interesting readout technique named "Negative Substrate Bias Readout" - In simple words: by biasing the substrate negatively they can use 1.5V supply for the readout and still get 3.3 volts for the pixel diode - thus saving power and not compromising SNR. This technique is enabled by the 3D stacking as the pixel array is a separate die, which can have a separate substrate bias.
Ref: A 1.5V 33Mpixel 3D-Stacked CMOS Image Sensor with Negative Substrate Bias

For more information and details around the presented works, I suggest having a further look at the digest materials here.

Date:Sun Feb 13 21:04:23 CET 2016

Simple time logging in #!/bin/sh

Time tracking has always been an important measurement, especially for employers and supervisors. While starting with my doctorate studies I wrote a simple time logging script which I intended to use daily at the very beginning. There's tons of already written software for time tracking, management, optimization, boosting efficiency, creativity, spring daisies and so on... I wanted something extremely simple, Microsoft-Project-kind-of-software makes me sick. That's why I decided to get a basic mechanism, just like the old punch machines. Unfortunately, things changed a little bit and the need of using time tracking smeared-out... hmmm... really, there is no point in tracking time...

Anyway...So... --->>> Here... ---> | time.sh | <--- The script accepts two arguments:

First argument: either in or out

Second argument: a comment, let me give you an example. When I go to the lab I open a shell and write:

punch in Arrived early today, the neighbour's rooster woke me up at 6 a.m. ... I should cook a chicken soup rather soonish...
punch out Lunch!
punch in Let's get that charge pump pumping
punch out Sumo de laranja natural por favor :D
...


Alternatively you can also type "punch see" to get a list of your timestamps.

The command is called punch for historical reasons. I have simply added a symbolic link named punch in my /usr/bin folder which is pointing to the script. For the youngsters out there - have a look at punch clock ;)

Date:Sun Dec 05 18:56:14 CET 2015