综合讲义
- 格式:doc
- 大小:709.00 KB
- 文档页数:22
1.概述1.1. 综合的目的综合是完成从RTL代码到门级电路的转换。
如果在综合时,链接了厂家的库文件,则门级电路使用的器件是厂家库文件中提供的器件。
综合在整个IC设计中,起到的作用如图1所示。
图 1 综合在IC设计中的作用由于目前IC设计规模日益增大,设计难度不断提高,设计人员必须通过综合工具实现综合任务。
目前IC所采用的是综合工具是Synopsys公司的Design Compiler。
本讲义紧密结合了Design Compiler的应用。
1.2. 综合的特性1.2.1. 综合是由约束驱动的对于一个设计来说,在进行综合前,需要给这个设计加上约束,约束也就是综合的目标,综合工具会竭力满足约束,以实现综合的目标。
约束可分为多方面,如时序方面的约束、面积方面的约束、环境属性方面的约束、驱动和负载方面的约束等。
其中最重要的约束是对时钟等与时序相关的属性进行约束。
在综合时,约束的各个方面可能存在一定的矛盾,如对速度和面积的约束,见图2所示。
综合的过程就是找到一个最好的平衡点,满足各个方面的约束。
图 2 约束中速度与面积间的关系好的、合理的约束,是综合成功的关键。
不同的约束会导致不同的综合效果。
1.2.2. 综合是基于path分析的在整个综合的过程中,完成是基于path进行时序分析的,因此path的概念非常重要。
何谓path?如下图所示。
图 3 Timing Path的概念Path是综合工具进行时序分析的基本单位。
对于一条path而言,它的起点只能是输入端口,或者触发器/寄存器的时钟端;终点只能是输出端口,或者触发器/寄存器的数据输入端(对D触发器而言,就是D端)。
结合图3而言,其中共有4条path,分别为:1)输入端口A -> FF2的D端;2)FF2的CK端-> FF3的D端;3)FF3的CK端-> 输出端口Z;4)输入端口A -> 输出端口Z。
同一个时钟域多条path,组成一个组,称为path group。
与任何时钟都没有关系的path 也组成一个组,成为default path group。
结合图3而言,有2个path group,其中path 2和path 3 属于时钟CK的path group,path 1和path 4属于default path group。
在计算一条path的延时信息时,是将这条path上所有线延时加上所有的器件单元延时。
1.3. 综合的步骤对于Design Compiler而言,综合的步骤如下:1)将需要进行综合的设计读入Design Compiler的内存中;2)对设计添加合适的约束;3)对设计进行综合优化;4)分析综合的结果是否满足要求;5)如果满足要求的话,保存综合的结果。
综合的主要过程也可以用图4进行表示。
图 4 综合的主要过程2.Design Compiler简介2.1. Design Compiler接口模式Design Compiler是Synopsys公司推出的综合工具,在业界有较广泛的应用。
Design Compiler有三种接口方式:图形化接口、dc shell接口和dc shell tcl接口。
图 5 Design Compiler的接口方式对于初学者来说,建议使用图形化方式,便于使用,同时建议打开命令窗口,以便可以尽快熟悉Design Compiler的命令。
图形化方式需要占用较多的内存资源,运行速度相对命令行方式来说较慢。
2.2. Design Compiler启动脚本文件Design Compiler启动时需要执行一个启动脚本文件,该文件名为.synopsys_dc.setup。
执行该脚本文件帮助DC链接指定的库文件,也就是综合需要使用的厂家库文件。
库文件是由厂家提供的,而不是由Synopsys公司提供。
.synopsys_dc.setup文件可以放在下面三个目录下:1)$SYSNOPSYS/admin/setup2)用户的home目录3)用户的当前工作目录DC 启动时搜索.synopsys_dc.setup 文件的顺序为先查找用户的当前工作目录,然后查找用户的home 目录,最后再查找$SYSNOPSYS/admin/setup 目录。
若在用户的当前工作目录下存在.synopsys_dc.setup 文件,则直接使用该文件启动DC 。
建议将.synopsys_dc.setup 文件放在用户的当前工作目录下,方便使用和修改。
.synopsys_dc.setup 文件中需要为DC 指定链接的库文件,这是通过设置target_library ,link_library ,symbol_library 等保留字变量实现的。
target_library 指定的库文件是DC 在搭建电路时使用的库。
在DC 映射的过程中,会根据电路功能选择库中的器件,并在时序分析时,使用库中各器件的timing 数据。
link_library 指定的库中包含HDL 源代码所有单元的示例,综合使用的线载模型和工作环境模型。
symbol_library 指定的库用来将库中的器件用图形表示出来。
下面是一个.synopsys_dc.setup 文件的例子(节选其中部分内容)。
另外,为了能使用户当前工作目录的条理清晰,建议在DC 的当前工作目录下,划分source 、scripts 、mapped 和reports 等子目录。
在source 子目录下存放RTL 源代码,scripts目录下存放综合的各种约束文件,mapped目录下存放综合后的网表文件,reports目录下可以用来存放各种报告文件。
3.Partition的意义Partition是把复杂的、规模较大的设计划分为多个规模适中的部分,以便综合时间不要过长,比较容易得到满足要求的综合结果。
Partition应该在编写RTL代码前进行,在方案设计时就充分考虑模块的大小、模块间的连接等要素。
只有这样才能够得到比较好的partition结果。
综合中,能够对partition进行一定的调整,但效果有限。
所以这里要强调,partition应该在编写RTL代码前进行。
综合中进行partition的主要原则有:1)不要有组合逻辑穿过层次边界;2)每个层次边界,最好以寄存器做输出;3)不要有胶合逻辑(glue logic)穿过层次边界;4)限制每个块(block)的大小;5)把输入输出pad、时钟产生模块、JTAG模块和核心逻辑分开。
下面结合多个例子,说明partition的原则。
例1:图 6 Partition的原则(例1)-a这个例子中,模块B是一个纯组合逻辑的电路,跨接在模块A和模块C之间,违背了原则1。
另外模块A以组合逻辑输出做为层次的边界,违背了原则2。
对于例1来说,较好的partition方式如下图所示。
图7 Partition的原则(例1)-b例2:每个模块都是以寄存器输出,满足原则2,所以是一个比较好的partition结果。
图8 Partition的原则(例2)例3:在这个例子中,模块A、B、C间有一个两输入与非门,这个两输入与非门属于胶合逻辑,穿过了模块A、B、C的边界,违背了原则3。
图9 Partition的原则(例3)-a对例3的修改方法如下图所示。
图10 Partition的原则(例3)-b例4:这个例子中,时钟产生模块、异步逻辑模块、输入输出PAD、JTAG模块与核心逻辑模块CORE是划分开的,满足原则5,是个很好的partition。
图11 Partition的原则(例4)4.约束文件学习使用DC的命令,设置约束,是本教材的核心内容。
对一个需要进行综合的设计,如果不加任何约束就进行综合是没有任何意义的。
只有加上了合理的约束后,综合算法才有目标,才能综合出满足需求的电路。
对设计需要加上的所有约束、命令可以写入脚本(script)文件中,就成为约束文件。
4.1. 约束文件应包含的基本内容一般情况下,约束文件中应该包括以下内容,如下图所示。
图12 约束文件的基本内容其中主要有对时钟的定义,并定义时序方面的其他约束,如设置input delay,output delay 等。
对于输入信号、输出信号,还要考虑其驱动、负载问题,这是通过设置输入信号的driving cell,设置输出信号的load来实现的。
工作条件对芯片性能的影响也是必须考虑的因素,需要设置operating condition。
随着制造工艺的不断提升,线延时成为延时信息中越来越重要的部分,因此也要考虑设置线载模型。
这些是主要的约束条件,在实际工作中,约束文件中还需要其他一些约束条件,详细情况见下面的章节。
4.2. 与时钟相关的约束综合中,最重要的约束条件就是与时钟相关的约束条件。
在这些约束条件下,DC进行综合,并尽可能满足时序方面的要求。
4.2.1. 时钟的定义定义时钟时,必须给出时钟周期、时钟的来源,除此之外,还可以定义时钟的duty cycle、skew、时钟的名字等。
图13 与时钟相关的约束(一)图13中,需要综合的设计中,只有一个时钟,定义该时钟使用的命令如下:create_clock –period 10 [get_port Clk]set_dont_touch_network [get_clock Clk]set_dont_touch_network命令告诉DC不要在时钟线上加上任何buffer。
这是为后端布线方便需要设置的命令。
定义时钟是定义其他与时钟相关的约束条件的前提。
4.2.2. 输入延时的定义时钟定义后,还需要对输入path上的延时信息进行约束,如图13所示,对于要综合的设计,必须能够约束逻辑N的延时。
这是通过设置输入延时命令实现的。
图14 定义输入延时上图中,T clk-q+T M+T N+T SETUP应该等于一个时钟周期,这里假设T clk-q+T M等于4ns。
设置输入延时命令的格式如下:set_input_delay –max 4 –clock Clk [get_port A]需要注意的是输入延时命令设置的是综合模块外部,输入信号的延时信息。
4.2.3. 输出延时的定义对于输出信号,需要对输出path上的延时信息进行约束,如图13所示,对于要综合的设计,必须能够约束逻辑S的延时。
这是通过设置输出延时命令实现的。
图15 定义输出延时上图中,T clk-q+T S+T T+T SETUP应该等于一个时钟周期,这里假设T T+T SETUP等于5.4ns。
设置输入延时命令的格式如下:set_output_delay –max 5.4 –clock Clk [get_port B]需要注意的是输出延时命令设置的是综合模块外部,输出信号的延时信息。