【DC简介--Part1】

DC简介-Part1

  • [1 overview](#1 overview)
    • [1.1 DC操作步骤](#1.1 DC操作步骤)
    • [1.2 Steps](#1.2 Steps)
      • [1.2.1 Develop HDL files](#1.2.1 Develop HDL files)
      • [1.2.2 Specify libraries](#1.2.2 Specify libraries)
      • [1.2.3 Read design](#1.2.3 Read design)
      • [1.2.4 Define design environment](#1.2.4 Define design environment)
      • [1.2.5 Set design constraints](#1.2.5 Set design constraints)
      • [1.2.6 Select compile strategy](#1.2.6 Select compile strategy)
      • [1.2.7 Synthesize and optimize the design](#1.2.7 Synthesize and optimize the design)
      • [1.2.8 Analyze and resolve design problems](#1.2.8 Analyze and resolve design problems)
      • [1.2.9 Save the design database](#1.2.9 Save the design database)
  • [2 具体前期准备工作](#2 具体前期准备工作)
    • [2.1 Specify librarys](#2.1 Specify librarys)
      • [2.1.1 什么是库?](#2.1.1 什么是库?)
      • [2.1.12 进行库(libraries)指定](#2.1.12 进行库(libraries)指定)
    • [2.2 Read design](#2.2 Read design)
      • [2.2.1 什么是转换(translation)](#2.2.1 什么是转换(translation))
      • [2.2.2 读入文件进行转换](#2.2.2 读入文件进行转换)
      • [2.2.3 转换后的gtech网表](#2.2.3 转换后的gtech网表)

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)指定

sh 复制代码
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中,具体是读入设计文件命令:

sh 复制代码
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来进行对比;

sh 复制代码
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

相关推荐
悟乙己15 天前
PySpark EDA 完整案例介绍,附代码(三)
数据挖掘·数据分析·pyspark·eda·数据清理
YoungUpUp1 个月前
【电子设计自动化(EDA)】Altium Designer25——电子设计自动化(EDA)软件版保姆级下载安装详细图文教程(附安装包)
运维·设计模式·fpga开发·自动化·eda·电路仿真·电子设计自动化
进击的奶龙2 个月前
05dc环境约束
eda
进击的奶龙2 个月前
04时序约束文件的编写
eda·dc综合
进击的奶龙2 个月前
03数字ic综合文件内部对象
eda·dc综合
三贝勒文子2 个月前
Synopsys 逻辑综合之 MultiBit Flip-Flop 与 ICG
fpga开发·eda·synopsys
进击的奶龙2 个月前
01数字IC综合
eda·dc综合
进击的奶龙3 个月前
02VCS_使用教程
verilog·仿真·eda
进击的奶龙3 个月前
01EDA简介
eda
阳排5 个月前
Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法
集成电路·eda·virtuoso·ade