自学内容网 自学内容网

【DC简介--Part1】

1 overview

Designer Compiler(DC)就是对应着芯片设计流程中的synthesis(综合)。即:综合就是把行为级的RTL代码在工艺、面积和时序等约束下转换成相对应的门级网表;即对应着将RTL代码编译成实际电路的过程。
综合主要包括三个阶段:转换(translation)、优化(optimization)与映射(mapping)。
在这里插入图片描述

  • 转换阶段:综合工具即将高层语言描述的电路–>门级的逻辑实现;对于DC来说,就是使用gtech.db库中的门级单元来组成HDL语言描述的电路,从而构成初始的未优化的电路。
  • 优化阶段:综合工具对已有的初始电路进行分析,去掉电路中的冗余单元,同时会根据工程师提供的约束条件对初始电路进行优化,使得电路在满足逻辑功能的前提下,尽可能得往工程师约束的条件靠近(比如说面积最小等);
  • 映射阶段:综合工具将优化之后的电路映射到由制造商提供的工艺库上,这里的工艺库就是target_library,最后生成网表文件用于后端设计;
    在这里插入图片描述

1.1 DC操作步骤

下面是给出DC进行逻辑综合时的基本步骤;
在这里插入图片描述

1.2 Steps

1.2.1 Develop HDL files

1.Develop HDL files:即src/ 的module文件;

1.2.2 Specify libraries

Specify libraries:指定库文件,包括搜索路径-search_path、链接库-link library、目标库-target library、符号库-symbol library、综合库-synthetic library.

  • serach_path: 综合工具只会从该指定的路径去寻找各种库文件。

  • link library & target library: Link library 和 target library 统称为 technology library(即工艺库,习惯称之为综合库),technology library 由半导体制造商提供,包含相关 cell 的信息及设计约束标准,其中:
    Target library: 在门级优化及映射的时候提供生成网表的 cell,即DC用于创建实际电路的库。
    Link library: 提供设计网表中的 cell,可以跟target_library使用同一个库,但是 DC 不用 link library中的 cell 来综合设计。包含target_library,在此基础上再加上IO库文件,IP库文件等
    注意 :在 link_library 的设置中必须包含" * “,” * “表示 DC 在引用实例化模块 或者单元电路时首先搜索已经调进DC memory的模块和单元电路,如果在link library 中不包含” * ",DC 就不会使用 DC memory 中已有的模块,因此,会出现无法匹配的模块或单元电路的警告信息(unresolved design reference)。
    当 DC 读入设计时,它自动读入由 link library 变量指定的库。当连接设计时,DC 先搜寻其内存中已经有的库,然后在搜寻由 link library 指定的库。

  • Symbol library: 提供 Design Vision GUI 中设计实现的图形符号,如果使用脚本模式而不使用 GUI,可不指定 Symbol library.

  • Synthetic library: 虽然直译为综合库,但是常称为IP库,为Designware library。特殊的IP库需要授权(例如多级流水线乘法器),标准IP库由DC软件商提供,无需指定。
    这里只指定搜索路径(search_path)、链接库(link library)、目标库(target library)即可。

1.2.3 Read design

读入设计就是将编写好的HDL代码载入内存。

1.2.4 Define design environment

定义设计环境,定义对象包括工艺参数(温度、电压等)、I/O特性(负载、驱动、扇出);

1.2.5 Set design constraints

设置设计约束,包括设计规则约束(DRC,design rule constraints)和优化约束(optimization constraints),DRC由工艺库决定,在设计编译过程中必须要满足,用于使电路能按照功能要求正常工作。优化约束由工程师指定,为DC要达到的时序和面积优化目标。DC在不违反设计规则约束的前提下,尽可能满足优化约束。

1.2.6 Select compile strategy

选择编译策略。对于层次化设计,DC由top_down和bottom_up两种编译策略。
在top_down策略中,顶层模块和子模块一起编译,所有的环境和约束针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略中所有模块需要同时占用内存,硬件资源损耗打,不适合大型设计。
在bottom_up策略中,子模块单独约束,当子模块成功编译后,会被设置为dont_touch属性,不允许之后的编译过程修改,子模块编译完成后再向上编译父模块,直至顶层模块编译完成。由于该策略不需要所有模块同时占用内存,因此适用于大规模设计。

1.2.7 Synthesize and optimize the design

执行综合和优化,可以利用一些选项指导编译和优化过程。

1.2.8 Analyze and resolve design problems

分析及解决设计中存在的问题。DC在编译过程中会产生一系列报告,如时序、面积、约束、功耗等报告,工程师需要通过这些报告进行分析和解决设计中存在的问题。

1.2.9 Save the design database

保存设计数据。DC不会自动保存综合后的设计数据,因此需要手动保存网表、报告等数据文件。

2 具体前期准备工作

2.1 Specify librarys

DC会将我们的设计转换(translation)为一个中间格式——gtech网表;将gtech网表理解为FPGA中RTL Analysis之后得到的RTL级网表,它不与任何具体的FPGA相关,例如RTL级网表可能包含加法器,但是FPGA上只有LUT,并没有加法器。得到gtech网表之后,我们需要根据给定的约束,去选择真实的合适的器件,那么这个时候可以类比于将RTL级网表映射到某一块具体的FPGA上,类似于FPGA开发中的synthesis。
DC运行库中需要的几种库文件:

  • 目标库(target_library)
  • 链接库(link_library)
  • 符号库(symbol_library)
  • 综合库(synthetic_library)

2.1.1 什么是库?

  • 目标库: 是gtech网表要最终映射(mapping)到的库,库文件有两种格式,有以.lib结尾和.db结尾,.lib是可以阅读的。
    下图是具体的一个目标库文件-target_libray: 包含了各个单元cell的行为、引脚、面积、时序信息等,DC会根据用户给定的约束(例如时钟频率和面积等)去选择合适的单元,去掉冗余的单元,最后将优化之后的电路映射(mapping)到目标库(target_library)上。
    在这里插入图片描述

可以把这个目标库(target_library)理解为一个非常大switch语句,它的变量是各种时序要求等,映射(mapping)就是DC根据时序要求等去选择合适的cell,即选择合适的case

  • 链接库(link_library) 是设置模块或单元电路的引用,指定购买的付费IP、存储器、IO等,例如我们购买了Synopsys的某个IP,则需要在这个地方指定。
  • 符号库(symbol_library) 定义单元电路Schematic库,在design_vision图形化模式下查看综合图标需要设置,后缀是.sdb
  • IP库(synthetic_library) 也称模型库,DC综合时用来将HDL代码转化为相对应的元件时所参考的模型库,比如RTL中的符号“+”,可以通过查找模型库将生成某一类加法器。默认的synthetic library一般有:dw_foundation.sldb. 在design compiler的安装目录下可以找到。

2.1.12 进行库(libraries)指定

set_app_var target_library ../lib/smic18_ss.db //指定目标库  ff和ss代表不同的工艺角

set_app_var link_library ../lib/smic18_ss.db //指定链接库

在这里插入图片描述

2.2 Read design

specify libraries之后就是read_file,在前文,我们不断提到gtech网表,gtech网表是根据我们的设计转换而来,那我们首先介绍一下什么是转换以及怎么转换?

2.2.1 什么是转换(translation)

首先需要将设计HDL代码导入DC中,DC会使用内部的单元(cell)来替换我们的设计文件,也就是使用gtech.db库中的单元cell来组成一个中间的网表getch网表
经过转换(translation)RTL or gate or behavior ——> gtech
在这里插入图片描述

具体转换的过程:
在这里插入图片描述

转换的过程中:DC会进行结构级和逻辑级的优化;比如通过公用表达式,进行结构级优化;通过展平,把组合逻辑路径减少两级,变为乘积之和的电路进行逻辑优化;
在这里插入图片描述

2.2.2 读入文件进行转换

将设计载入DC中,具体是读入设计文件命令:


read_verilog ../rtl/clock.v  
read_verilog ../rtl/register.v
read_verilog ../rtl/cells-lib/dffr.v
read_verilog ../rtl/cells-lib/mux.v

逐条读入时默认指定最后一个为top模块,但建议在任何情况下都要单独指定top模块。

2.2.3 转换后的gtech网表

即将生成的gtech网表保存在unmapped文件夹之下/
在下方得到新的design_gtech_netlist.v来进行对比;

read_verilog ../rtl/cells-lib/dffr_RTL.v  

current_design dffr_RTL

write_file  -f verilog -hier -o ../unmapped/design_gtech_netlist.v

在这里插入图片描述

如果直接在elaborate或者read_file后导出gtech网表,生成的gtech网表会有很多cell不能map到gtech. 比如时序逻辑生成 SEQGEN来表示 \ 如果要生成完全可以map的gtech网表,需要综合compile,这要在设置完约束之后。

在compile前,gtech网表中不仅仅只有与非门、异或门这种门电路符号,还有时序器件符号SEQGEN,如果设计中使用加、减、乘和比较等运算,gtech 会将其提取出来并用以带有OP标识的符号表示,这方便后续进行高级别电路优化;另外,设计中避免不了使用选择逻辑,如不特别声明,DC在这一阶段对选择逻辑用SELECT_OP表示,且在后续的映射阶段并不一定将SELECT_OP映射成多路选择器,而是采用与非门电路来实现其功能,如果想要映射成多路选择器,那么需要在RTL中声明synopsys infer_mux。

未完待续…
[ref]
1.https://blog.csdn.net/qq_23958451/article/details/108189446
2.https://zhuanlan.zhihu.com/p/605629775


原文地址:https://blog.csdn.net/li_kin/article/details/144811616

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!