NDM cell librarys NDM库
ICC 中使用的MW 库
而ICC II 中使用 NDM new data model;新的数据模型
介绍 NDM 库的相关内容 以及 PR之前的设置;
NDM 库
ICC 使用的标准单元和宏单元 都是 NDM格式的, 被称作 CLIBs
并不使用 .db Milkway GDS LEF的文件;
整个NDM库也是包含四部分,用来替代上面的文件功能;
每一个CLIB 都包含完整的布局布线优化需要的 物理 以及逻辑 时序 功耗的定义;
逻辑 时序 功耗的信息保存在 timing view 中; originates from multiple .db files
物理信息保存在 frame view 中 ; originates from GDS or LEF 并不是 MW库的信息
CLIB 可选择性的而包含 设计以及 layout view 的信息;
CLIB 和特定的工艺是相联系的; from the .tf file;
库和工艺信息源
从上图可以看出 NDM库 仍然是从代工厂给定的各种文件生成的;
2Library Compiler(库综合器) 创建:
将.lib 文件 转换成 .db
将 GDS 或者 LEF 文件转换成 .frame
Library Manager(库管理工具) 创建 CLIBs
将.db .frame tech-file 转换成 ndm
ICC II 使用 CLIBs 可直接在ICC II中调用Library Manager;
.lib 中定义的标准单元
工艺文件
对于每一个工艺来说 工艺文件都是唯一的;
它定义了所有 process layer 的参数;包括:
layer name
GDSIIlayer num
显示版图用的color and patterns(模式)
设计规则 (宽度 间距 面积 pitch)
via contact(接触)的定义;
默认的via array 的规则
site definition
layout vs frame view
frame view 是专用用来布局布线的 其包含 布局布线所需的的最小信息;
单元库信息的 representation(表示)
CLIB 包含逻辑和物理模型;
每一个匹配PVT Corner 的 .db 文件 都被表示为一个 pane
在CLIB 创建之后 , 源 .db 和. frame额 都不在需要;
library queries 可以仍然使用原来.db 的名字
指令:
get_libs get_lib_cells get_lib_pins get_lib_timing_arcs
都接受 .db库的名字 以及 NDM库的名字 作为参数;
当 .db 库的名字 被使用, NDM 库的名字需要被 be returned
直接读取 .db 和.frame 库中的内容
除了使用 pre-assembled 预加载的单元库, 也支持 直接读.db 和.frame 库中的内容;
Library Manager 可以被ICC II 调用 区创建 cell library (CLBS)
生成的额CLIBs 会 自动和设计 link;
它作为 库的额配置 而提交;
通过设置 search_path 以及 link_library 变量 类似于 DC ;
生成的 CLIBs 在其逻辑或者物理源文件发生改变时 会自动重新生成;
library configuration example (自动的CLIB 创建)
# set searchpath
lappend search_path lib_data/DB lib_data/FRAME
# specify the link lib
set_app_var link_library "ABC14_ff_1p16v_n40c.db ..."
#在create_lib 时 指定 .frame view
create_lib ORCA.dlib \
-technology ABC4_9m.tf
-ref_libs {ABC4_svt.frame ...}
组建好的 CLIBs 默认会储存在 ./CLIBs 为了以后的使用;
配置 (Auto-Assembled)自动组建的CLIBs (library cache)
库的配置 允许一个central 和一个 local library cache(库的缓存)
指定 link_library 的变量值 .frames 还有一个 central cell library的位置;
如果 FC 在 central location找到了对应的单元库 就不会创建新的库
如果没有找到, FC 会组建新的celllibrary 在local location 然后自动的将central library 剩下 的单元库放进来;
库配置的例子
set_app_var search_path ". lib_data/DB lib_data/FRAME"
# 运行 CLIBs 的创建 并使用机器上的多核加速;
set_app_options -name lib.configuration.cdpl_host -value "-hosts : 4"
# 指定存储组建的CLIBs 的路径(默认是 ./CLIBs) 配置中心缓存;
set_app_options -list {
lib.configuration.local_output_dir "./MY_CLIBs"
lib.configuration.central_output_dir "./.../TEAM/CLIBs"
}
#添加 process lable
set_app_options -name lib.configuration.process_lable_mapping \
{
{p_slow {BB.db AA.db FF.db}}{p_type {DD.db EE.db}} {p_fast CC.db}}
## 指定库文件 .dbs
set_app_var link_library "xx_ff_1p16v_n40c.db ..."
# .frame 会在 create_lib 的时候指定;
# 会调用 Library Manager 去创建新的clibs
create_lib ORCA.dlib \
-technology ABC4.tf
-ref_libs {xx_abc14_hvt.frame ...}
预组建 与 新生成 的组合;
除了生成全部的CLIBs (.db + .frame) 使用pre_assembled (预组建的)的CLIBs 生成新的CLIBs是可行的;
比如 .ndm for standard cell and .db + .frame for macro & IP
.ndm 相比与.db 来说是有优先权的, 指定的.db文件中 那些被.ndm 使用的 会被忽略;
如果 预组建得CLIBs 库 从一开始就被使用 而且.db 文件内核 .frame库有可用的更新 那么 CLIBs 能够很容易的为更新的信息二次生成;
这需要在一开始为 clibs 指定 .db .frame 文件;
使用更新的db文件
# 在一开始 设置使用pre_assembled 的CLIbs
lappend search_path /x/y/clibs
create_lib ORCA.dlib -technology ABC4_9m.tf \
-ref_libs {ABC4_std.ndm ABC4_ls.ndm ABC4_sram.ndm}
# 这里的create_lib所使用的参考库 全部为 CLIBs
analyze ...
##配置使用更新后的.db文件 SRAM.db
lappend search_path /x/y/sram_db /x/y/sram_frame
#指定新的db文件
set link_library "ABC4_sram_12c.db ABC4_sram_20c.db ABC4_sram_m40c.db"
#替代ndm库原始的frame 参考
set_ref_libs {ABC4_std.ndm ABC4_ls.ndm sram.fram}
# 工具会再次执行 创建库的操作
report_ref_libs
# 查看参考库是否被修改;
为已经存在的 预组建的CLIBs 替换 frame 库 是必要的(.ndm has priority over .db)
Library Manager (icc2_lm_shell) flow
create a workspace (创建一个workspace 去创建NDM 库 读入 工艺文件);
read input data 从 LEF GDS frame db文件 (将需要的 PVT条件下 的物理和时序心虚读入do workspace 中来)
check the workspace (验证 输入的数据 识别和自动更正错误 创建frame view)
commit the workshop (将组合数据 以NDM参考库的方式写入硬盘) 并将workspace 移除
exploration flow : 自动单元库创建
exploration flow 是一个自动化的 创建单元库的流程;
使用命令 加载所有单元的 逻辑(.db) 以及物理库(LEFGDS .frame) ,包括 标准单元 IP 核 在所有可用的PVTs 和电压域的 库信息;
选择你希望设计工作的额PVT参数;
然后 让library Manager 做剩下的额工作:
组合正确的 逻辑和物理库信息;
检查库的一致性;
为所有加载的单元 创建frame view
创建 NDM 单元库;
PVT 的配置
当你读入库 但不知道哪些PVT是可用的,可使用 filter Process/voltage/temperature;
在读入库之前 如果你已经知道了有哪些可用的PVT 在 set up exploration workshop 时使用configure Process /voltage/temperature
使用 PVT 的配置 , 能够让ICC II根据你指定的PVT 从所有导入的DBs 中找到正确的时序库
Exploration flow -example output
create_workspace EXPLORE -flow exploration-technology tech.tf
set_pvt_configuration -voltage {0.95 1.16} -temperatures {125 -40}
read_db [glob ./libs/DB/*.db]
foreach frame [glob ./libs/frames/*.frame]
group_libs
write_workspace -file lib_template.tcl
process_workspace
# group 1
create_workspace "LIB_hvt_ff_c" \
-tech ./LIB_nm_1p9m_ft.tf
read_db ff0p95v125c
read_db ff0p95v40c
read_db ff1p16v40c
read_db ff1p16v40c
read_ndm hvt_1p9m.frame
check_workspace
commite_workspace -output hvt_ff_c.ndm
#group 2
create_workspace "LIB_lvt_ff_c" \
-tech 1p9m_ft.tf
read_db ff0p95v125c
read_db ff0p95v40c
read_db ff1p16v40c
read_db ff1p16v40c
read_ndm lvt_1p9m.frame
check_workspace
commite_workspace -output lvt_ff_c.ndm
retrieving version information 检索版本信息;
检索在生成cell library 时 使用的library Manager 的版本信息:
separate reference library (分离的参考库 )
每一个参考库都是独立的,需要独立的去指定和打开,你需要知道哪一个单元在哪一个库中;
参考库的search order 在设计库创建的时候就被定义了;
aggregate reference library (聚合的参考库)
一个聚合的参考库 是将独立的NDM 参考库组合起来;
他允许简单的多个相关参考库的 distribution (分发);
ICC II 会更喜欢读入一个聚合的参考库,而不是多个独立的参考库;
一个聚合的参考库 拥有:
聚合库中的任何单元都只有一个名字;
在参考库内部 顶一个search order;
聚合库的参考脚本:
#在聚合模式下 创建workspace
create_workspace std_lib -flow aggregate
#打开已经存在的library 并加入到聚合参考库中;
read_ndm ./LIBRARIES/ndms/hvt_lib.ndm
read_ndm lvt_lib.ndm
read_ndm rvt_lib.ndm
## 报告所有打开的库
get_libs
report_workspace
# 检查聚合aggregate workspace 报告单元的 eclipse issues
check_workspace
## 定义聚合参考库的 search order
set_lib _order {hvt rvt lvt}
## 交付workspace
commit_workspace [-output new_std_lib.ndm]
design setup
输入有哪些?
reference library
tech only 的库
创建一个 container : the design library
创建一个design library
指定 tech 和 cell libraries
默认是仅在 memory中创建的 并没有存到硬盘中;
lappend search_path /x/y/libs
create_lib ORCA.dlib -use_technology_lib abc14_9m_tech.ndm \
-ref_libs { abc14_9m_tech.ndm
hvt_std.ndm
svt_std.ndm
lvt_std.ndm
sram.ndm
ip.ndm
}
## 如果使用 -use_technology_lib 选项 指定tech库 南无在参考库中 也需要列入 tech 库 的名字
## 如果设置 lib.set.on_disk_operation 为 true create_lib 会在创建后 写入到硬盘;
工艺信息
如果使用一个tech library ,你需要确保 它包含NDM 数据库所需要的所有信息;
如果使用的是 tech file 你需要在ICC II里apply TLU+ site and routing track information
create_lib ORCA.dlib \
-technology abc14_9m_tech.tf \
-ref_libs ...
read_parasitics_tech -tlup Cmax.tlup -name maxTLU
read_parasitics_tech -tlup Cmin.tlup -name minTLU
## 设置 site routing track 的信息
set_attribute 【get_site_defs unit] symmetry(对称) Y
set_attribute [get_site_defs unit] is_default true
set_attribute [get_layers {M1 M2}] track_offset 0.03
set_attribute [get_layers {M1 M3 M5}] routing_direction horizontal
set_attribute [get_layers {M2 M4 M6}] routing_direction vertical
block 的compression(压缩)
block 可以被压缩 来节省他在硬盘上的体积;
如果你想 压缩存储的话 需要在创建 design library 时 做以下的设置;
#所有的block 都会被 压缩:
set_app_var -name lib.setting.compress_design_lib -value true
# 可以选择 在保存block 时 进行 压缩的操作
save_block -compress
save_lib -compress
参考库的路径
在创建 design library 时候 有两种方式 指定reference library;
# 一种是以search_path的方式 存储 reflib 的路径
#一种就是 指定相对于当前session的完全的 ref lib 的路径;
# 这教材跟闹着玩式的;不想打了;
移动 设计库 或者参考库 或者设计库和参考库;
#对应上面 两种指定 参考库路径的方式 当参考库的位置发生改变
#使用相对的(absolute)参考库路径;第一种
#如果设计库发生移动 是不用做任何改变的;
#如果参考库的路径发生改变 更新search_path的内容
#使用relative 的参考库路径的;
#参考库需要跟随design_library一起改变
#如果 你没有更新 你需要更新 reference library 的路径
rebind(重新装订)a design library
open_lib $DESIGN_LIBRARY
set_search_path
set_ref_libs
report_ref_libs
save_lib
在指定的module 或者 regions 中 restricting cells(限制单元的使用)
使用一个所有可用的参考库单元的子设置 来限制指定module或者region的 单元的使用;
仅使用 有double site height 的单元
仅使用 high/ low speed 的单元
不允许 ultra_LVth 的单元的使用;
使用 set_target_library_subset
example
子设计 sub1/suba 是timing_critical的 设置它能够使用HVT SVT之外 还可以使用 LVT 的cells 设计中剩余的部分 使用 SVT/HVT 的cells
set_target_library_subset -top {lib_HVT LIB_SVT}
set_target_library_subset -object Sub1/suba {lib_HVT LIB_LVT LIB_SVT}
执行自动的设计设置;
如果你使用DC 综合的话,考虑使用write_icc2_files 创建所有的ICC II 的必要的输入文件 来实现无缝的的切换;
write_icc2_files -output ORCA_DC_icc2 \
-golden_floorplan ORCA_TOP.fp/floorplan.tcl
#### golden floorplan 是由icc II write_floorplan 指定创建的 DC 仅会写入增量的信息;
读入网表 创建一个设计;
# 一开始还是要注意 将网表的路径 添加到search_path中;
read_verilog -top ORCA ORCA.v
link_block
# block 级 的布局布线;
#设计视图 在网表读入的时候 就会产生;
linking
link的成功与否 主要在于 是否有缺失的参考;
# 使用以下命令 report link 的问题
report_design_mismatch -verbose
get_cells -hierarchical -filter is_unbound
加载nxtgrd或者 TLUplus 寄生参数模型
read_parasitics_tech -tlup $TLUPLUS_MAX_FILE -name MAXTLU
read_parasitics_tech -tlup $TLUPLUS_MIN_FILE -name MINTLU
get_parasitic_techs
# 可查看当前 session读入的 tlu+ ;
report_lib -parasitic_tech orca.dlib
# question: dlib 是啥?
在许多先进结点, 使用ntxgrd文件来代替 tlu+文件 ,nxtgrd文件包含TLUplus文件的信息 , 使用相同的option (-tlup) 来读入nxtgrd文件;
小于20M的 tlup 或者nxtgrd文件 会被拷贝到 设计库中, otherwise 只是存储 文件的指针到设计库中;
布局的 site 和 symmetry (对称性 镜像翻转)
工艺文件 不会包含以下信息:
单元布局的翻转布局需求;
初始化floorplan 的默认位置
设置 site 属性
set_attribute [get_site_defs unit_st] symmetry {Y}
set_attribute [get_site_defs unit_st] is_default true
#
布线的方向
工艺文件中没有 金属线的优先的布局方向;
需要通过属性 手动执行 金属层的布线方向;
tcl语句见上面的example;
加载 power intent (电源意图 功耗意图)
主要是通过 加载UPF文件 来加载描述电源意图;
UPF : unified power format 是一个国际通用的文件格式; 他定义了一个多电压域的设计的power intent and structure;
丛DC读入的网表 已经存在了多电压设计的零组件 像 level shifter isolation cells retention registers
加载 交付 UPF 文件;
load_upf TOP.upf
load_upf -scope I_B B.upf
### 在加载UPF之后
commit_upf
references所有的 UPF 的对象, 执行主要的power ground 的检查
为实例化的 power management cells 与strategies 联系起来;
建议在加载UPF之后 运行以下命令 去确保所有都被执行了;
commit_upf 会在 check_mv_design 或者 place_opt 之中 自动运行;
golden UPF UPF’ UPF” flow的支持
加载 DEF 的布局文件;
如果floorplan使用 write_def 被保存下来; 可使用以下命令加载保存的 DEF 文件;
read_def -add_def_only_objects all ORCA.def
# 默认 那些存在以DEF文件中 但网表中没有的单元 (例如 tap end tap) 需要使用 -add_def_only_objects all 选项 去添加这些单元 到网表中;
#尽可能使用 5.8 及以后版本的得分 文件;
caution: (小心) DEF中不支持的内容;
在5.8 版本的def 文件中,以下内容是不支持的:
- group bound (no fixed coordinates) create_bounds -dimensions
- partial blockage for category / register / allow_buffer_only create_placement_blockage -type register -blocked_percentage 10 …
- voltage areas create_voltage_area -power_domains
- layer assignments(层的分配) set_routing_rule -min_routing_layer “M6” -max_routing_layer “M7”
如果上述的tcl 命令是在floorplan阶段执行的 那么在读入DEF之后 需要重新应用一遍这些指令;
加载floorplan
如果使用 write_floorplan 保存了ICC II 的floorplan;
source ORCA_TOP.fp /floorplan.tcl
#floorplan.tcl里面 会source fp.tcl
#而fp.tcl 里面 会读入保存的得分文件 以及所有def 中不支持的内容reapply
加载 DC 的spg 的信息
如果在DC中使用了spg 的flow ,你需要向ICC 中导入以下信息;
标准单元你的布局;
layer 的soft constraints 软约束;
DC 中 的write_icc2_files 会创建所有必要的ICC II 的输入 包括 标准单元你的布局 以及层的软约束;
write_icc2_files -output ORCA_DC_icc2 \
-golden_floorplan ORCA_TOP.fp/floorplan.tcl
### jiazai placement 以及 layer constrains
sourceORCA_DC_icc2/ORCA.floorplan/floorplan.tcl
指定不使用的 布线层;
默认 ICC II会使用工艺文件中定义的所有的 金属层进行布线;
如果使用更少的金属层 会导致:
更加乐观的 route之前的 拥塞分析;
由于不精确的 RC寄生参数的计算 导致的 不精确的延迟的计算
为了在布线之前得到更精确的拥塞和时序的分析在布线之前指定不适用的额 或者忽略的金属层,
set_ignored_layers -max_routing_layer M7
report_ignored_layers
加载扫描链定义的信息
加载 scan-def 帮助 ICCII 识别扫描链的信息 和reorder ;
会在 placement期间使用 reorder scanchain 减少拥塞;
read_def ORCA_scam.def
#scan chain会在布局期间进行re_order
# scan_def 的作用主要是识别电路中 那些单元是scan chain 的部分;
将PG pin 与supply net 连接;
综合后的网表是没有 power/ground 的supply net和connection的; 不许名确的将 P/G PIN 与 supply net 相连接
这里是逻辑上的链接 并不是物理金属的布线;
P/G net 的名字会在 UPF文件中定义;
在没有UPF 的设计中 使用 port_pin_list 的 -net 选项 来查看net的名字;
这里也会将tie_high /low 的pin 与 P/G PIN 相连接;
connect_pg_net #
check_mv_design # 检查 multivoltage的violation
打开 使用 tie_high / low cell的选项
tie_high / low 的单元会在 placement optimization期间插入到设计之中;
set_dont_touch [get_lib_cells */TIE*] false # 将单元库中 tie high /low cell 的dont touch 属性去掉
set_lib_cell_purpose -include optimization [get_lib_cells */TIE*] # 将TIE cell 的单元意图 指向 optimization
参考库的名字 取决于使用ndm后缀的库文件的名字 比如: std_cell.ndm 前缀 std_cell : get_lib_cells std_cell/AND3*
TIP : design library package
用处 就是保存tapout之前的 各阶段的信息;
你可以在设计流程的任何阶段 pack a library
write_lib_package
# 设计数据还有参考库的信息都被存到一个单一文件中 包括application option 以及 tcl 中的变量
read_lib_package
# 恢复设计 和打包前的状态一模一样
pack /unpack 的使用细节
#pack
open_lib TOP.dlib
open_block abc
...
write_lib_package TOP.packed
#unpack
read_lib_package TOP.packed
ls TOP.dlib
lib.ndm reflibs abc
summary : design setup
今天的文章icc2 ndm_cgi安装系统教程[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86560.html