====== Basic layout tutorials ====== [ __[[vlsi:home|Home]]__ ] [ __[[vlsi:workbook|Design WorkBook]]__ ] [ __[[vlsi:workbook:analog#contents|Back to index]]__ ] == Contents == * Introduction * Create a ruler * Draw a simple metal layer * Edit objects * Merge layers * View the layer stack * Create a text label * Create a pin **Keywords:** ===== Introduction ===== This pages assume that you are completely new to layout. [[http://www.eda.ncsu.edu/wiki/Tutorial:Layout_Tutorial2]] [[http://web.engr.oregonstate.edu/~moon/ece423/cadence/example2.html]] ===== Basic environment setup ====== cd ~/cadence/tech_dir ln -s /path/to/technology/display.drf display.drf ===== Load standard bindkeys ===== Using bindkeys allow the designer to save time avoiding search-and-click procedures. Cadence IC 6.1.x offer a predefined set of bindkeys for //Virtuoso Layout Editor//, contained in the ''$IC_DIR/tools/dfII/samples/local/leBindKeys.il'' SKILL file. Default bindkeys are loaded at Cadence startup from ''$IC_DIR/share/cdssetup/dfII/bindkeys/Layout.il''. Actually the sample file contains the same bindkeys definition as given in the loaded one. On the other hand a specific technology could introduce its own bindkeys, which may ovveride Cadence's defaults. If you want to ensure that default bindkeys are always loaded at Virtuoso startup make a local copy in your ''~/scratch'' area of the ''leBindKeys.il'' sample files wich comes with the Cadence IC installation, e.g. cd ~/scratch/ mkdir bindkeys cd bindkeys cp $IC_DIR/tools/dfII/samples/local/leBindKeys.il leBindKeys.il.default and then simply add in your home ''~/.cdsinit_personal'' initialization file a ''load()'' statement: printf("Loading standard bindkeys for Virtuoso Layout Editor L/XL. \n") load("~/scratch/bindkeys/leBindKeys.il.default") \\ If you want to use custom bindkeys (or create your own bindkeys) for the technology you are working with, place them in a ''~/scratch//bindkeys'' directory and use ''./.cdsinit'' or ''./.cdsinit_local'' files. See also //[[http://www.cadence.com/Community/forums/t/11755.aspx]]//. Only Cadence default bindkeys will be mentioned for the WorkBook layout tutorials. ===== Starting Cadence Virtuoso Layout Editor L/XL ===== **CIW => Tools => Library Manager...** **LM => File => New => Library** {{:vlsi:new_library_layout.png}} check the //Attach to an existing technology library// option and select the technology you are working with. {{:vlsi:attach_to_an_existing_technology_library.png}} **LM => File => New => Cell View..** {{:vlsi:new_file_layout.png}} {{:vlsi:next_license_layout.png}} {{:vlsi:layout_editor_main.png}} The basic documentation related to Virtuoso Layout Editor L can be found in ''$IC_DIR/doc/vlehelp/vlehelp.pdf'' ===== Basic user preferences ===== Set some useful preferences in the Cadence main window, **CIW => Options => User Preferences** and deselect **Infix (No Click is necessary for first point)** ==== Display Options window ==== **Layout Editor L/XL => Options => Display...**, shortcut **** {{:vlsi:layout_display_options.png}} Importante! **off-grid errors** otherwise! Settare grid spacing, Enable the **Pin Names** option in the **Display Control** section. This allows you to see the names of the pins placed in the layout. Another very important setting is the number of layers displayed in the layout window. Otherwise your instances will just look like empty red-boxes. The same result can be obtained with the **** shortcut. It is a good practice to save these display preferences as your default values, so that each time you will start ''virtuoso'' these settings will be automatically loaded. At the bottom of the Display Options window check **File** and click to **Save To** to write options into your home ''~/.cdsenv'' or into your technology ''./.cdsenv'' file. Please, remember that by default a local ''./.cdsenv'' is not loaded at startup unless the ''CDS_LOAD_ENV'' environment variable is set to ''addCWD'', as described [[computing_setup|here]]. You can also edit the ''.cdsenv'' files by hand with your preferred text editor and cut and paste the following lines: ;; display controls ;; ; display pin names layout displayPinNames boolean t ; start and stop levels layout startLevel int 0 layout stopLevel int 20 ; shows basically everything ;; grid controls ;; ; minor spacing ; major spacing ; manufacturer grid layout ySnapSpacing float layout xSnapSpacing float The X and Y grid spacing in Layout Editor are controlled by the ''xSnapSpacing'' and ''ySnapSpacing'' environment variables. Set the Snap Mode to Diagonal instead of Orthogonal ==== Layout Editor Options window ==== **Layout Editor L/XL => Options => Editor...** shortcut **** {{:vlsi:layout_editor_options.png}} Uncheck the **Gravity On** option if set. Gravity is an annoying option that snaps the mouse cursor to odd places. Anche qui, conviene poi fare un bel **Save To** ; disable Gravity On layout gravityOn boolean nil ===== The Layer Palette ====== The **Layer Palette** panel shows you all the layers available in the technology you are working with. Basically layout means select different layers and draw rectangles. Layer Palette introduced in Cadence IC 6.1.4 is a replacement for the old Layer Selection Window (LSW) mentioned in many other web tutorials. To select a layer simply left click on the desired layer in the list. Note that only layers flagged as //drawing// are physical and will be fabricated! All the other layers are used for labeling, highlighting errors and documentation. {{:vlsi:layer_palette.png}} The Layer Palette can also be used to restrict the type of layers that are visible or selectable in the layout window. AV All Visible NV None Visible AS All Selectable NS None Selectable The Layer Palette is on by default in Cadence IC 6.1.5. If you prefer to use the old LSW instead of the new Layer Palette ''CDS_USE_PALETTE'' environment variable setenv CDS_USE_PALETTE Common layers: p, n, n-well, p+, n+, POLY, active, contact, M1, M2, etc. Yoy can search in the list typing the name of the layer or part of it in the //Search// tab. ===== Whetting the appetite ===== In this section a few very basic exercises to become familiar with the Virtuoso Layout Editor tool are proposed. These are completely **technology-independent** examples. ==== Ex1 - Create a ruler ==== Check the grid spacing values previously set through the **Display Options** windows using a ruler! {{:vlsi:layout_ruler_spacing.png}} **Layout Editor L => Tools => Create Ruler** {{:vlsi:layout_ruler_grid_check.png}} k, shift+k Zooming in with **** ==== Ex2 - Draw a simple M1 metal layer ==== To draw a mask first choose the corresponding layer in the list by clicking on the layer M1, che e' technology-independent! Select the **M1** layer in the list. Ensure that the purpose is //drawing//. {{:vlsi:layout_m1_layer.png}} **Layout Editor L => Create => Shape => Rectangle** or simply use the shortcut then move your cursor in the layout window where you want to draw the mask. Left click with the mouse and move the cursor. Left click again when you reach the desired opposite corner of the rectangle. You can check the dimensions with a ruler as described in the previous exercise. {{:vlsi:layout_m1_rectangle.png?950}} {{:vlsi:layout_m1_rectangle_ruler.png}} ==== Ex3 - Edit objects ==== Stretch, move, copy, delete, chop, undo, rotate/mirror etc. **Layout Editor L => Edit => Stretch** shortcut {{:vlsi:layout_m1_rectangle_stretch.png}} **Layout Editor L => Edit => Move** shortcut {{:vlsi:layout_m1_rectangle_move.png}} Beside the move command it useful to learn how to quick rotate/mirror a shape by using the **F3** key {{:vlsi:layout_m1_rectangle_move_f3.png}} **Layout Editor L => Edit => Delete** shortcut **Layout Editor L => Edit => Copy** shortcut {{:vlsi:layout_m1_rectangle_copy.png}} Per choppare invece 1) select the mask 2) shift + c 3) **Layout Editor L => Edit => Basic => Chop** shortcut {{:vlsi:layout_m1_rectangle_chop1.png}} {{:vlsi:layout_m1_rectangle_chop2.png}} ==== Ex4 - Merge layers ==== merges overlapping selected identical layers **Layout Editor L => Edit => Basic => Merge** shortcut {{:vlsi:layout_m1_rectangle_merge1.png}} {{:vlsi:layout_m1_rectangle_merge2.png}} ==== Ex5 - View the layer stack ==== Draw a stack of superimposed metals M1 M2 M3,,, poi **tap**! ==== Ex6 - Create a text label ==== **Layout Editor L/XL => Create => Label** ==== Ex7 - Create a pin ==== **Layout Editor L/XL => Create => Pin** {{:vlsi:layout_create_pin.png}} ===== Working with parametrized cells ===== **Layout Editor L/XL => Create => Instance** shortcut e.g. instance a contact between poly and M1! **Layout Editor L/Xl => Create => Via** shortcut e.g istanziare una matrice di contatti! Specificando rows and columns! View the **layer stack** with **Layout Editor L/XL => Tools => Tap** shortcut **** SOLO Per esercizio provare a flatterare the cell! **Layout Editor L/XL => Edit => Hierarchy => Flatten** Flattening the hierarchy should be used only for learning purposes or in very rare cases! ===== Bindkeys ===== Default bindkeys defined by Cadence for Virtuoso Layout Editor L/XL are loaded from $IC_DIR/share/cdssetup/dfII/bindkeys/Layout.il cd ~/.cadence/dfII/bindkeys If the ''bindkeys'' directory does not exist, create it before proceeding. cp $IC_DIR/share/cdssetup/dfII/bindkeys/Layout.il Layout.il.default ===== NMOS and PMOS layouts ===== Click [[layout_mos|here]] Fatto benissimo... //[[http://cmosedu.com/videos/cadence/tutorial2/cadence_tutorial_2.htm]]// Tra l'altro nessuno che cazzo faccia vedere un semplice NMOS e che poi lo simula! Cos'e' troppo stupido per un principiante? ===== Contact layers ===== Click [[layout_contacts|here]] ===== Inverter layout ===== Click [[layout_inverter|here]] ===== Inverting amplifier ===== //[[http://web.engr.oregonstate.edu/~moon/ece423/cadence/example2.html]]// (completo!!!!) ===== Differential pair layout ===== ===== Design rules ===== e.g minimum width, space, clearance, overlap, extension click [[layout_dr|here]] ===== Post layout simulations ===== Click [[layout_sim|here]] ===== Appendix - Standard shortcuts ===== ^ shortcut ^ description ^ | k | ruler | | shift + k | delete all rulers | | ctrl + z | zoom in | | shift + z | zoom out | | f | fit zoom | | e | Display Options | | shift + e | Layout Editor Options | | r | draw rectangle | | p | draw path | | i | create instance | | o | create contact/via | | l | text label | | p | create pin | | ESC | end current mode | | u | undo | | ctrl + r | redraw | | F2 | save file | | F3 | rotate/mirror | | m | move | | c | copy | | s | stretch | | q | edit instance properties | | shift + m | merge overlapped layers | | shift + c | chop | ====== ====== \\ ---- Last update: [[pacher@NOSPAMto.infn.it|Luca Pacher]] - Apr 23, 2013 ~~NOTOC~~