ICC学习——LAB1数据准备和基础流程

文章目录

  • ICC学习——LAB1数据准备和基础流程
  • Task1 创建Milkway库
  • Task2 载入netlist,TLU+,约束和控制
  • Task3 基础流程:设计规划floorplan
  • Task4 基础流程:布局placement
  • Task5 基础流程:CTS
  • Task6 基础流程:布线

学习目标:
1.完成数据准备,将设计数据保存到milkway中
2.从floorplan到route完整流程

预期效果:
1.为自己创建milkway
2.将参考库(reference library)链接至设计库(design library)
3.读入TLU+(plus)模型,提取寄生
4.读入网表
5.应用sdc约束
6.应用时序和优化控制
7.载入DEF格式的floorplan
8.使用place_opt完成place和优化操作
9.使用clock_opt建立并优化时钟树
10.使用route_opt布线优化
11.产生并读懂时序报告
12.在新对话中加载以前的设计

介绍:主要完成两部分工作,一部分利用netlist,sdc约束和floorplan创建Milkway 设计库(design library)。第二部分完成标准单元放置,创建CTS,并进行布线。

相关文件和目录
A:.synopsys_dc_setup

B:设计数据(Design Data)
Risc_chip.v ——网表文件
Risc_chip.def ——floorplan
Risc_chip.sdc ——时序约束

C:scripts 脚本
opt_ctrl.tcl——时序和优化控制
zic_timing.tcl(zic:zero interconnect )——检查零互联时序约束
derive_pg.tcl——创建PG 连接

D:solutions 解决方案
run.tcl 所有命令执行的脚本

Task1 创建Milkway库

1.目录移至工作目录

cd ../lab1_data_setup
ls -la

可以看到.synopsys_dc.setup文件,以.开头的文件在Linux下是不可见的。
2.查看.synopsys_dc.setup
3.在.synopsys_dc.setup文件底部定义了变量
如:set my_mw_lib risc_chip.mw
如LAB0A实验中使用的printvar命令,如果忘记了可以使用此命令查看变量

4.在3中变量上方定义了逻辑库
如set_spp_var link_library set_min_library

上面设置了一些别名,正如在LAB0A中提到的,

也可以设置log文件的名字。

Note:定义的变量可以按照任何顺序应用。
5.退出.synopsys_dc.setup文本
6.从UNIX命令行启动ICC

icc_shell

在ICC终端启动时所有的输出都存放到log文件中
7.为了验证.synopsys_dc.setup文件已经被读了,可以通过查询其中的一个变量进行检测。

printvar sdc_file


8.启动GUI

start_gui

也可以直接输入gui,这个实验提前预设了脚本(设置在.synopsys_dc.setup中?不在,应该是主目录下的.synopsys_dc.setup)

9.创建Milkway设计库
a:使用Main Window的菜单,File—>Create Library,挑出Create Library窗口

b:使用已经定义过的逻辑库名和工艺文件名(设置在.synopsys_dc.setup中?)

c:将参考库链接到设计库中。(参考库指的是物理库),将标准单元sc加入到设计库中

d:增加IO库和Macro库。“IO”和“ram 16*128”

e:将“open library复选框勾上”,可以在设计库被创建后直接打开。

f:点击OK
Note:预计会出现关于“Missing CapModel Sections”的警告
忽略以上警告,之后会载入TLU+文件

查看Main Window中的命令,查看以上GUI操作对应的TCL命令

create_mw_lib -technology $tech_file -mw_reference_library "$mw_path/sc $mw_path/io $mw_path/ram16X128" -bus_naming_style{[%d]} -open $my_mw_lib


10.在另一个终端或者在icc_shell执行以下命令,观察新创建的risc_chip.mw设计库的内容

ls -a risc_chip.mw
#或者
icc_shell > ls risv_chip.mw

Note:应该有3个lib文件和一个lock文件

Task2 载入netlist,TLU+,约束和控制

1.读入verilog网表钱,确保所有设计库是打开的,一个简单的方法去检查,目录打开File —>Open Library条目是否变黑,如果变黑了,当前库就处于打开状态。

2.选择File —> Import Designs,打开导入设计对话框。

3.在输入形式(input format)一栏选择verilog

4.点击Add,选择路径下的网表文件design_data/Risv_chip.v,并点击Open

在Top design name下键入$top_design(在.synopsys_dc.setup中设置?是的)或者Risc_chip,点击OK

上面的GUI操作等于执行以下TCL命令:

import_designs $verilog_file -format verilog -top $top_design

Verilog网表被读入和layout窗口被打开,所有单元都不被堆叠在原点。较大的IO pad和macro cell以浅蓝色展示。更小的单元是浅紫色的(使用zoom in操作放大才能会看到)

问题1:MilkWay设计库有什么变化?
回答:增加了一个CEL view。
5.Main Window打开File —> set TLU+,打开set TLU+对话框,选择ref文件夹下的三个文件分别为

Max TLU+ file :…/ref/tlup/cb13_6rn_max.tluplus
Min TLU+ file : …/ref/tlup/cb13_6rm_min.tluplus
.map文件 层名映射文件 : …/ref/tlup/cb13_6m.map



TLU+是存储RC系数的二进制表格式。TLU+包括宽度,空间,密度和温度对于电阻系数的影响,可以实现精确的RC结果。
ITF:互连线技术文件,对上述效果进行建模的详细信息。由fondary提供用于生成tluplus文件。
Map:将MilkyWay技术文件中图层和名称与ITF文件中名称相匹配。

ITF,TLU+和map文件
6.检查物理库和逻辑库的一致性
这里使用默认检查而不是完整性检查,完整性检查将检查UPF power的约束,多模多角(MMMC),CCS电流源模型,会差生许多警告和错误,并不适应我们库。
默认检查命令:

check_library

高版本的ICC不再继承Library Complier,服务器上没有这一软件,默认通过。

完整检查命令:

set_check_library_options -all

UPF(United Power Format):新思对芯片中电源域设计进行约束的文件格式。

会有两个感兴趣的信息
“逻辑库中确实单元数目:19”
这个消息列出了feed through,power pad,substrate tap cell,这些单元被使用在物理版图,并不需要在逻辑库中,可以忽略。、
“单元引脚缺失或不匹配的引脚类型:12”
列出的单元具有不匹配的引脚类型。逻辑库将它列为“信号”类型,物理库列为接地或电源,也是物理库单元,忽略此消息。

Note:如果以上check列出了缺失或不匹配的标准单元,macro单元或者IO pad cell,就要修改库文件。
7.检查TLU+单元,是否通过三个一致性检查

check_tlu_plus_files

你将看到一组关于max_tlu+,min_tlu+和mapping file的信息,三个一致性检查都是[passed!]

8.验证link library被载入

list_libs

将会看到6个逻辑库。sc,io,macro最大库,最小库,两个被“set_app_var link_library”和 “set_min_library”定义。
以及两个总是被载入的通用逻辑库gtech.db和standard.sldb。


9.定义PG引脚和网络的连接

source $derive_pg_file
check_mv_design -power_nets



不应有未连接的PG引脚
Note:pg_file文件内容被呈现,除了VDD和VSS,设计还有两个增加的PG信号,由外围设计使用VDDO/VSSO和VDDQ/VSSQ。
10.应用顶层设计约束

read_sdc $sdc_file

接下来几条命令验证关键约束,或获取关键约束的特定信息。
11.检查是否缺少任何关键时序约束,如时钟,输入输出约束

check_timing



Note:检查不应给出任何警告或者错误信息。信息后跟1表示没有缺失或者不一致的约束。
12.检查你的设计是否有时序例外约束。包括false path和 multicycle path,以及异步最小和最大延时约束。这些约束对于单周期时序行为属于例外。了解你的设计里是否包含任何这些时序例外以及位置非常有用。

report_timing_requirements

Note:应该没有任何时序异常约束

13.检查是否有路径禁用时序分析。如果存在禁用的时序弧,需要和综合组成员核对在物理设计是否需要。

report_disable_timing


false path:一条时序路径不进行时序分析
disable timing:时序约束用于禁用时序弧,防止对包含时序弧的所有时序路径进行分析。
14.检查设计是否已经配置为特定“mode”或者“case”,例如功能和测试模式。这通过在时序分析和优化阶段将引脚和端口设置成0或1实现,而不是硬连线。检查设计是否处于物理设计的正确模式。

report_case_analysis


Note:由于没有列出管脚,因而没有被设置成常量的特殊引脚

15.检查时钟是否被精确建模

report_clock
report_clock -skew



Note:report_clock的输出确认了时钟没有传播。
(否则属性列表中会有p),这是在时钟树综合前想要的结果。
clock_skew报告确定时钟树影响正被建模。(插入延时,偏差,转换时间)
问题2:对于建立时间,偏差,抖动和裕量的组合建模的效果是什么?
回答:负不确定性和建立时间有关
16.应用./scripts/opt_ctrl.tcl里的一些时序和优化控制
Note:大多数的设置被单元1里的附录设置。一些在之后的单元被讨论,不用花时间在这儿去理解它们

source $ctrl_file

ctrl_file在dc.setup中被定义


17.运行一个零互联时序约束报告
在icc_shell中使用[Tab]键

source sc[Tab]z[Tab]


zic_timing.tcl脚本内容如下
18.上面的redirect -tee命令在屏幕上显示时序报告,并保存到文件中。可以通过在icc_shell中执行UNIX命令“cat”查看文件内容

exec cat zic.timing

向上并查看整个时序报告。有3个时序路径组被列出。每个路径组对应一条,称之为INPUTS、OUTPUTS和elk,这些路径组是在时序优化控制文件中被定义(在opt)

问题3:约束设计是否通过“ZIC”健全性检查
回答:


19“scan_enable”信号被定义为一个理想网络,在$sdc_file中可以看到(找到它),为了在综合时组织为这个信号插入Bufffer。在物理设计阶段需要移除理想时钟,为了可以在此阶段插入Buffer

remove_ideal_network [get_ports scan_en]


20.保存cell,并且观察risc_chip.mw/CEL下新的二进制文件

save_mw_cel -as RISC_CHIP_data_setup



至此已经完成了数据设置阶段。接下来进行floorplab,placement,CTS,routing,接下来的单元里详细了解这些阶段和相关命令。

Task3 基础流程:设计规划floorplan

本实验提供预定义floorplan——一个标准的存储floorplan信息的DEF文件。
DEF文件可以由ICC经过floorplan后生成或者由第三方floorplan工具生成。
1.读入提供的DEF文件

read_def $def_file

Note:也可以使用GUI操作:File—>Import—>Read DEF 读入./design_data/RISC_CHIP.def
2.layout窗口点击[F],看到整个FloorPlan这个单元。
3.确保标准单元被防止在power或者ground金属下(这个约束不是DEF的一部分)

set_pnet_options -complete {METAL3 METAL4}


4.保存设计单元并注意risc_chip.mw/CEL下的新的二进制文件

save_mw_cel -as RISC_CHIP_floorplanned


Task4 基础流程:布局placement

1.布局并优化时序

place_opt
redirect -tee place_opt.timing {report_timing}

问题4:布局满足时序吗?
回答:满足slack为正

2.layout窗口,放大并查看被放置的标准单元
问题5:这个能称之为“core limited”设计吗?
回答:不能,它的尺寸是由PAD决定的,而不是标准单元和硬核的面积决定。

Pad Limited与Core Limited
芯片的pad太多,超出规划预期的,叫Pad_Limited;因为芯片的Core面积太大,超出规划预期的,叫做Core_Limited。示意图如下,左边是Pad_Limited,右边是Core_Limited。简单看起来,Pad_Limited的芯片,因为pad太多,所以pad排布十分密集,相对来讲,Core就很小,芯片面积由Pad决定。Core_Limited的芯片,Core面积相对较大,而Pad则相对稀疏,芯片面积由Core决定。

分析拥塞:选择菜单中的?,下拉菜单中选择“Global Route Congestion ”,然后点击“Reload”,将会出现一个包含拥塞分析执行命令的对话框。在“(Re)Calculate Global Route Congestion Map Data”字段中列出以下命令

report_congestion -grc_based -by_layer -routing -stage global

点击“OK”

热图(heat map)显示在layout window中,有37个0溢出边,意味着有足够的布线轨道用于布线
3.点击拥塞对话框的小“x”,关闭拥塞地图
4.保存设计单元

save_mw_cel -as RISC_CHIP_placed


Task5 基础流程:CTS

1.使用默认设置产生时钟树。为了在时钟树综合阶段让ICC计算真正的时钟树偏斜,而不是约束中估计的时钟偏斜,首先移除时钟树的不确定性。并且打开保持时间修正,在CTS单元详细说明这个问题。

remove_clock_uncertainty [all_clocks]
set_fix_hold [all_clocks]
clock_opt
redirect -tee clock_opt.timing {report_timing}



问题6:时序时OK的吗?
回答:OK


2.显示时钟树:使用layout window上的菜单Clock—>Color By ClockTree,打开视觉模式对话框,点击“Reload”
在对话框中保证源端“clk”被选择(蓝色高亮显示)
在对话框底部选择“All Levels,Types”
点击“OK”

此时时钟树的金属互连,以及连接到时钟树的标准单元,IOpad,硬核都被高亮显示。观察时钟树如何从IO pad单元“clk_iopad”开始(外围的上侧右边缘),然后连接到所有的寄存器(“sdnrq#”或“sdcrq”)和硬核单元(可以通过放大并且鼠标悬停查看单元名字)

3.通过关闭(“x”)可视化窗口模式,移除时钟树高亮
4.保存设计单元

save_mw_cel -as RISC_CHIP_cts



5.我们仍需进行布线设计,首先通过点击File—>Exit—>Discard All退出ICC,或在icc shell下键入exit或quit并点击“OK”,接下来会解释为什么这么做?

Task6 基础流程:布线

Task5中退出ICC的原因在于以下步骤:启用新对话1,重新应用特定设置,以及从之前的地方继续。
如果不退出会发生什么?

1.启用ICC的GUI

icc_shell -gui

2.因为已经创建了设计库,并且CTS已经保存了布局单元,所以你需要做的就是从risc_chip.mw中载入RISC_CHIP_CTS。如下
a:在主窗口点击浅蓝色“open design”按钮,(处于界面左上方)。或使用菜单File—>Open Design
b:在“Open Design”对话框中,点击黄色文件夹图标。“Select library”对话框打开。选择设计库文件risc_chip.mw,并点击选择。
c:选择RISC_CHIP_cts,并点击“ok”去打开它

3.重新应用数据设置阶段的时序和优化控制。这是必须的,因为某些设置是使用变量设置的。通常变量设置不会和设计单元一起保存——仅在当前ICC编译器期间保持设置。退出并重新调用ICC编译器时,变量会重置为默认值。

source  $ctrl_file


4.现在我们继续为设计布线,这一步会考虑所有的信号线(时钟网络已经被“clock_opt”详细布线了)

route_opt



放大并查看一些布线细节
5.生成时序报告,应该可以看到一个正的时序裕量
Note:因为这个report输出的时间可能会很长,我们使用一个使用者创建的脚本命令“view”,它打开一个单独的窗口,在这个窗口里,输出可以被方便地滚动查看和搜索。“view”这个命令是一个TCL程序,这个workshop提前定义(在哪里?找到它)。并不是一个ICC标准命令,这个程序和其它及格程序被定义在…/ref/tools/procs.tcl
并且在.synopsys_dc.setup中被source(找到它)

view report_timing -nosplit
v rt

Note:下面的简写利用的是命令的别名,也在.synopsys_dc.setup中被定义(找到它)

source filename,sh filename,./filename的区别
①当脚本有执行权限时,sh filename 和./filename无区别
②sh filename重新建立一个子shell执行脚本中的语句,子shell继承父shell环境变量,但子shell不会影响父shell变量
③source filename简单地将脚本在shell里执行
6.默认情况下,时序报告显示最大延时或者建立时间时序。在CTS之后我们还需要产生最小延时和保持时间报告。应该查看是否有保持时间违例。

v rt -delay min

7.生成物理设计的统计数据

report_design -physical

Note:这个报告包含设计利用率,拥塞(溢出)等信息

8.保存设计

save_mw_cel -as RISC_CHIP_routed


9.退出icc shell

exit
#or
quit

至此就完成了数据设置阶段和在ICC中运行了RISC_CHIP的基础流程设计。

ICC学习——LAB1相关推荐

  1. ICC学习——LAB0A

    ICC学习--LAB0A 文章目录 ICC学习--LAB0A Task1 启动ICC Task2 layout视图导航 Task3 控制图层的可见性 Task4 选择和查询对象 Task5 得到关于命 ...

  2. ICC学习——LAB2

    ICC学习--LAB2设计规划 学习目标: 1.定义核心和放置的行结构 2.定义信号,PG,corner pad的位置 3.插入filler pad cell 4.手动放置macro 5.应用宏放置约 ...

  3. ICC 图文学习——LAB1:Data Setup 数据设置

    LAB1:Data Setup 数据设置 1. 数据准备 2. 创建Milkway设计库 3. 读入设计(网表文件) 4. 设置TLU+文件 5. 读入SDC文件 6. 检查设计的合理性 1. 数据准 ...

  4. ICC使用----ICC 1 Lab Guide学习笔记

    文章目录 Preface ICC 1 Lab Guide Note: 1.Data Setup & Basic Flow(P27) Learning Objectives Create a M ...

  5. linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务

    linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...

  6. 影像组学视频学习笔记(29)-ICC的计算、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学的系列教学视频 本节(29)主要讲解: 用pingouin包进行ICC的计算 1.ICC的wikipedia定义 In statistics, the in ...

  7. ICC 图文学习——LAB0:ICC图形界面

      解决了库的问题,开始上手跑lab了.在做lab的过程中,会补充一些相关的知识点和自己的学习笔记,加深理解,防止遗忘. LAB0:熟悉ICC图形界面 LAB 0A 1. 启动ICC 2. Layou ...

  8. IC验证培训——实战SV验证学习(lab1)

    路科决定给大家介绍更多与验证入门相关的知识,因此准备把Synopsys公司的一个十分适合新手的SV实验介绍给大家.在上一期的先导篇中我们介绍了验证在IC行业中的地位,验证的工作内容和验证平台的大概结构 ...

  9. Ucore学习笔记-Lab1基础知识

    系统软件启动过程 前言:计算机通过bootloader(引导装置)来完成操作系统程序的加载和运行.下面的实验提供了一个小的bootloader和Ucore OS,注意bootloader执行代码需要小 ...

最新文章

  1. ajax代码编程题,关于AJAX管家代码的几个基本问​​题
  2. java List 常见坑
  3. JVM内存模型分析(一个程序运行的例子)
  4. Android OkHttp经验小结
  5. php 文件上传框架,Laravel框架实现文件上传的方法分析
  6. Dash for mac(代码文档浏览器)v6.0.8
  7. 算法设计与分析(第二版)上机实验题——C语言实现
  8. Oracle中NB的中文处理
  9. [译] 人人都是设计师。我们可以的
  10. YASKAWA 安川变频器调试软件支持多种机型
  11. matlab freqz用法ba,【matlab】freqz函数的使用(一)
  12. 带你深入理解矩阵乘法
  13. ThreadLocal的介绍与使用
  14. CentOS 7 时区设置
  15. 2021-08-11BUU-CTF:[WUSTCTF2020]alison_likes_jojo
  16. 计算机如何把文件设为隐藏,电脑如何显示隐藏的文件夹 电脑怎么设置隐藏文件夹...
  17. 水晶苍蝇拍-其他系列之一
  18. 监听settings
  19. 再次强调完成的定义(DoD)
  20. 华为matepad鸿蒙系统,预装鸿蒙系统 华为MatePad Pro 2界面曝光

热门文章

  1. 腾讯云CDN2023年1月5日起,将按用户访问的 HTTPS 请求数次数单独计费,对我有影响吗?
  2. Linux C 遍历目录下的所有文件
  3. linux下组播遇到的问题及解决办法
  4. windows使用scp远程传输文件的方法
  5. Mac电脑怎么读写不了移动硬盘?解决苹果电脑不能读写移动硬盘问题
  6. 《设计模式》设计模式的基本原则
  7. 匈牙利命名法、驼峰式命名法、帕斯卡命名法
  8. qq服务器上的文件删除后如何恢复,qq文件过期怎么恢复(过期的QQ文件如何申请恢复)...
  9. C语言中对字符串的加密和解密
  10. 保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...