head 1.17; access; symbols; locks; strict; comment @-- @; 1.17 date 99.07.28.14.55.42; author ryu; state Exp; branches; next 1.16; 1.16 date 99.01.14.10.18.22; author ryu; state Exp; branches; next 1.15; 1.15 date 99.01.13.07.25.40; author ryu; state Exp; branches; next 1.14; 1.14 date 98.09.12.19.54.34; author ryu; state Exp; branches; next 1.13; 1.13 date 98.09.08.12.28.50; author ryu; state Exp; branches; next 1.12; 1.12 date 98.09.01.04.26.37; author ryu; state Exp; branches; next 1.11; 1.11 date 98.08.30.19.23.36; author ryu; state Exp; branches; next 1.10; 1.10 date 98.08.29.17.28.35; author ryu; state Exp; branches; next 1.9; 1.9 date 98.08.24.00.49.12; author ryu; state Exp; branches; next 1.8; 1.8 date 98.08.23.22.11.09; author ryu; state Exp; branches; next 1.7; 1.7 date 98.08.18.09.32.38; author ryu; state Exp; branches; next 1.6; 1.6 date 98.08.17.16.58.46; author ryu; state Exp; branches; next 1.5; 1.5 date 98.08.17.04.25.40; author ryu; state Exp; branches; next 1.4; 1.4 date 98.08.17.02.39.18; author ryu; state Exp; branches; next 1.3; 1.3 date 98.08.16.13.40.46; author ryu; state Exp; branches; next 1.2; 1.2 date 98.08.16.11.58.20; author ryu; state Exp; branches; next 1.1; 1.1 date 98.08.15.18.24.07; author ryu; state Exp; branches; next ; desc @Added variables for setup/hold characterization @ 1.17 log @checking in @ text @# $Id: setup_hold.spec,v 1.16 1999/01/14 10:18:22 ryu Exp ryu $ # Copyright (C) 1999 Robert K. Yu # email: robert@@yu.org # This file is part of Autochar. # Autochar is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # Autochar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with Autochar; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. #------ SETUP/HOLD TIME CHARACTERIZATION --------------------------------------- #------------------------------------------------------------------------------- # The syntax are the same as the Perl language. Any # valid Perl expression can be used. In fact, this file is # executed directly, so the order of the definitions is # important: Be sure the '&autochar' command, which is actually # a subroutine call to the function 'autochar', is called after # the necessary definitions are made. #------------------------------------------------------------------------------- # Any of the global defaults may be changed here. See # $AUTOCHAR/lib/defaults.pl for a list of what they are. # $spice_cmd = 'hspice'; # $techpath = '/path/to/spice/libraries'; # $spice_corner = 'hspice.ttlh'; # $spice_include = '.include /some/special/include.file'; # $scale_cload = 0.66e-15; # $scale_delay = 0.060e-9; # $trans_period = '2ns'; # etc. #------------------------------------------------------------------------------- # Specify the characterization type. $sim_type = 'setup_hold'; #------------------------------------------------------------------------------- # Specify the name of the spice subckt and the file containing # the spice subckt. $cellname = 'dff'; $spice_netlist = 'dff.sp'; #------------------------------------------------------------------------------- # List of the terms to the cell. Order is unimportant. # Each name is prefixed by a ":x" letter to indicate type: # :i = input # :o = output # :b = biput # :v = vdd supply # :g = gnd # Declare the list manually @@termlist = ( 'd:i', 'clk:i', 'q:o', ); # Alternatively, get the term definition from other netlist. # @@termlist = &read_spice_terms ("filename", $cellname); #------------------------------------------------------------------------------- # Vary the slewrate of the input clock. # @@slewrate = &vary_list(, , , ); # @@slewrate = &vary_list(500, 200, 3, ''); # Or specify the explicit list of slewrate values # @@slewrate = (0.66667, 1.33333, 2, 2.66667, 5.3333); #------------------------------------------------------------------------------- # Define input buffers. The name of the buffer is a two-port subckt # that will be placed between the input pulse source and the input # term being characterized. Typically, this is a buffer of some sort. # If 'none' is specified, then no buffer will be added. $buffer{'d'} = 'buf'; $buffer{'clk'} = 'buf'; # $buffer{'in3'} = 'none'; # Define any special differential inputs. For example, # in0 and in1 are defined as a differential input pair, # with in1 being the reference. # $differential{'in0'} = 'in1'; # Define any special equivalent inputs. For example, # in0 and in1 are defined as a equivalent input pair, # with in1 being the reference. # $equivalent{'in0'} = 'in1'; #------------------------------------------------------------------------------- # Define the output loads. # Specify the loads for the output(s) that are not being characterized. # If 'none' is specified, then no output loading is added. Use # the words 'cap:', 'res:', or 'subckt:' to indicate an output load that # is an ideal capacitor, an ideal resistor, or a one-port spice subckt. $load{'default'} = 'none'; $load{'q'} = 'cap:10ff'; # $load{'out1'} = 'cap:10ff'; # $load{'out1'} = 'res:1K'; # $load{'out1'} = 'subckt:buf_4x'; #------------------------------------------------------------------------------- # Define the setup and hold constraints. # Define the percentage to use to determine pass/fail: # if the voltage of the internal node is >= the specified percentage # of its final value, then it is said to be passing. If # it is < the given percentage of its final value, then # it is said to be failing. The measurement of the internal # node is made when the clock is at the specified percent # of its final value. $criterion_percent = 0.8; $clock_percent = 0.8; if ($spice_type eq 'smartspice') { # Specify the initial window size, and the number of iterations # this window is stepped in order to find the initial passing # and failing boundaries. Typically in picoseconds. window = 1000; iterations = 20; # Specify the max resolution of the characterization. Once # the window is sized below this value, characterization is # stopped. resolution = 5; # Setup and hold values must be specified as integers # (due to smartspice implementation reasons). The actual values # is scaled by this value. Typcically 1e-12 is used for picoseconds. setup_hold_scale = '1e-12'; } else { # default hspice: # Define the relative input parameter variation # and relative output results function variance for convergence. # See the hspice 'Optimization' chapter for details. $relin = 0.001; $relout = 0.001; # Define the range of minimum and maximum setup values allowed. # Setup time is defined positive before the clock. @@setup_range = ('0', '1ns'); # Define the range of minimum and maximum hold values allowed. # Hold time is defined positive after the clock. @@hold_range = ('0', '1ns'); } #------------------------------------------------------------------------------- # Characterization command. The general form is: # &autochar ( , , , , , , , [ , +] ); # # = name of the flop data input term # = either 'rising' or 'falling' clock edges # = name of the flop clock term # = either 'inverting' or 'non_inverting' w.r.t. d # = name of the flop data output term # = either 'inverting' or 'non_inverting' w.r.t. d # = name of the internal criterion node # # Optional: # = how to tie the other inputs, either 'tie_high' or 'tie_low' # = name(s) of the inputs to be tied. These are regular # perl expresssions. Be sure to write brackets [ and ] # as \[ and \], respectively. < and > are ok. # # characterize all inputs &autochar ('d', 'rising', 'clk', 'non_inverting', 'q', 'inverting', 'n10'); #------------------------------------------------------------------------------- # In some cases, it is desirable to skip the characterization of certain arcs # and to copy the data from another set of arcs instead. The general form is: # ©char (, , , , ); # ©char ('d', 'falling', 'ph1_b', 'd', 'ph1'); # Must return a value to make perl happy. 1; @ 1.16 log @Using /usr/bin/perl @ text @d1 1 a1 3 #! /usr/bin/perl # $Id: setup_hold.spec,v 1.15 1999/01/13 07:25:40 ryu Exp ryu $ a130 6 # Define the relative input parameter variation # and relative output results function variance for convergence. # See the hspice 'Optimization' chapter for details. $relin = 0.001; $relout = 0.001; d141 38 a178 7 # Define the range of minimum and maximum setup values allowed. # Setup time is defined positive before the clock. @@setup_range = ('0', '1ns'); # Define the range of minimum and maximum hold values allowed. # Hold time is defined positive after the clock. @@hold_range = ('0', '1ns'); @ 1.15 log @GPL @ text @d1 1 a1 1 #! /usr/local/bin/perl d3 1 a3 1 # $Id$ @ 1.14 log @Simplified parameters; got rid of @@init, @@trans @ text @d3 1 a3 5 # Copyright (c) 1998-2001, Robert K. Yu. All Rights Reserved. # # No part of this program may be used, reproduced, stored in a # retrieval system, or transmitted in any form or by any # means without the prior permission of the author. d5 2 a6 3 # $Id: setup_hold.spec,v 1.13 1998/09/08 12:28:50 ryu Exp ryu $ # Autochar Specification File # Author: Robert K. Yu d8 16 @ 1.13 log @copyright notice @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.12 1998/09/01 04:26:37 ryu Exp ryu $ d29 7 a35 7 # $init{'spice_cmd'} = 'hspice'; # $init{'techpath'} = '/path/to/spice/libraries'; # $init{'corner'} = 'hspice.ttlh'; # $init{'include'} = '.include /some/special/include.file'; # $init{'scale_cload'} = 0.66e-15; # $init{'scale_delay'} = 0.060e-9; # $trans{'period'} = '2ns'; d72 9 a80 1 # @@termlist = &read_verilog_terms ("filename", $cellname); @ 1.12 log @read_spice_terms @ text @d3 1 a3 1 # Copyright (c) 1998, Robert K. Yu. All Rights Reserved. d9 1 a9 1 # $Id: setup_hold.spec,v 1.11 1998/08/30 19:23:36 ryu Exp ryu $ @ 1.11 log @Renamed port to term @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.10 1998/08/29 17:28:35 ryu Exp ryu $ d70 2 a71 1 # Alternatively, get the term definition from verilog netlist. @ 1.10 log @1.3 @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.9 1998/08/24 00:49:12 ryu Exp ryu $ d54 1 a54 1 # List of the ports to the cell. Order is unimportant. d63 1 a63 1 @@portlist = ( d70 2 a71 2 # Alternatively, get the port definition from verilog netlist. # @@portlist = &read_verilog_ports ("filename", $cellname); d77 1 a77 1 # port being characterized. Typically, this is a buffer of some sort. d142 1 a142 1 # = name of the flop data input port d144 1 a144 1 # = name of the flop clock port d146 1 a146 1 # = name of the flop data output port @ 1.9 log @Added copychar syntax @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.8 1998/08/23 22:11:09 ryu Exp ryu $ d166 1 a166 1 # ©char ('D', 'falling', 'PH1_B', 'D', 'PH1'); @ 1.8 log @Robert K. Yu @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.7 1998/08/18 09:32:38 ryu Exp ryu $ d159 8 @ 1.7 log @Changed default corner. @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.6 1998/08/17 16:58:46 ryu Exp ryu $ d11 1 a11 1 # Author: Robert Yu @ 1.6 log @Clean up Clock_Q module @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.5 1998/08/17 04:25:40 ryu Exp ryu $ d31 1 a31 1 # $init{'corner'} = 'hspice.tthl'; @ 1.5 log @Added clock_percent @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.4 1998/08/17 02:39:18 ryu Exp ryu $ a136 3 # Define the range of minimum pulse width. @@min_pulse_width_range = ('0', '2ns'); d154 1 a154 1 # as \[ and \], respectively. @ 1.4 log @Using hspice's bisect method. @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.3 1998/08/16 13:40:46 ryu Exp ryu $ d123 3 a125 1 # it is said to be failing. d127 1 @ 1.3 log @checking in work in progress @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.2 1998/08/16 11:58:20 ryu Exp ryu $ d56 5 a60 5 # .i = input # .o = output # .b = biput # .v = vdd supply # .g = gnd d113 5 a117 4 # Define the error tolerance value between successive # test values. Characterization will stop when the # difference between successive values is <= tolerance. $tolerance = '10ps'; d143 1 a143 1 # = either 'rise' or 'fall' clock edges d158 1 a158 1 &autochar ('d', 'rise', 'clk', 'non_inverting', 'q', 'inverting', 'n10'); @ 1.2 log @changed syntax. @ text @d9 1 a9 1 # $Id: setup_hold.spec,v 1.1 1998/08/15 18:24:07 ryu Exp ryu $ d118 7 d139 1 a139 1 # &autochar ( , , , , , [ , +] ); d142 1 d144 1 a144 1 # = either 'rise' or 'fall' clock edges d146 2 a147 1 # = either 'inverting' or 'non_inverting' d157 1 a157 1 &autochar ('d', 'rise', 'clk', 'non_inverting', 'q'); @ 1.1 log @Initial revision @ text @d9 1 a9 1 # $Id: input_cap.spec,v 1.2 1998/08/15 09:22:19 ryu Exp $ d126 3 d132 1 a132 1 # &autochar ( , , , [ , +] ); d134 5 a138 3 # = name of the flop data input port # = name of the flop clock port # = name of the flop data output port d148 1 a148 4 &autochar ('d', 'clk', 'q'); # characterize certain inputs # &autochar ('in1', tie_high, '.*'); @