siliconsmart 入门指南

EDA软件 0 1652 佚名 收藏

一、SiliconSmart 介绍

SiliconSmart 是一款基础 IP 参数特征化提取工具,应用非常广泛,支持 Standard Cell,

Memmory,IO,Macro 等特征化提取。支持各种 model 类型,如 NLDM,CCS,ECSM, Verilog,IBIS 等。针对先进工艺节点,支持 AOCV,POCV,LVF 等模型。同时支持产生库的

DataSheet。

SiliconSmart 工具由以下几个部分组成:

  • SiliconSmart Shell - 基于 Tcl shell 的接口,用于调度 configuration,characterization 和 modeling 引擎。

  • Job 调度管理系统 - 管理并分配 CPU 及 license 资源,使各个 Job 高效有序的进行,支持单机 standard-alone 及 LSF,SGE 等计算机集群。

  • Configuration 和 Characterization 引擎 - 产生特征化需要的 arc 及仿真网表,执行仿真,量测并处理,分析仿真结果。

  • Modeling 引擎 - 基于仿真结果,产生 liberty model

 

二、建库流程概述

本节主要介绍我用到的单元库建库三个 flow。分别是 re-characterizationnew characterizationfunction-based flow

1Re-characterization Flow

Rechar flow 是经常用到的 flow 之一,比如我们手上有之前建好的 lib,或者 vendor 提供了部分 PVT 的 lib,但我们的实际项目需要更多 PVT 的 lib;再比如我们对一套库进行了部分小的优化(优化了 layout,优化 cell 的设计),但没有做功能性的改变。当我们需要保留原来 lib 的结构,仅仅需要更新 lib 里的 table(如 timingpower)数值,我们一般用到的就是 rechar flow

Pure Recharacterization flow

从参考库中直接抽取必要的信息,functionslewsloadstiming arcs 等。需要提前准备的文件有:

seed.lib       :  已有的模板 lib netlist      : 带寄生参数的网表(支持多种拓展名,如.cir.sp.spx.cdl spice model : 仿真需要的工艺文件 configure.tcl : 提取 lib 需要的配置文件,此流程可以自动生成,也可以在安装

目录复制一份原始的 configure 文件,修改后使用。

此流程是最简单的提取方式,只要原有的 lib 中包含了需要的带提取的 cell 的全部功能信息,就可以直接使用该流程,更新不同工艺角的 lib

2New Characterization Flow

这个 flow 可以理解为无中生有,如果我们手头上没有模板 lib,只有一套 cell 的网表,但我们仍需要建库。需要提前准备的文件有:

netlist      : 带寄生参数的网表(支持多种拓展名,如.cir.sp.spx.cdl spice model : 仿真需要的工艺文

Instance 文件:需要手工定cell functionpin 的信息,以及 characterization 的控制信息。 configure.tcl : 提取 lib 需要的配置文件,复制一份原始的 configure 文件,根据具体需求手工设置相关的参数。

3Function-based flow

FR flow 在 seed.lib 没有 function 的时候很有用。它通过读取 cell 的 netlist 自动识别 cell 的 function,并且自动产生 instance file(.inst)。

FR flow 需要的文件有:

  • Seed.lib – 不包含 function 信息,但有 slews/loads/timing arcs 等信息

  • Netlist(一般是带有寄生参数的后仿网表)和工艺文件(spice model)

  • Configure.tcl 文件 – 如果没有,在使用 import 命令导入 seed.lib 和 netlist 的同时,

SiliconSmart 可以自动产生基本的 configure.tcl

举两个栗子:

  • Function 由 FR 识别,slews/loads/whens 从 seed.lib 抽取

import -recognize -liberty seed.lib -netlist_dir netlist_dir -ext ext

注意,这里的-recognize 不能省略,否则 FR 功能会被-liberty 关闭。

  • Function 由 FR 识别,slews/loads/whens 由用户自定义

import -recognize -liberty seed.lib -netlist_dir netlist_dir-ext ext -use_default_slews -

use_default_loads -use_default_whens

使用 FR flow 需要注意以下几点:

  • Netlist – 必须是 SPICE 格式,Spectre 网表目前不支持

  • Spice model – 需通过 add_opc_process 命令定义在 configure.tcl 里

  • Power rails – 除了在 add_opc_supplies 定义外,还需在 power_meas_supplies

/grounds 里定义

  • Clock pin – 在 import 时序逻辑单元时,注意要将 clock pin 列在-clocks 和-inputs 里,否则工具可能会认错。

import -recognize -netlist_dir netlist_dir -ext ext -clocks {CLK} -inputs {CLK D} -outputs {Q}

  • Model names – 如果 netlist 里的 mos 管是 subcircuit 方式定义的,注意,nmos/ pmos_model_names 参数要定义上。同样的,diode 用 dio_model_names 定义;电容用 cap_model_names 定义;电阻用 res_model_names 定义。三、siliconsmart 启动

1启动命令

SiliconSmart 的启动命令非常简单,siliconsmart 命令就可以启动。也可以配置好 run.tcl 脚本后直接使用 siliconsmart run.tcl 命令,自动化执行提取流程(此种方式需要提前配置好流程中所有的文件)。

2log 文件

每一次运行都会产生 log 文件,用于检查运行过程中的 error 和 warning。默认的 log 文件

名为 siliconsmart.log,可以用 set_log_file 命令更改 log 文件的路径以及名称,接下来的所有 log 都会在这个路径下的同一个 log 文件里,只要不删除,新 log 就会跟在老的 log 之后。 set_log_level 命令用来输出 log 的详细程度,一般来说,INFO 信息量最少,VERBOSE 信息量最大,包含各种额外 debug 信息。set_log_max_size 命令用来控制 log 文件的大小,一旦 log 文件大小超出了设置范围,即会产生新的 log,而老的 log 则会自动加上.old 的后缀。

3siliconsmart 控制命令

当交互式使用时,siliconsmart 工具遵循 Tcl 标准。按 tcl 命令的方式与 SiliconSmart Shell 交互。

四、Configure 文件

我们需要对 lib 提取的方式进行设置,这些信息就在 configure.tcl 文件中设置。 configure.tcl 文件主要包含以下三个部分。

1Operating Conditions

这部分是对 pvt 的设置。我们可以定义任意多组,但是需要注意的是,每一组都必须独立开来(不一样的 op_cond_name)。

create_operating_condition 命令用来定义相应的 PVT blocks  set_opc_process 命令用来指定相应的 spice models

add_opc_supplies 命令用来指定相应的工作电压  set_opc_temperature 命令用来设置相应的工作温度

Example22

note:使用 set_opc_process 命令用来指定相应的 spice models 时,括号里面不能有多余的

注释信息,否则会报 unkonw 错误。

2Global Configuration Parameters

这部分主要是对全局控制信息的定义以及第三方工具的集成设置。全局配置参数应用于整个 library 中所有 cell 中,在 characterization 之前必须定义这些参数的值(即使有 default)。

  • active_pvts 指定操作条件。

  • job_scheduler 指定 siliconsmart 的调度程序,使用 Stand-alone 就行。

  • normal_queue 使用 Stand-alone 模式时该参数可不用。

  • power_meas_supplies 指定应用于整个单元库的电源名称的列表。功率相关的测量时很重要。

  • run_list_maxsize 指定一次可以在队列中运行的任务数。

  • simulator 指定仿真器,SiliconSmart 支持 Hspice,Finesim,Hspice_embedded, Finesim_embedded 等仿真器。

  • simulator_cmd 指定启动仿真器的命令行。

  • simulator_options 指定仿真器的选项。

  • time_res_high 指定瞬态仿真的最小时间分辨率。

    3Pin Type Definitions

这部分主要是对不同类型引脚参数提取的设置,Pin type 定义每一个 pin 的电气特性,包括数字、模拟和其他一些常见的 attributes。对于默认的 configure.tcl 文件,里面有一个名为 default pintype。可以根据需求自行额外定义不同的 pintype。这里需要强调的一点是,pintype 模块有继承性,即后面的 pintype block 可以用->符号继承之前的 pintype block

Pintype 里的一些典型的 options

  • Supply optionsset logic_high_name VDDset logic_low_name VSS

  • Delay/slew thresholds (trip points)set logic_high_threshold 0.8set logic_low_threshold 0.2set prop_delay_level 0.5set prop_delay_current 0.1

  • Active driver optionsset driver_mode activeset driver BUFX16set driver_rise_time 10e-12set driver_fall_time 10e-12

  • Slew optionsset numsteps_slew 5set smallest_slew 10e-12set default_slew 15e-12set largest_slew 1.2e-9

    set explicit_points_slew {0.1e-9 0.2e-9 0.3e-9 0.4e-9 0.5e-9}

  • Load optionsset autorange_load pinset numsteps_load 5

    set smallest_load 10e-15set default_load 40e-15set largest_load 100e-15

    set explicit_points_load {1e-15 3e-15 10e-15 25e-15 100e-15}

  • Constraints optionsset constraints_numsteps_slew 3set constraint_resolution 10e-12

library characterization 过程中,diver 参数的设置对 table value 影响很大。设置 driver 的参数是 driver_mode,使用的比较多的有以下几种 driver 类型:

  • pwl – 最简单的 driver 类型,就是一个简单的线性 ramp 斜坡。

    set driver_mode pwl

  • emulated – 又叫 ccs predriver,一种标准的非线性 CCS timing 波形。set driver_mode emulated

  • active – 用一个 driver cellbuffer 或者 inverter驱动一个电容来产生实际的输入波形。注意,该类型的 driver 需要用 import_driver 命令把 driver cell 导入进来。

    set driver_mode activeset driver "BUFX16"

  • active-waveform – active driver 类似,不同的是,工具将记录 driver

的输出波形,后续的仿真将直接使用这个波形作为激励,因此,对 driver 的仿真只需要一次即可,避免了多次仿真。

set driver_mode active_waveformset driver "BUFX16"

  • custom – pwl 类似,用户可以自行定义波形的形状。配合这种 driver 使用的参数有 driver_pwl_rise driver_pwl_fall,分别定义 rise fall 的形状。这里需要注意的是,电压值需要归一化,介于 0~1 之间。set driver_mode active_waveform

set driver_pwl_rise {0 0 0.1 0.05 0.2 0.1 0.35 0.25 0.55 0.8 0.7 0.98 1 1}set driver_pwl_fall {0 1 0.1 0.98 0.2 0.8 0.35 0.6 0.55 0.4 0.7 0.3 1 0}

  • custom-perslew – custom 类似,对每一个 slew 都可以设置不同的 driver 波形。

    set driver_mode active_waveform

set driver_pwl_rise {{slew1} {t11 v1 t12 v2 ... t1n vn} ... {slewm} {tm1

v1 tm2 v2... tmn vn}}set driver_pwl_fall {}

我们要根据自己的需求选择合适的 driver_mode,确保 characterization 出来的 table value 准确。

列一下常见的需要修改的参数:

  • explicit_points_load: 指定获取测量值时要扫描的负载列表,当设置了这个参数,SiliconSmart 将不会根据 numsteps_load, smallest_load, largest_load 来自动生成负载。
  • explicit_points_slew:指定获取测量值时的转换时间。
  • initial_delay指定在每个模拟开始时的初始化时间,在此期间驱动激励没有活动
  • largest_load
  • largest_slew
  • logic_high_name:指定一个符号电源名称,用于指示与此引脚类型关联的引脚上电压摆动的上限或下限。
  • logic_high_threshold:为与此引脚类型关联的引脚分别定义逻辑低电压和逻辑高电压的阈值。
  • logic_low_name
  • logic_low_threshold
  • numsteps_load指定在未指定 explicit_points_load 参数或指定其为空列表时将获取测量值的引脚的负载点数量。
  • numsteps_slew
  • prop_delay_level定义延迟测量转换点的全局值。
  • smallest_slew
  • smallest_load
  • driver_mode

五、Instance 文件

Instance file (cellname.inst) 是基于 Tcl 的脚本,描述每一个 cell 的结构,逻辑行为,定义配置信息,告诉工具如何去做 characterization 和 modeling。Instance 一般会放在 <charpoint>/control/路径下。一个完整的 instance file 主要包含这些信息:

  • cell 网表的存放路径

  • 每个 pin 的方向和类型

  • Cell 的 function

  • 激励和测量控制

  • 用来告诉工具如何做 characterization 和 modeling 的其他配置信息

那么我们如何拿到这个 instance 文件呢?主要有四种途径:一是走 rechar flow,import 参

考库的同时,工具会自动产生 instance 文件[ import -liberty seed.lib];二是 functional

recognition flow,[import -netlist_dir data/netlists -extension .cir BUFX16];三是使用 golden

instance,针对像 STD cell 这样的标准单元,instance 文件有时是可以重复使用的;最后一个是完全手写。

Instance 文件能自动产生,但仍然需要用户干预!下面几种情况还是需要我们手动编辑修改的:

  • Rechar flow,对于复杂的 cell,seed.lib 里 function 信息不全,或者压根就没有。

  • FR (Functional Recognition) flow,一些复杂的 cell 工具认不出来或者认不对。

  • 用户需要做一些自定义的 arc。

  • 有些 arc 需要提供 cell 内部节点 (internal node)。

  • 有些 cell 的 pin 的定义需要更新。

1指定 netlist 路径

set_netlist_file 指定 netlist 路径。

2pin 定义

add_pin 定义每个 pin 的电气特性,pin 的名字,pintype,pin 的方向等。-internal 选项,

告诉工具这个 pin 定义成 internal node,因此后面还需要跟上-spice_node 指定在 netlist 里具体的 net 节点。这在 memory characterization 的时候会碰到。例如,以下命令定义了一个简单双向 I/O 单元上的三个引脚,其中引脚 PAD 的引脚类型为 PAD_3vp,而不是 default:

3cell function 定义

cell function 用来描述 cell 的逻辑行为。有以下几种方式(更具体的见 user guide 里 Cell Types and Behavior) : add_function

add_function output_pin expression [-hi_z expression] [-illegalexpression]

add_function Z A -hi_z !EN

– 三态缓冲器,当 EN 为高输出使能,EN 为低输出为高阻态。

  • add_table

    比如一个 NAND,真值表如下,跟定义 add_function Z { (!A) | (!B) }是等价的。

    add_table {            A          B          :           Z

    0          0          :           1

  1. 1          :           1

  2. 0/1       :           1/0

                  }

  • add_flop 和 add_latch

    比如一个触发器 function 定义:

    add_flop IQ IQN CK D

    add_function Q IQ

  • define_differential_receiver 和 set_output_differential – 有些 cell 有差分输入或者差分输出,输出 function 不是由单一的输入信号决定的,通过定义差分输入和输出告诉工具注意处理差分信号。

    4Specifying Characterization and Modeling Options

  • set_config_opt 命令是 SiliconSmart 最常见的命令之一,用来设置全局参数、pintype 参数等等。

    这个参数指定后面的 option 会应用到哪些 measurement type 上,比如 delay,slew,

    • -type

setup,hold,recovery,removal,mpw,ibis 等等。如果不指定 type,option 将用于所有 type 类型。

  • -from/-to/-pin

-from 指定从一个(或一组)pin 开始,

-to 指定另一个(或另一组)pin 结束,

-pin 用来重置 configure.tcl 文件里相应 pintype 里设置的参数。

如:set_config_opt -type {timing} -from I -to Z -pin Z explicit_points_load {0.5e-12}测量

I->Z 这条 arc 的 timing 时,将 pinZ 的 load 指定为 0.5pF。

set_config_opt -cell {DF*} -type {setup hold} glitch_high_threshold 0.8 通配 DF*类型的 cell,在测量 setup,hold 时,将 glitch 检查时的 glitch_high_threshold 设置成 80%。

set_config_opt -type {timing} -from {CP} -to {Q} state_partitions all 测量 CP->Q 的 timing

arc 时,设置 state_partitions=all。

  • state_partitions 是什么?我们在做某个 cell 的 characterization 的时候,它的输入 inputs 往往不止一个,我们将某一条 arc 的 input 之外的 inputs 称为 secondary inputs,它的状态会对这条 arc 的测量产生影响。比如一个两输入的与门,输入 pin 是 A 和 B,输出 pin 是 Z,在测量 A->Z 的 delay 时,B 的状态(0 或者 1)对这条 arc 的 delay 会有影响吗?有时是会的。因此,我们需要基于 B 的状态进行测量,这就是 state_partitions。state_partitions 参数的值有很多,常用的有 all,one,explicit,none。
    • state_partitions=all

Full states,给出所有 secondary inputs 的状态,每一条 arc 的测量基于全部 secondary inputs states。

set_config_opt -type delay -from A state_partitions all

  • state_partitions=one

仅考虑 secondary inputs 的一个状态,相应 arc 的测量也仅做一次。这里要敲个黑板,这

个 state 是工具选择的,换言之是不受用户控制的。

set_config_opt -type delay -from A state_partitions one

  • state_patitions=explicit

explicit 开放给用户自行定义 state 的状态。

set_config_opt -type delay -from A state_partitions explicit set_config_opt -type delay -from A whens {!B&C}

secondary inputs 用布尔表达式定义在 whens 里,上面两句话定义了 B 和 C 的状态分别为

0 和 1。定义 state_partitions=explicit 后不要忘了指定 whens。

  • state_partitions=none

这个就比较简单了,关闭指定 arc 的测量。

set_config_opt -type delay -from A -to Z state_partitions none

不测量 A->Z 这条 arc 的 delay。 set_config_opt state_partitions none 关闭所有 arcs 的测量。

  • dontcare_bias

前面提到两个方法来指定 secondary inputs 的 state,第一个方法是用 state_partitions=explicit 来指定,另一个方法就是 dontcare_bias。

还是拿 state_partitions=one 来举例,工具自动选择了 B=0,C=0 来测量,假设我们希望

指定 C=1,用 dontcare_bias 就能实现了。

set_config_opt -type delay -from A state_partitions one set_config_opt -type delay -from A -pin C dontcare_bias 1

 

 

以上内容来源于网络,如有侵权,请联系我们

相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码