Instructional Approach to Writing Parasitic Capacitance Rules Files Using Exact

1. Introduction

The Exact analysis stage extracts the user-required information necessary for the respective parasitic capacitances by probing the Exact database. This is performed via script files written in LISA (Language for Interfacing Silvaco Applications). This article demonstrates a systematic approach for writing analysis script files.

2. Full Working LISA script file

Firstly a full workable analysis script file is detailed; explanatory discussion then follows.

!***********BEGIN LISA SCRIPT***********
!Performs numerical fit to determine near body effect on fringe down
capacitance data. Text
!following an exclamation mark is a comment.
Layouts referred to in the script are Parallel
!Plate.pml (termed PP…) and OneArray.pml (termed OA…).

!Load in the internal database
db = DatabaseLoad(“.”);

!Create capacitance variables and assign capacitance values to them
extract_name(“PP_Ctotal”, “B_gnd”, “Plate”);
extract_name(“OA_Ctotal”, “B_gnd”, “L1p”);

!Decide which combinations are to be examined and included in the tables.
PP_combinations = {1};
OA_combinations = {1};

!create table for parallel plate information
table_PP= select(db, “ParallelPlate”, PP_combinations,
{“ParallelPlatePlateWidth”},
{“PP_Ctotal”});

!change units of capacitance to fF
column_scalar_op(table_PP, “PP_Ctotal”,
table_PP, “PP_Ctotal”, “*”, 1e15);

!save the table for reference purposes
save_table(table_PP, CSV, “PP_a.csv”);

!create table for fringe down capacitance information.
table_OA= select(db, “OneArray”, OA_combinations,
{“OneArrayPlateWidth”,
“OneArrayLayer1Space”, “OneArrayLayer1Width”},
{“OA_Ctotal”});

!change capacitance units to fF
column_scalar_op(table_OA, “OA_Ctotal”, table_OA,
“OA_Ctotal”, “*”, 1e15);

!save output table for reference purposes
save_table(table_OA, CSV, “OA_a.csv”);

!Perform operations on table_OA to obtain fringe down capacitance.

merge(table_PP, “PP_Ctotal”, table_OA);
save_table(table_OA, CSV, “OA_b.csv”);

column_vector_op(table_OA, “PP_Ctotal”,
table_OA, “OneArrayLayer1Width”,
table_OA, “OA_Carea”, “*”);
column_vector_op(table_OA, “OA_Ctotal”,
table_OA, “OA_Carea”, table_OA,
“OA_FD_alpha”, “-”);
column_scalar_op(table_OA, “OA_FD_alpha”,
table_OA, “OA_FD”, “/”, 2.0);

save_table(table_OA, CSV, “OA_c.csv”);
save_table(table_OA, TONYPLOT, “OA_c.str”);

!Equations for fringe down with near body effect.

equationFD=”OA_FD=1.0*K1[0.01]*(1.0-exp(- K2[0.09]*
(${OneArrayLayer1Space}+K3[0.03])))”;

res_OA = (calculate_fit(equationFD)(table_OA)(sum_combinations
(OA_combinations))(“FD_OA.rsm”)(“Downhill-Simplex”));

save_table(res_OA, CSV, “OA_FDcoeff.csv”);

! Header notes
write_parameters(“eg1.xcl”, table_PP, {“\n// Example script
for Exact2 manual\n”});
write_parameters(“eg1.xcl”, table_PP, {“\n\n”});
write_parameters(“eg1.xcl”, table_PP, {“UNIT LENGTH um\nUNIT
CAPACITANCE fF\n\n”});

!Write text for area capacitance expression and
fringe down capacitance expression

write_parameters(“eg1.xcl”, table_PP, {“CAPACITANCE
CROSSOVER PLATE “, “LAYER0”, “ “, “LAYER1”,
“\n\n[\n\n C =”, “PP_Ctotal”, “*area()\n\n]\n\n”});

write_parameters(“eg1.xcl”, res_OA, {“CAPACITANCE
CROSSOVER FRINGE “, “LAYER0”, “ “, “LAYER1”,
“\n\n[\n\n C =length()*”, “k1”, “*(1.0-exp(-”, “k2”,
“*(distance()+”, “k3”, “)))\n\n]\n\n”});

!*************END SCRIPT FILE**************

Main output from the script file: capacitance rule file eg1.xcl

UNIT LENGTH um
UNIT CAPACITANCE fF