逻辑综合系列主要说明以下问题:
- 为什么要逻辑综合
- 逻辑综合的基本原理
- 逻辑综合需要提供哪些文件
- 逻辑综合过程中施加约束
- 逻辑综合能产生那些结果
综合是前端设计的重要步骤之一,其过程是将行为描述的电路、RTL级的电路转换到门级,其目的在于:决定电路门级结构,寻求时序与面积的平衡,寻求功耗与时序的平衡,增强电路的测试性。常见的工具是synoosys公司的 Design Compiler,将HDL语言描述的电路转换到基于工艺库的门级网表。
逻辑综合的步骤为:转译(Translation)、优化(Optimize)、映射(Mapping)。
DC在综合过程中会将电路划分为以下的处理对象:
- Design:整个需要综合的电路,即我们待综合的对象
- Port:最外部的端口,一般是电路与外部交互的IO口
- Clock:由于时钟上的任何问题都会对电路造成重要的影响,所以时钟需要单独处理
- Cell:被例化的模块
- Reference:例化模块的原电路
- Pin:Cell自身的引脚,注意与Port的区别
- Net:内部连线
用Design Compiler做综合的流程如下:
其实施流程为:
- 预综合过程(pre-synthesis process)
- 施加设计约束(contrainting design)
- 设计综合(synthesizing design)
- 后综合过程(post-synthesis process)
①准备设计文件,DC 的设计输入文件一般为 HDL 文件。
②指定库文件,需要指定的库文件包括:
链接库(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的物理综合的时候,需要生成物理库
③读入设计 :
设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等组成,这些组件来自 synopsys 的 synthetic lib,每种组件具有多种结构。
读入设计有两种实现方法实现方法:read 和 analyze & elaborate(实际上
read 是 analyze 与 elaborate 的打包操作 ),下面介绍二者在使用中的区别:
从中可以看到,analyze & elaborate 可以自由指定设计库,并生成 GTECH中间文件前生成.syn 文件存储于 work 目录下,便于下次 elaborate 节省时间,我们一般选择 analyze & elaborate 的方法读入设计。
④定义设计环境:
定义对象包括工艺参数(温度、电压等),I/O 端口属性(负载、驱动、扇出),统计 wire-load 模型,设计环境将影响设计综合及优化结果。
⑤设置设计约束:
设计约束包括设计规则约束和优化约束,设计规则约束(design rule constraint)由工艺库决定,在设计编译过程中必须满足,用于使电路能按功能要求正常工作。设计优化约束定义了 DC 要达到的时序和面积优化目标,该约束由用户指定,DC 在不违反设计规则约束的前提下,遵循此约束综合设计。
⑥选择编译策略:
对于层次化设计,DC 中有两种编译策略供选择,分别为 top down 和 bottom up。在 top down 策略中,顶层设计和子设计在一起编译,所有的环境和约束设置针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略不适合与大型设计,因为 top down 编译策略中,所以设计必须同时驻内存,硬件资源耗费大。在 bottom up 策略中,子设计单独约束,当子设计成功编译后,被设置为 dont_touch 属性,防止在之后的编译过程中被修改,所有同层子设计编译完成后,再编译之上的父设计,直至顶层设计编译完成。Bottom up 策略允许大规模设计,因为该策略不需要所有设计同时驻入内存。
⑦编译:
用 Compile 命令执行综合与优化过程,还可以利用一些选项指导编译和优化过程。
⑧分析及解决设计中存在的问题
DC 可以产生一些报告以反应设计的综合和优化结果,如:时序、面积、约束等报告,这些报告有助于分析和解决设计中存在的问题以改善综合结果,我们还可以利用 check_design 命令检验综合的设计的一致性。
⑨存储设计数据
DC 不会自动存储综合后的设计结果,因而需要在离开 DC 时手动存储设计数据。比如存储网表、延时信息等数据文件。