综合
本文主要介绍综合相关知识,依据上课内容总结
印象笔记链接为:链接
文章主要内容见下:
什么是综合
综合是从基于HDL语言的RTL描述构造出电路门级网表的过程。它把抽象的设计转换为可制造的器件,IC前端和后端设计交互的重要桥梁。
综合的步骤
- 翻译:读入电路的RTL源码,将其转化为与工艺无关的功能组件的逻辑电路的过程。(这一过程的结果是在综合器内部生成电路的布尔函数表达式,不做任何的逻辑重组和优化)
- 优化:基于所施加的一定时序和面积等约束条件,综合器按照一定的算法对翻译结果作逻辑重组和优化
- 映射:根据所施加的一定的时序和面积约束条件,综合器从目标工艺库中搜索符合条件的单元来构成实际电路,得到门级网表,包含了具体的制造工艺参数(时序,面积)
综合=翻译+优化+映射
综合的特点
- 约束驱动。综合工具依据设定的目标面积和延时(频率)进行优化
- 基于路径。以路径为基础进行优化。使用静态延时分析(Static Timing Analysis ,STA)来计算设计中的路径延时。
在不用动态模拟的情况下进行电路的延时约束分析(即STA)包含以下几个步骤:
- 分解为多组路径
- 计算每条路径的延时
- 查看所有路径的延时是否满足延时约束
路径(延时路径)的划分为如下分类的一种,并且具有连接关系的通路:
- 输入(时钟,rst除外)到FF的D端
- FF的clk到下一个FF的D端
- FF的clk到输出(时钟,rst除外)
- 输入(时钟,rst除外)到输出(时钟,rst除外)
综合的优势
- 方便设计师采用较高抽象层次的设计方法,集中精力关注高层次的行为级设计;提高IP软核的设计效率
- RTL代码设计与工艺无关,更具灵活性
基于综合的划分
- 什么是划分?
划分是将复杂设计分割成更小部分的过程 - 为什么要划分?
由许多相互冲突的需求决定:- 分割特定功能(如ALU,控制器)
- 获得可工作的设计尺寸和复杂性
- 方便设计的团队管理项目
- 提高设计的重用性(使用IP)
- 满足物理约束
- 如何进行划分?
- 在编写RTL代码时,做好初步划分
- 综合时对划分进行修改
- group:将指定的示例组合为一个模块,生成新的层次划分
- ungroup:取消一个或所有模块的区分
- 好的划分标准
-
组合逻辑尽量不跨模块
-
模块尽量以寄存器输出为边界
-
模块大小均匀
-
其他原则,如:不同时钟域分离、数字模拟分离、方向不同的逻辑分离等等
-
可综合的三大编码原则
1.想到RTL
RTL代码意味着寄存器的结构与寄存器间的功能,综合工具优化寄存器间的逻辑,但不优化寄存器的布局
2.想到硬件
写HDL时想到代码对应的硬件实现,如加法器(CLA)逻辑级数为\(log_k(N+3) \quad ,k\) 一般取2。不要写HDL模拟模型(不要直接写出延时,不要读写文件,不要使用wait)
3.想到同步
同步设计可以顺利应用于综合、测试、模拟和版图设计过程,对EDA工具友好。
异步设计可能需要手工构造且花费大量时间来模拟验证正确性,对EDA工具不友好。
原则为:局部同步+专门的异步转换逻辑(异步FIFO等
编码综合指南
if语句的综合
- 任何没有完全描述所有情况的信号将产生latch。目标是消灭一切latch(锁存器),凡是latch能完成的逻辑flip-flop一样能够完成。
- if体现优先级
case语句的综合
case语句隐含着并行多路功能,一般对应着多路选择器。
同样也应该覆盖到所有case情况,使用default语句。
循环语句的综合
综合过程中,for循环在翻译过程中展开,再综合。下面两幅图是一个对比例子,它们实现了相同的功能,但是综合的结果是不相同的:
Flip-Flops的综合
将一个信号“寄存”意味着用时钟将它打入一个Flip-Flop,为了让综合工具生成flip-flop,代码中必须指定在另一个信号的边沿对当前信号进行赋值。
综合工具可以用各种类型的flip-flop和latch来综合,最终的寄存器类型取决于代码类型(包括质量和原语)与目标库中的可用寄存器类型。
查看综合工具的引用报告:
1. 消灭一切latch
2. 90%异步复位
算术电路的综合
DesignWare library 包含诸多算术运算的多种实现方法,部件都是与工艺无关的软宏,综合工具根据速度/面积评估的结果来挑选最优的实现。
代码类型决定了电路拓扑,编译器对表达式从左到右进行语法分析,括号的优先级最高,依据上述次序构造的电路是综合工具优化的起点。例如,改变操作数次序或者使用括号可以生成不同的电路结构
总结
综合的质量取决于算法
- 像电路一样,算法也会对速度、面积、存储容量、代码长 度和复杂性等因素进行折衷。
- 要选择算法、结构和应用来达到设计性能。
- 源码对综合结果质量的影响最大。
- 所选择的算法和结构影响最终的硬件实现。
Design Compiler工具
DC需要一个启动文件来定义工艺库的路径和其他逻辑综合的系统变量,名为“.synopsys_dc.setup“,通过向相关系统变量赋值,定义工艺库的位置及参数等。
系统库:
-
synthetic_library:综合库,包含了一些可综合的与工艺无关的IP
-
target_library:目标库,目标库是综合工具将RTL级的HDL进行逻辑推断 并映射到门级时所需要的标准单元库,是由芯 片制造商 (Foundry)提供的工艺库,包含了端口 、时延、功能、面积、电气特性等物理信息的 单元模型。
-
link_library:
用来解析网表中单元和子设计引用。自底向上 (bottom-up)的综合过程中,上一层的设计调用底 层已经综合好的模块时,将从link_library中寻找 并连接起来。一般包含target libaray和synthethic library,加上Pad,Memory,PLL 等db。
-
symbol_librory:
包含工艺库中单元的图形符号表示,以扩展名*.sdb 为标识;用于图形化前端工具表示门级原理图。一 般厂商提供的工艺库都有其相应的符号库,工艺库 和符号库间的单元名和引脚名必须准确匹配。
设计的对象
DC将设计的对象分为8类(DC+NC+RP+PL)
- 设计Design :能完成一定逻辑功能的电路描述;
- 单元Cell:设计中包含的子设计的实例;
- 连线Net : ports和pins之间或pins之间的信号名;
- 时钟Clock :被定义为时钟源的pin或port;
- 引用Reference :单元实例所引用的设计原型;
- 管脚Pin :design中cell的输入、输出;
- 端口Port : design的输入、输出;
- 库 Library :生成门级网表的基本单元或设计中被实 例化的单元集合,是直接与工艺相关的单元的集合。
获取对象的方法有find(),get_* (),all_* () ,如find(port,“port1”),get_ports("port1")等等具体不细说了。
设计的变量
变量,一种标识符,DC用于存储信息,可做为命令的操作参数。有DC自己定义的,也有用户自己定义的。
设计的属性
属性存储特定对象的信息。如线网/单元/时钟的信息。
读入/写出设计
向DC输入HDL设计 :
read/ analyze&elaborate
输出网表、面积、时序、功耗等信息:write/report_*
设置约束
设置面积约束
设置时序约束
定义时钟
设置input_delay
设置output_delay
设置伪路径
set_false_path:指示DC不要对指定的路径按照时序约束优化, 如:异步路径或约束实际不会出现的路径。
false path路径的鉴别在设计中很关键,如果不对false path路径进 行标识,DC会对所有的路径进行优化,从而影响优化关键路径。
伪路径的另外一种情况:某些看起来是输入,实际在 实例化时固定连0或1的路径,有时也需设置伪路径。
设置多周期路径
设置多周期路径约束的目的:放松该路径时序要求,便于优先满足其他路径的布线,也有可能减少编译时间。
set_multicycle_path因为DC假设所有的路径都是单周期的, 为了满足时序,对多周期路径会做不必要的优化,从而影响 相邻路径或面积。该命令用于隔离多周期路径,通知DC通过 这条路径所需的周期数。
设置设计的环境
工作条件
半导体厂商提供的工艺库一般会包含不同的工作条件,这些工作 条件包含设计的工艺、电压和温度三个方面,通常描述为worst、 typical和best三种情况
线负载模型
线负载模型:估计pre_layout电路中net的电容,电阻及面积。
负载及驱动能力
为了保证输出路径的时序,使用set_load定 义nets或ports的电容负载。默认时端口上外部电容负载为0。
处理存储IP
延时缩放
- 由于后端布局布线、CTS插入等因素,一般来说综合时的约束, 往往要严格于目标频率要求。如目标频率1GHz,设置的时钟周 期可能为0.5ns。
- 存储IP不需要考虑后端布局布线、CTS插入等因素,其周期可 能已经接近或大于0.5ns。
- 如果直接综合,综合器将只会报出存储IP的相关路径违反且不 去优化其它路径。
编译优化策略
自顶向下编译:将整个设计作为一个模块进行编译,仅需top level约束。
优点:
• 仅需top_level的约束;
• 将整个设计作为整体优化,可获得较好的结果。
缺点:
• 编译时间长;
• 子模块的改变需要整个设计重新综合。
自底向上编译:子模块可独立编译,适合于划分合理,各自模 块的时序约束能够被明确定义的设计。
优点:
• 减少多次被引用模块的综合时间;
• 每一个子模块都由自己的Scripts文件,便于管理;
• 子模块的改变不需要整个设计全部重新综合。
缺点:需要更新维护多个scripts。
浙公网安备 33010602011771号