综合与DC(一):基本概念

​ 写一个系列吧,从综合与DC写起,算是前端的一部分。后边会跟上后端,以及前端的一些经典电路、模块的设计,EDA工具的使用。

1. 前言

​ 现在的电路规模已经达到百万门、千万门,SOC更甚之。人力在这种规模面前显得就太苍白渺小了,所以EDA工具在现代集成电路设计流程中有着举足轻重的作用。电路设计人员主要面向的还是EDA的使用,而不是底层的优化算法、调度控制等等。

​ 本科的时候,学过一些EDA工具的使用,vcs、dc、ICC、PT、SPICE等(吹爆强哥)。但由于当时知识和动手能力的局限性,只是流于皮毛,大概知道了每个工具是做什么的,没有在具体的设计中深入研究、使用过。上学期,课程设计有机会从前到后都跑了一遍。最近,在看论文之余,希望能借助一些书、一些大牛博客以及厂商给的workshop,再把重点强化一些,把精细化分工的各个环节再过一遍。

2. 逻辑综合概述

​ 基本的综合可以用一个等式来表达:synthesis = translation + logic optimization + gate mapping。

​ 下面通过三张图来整体把握以下DC在IC设计中所处的环节、以及主要完成的工作。

2.1 图1

DC1

  1. 设计之前,准备好库、HDL代码的思想、约束生成;然后根据设计思想用 RTL 源码详细地、完整地为设计建立模型、定义设计中寄存器结构和数目、定义设计中的组合电路功能、定义设计中寄存器时钟等等的设计规格和实现。
  2. 完成 RTL 源码设计之后,应让设计开发与功能仿真并行进行.
    • 在设计开发阶段,我们使用 DC 来实现特定的设计目标(设计规则和优化约束),以及执行默认选项的初步综合.
    • 如果设计开发结果未能在 10%的偏差范围内满足时序目标,则需要修正 HDL 代码,然后重复设计开发和功能验证的过程
    • 在功能仿真中,通过特定的工具来确定设计是否能按如所需的功能工作
    • 如果设计未能满足功能要求, 我们必须修改设计代码以及重复设计开发和功能仿真. 继续设计开发和功能仿真直至设计功能正确及满足小于 10%偏差的时序目标.
  3. 使用 DC 完成设计的综合并满足设计目标.这个过程包括三个步骤,即综合=转化+逻辑优化+映射,首先将 RTL 源代码转化为通用的布尔等式(Gtech),然后设计的约束对电路进行逻辑综合和优化,使电路能满足设计的目标或者约束,最后使用目标工艺库的逻辑单元映射成门级网表,在将设计综合成门级网表之后,要验证此时的设计是否满足设计目标.如果不能满足设计目标,此时需要产生及分析报告确定问题及解决问题.
  4. 当设计满足功能、时序以及其他的设计目标的时候,需要执行物理层设计最后分析物理层设计的性能,也就是使用DC的拓扑模式,加入floorplan的物理信息后进行综合分析设计的性能。如果结果未能满足设计目标,应返回第三步.如果满足设计目标,则本部分设计周期完成.

2.2 图2

DC3

​ 图2将图1中DC内的部分细化。在综合的时候,首先DC的HDL compiler把HDL代码转化成DC自带的GTECH格式,然后DC的library compiler 根据标准设计约束(SDC)文件、IP-DW库、工艺库、图形库、(使用拓扑模式时,还要加入ICC生成的DEF模式,加载物理布局信息)进行时序优化、数据通路优化、功耗优化(DC的power compiler进行)、测试的综合优化(DC的DFT compiler),最后得到优化后的网表。

2.3 图3

DC2

​ 图三为DC内部的综合流程图,以及相应的一些命令

2.3.1 准备设计文件,coding工作。

### 2.3.2 指定库文件、工作目录等。==补充命令示例==

指定库文件,需要指定的库文件包括:链接库(link library) 、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)

  • 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 来综合设计。当 DC 读入设计时,它自动读入由 link library 变量指定的库。当连接设计时,DC 先搜寻其内存中已经有的库,然后在搜寻由 link library 指定的库。

    :当读入的文件是门级网表时,需要把 link library 指向生成该门级网表的库文件,否则 DC 因不知道网表中门单元电路的功能而报错。

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

  • Synthetic library。即为 Designware library ,名字上翻译是综合库,但却常称之为IP库,而不是直译。特殊的 Designware library 是需要授权的(比如使用多级流水线的乘法器),默认的标准 Designware 由 DC 软件商提供,无需指定。

  • Create_mw_lib :主要使用DC的物理综合的时候,需要生成物理库

2.3.3 读入设计。

设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等组成,这些组件来自 synopsys 的 synthetic lib,每种组件具有多种结构。读入设计有两种实现方法实现方法:readanalyze & elaborate(实际上read 是 analyze 与 elaborate 的打包操作 )。两种的主要区别如下表:

读入

从中可以看到,analyze & elaborate 可以自由指定设计库,并生成 GTECH中间文件前生成.syn 文件存储于 work 目录下,便于下次 elaborate 节省时间,一般选择 analyze & elaborate 的方法读入设计。

2.3.4 定义设计环境。

定义对象包括工艺参数(温度、电压等),I/O 端口属性(负载、驱动、扇出),统计 wire-load 模型,设计环境将影响设计综合及优化结果。这一步主要是针对库的选择。

这里的wire load model是根据自己设计的规模自己选定的,并没有后端布线的真实情况。所以并不会很准确。

2.3.5 定义设计约束。

包括设计规则约束和优化约束,设计规则约束(design rule constraint)由工艺库决定,在设计编译过程中必须满足,用于使电路能按功能要求正常工作。设计优化约束定义了 DC 要达到的时序和面积优化目标,该约束由用户指定,DC 在不违反设计规则约束的前提下,遵循此约束综合设计。

2.3.6 选择编译策略。

对于层次化设计,DC 中有两种编译策略供选择,分别为 top downbottom up。在 top down 策略中,顶层设计和子设计在一起编译,所有的环境和约束设置针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略不适合与大型设计,因为 top down 编译策略中,所有设计必须同时驻内存,硬件资源耗费大。在 bottom up 策略中,子设计单独约束,当子设计成功编译后,被设置为 dont_touch 属性,防止在之后的编译过程中被修改,所有同层子设计编译完成后,再编译之上的父设计,直至顶层设计编译完成。Bottom up 策略允许大规模设计,因为该策略不需要所有设计同时驻入内存。

2.3.7 编译

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

2.3.8 分析及解决设计中存在的问题

DC 可以产生一些报告以反映设计的综合和优化结果,如:时序、面积、约束等报告,这些报告有助于分析和解决设计中存在的问题以改善综合结果,我们还可以利用 check_design 命令检验综合的设计的一致性。

2.3.9 导出设计数据

DC 不会自动存储综合后的设计结果,因而需要在离开 DC 时手动存储设计数据。比如存储网表、延时信息等数据文件。

3. Reference

[1]:Tcl与Design Compiler (三)——DC综合的流程

基本概念都是来自这位同行的说法,只是对一些地方加了些自己的见解。下一篇中会补充上自己原来综合用的脚本。

本文结束啦感谢您的阅读