芯动力——硬件加速设计方法 学习笔记 6.逻辑综合2
作者:互联网
施加约束
时序约束
施加时序约束主要是为了保证电路中每一条时序路径都能够处于约束下。在约束后查看电路的setup time和hold time是否满足要求,如果不满足,那么就需要返回代码检查修改或是添加修改新的约束。
DC中我们能够施加的时序约束一般有以下几种:
指定时钟: create_clock period 20 [get_ports CLK]
设置don’t touch属性:set_dont_touch_network [get_clocks Clk]
加上这一句主要是为了DC在综合时不对CLK信号进行优化,因为布线之后还会根据布线情况对时钟树进行专门的优化,所以不用在这里做。
约束input delay:set_input_delay -max 7.4 -clock Clk [get_ports A]
input delay的值就是指外部电路的最大输入延时,在计算slack时,要将这个因素考虑进去,它主要影响setup time。
约束output delay:set_output_delay -max 5.4 -clock Clk [get_ports B]
DRC(Design Rule Constrains)
DRC约束主要由工艺库厂商提供,但是在实际中可以约束的更紧一点保证可靠性,DRC如果出现问题,将会直接影响流片。
set_max_transition
transition time一般是指mos管充电或放电10%到90%的时间。这个值越小越严苛。
set_max_fanout
设置最大扇出,这个值表征输入单元输入引脚相对于负载的值。
set_max_capacitance
设置最大电容值。
环境约束
在施加完时序约束和DRC约束后,还有一些外部的环境因素会影响电路性能,主要包括外部供电电压的变化、外界的温度、电平转化时间(由驱动能力和负载决定)以及内部互联线的延时。
上图就是依据这些环境问题需要施加的约束。
set_load
可以约束输出pin的负载情况,能够更加准确的估计模块输出的时序
set_driving_cell
允许用户自定义一个实际的外部驱动cell,使得transition time不为0,这样能够更加准确的估计输入电路的时序
温度、电压和工艺这些参数对时延的影响是由晶圆厂在特定条件下测定的,因此在工艺库中设定了几种工作模式供设计者进行选择,我们一般选择worst和best这两种条件下的参数进行综合,综合后的网表就可以进行后仿真了。
set_wire_load_model
可以选择线载模型,具体的指令参数不做介绍,这里我们需要了解的是线载模型这个概念,它主要包含了单位长度的连线的电容以及电阻值,也是由Foundary提供的,是由其他该工艺下流片的芯片连线延时统计得来的。
逻辑综合的优化
DC中还有一些优化策略,会对代码转换的电路进行优化,便于进行时序约束或者减少门电路数量。这些优化有的是自动进行的,有的是需要命令打开的,由于优化会修改实际电路,所以在综合后还需要通过formality进行一致性检查。
还有一些是我们在代码阶段就可以进行的优化,在代码阶段做好这些,有利于DC进行综合:
- 不要让一个组合电路穿越过多的模块
如上图的这个电路,将一个组合逻辑电路分到了A、B、C三个模块,由于DC综合会保留模块的端口定义,所以在对这个组合逻辑电路进行优化的时候,会对A、B、C三个模块都进行优化,这就会带来不必要的延时和面积的增加(时序优化一般通过插buffer来进行)。所以,比较好的做法是像下面这样:
- 寄存模块的输出
代码或者综合的过程中,将所有的输出寄存起来。其实这样不但是最佳的优化结构,也可以简化时序约束(使得所有模块的输入延时相等)
- 不在顶层进行大量组合逻辑运算
同第二条一样,在顶层进行的逻辑运算打乱了模块输出的寄存行为带来的时延相等的特性,不利于综合。
- 尽量控制模块的大小一致
- 将同步逻辑与其他部分分离
将pad、扫描链等不可综合的部分放在整个同步逻辑电路的外部。
标签:逻辑,set,笔记,时序,电路,模块,硬件加速,约束,优化 来源: https://blog.csdn.net/hp741852/article/details/120118510