ࡱ> ')$%&{` WbjbjFF .,,~O```t<<<<,t, ^~~~~eee$h|&`n%@enn&~~4;nl~`~n|*6`~  ]k <~\Q06l$`e0"eee&&eeennnntttD8J>ttt8Jtt  The Logic Tools Package. June 4th 2009 Andy Fox,  HYPERLINK "mailto:andy@rushc.com" andy@rushc.com Tel 831 621 0999 Important Note The utilities outlined in this document are intended for use with the Verific language processing product [2] (see  HYPERLINK "http://www.verific.com" www.verific.com ) and operate on the Verific data structures. To use these utilities you must first obtain a Verific license (Verific provide a binary evaluation) -- no Verific source or header file are included in the logic tools package. To obtain the package, e-mail andy@rushc.com. Revision History VersionDescription0.0AF : Initial0.1AF: details logictools.exe binary 1.0 Summary Logic Tools is a package of small programs for synthesis, optimization and formal logic verification using Verific net-list data structures and for converting to/from the abc [1] package. The intent of this package is to provide utilities which most integrators of the Verific language processing programs need in various synthesis and optimization flows. Test programs showing how to access each utility are provided. The package comprises: ABC interface A Verific <-> ABC interface. This allows the powerful abc package from UC Berkeley to be directly accessed from the Verific package. This includes a full data structure level integration both Verific to abc and abc to Verific.Formal verification and SAT-Simulation A formal verification utility which runs natively on the Verific netlist data structures is provided. This uses the well known SAT-Simulation approach. Because SAT-Simulation is a useful utility in its own right (for example for network sweeping, clock gate extraction) an API is provided to the SAT-Simulation algorithms.Network Utilities network utilities which run on the Verific data structures which save a developer of Verific applications programming time. For example a functor for a generic Dfs is provided along with utilities for traversing, trimming (removing unreachable elements), finding strongly connected (loop) elements, and debugging Verific net lists (eg topologically sorted levelized printing).Cut Utilities Cuts are collections of nodes in a network which provide a useful subset for optimization. The cut utility package includes methods for generating and manipulating cuts.Synchronous Micro-pipeline generation A synchronous micro-pipeline is a special form of synchronous logic network in which each gate is latched. The synchronous micro-pipeline package provides a means for generating and analyzing such networks.Clock Gate Extraction for Power Reduction The clock gate extraction algorithm generates clock gates for the state elements in the design by detecting (using SAT-sim) when the d/q values for the next cycle are identical. This uses the algorithm outlined in [5].Test implementations A test command line driven application which allows each package to be demonstrated and exercised is provided in source form. The resulting binary, logictools.exe, provides clock gating, formal verification, and abc command execution on the verific netlists. 2.0 Modules In Source Distribution Directory/FileDescriptionabcintf/Abc interface (Interface to the powerful UC Berkeley logic synthesis engine). abcintf/abcintf.hInterface class (allows all abc commands to be executed)abcintf/abcintf.cppConversion routines (Verific -> ABC, ABC -> Verific)abcintf/preprocess.cppPreprocessing for verific netlistabcintf/readblif.cppRead blif using abc blif reader.formalverify/Formal verification for Verific netlists. (formally compares two Verific netlists)formalverify.cpp formalverify.hFormal verification (cec)dfscutclausegen.cpp dfscutclausegen.hCut clause generation for formal verificationsatsim.cppSat-simulation utilitiesnwsim.cppNetwork simulation.nwk/Network Utilitiesnwkutil.h nwkutil.cppNetwork utilities for verific netlists header file (Includes a generic dfs).dfsprint.cppPretty print for debuggingdfstrim.hTrim out unreachable logic.scc.hStrongly-connected components (for quickly finding elements in loops)dfslevel.h dfslevel.cppFunctor for accumulating portref levels in netlist.util/Utilitiesutil/utilexception.hException handlerutil/verificutil.hutility methods. For verific netlists.util/errrep.hError reportingutil/util.hPackage wide definesutil/linescanner.hLine scanner base class (lexical analysis, token extraction)util/blifscanner.cpp util/blifscanner.hNative blif reader generates Verific data structures directly from blif. (Blif is a useful format for representing logic networks favored by academic tools). cut/Cut representation and generationcut.h cut.cppCut representationboundarycutgen.h boundarycutgen.cppGenerate boundary cuts (a special form of cut that extends between nominated invariant points eg flops/pads/non-combinational elements).cutsim.cppCut simulation (used in sat simulation).Cgateclock gate extraction utilitiescgate.h cgate.cppGenerate clock gate extractionSupipeSynchronous Micro-pipeline generationsupipe.cpp supipe.h supipelib.cppexamples/Examplestest_main.cppTest program for exercising all aspects of systemtest_abcintf.cppTest the abc interface. test_verify.cppTest the formal verifier.test_satsim.cppTest the sat simulation interface.test_cgate.cppTest the clock gating algorithms.test_map.cppTest the mapperdoc/Documentation doc/logictools.docPackage documentation (this file)MinisatPublic domain minisat packageBoostPublic domain boost packageAbcPublic domain abc package 2.0 Formal Verification & SAT-Simulation The formal verification system allows two Verific net lists to be formally compared for combinational equivalence. It works using a combination of SAT and simulation which are run on the native Verific net-list. References outlining the algorithms used are [3, 4, 5]. A general purpose SAT/simulation interface is provided. 2.1 Formal Verification Object and Usage The API is through the FormalVerify Object which provides the facility for registering two netlists to be compared: the specification and the implementation, and a Verify method which performs the equivalency check. For example, the specification may be the net list prior to some optimization (such as logic remapping or rewriting or clock gating) and the implementation the resultant of the optimization. An example of invoking the verifier is: Netlist* _nl; //a flattened verific netlist FormalVerify fv; //formal verification object //register the specification fv.RegisterSpecification(_nl); // //do something to netlist _nl: eg mapping // MyTransform(_nl); //register the implementation fv.RegisterImplementation(_nl); //formally verify, report the number of discrepancies to nominated //stream if (fv.Verify(std::cout)==0) printf("Successfully verified design\n"); else printf("Cannot verify design"); 2.2 Formal Verification API FormalVerify() Create the formal verification object. void RegisterSpecification(Netlist* nw1) Register the specification netlist. void RegisterImplementation(Netlist* nw1) Register the implementation netlist. int Verify(std::ostream& op_log); Formally verify the equivalence of the specification and implementation. Return the number of discrepancies (which are reported to stream op_log). 2.3 SAT-Simulation API and Usage The formal verifier works using a method called SAT-simulation. This involves simulating a Verific net-list and finding candidate equivalent points which are then proven (or otherwise) as being equivalent using SAT. Because SAT-simulation is a useful technique for various applications (eg clock gate extraction [5] and net list sweeping [6]) an interface to the sat simulation engine is provided. A key point to note is that the SAT-simulation is performed on the native Verific netlist, allowing the logical structure of the netlist (which comprises gates, possibly post placement and routing in some systems) to be preserved for analysis as opposed to using a technology independent view (eg AIG, BDD). Equivalent pins are stored in a dictionary: EquivalentPinsDictionary which offers the following api: 2.3.1 EquivalentPinsObject api: bool GetEquivalentPins(PortRef& p1, std::vector& equiv_pins); Return vector of equivalent pins for p1. This set will include p1 itself and to be non-trivial must be of length > 1. void Print(); Print out the equivalent pins. The most useful sat-sim api methods are accessible from a formalverify object: 2.3.2 bool Verify(PortRef& p1, PortRef& p2) Test if two points in logic netlist have same logic function. Invokes SAT-Simulation. 2.3.3 void MiterNetlists(Netlist& nw1, Netlist& nw2, Netlist& nw3, std::set &miter_ops, bool miter_op_only=false ) Form the miter of two verific netlists. The outputs of the miters are stored in the miter_ops set. If miter_op_only is true, only insert miters at primary outputs, else insert miters on all invariant points (eg non-combinational elements, flops, memories etc). 2.3.4 void SimEquivCandidates(Netlist& nw, std::vector > > &candidates); Extract equivalent candidate logic points (from random simulation) in a logic netlist. These are ordered in topological order: the set of equivalent points at the lowest level in the netlist come first. 2.3.5 int FormalVerify::ProveCandidates(Netlist& nw_in, std::vector > > &candidates, EquivalentPinsDictionary& equiv_pins) Test candidate equivalent logic points using SAT and accumulate proven equivalent points. Accumulate the equivalent pins in the dictionary EquivPinsDictionary. This is passed in as a parameter and is used to take advantage of pre-proven pin equivalencies which massively reduces the search complexity when proving pins equal. 3.0 ABC Interface The abc interface is through object abcintf. This provides: Data structure level integration between the ABC logic synthesis system [1] and the Verific HDL processing system [2] allowing the conversion of netlists from verific to abc. An interface for safely applying the abc api commands and then converting the optimized netlist back to Verific. 3.1 Example of API Usage The following example shows the basic facility. #include Database.h /* Include the verific data base */ #include abcintf.h /* Include the abc interface header */ using namespace Verific; using namespace Rushc; Netlist* top; //Verific netlist (fully elaborated) //assume top now populated by verific and flattened. Netlist* new_top; try { //Constructs interface object and builds abc netlist AbcIntf abc_interface1(*top); //Execute an abc command (lut mapping) if ((abc_interface1.ExecuteAbcCommand("if -K 4") == 0){ printf(Successfully executed abc command\n); } //back to Verific new_top = abc_interface1.Abc2Verific(); } catch (utilException except){ except.Print(std::cout); } It is possible to control the conversion by: (a) Restricting the elements of the netlist which are translated by providing a conversion set. For example, you may only wish to apply abc to a subset of your design (eg critical logic cones etc). (b) Controlling the conversion of state elements and full adders: (i) abc supports single clock basic DFF master/slave flops the interface provides support for translating flip flops and for conditionally disabling their translation. (ii) Often it is desirable not to restructure full adder chains the interface provides for conditionally disabling their translation. 3.2 API 3.2.1 Constructor: AbcIntf(const Netlist& verific_netlist_in, bool dont_translate_flops_in=true, bool dont_translate_fadd_in = true) Construct the abc network from verific_netlist_in. Defaults to preserving flip flops and primitive adders. By assigning dont_translate_flops_in to false or dont_translate_fadd_in to false, flip flops and primitive adders will be passed into abc. Invoking the constructor generates the abc netlist. An ABC AIG is generated. 3.2.2 int ExecuteAbcCommand(char* cmd); Invokes the abc command and return the status (0 for success). 3.2.3 Netlist* Abc2Verific(); Converts abc netlist back to Verific netlist. 3.2.4 Abc_Ntk* getAbcNetlist() Get the abc netlist. 3.2.5 Netlist* getVerificNetlist() Get the Verific netlist. 3.2.6 RegisterInstanceToConvert(Instance&) Register an instance for conversion. If no instances are registered for conversion all primitive instances are converted to abc for subsequent optimization. (see prior comments about controlling flops and primitive adders). The application may restrict the logic for translation to abc by registering the instances for conversion the intent is to provide a safe way for an application to restrict the region of the design for optimization. 3.3 Sample Application: Mapping and Verifying Using ABC The following example shows the processing of a Verific netlist using the AbcIntf object using the abc lut mapper (if) and the abc verifier (cec). //Use the flattened Verific netlist. Netlist *top = Netlist::PresentDesign() ; top -> Flatten(); try { //construct the abc netlist from the Verific netlist. AbcIntf abc_interface1(*top); //write out the specification abc_interface1.ExecuteAbcCommand("write_bench test1.bench"); //map the design abc_interface1.ExecuteAbcCommand("if -K 4"); //convert it back to Verific Netlist* mapped_netlist = abc_interface1.getVerificNetlist(); //Pass the mapped netlist into abc and verify it //against the original. AbcIntf abc_interface2(*mapped_netlist); abc_interface2.ExecuteAbcCommand("write_bench test2.bench"); //Verify the mapped netlist if (abc_interface2.ExecuteAbcCommand("cec test1.bench test2.bench")==0) std::cout << "Success : verified the mapping" << std::endl; else std::cout << "Failure cannot compare 2 netlists" << std::endl; } catch (utilException except){ except.Print(std::cout); } The ABC package provides many exciting and interesting commands such as retiming, logic rewriting (a form of technology independent optimization) as well as extensive support for formal verification (eg sequential bounded model checking and combinational logic equivalence checking). These commands are available through the ExecuteAbcCommand interface. 4.0 Synchronous Micro-pipeline Generation (SALT network generation) A synchronous micro-pipeline is a circuit in which every gate output is latched. This class of circuit has some useful properties (for example, it maps directly to certain full custom dynamic layout design styles --such as precharge/evaluation logic methodology SALT -- and can be mapped directly to lut cascades for execution on specialized lut machines). Consider the following circuit:  The synchronous micro-pipeline version is:  The original circuit had a maximum of 3 levels of logic between any input pad and flop. This means that the upper bound on the clock frequence is 1/((3*gate delay)+setup + hold time). The synchronous micropipelined circuit can be clocked much more quickly (1/(gate delay + setup + hold time) by a microcycle clock (uclock) and the output is made available every 3 uclock cycles. Autonomous counters are automatically inserted at the outputs to strobe the updated output. 4.1 API Usage The interface to the synchronous micropipeline generator is object SuPipe. Netlist* _nl; //a flattened verific netlist SuPipe su_pipe(_nl); //initialize the synchronous //micropipeline generator Netlist* upipe_nl = su_pipe. CreateUSynchronizationNetlist(); The interface includes various useful methods for analyzing synchronous micro-pipelines. 4.2 API Calls Netlist* CreateUSynchronizationNetlist(); Create a micro-pipeline for the netlist. int getUcycleCount() Get the maximum micro-cycle count this is the number of micro-cycles clocks corresponding to the user clock tick. void setUcycleCount(int val) Set the maximum microcycle clock count. void UPipeline(); Pipeline the logic to satisfy the required micro-cycle clock count (cannot be less than the maximum number of micro-cycles per user clock). 5.0 Clock Gating Clock gating is performed using the algorithms outlined in [5]. This involves finding logic expressions for which (a) The state elements do not change value on the next cycle. (b) The output of state elements is not observed on the next cycle. In each case the value of the state elements can be preserved without corrupting the design. 6.0 How To Build The system has been tested and developed using MS Visual Studio (v 6.0 or later). The approach used was to link in the abc static library (abc.lib) boost and verific libraries. An abc library is included with the code. The verific library and header files must be obtained from Verific. Test programs showing the invocation of the various apis are included in the examples directory. The test program test_main.cpp shows the invocation of the main routines. For example to build the test main program the following command can be used: g++ test_main.cpp o logictools.exe I../include liblogictools.a libverific.a libabc.a boost.a In Visual Studio the library logictools.lib must be included in the project along with links to the verify, abc and boost libraries. 7.0 The logictools.exe demonstration binary. 7.1 Introduction To demonstrate the various algorithms and packages a binary logictools.exe is available, this requires a Verific license and can be built from the sources using the file test_main.cpp. This binary takes the following arguments: ./logictools.exe [--help] --[mode] --[mode arguments] --I [verilog search directory] --v [verilog files] --r [root_object] [--vin verilog_file_name] [--vout verilog_file_name] The vin and vout arguments force the binary to write the design to the nominated verilog files before and after running the various packages. The following arguments show the use of the binary: 7.2 Using Binary To Execute abc on Verilog and write out Verilog result. ./logictools.exe --package abc --v counter1.v --v2k true --root counter --abcscript cmd.txt --vout vout.v Read in the verilog file counter1.v build the abc data structures, invoke the abc commands in cnd.txt, convert the result back to verific data structures and write the result out to file vout.v The code to implement this flow is shown in file test_abcintf.cpp An example abc script is: strash if -K 4 write_blif c:/temp/test2.blif 7.3 Formal synchronous verification using abc dsec command. ./logictools.exe --package abcdsec --v1 counter.v --v2 counter1.v --v2k true --root counter Read in the verilog files counter.v, counter1.v and compare them using the abc dsec algorithm. This performs a full synchronous comparison by converting the designs to a form abc can understand and then using the abc dsec command to perform a synchronous compare. The code to implement this flow is shown in file test_verifyabc.cpp. 7.4 Generating clock gates ./logictools.exe --package cgate --v cgate1.v --v2k true --root cgate1 --cg_ip true Read in the verilog file cgate1.v extract and report the enable conditions for which d==q for each state element on the next cycle. The code to implement this flow is shown in file test_cgate.cpp. 7.5 Formal verification natively on Verific data structures ./logictools --package verify --v1 counter.v --v2 counter1.v --v2k true --root counter --vmode cec Read in the files counter.v, counter1.v and verify them using sat-sim run natively on the verific data structures. The code to implement this flow is show in file test_verify.cpp. 8.0 References [1] Abc: http://www.eecs.berkeley.edu/~alanmi [2] Verific:  HYPERLINK "http://www.verific.com" www.verific.com [3]  HYPERLINK "http://www.eecs.berkeley.edu/~alanmi/publications/2006/iccad06_cec.pdf" http://www.eecs.berkeley.edu/~alanmi/publications/2006/iccad06_cec.pdf [4]  HYPERLINK "http://www.eecs.berkeley.edu/~alanmi/courses/2005_290A/" http://www.eecs.berkeley.edu/~alanmi/courses/2005_290A/ [5] A Hurst, Sequential Optimization For Low Power Design, PhD Thesis May 2008 UC Berkeley. 3 stages clk Cnt == 3 !#$)45XYZhijnrz{|  & ' ( 7 8  I J 츴~tlgb hy6 h)6hZe,hZe,6hZe,hNK0J6jhZe,hNK6UjhZe,hNK6UhZe,hNK6hNKhZe,hNK5 hZe,5h"hT4h+h*hL0JjhLUjhLUh+hPYhPYhPYH*hh(h]CJ$aJ$hL&*j{|J K L M ^ _ g s $@&Ifgd"gdNK$a$gdNK@&gd"$a$gdL $@&a$gdW~WWJ M ^ {  ! ' 2 3 ! " b d y z | & l n uyesD>ƾʮʙʕʞʞʍʆ~hhP6 hPhPh@ hP6hK hP6hzhP6h@ hzh'|h@Nh$9h/.hA@h}ph!hPhhLhLCJ aJ hLh:5h$mhyh"h"h"CJ aJ hNK1s t x || $@&Ifgd"xkd$$Ifl0dy t0644 la || $@&Ifgd"xkd$$Ifl0dy t0644 la y z " # b c d { | @&gdWxkd($$Ifl0dy t0644 la| m n ekdz$$Ifl,"" t0644 la$If $IfgdPde&ekd$$Ifl,"" t0644 la$If $IfgdPekd$$Ifl,"" t0644 laesDekdF$$Ifl,"" t0644 la$If $IfgdP>,ekd$$Ifl,"" t0644 la $IfgdPekd$$Ifl,"" t0644 la>.1234567XYZmtuv}~./Bcdef{|ʿݴݴ݌ݴݻݴ݈ݴhMJh?huS=hhw GCJ aJ hh!hUhhU5hd9CJ aJ hd9hd9hw Ghd9hLCJ aJ hd9hd9CJ aJ h:CJ aJ hd9hX hpZ\hpZ\hpZ\ hpZ\6 hPhBMhP2/23456YZiu$If@&gdWekd$$Ifl,"" t0644 la $IfgdP uv~~$IfzkdV$$Ifl0 ,"` 8 t0644 la~~$Ifzkd$$Ifl0 ,"` 8 t0644 la/d~~$Ifzkd$$Ifl0 ,"` 8 t0644 lade|~~$Ifzkds$$Ifl0 ,"` 8 t0644 la~~$Ifzkd$$Ifl0 ,"` 8 t0644 la &678IXkqrst    &'1=ϼӸ}yhkRhJSCJ aJ hJShhJS5h>CJ aJ h> h9nh>h9nhlCJ aJ hDhlhL hhJhhch6hJhFCJ aJ h9m$h:fhFhhF5 hF5hMJCJ aJ hMJ/7{{ $IfgdFzkd1$$Ifl0 ,"` 8 t0644 la78IXr{{{ $IfgdFzkd$$Ifl0 ,"` 8 t0644 lars~~~$Ifzkd$$Ifl0 ,"` 8 t0644 la~~$IfzkdN$$Ifl0 ,"` 8 t0644 la {{ $IfgdFzkd$$Ifl0 ,"` 8 t0644 la   {{ $IfgdFzkd $$Ifl0 ,"` 8 t0644 la&{{ $IfgdFzkdk$$Ifl0 ,"` 8 t0644 la&'1=~~~$Ifzkd$$Ifl0 ,"` 8 t0644 la=o%'(23?@stuvwx|}~  ,-?@|}~¾𦟦h%hCJ aJ h hO0hhO0hF5hhF5hJSCJ aJ hJShhJS5hR CJ aJ hkRhkRhR hkRhSphZ hd9hFhFCJ aJ h9LhF6{{ $IfgdMJzkd) $$Ifl0 ,"` 8 t0644 la{{ $IfgdMJzkd $$Ifl0 ,"` 8 t0644 la'{{ $IfgdMJzkd $$Ifl0 ,"` 8 t0644 la'(3@t~~~$IfzkdF $$Ifl0 ,"` 8 t0644 latuvw~~$Ifzkd $$Ifl0 ,"` 8 t0644 lawx~~~$Ifzkd $$Ifl0 ,"` 8 t0644 la~~$Ifzkdc $$Ifl0 ,"` 8 t0644 la{{ $IfgdMJzkd $$Ifl0 ,"` 8 t0644 la {{ $IfgdMJzkd! $$Ifl0 ,"` 8 t0644 la  ,{{ $IfgdMJzkd $$Ifl0 ,"` 8 t0644 la,-@}~~$Ifzkd $$Ifl0 ,"` 8 t0644 la}~G~~~$Ifzkd> $$Ifl0 ,"` 8 t0644 laCFGHKopv~?@KYstuvwxy}~  !þԇh?hS!hF5hS!hS!5hS!hRD5 h.nh.nh.nCJ aJ h.nhh.n5 h.n5 hRD5hX7hhS!hJhFCJ aJ hFhhF5h%CJ aJ h%hhWG5GHMo~~$Ifzkd $$Ifl0 ,"` 8 t0644 laopv~~~~$Ifzkd $$Ifl0 ,"` 8 t0644 la?~~~$Ifzkd[$$Ifl0 ,"` 8 t0644 la?@Kt~~$Ifzkd$$Ifl0 ,"` 8 t0644 latuvw{{ $Ifgdzkd$$Ifl0 ,"` 8 t0644 lawx~{{ $Ifgdzkdx$$Ifl0 ,"` 8 t0644 la{{{ $Ifgdzkd$$Ifl0 ,"` 8 t0644 la{{ $Ifgdzkd6$$Ifl0 ,"` 8 t0644 la !"{{{{ $Ifgdzkd$$Ifl0 ,"` 8 t0644 la!"#+67wx345RSVghlv{¾~yqmh;ah;ah;a5 hRD5 h35h?hBd>hhF5h?CJ aJ h?hJSCJ aJ hJS h|hJSh|h3CJ aJ h3hV hVh3 hVhVh~CJ aJ h~hRDCJ aJ hRDhhF5hFCJ aJ hF'"#-6~~$Ifzkd$$Ifl0 ,"` 8 t0644 la67Ew~~$IfzkdS$$Ifl0 ,"` 8 t0644 lawx~~$Ifzkd$$Ifl0 ,"` 8 t0644 la~~$Ifzkd$$Ifl0 ,"` 8 t0644 la~~$Ifzkdp$$Ifl0 ,"` 8 t0644 la4~~$Ifzkd$$Ifl0 ,"` 8 t0644 la45BR~~$Ifzkd.$$Ifl0 ,"` 8 t0644 laRSXg~~$Ifzkd$$Ifl0 ,"` 8 t0644 lagh{~~$Ifzkd$$Ifl0 ,"` 8 t0644 la~~$IfzkdK$$Ifl0 ,"` 8 t0644 la~~$Ifzkd$$Ifl0 ,"` 8 t0644 la~~$Ifzkd $$Ifl0 ,"` 8 t0644 la    #+456kl  ;<=@Bz{|  ǿ{wld\lh^fCJaJhaCJaJh^fh^fCJaJhx?Zhhnh^fhVh4hQh~h~CJ aJ hoCJ aJ hHkCJ aJ hx?ZCJ aJ h$9CJ aJ h?ACJ aJ hf~CJ aJ hf~ hf~5h3CJ aJ hRDh3hRDhRDh35 hRD5h;aCJ aJ $ ~~$Ifzkdh$$Ifl0 ,"` 8 t0644 la   56{|l!m!!!!!}}}gd^fzkd$$Ifl0 ,"` 8 t0644 la   , - 6 7 E H !-!B!l!m!!!"" " " "*"/"6"7"N"k"l""""""""M#N#i#j#òäхzrh~CJaJh^fh^fCJaJ h^fh~CJOJQJ^JaJh1DCJOJQJ^JaJhY]CJOJQJ^JaJ h^fhzCJOJQJ^JaJhzCJOJQJ^JaJ h^fh^fCJOJQJ^JaJh^fCJOJQJ^JaJh_$hY]hVh^f)! " " "7":"L"M"N"l"""""##)#M#N#j#k#z######$@$gdUgd!w$gd^fj#k#y#z########$?$A$b$c$$$$$$ % %%%%F%H%%%%%6&7&8&]&^&q&&H'ĶĶĨդ՘}}yuyqyuymymumyih:h6-h7YRhxzh%wh%wCJaJh^fhoCJaJhoCJaJh3CJaJh^fhVh~CJOJQJ^JaJh!w$CJOJQJ^JaJ h!w$h!w$CJOJQJ^JaJhUhUCJOJQJ^JaJ hUhUCJOJQJ^JaJh!w$CJaJ'@$A$c$$$%%''C(D(d(e((#)$)2)Q)R)S))))%*&*N*b*gdA/kgd16gd|BDgd4gdogd!w$H'}'''d(e(((")#)$).)1)2)P)Q)S)g)))))) *$*%*&*ÿ{woaSOKOCh16CJaJh1$h16h16CJOJQJ^JaJh0CJOJQJ^JaJh4CJaJhEh|BDCJaJh|BD h4h|BDCJOJQJ^JaJh|BDCJOJQJ^JaJh%wCJaJ h4hG)CJOJQJ^JaJhG)h4CJOJQJ^JaJ h4h4CJOJQJ^JaJhECJOJQJ^JaJh4h%wh:h|g&*+*,*****+"+<+=+E+f+++++++6,7,,--- - ->-?----ԯԌ~m_m_mhECJOJQJ^JaJ hEhECJOJQJ^JaJh16CJOJQJ^JaJh\ h\h\CJOJQJ^JaJh0CJOJQJ^JaJ h16h16CJOJQJ^JaJhClPhhY&h?h166h16 hA/kh0CJOJQJ^JaJhA/khA/kCJOJQJaJh0h4b*v****++7,-->---...//A/B//e0f0000@&gdk & Fgdk`gd16gdEgd16gdA/k--......./e0f0{000023A3B355555555)6¾ynjYRY hc*hkS h1~hkSCJOJQJ^JaJhkSh("hkSCJaJhkShkSCJaJhkCJOJQJ^JaJ hhkCJOJQJ^JaJhkShkCJaJhkSCJaJhkCJ aJ hkhmCJ aJ h$9CJ aJ h16h16CJOJQJ^JaJhFhEh16 hEh0CJOJQJ^JaJ000*1+1D1[1\111111272_2222233%3?3A3B3o3p3`gdkgdkp394555556I6J6A7B777777788J8K8l8m88888gdkS@&gd("gdk)6H6I6J67777777788 8888R8S8k8l888888888888::::z;};;;;ũ̢ữ̐̂qq hu1hkSCJOJQJ^JaJhkSCJOJQJ^JaJhkShkSCJaJ hqV%hkS hp hkS hc*hkSCJOJQJ^JaJh1~hkSCJaJ h1~hkShkS hhkSCJOJQJ^JaJ h1~hkSCJOJQJ^JaJhkSCJOJQJ^JaJ)88888::::::z;{;;;;;;<><]<<<<<A=s== 7$8$H$gdkS@&gdkSgdkS;;;<<?<]<<<<<B====>>>>>>>4?5?@@@@@@ٺ~~~sog_WOWh`CJ aJ hmCJ aJ h$9CJ aJ hkCJ aJ hkShkhkSCJaJ)hkhkSB*CJOJQJ^JaJph#hkSB* CJOJQJ^JaJph)hkhkSB* CJOJQJ^JaJph hkhkSCJOJQJ^JaJhkSCJOJQJ^JaJ hu1hkSCJOJQJ^JaJ)hu1hkSB*CJOJQJ^JaJph===>c>>>>>>?1?5?6?@@@@@@IBJBjBkBlBmBoBgd'gdkS@&gdkS 7$8$H$gdkS@@@AAAABFBhBjBkBlBmBnBwBBBBBBCDDDDDDDDEE'E)E*E,EEİ隒q`q`q`q h^fh'CJOJQJ^JaJh'CJOJQJ^JaJh'CJ aJ he: h-he:hJ]5CJ aJ h @ hJ]5CJaJh- h-h5&jh5CJ UaJ mHnHtHuhe:CJ aJ h'h'CJOJQJ^JaJh .h`h2( h-h-h-CJ aJ h5CJ aJ $oBpBqBrBsBtBuBvBwBBBBBBBBBBBBDDDDDDDDEgd'EHEbEcEEEEE F F7F`FaFwFFF G2G3GEGGGGG6I7I8I@&gd5# p^p`gd'gd'EEEEEEEE F F6F7F`FvFwFF G G2GEGGGGG#H7I8I:I;Ih> hhh> hh6hhh> h>h&lCJOJQJ^JaJ h>h>CJOJQJ^JaJh%mhhCJ aJ hCNeh&lCJ aJ hCNeh@CJ aJ h5#CJ aJ h&lhH<hH<hH<6 T!TYTZTTTTvUwUxUUUUUUUUUUUUUUUUUUUSVTVUVVÿ{sods[sosoPs[jh~Uh~5h~0Jj&h~Uh~jh~U h=wh?A h=wh=wh h4h?Ahd9hmCJ aJ hzCJ aJ hd9hd9CJ aJ h5#CJ aJ hKCJ aJ hKh KCJ aJ hKh2CJOJQJ^JaJ hKhKCJOJQJ^JaJhhCJ aJ h;hhCJ aJ TYTZTTT3U4UuUvUwUUUUUV"W~WWWWWWWWWWWgd5gd~gdhVVVVVVVV W!W"WgWpW~WWWWhhEzh5hDFhn0Jj|hnUhnjhnUh Kh~jh~U,1h/ =!"#$% DyK andy@rushc.comyK ,mailto:andy@rushc.comDyK www.verific.comyK 0http://www.verific.com/P$$If!vh55 #v#v :Vl t65P$$If!vh55 #v#v :Vl t65P$$If!vh55 #v#v :Vl t65B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"B$$If!vh5"#v":Vl t65"]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58]$$If!vh5` 58#v` #v8:Vl t65` 58DyK www.verific.comyK 0http://www.verific.com/DyK Ghttp://www.eecs.berkeley.edu/~alanmi/publications/2006/iccad06_cec.pdfyK http://www.eecs.berkeley.edu/~alanmi/publications/2006/iccad06_cec.pdfUDyK 8http://www.eecs.berkeley.edu/~alanmi/courses/2005_290A/yK phttp://www.eecs.berkeley.edu/~alanmi/courses/2005_290A/@@@ NormalCJ_HaJmH sH tH DA@D Default Paragraph FontRi@R  Table Normal4 l4a (k(No List6U@6 L Hyperlink >*B*phj@j d9 Table Grid7:V0ZYZ W Document Map-D M CJOJQJ^JaJ Oysn O*j{|JKLM^_gstxyz"#bcd{|mndes  D   >   / 2 3 4 5 6 Y Z i u v    / d e | 78IXrs   &'1='(3@tuvwx~  ,-@}~GHMopv~?@Ktuvwx~ !"#-67Ewx45BRSXgh{   56{|lm   7:LMNl#)MNjkz@AcC D d e #!$!2!Q!R!S!!!!%"&"N"b"v""""##7$%%>%%%&&&''A'B''e(f((((((*)+)D)[)\))))))*7*_*****++%+?+A+B+o+p+9,-----.I.J.A/B///////00J0K0l0m000000000222222z3{3333334>4]44444A5s55556c6666667175767888888I:J:j:k:l:m:o:p:q:r:s:t:u:v:w::::::::::::<<<<<<<<=H=b=c===== > >7>`>a>w>>> ?2?3?E?????6A7A8A9A:ALAMAmBnBCCjCkCCCQDRDDDDDzE{E-F.FFFFF;G   4 6 Y Z i u v    / d e | 78IXrs   &'1='(3@tuvwx~  ,-@}~GHMopv~?@Ktuvwx !"#-67wx45RSXgh{   56{|lm   7:LMNl#)MNjkz@AcC D d e #!$!2!Q!R!S!!!!%"&"N"b"v""""##7$%%>%%%&&&''A'B''e(f((((((*)+)D)[)\))))))*7*_*****++%+?+A+B+o+p+9,-----.I.J.A/B///////00J0K0l0m00000000222222z3{3333334>4]44444A5s55556c6666667175767888888I:J:j:k:m:o:p:q:r:s:t:u:v:::<<<<<<<<=H=b=c===== > >7>`>a>w>>> ?2?3?E??9A:ALAMAmBnBRDDDDDzE{E-F.FFFFF;G=! j#H'&*-)6;@EJP TVW,/7>GT^knprsuxz|s | eud7r &'tw ,}Go?tw"6w4Rg !@$b*0p38=oBE8I h  ,  R# #" 4 S Y,4 T 4 U )KBR V  Z ? ]BR W  Z ^? BR X  Z ? BR Y  Z ? ,TB Z C DF TB [ C DF TB \ C DF GITB ] C DF BR ^  Z,YBR _  Z " BR `  Z/  0BR a  Z0?BR b  Z%TB c C DkTB d C D ghTB e C D TB f C DTB g C D)BR h  ZkBR i  ZT|TB j C DGHTB k C DTB l C D2)TB mB C DwxN n  oO TB o C DMTB pB C DYTB qB C DTB r C Db s # "`7w 4 t nDTB uB C D~BR v  ZyHTB wB C D`B x c $D  b y # "`w)+  ~&h  #- z# #" 4 { #%4 | Nb%'4 } h'*{)BR ~  Z #~ $$BR   Z %$~ $BR   Z $~ Y%BR   Z Y%~ %TB  C D ##TB  C D r$t$TB  C D %%TB  C D %%BR   Z:(X)BR   Z %a &BR   Zn ^&&BR   Zo''BR   Zd'_(TB  C D%N%TB  C D? .&C/&TB  C D&N&TB  C DN'7N'TB  C DN'hN'BR   Z+2((BR   Z(C)TB  C D(\(TB  C Dz(\z(TB  C Dq(h(TB B C D/;(|?(t W! # #" #%=%4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" I%&4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" kg&'4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" ''4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" ((O)4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" p'(4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" ?''4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" (O)4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" I'S(4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" '2S(4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" #((4  W!TB  C D @ TB B C D @!TB B C D  t W! # #" #(y(4  W!TB  C D @ TB B C D @!TB B C D  4  'K *t W! # #" w(+)4  W!TB  C D @ TB B C D @!TB B C D  TB B C DC((TB B C D(9(b  # "`+- VZ  '*Hs,  (F*TB  C DF '*F G+TB  C DF '* c*TB  C DF + G+TB  C D c* +TB B C D o*; o*TB B C D *; *TB  C D * +TB  C Du #+v s,TB  C D +S+TB  C D *H*TB  C DS*S+B S  ?m::OR(W tz}M t!4:U"4:UL#4:UԸQ(OtOtOO-O|O|OO9*urn:schemas-microsoft-com:office:smarttagsplace8*urn:schemas-microsoft-com:office:smarttagsCity FNU'.gjJQUX]`dk@Gu|$+79OX   ' ( 0 v }   . D K [ b e {  %,-58HIWmps'01<SZ[c(23?@GY`krx| -?~puv}@Jx}   7Dx5AKQ`g mtwy&(*,.:EGIl-3kw  7>ADLXZ`t{9;*1 " > A J ^ _ b e i j { | g!j!k!n!!!!!!!!!!!1">"?"F"S"Z"g"n"{""""""""""""""##'#4############$ $ $$$$!$$$$$ %%%-%.%5%7%<%?%J%K%T%U%d%e%l%%%%%3&F& ' ')'0'''''''''((((J(Q(Z(a(((((()));)B)T)Y)\)c)l)s)t){))))))) * * ****E*H*R*U*********++&+2+3+<+++++,,|,},,,-------...%.).*.@.X.[.i.{.....>>3>W>^>a>d>e>s>>>?????$?8?A?AAAAAABB,B3BcBjBBBBBoC|CCCCCCCCCCC8D;DDE?ELEEEEEEEEEEFFFF*F2F5F:F>FFFGGGG+G2GWGZGGGGGGGGGGGGG*H1HcHiHHHHHHHHH!I$I%I)IOIVI\IeIIIIIIIIIAJDJgJjJkJoJJJKKJKOKbKiK LLALHL\LfL~LLLLLLLLMMM MdMsMMMMM~OOOOOO )gjB D ?@.5:Fl$(-4kyAD*9> A _ b e i $!(!k!n!!! "$","0"""\#d### %%X%\% ' '''(())+)0)D)I))) * *$*/*E*H*_*a****++ +&+3+++---.%.).X.[.}..5a5d5555566s6|666667%7@;B;;;=#===>4>a>d>>>3?7?Z@]@CAEAAABBBBkClCCC}EE2F5FGGpGxGGGHHHHHH!I$I|IIIIAJDJKKZL\LMMGOJO~OOOO333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333jn:IKLxxuy 3 ?9A;AV[4;^f6  !S!"("f"p"f#_$9m$!w$%%qV%J&S'2((c*4?,Ze,k,6- .*./.9.O0Q1+02@X2T4 h45J]5;?7X7d8$9:e:s:<#<uS=_=Bd>A@fI@i@} AA?AoAuBxB[C1D|BDRDjDW:EyEQ F6!Fw GWG [G- H?I KKu=KNKBM@N/wNDO.PClP!Q7YRkRJSkSUWDZWx?Z{ZpZ\9_d_tBa.uabUchcCNe6UeuiHkA/ks?kl&lCm9nSp}pT~su0v%w=wgwdmxyzxzZ|1~f~c3%m<MJ+N| pMacS hA>D@ |>03c$mmy'|G) Mie416]Obu1H<L~nL2U9L>G IEz\tR?|F:wQaY`d9Vqgsw1$4Y&Si^zAP:-?ky@c?bM~;a:X:f? }'`|gZY]y|J5`0PY+xQR p@8m'[.n5#@4~SElkAn:5o +;Ex+s,\}_gstx|mnde      2 3 Z i u v    / d e | 78Xrs   &'='(@tuvwx~  ,-@}~GHMop~?@Ktuvwx~!"#-67Ewx45BRSXgh{  O@KKzvKKOP@UnknownGz Times New Roman5Symbol3& z Arial?5 z Courier New5& zaTahoma"qh#&:1 C( C($24dVOVO2QP)?L6)The AbcIntf Object: ABC/Verific Interface$      Oh+'0  $ D P \hpx,The AbcIntf Object: ABC/Verific InterfaceNormal314Microsoft Office Word@4H@HWn@&k  C՜.+,D՜.+,h$ px  (VOG *The AbcIntf Object: ABC/Verific Interface Title 8@ _PID_HLINKSA! 8http://www.eecs.berkeley.edu/~alanmi/courses/2005_290A/ g Ghttp://www.eecs.berkeley.edu/~alanmi/publications/2006/iccad06_cec.pdft$http://www.verific.com/t$http://www.verific.com/\{mailto:andy@rushc.com  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#(Root Entry Fмyk *Data 1TableWordDocument.SummaryInformation(DocumentSummaryInformation8CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q