前言
学习了FPGA和数字IC已经有一段时间了,但是对于SDC和STA整体性的学习还是不足,准备趁过年这段时间好好学习,记录一下。
一、综合是什么?
综合是指完成特定功能的门级网表的实现。除了功能,综合可能还要满足功耗、频率、面积的需求。
此外,针对特定功能电路还会有专门的综合工具。如:
通常我们称的综合就是逻辑综合,常用工具是DC(design compile)
二、时序约束在综合中的作用
1.优化
对HDL代码来说,综合过程第一目标是实现所需功能,但是还需要对其它问题进行评估和分析,如:
- 面积:实现同样功能的面积所需越小越好
- 功耗:实现同样功能的功耗越小越好
- 性能:实现同样功能的频率越高越好
并且,上述问题中的每一个可能都会影响到其它两个,并且大多数时候是负面影响。
例如:如果需要更好的运行频率,那么综合阶段就需要使用更高驱动的cell,那么就会带来更大的面积****和更高的功耗。
所以约束的功能就是将设计需要的面积、功耗、主频要求传递给综合工具。当工具能完成目标要求后,就不再进行优化。
2.输入重排序
如果实现一个 y=a&b&c&d 的功能,最简单的实现方法如上图,使用3个与门。
但是如果信号d是输入最晚的,那么可以等实现完 a&b&c 再和d相与,如下图所示:
- 所以综合工具的第二个功能就是根据组合逻辑中不同输入的到达时间,选择更优的设计,使得最后到达的信号经过最少的逻辑电路。
- 而约束用来向工具传递信号到达时间的信息。
3.输入缓冲
驱动可以认作是载流能力,越高的驱动意味着输出切换越快,并且可以连接更多负载。
如果有一个驱动能力不足的输入信号,期望直接驱动9个fanout,那么像上图一样直接连接负载的方式就不可行。
如果使用3个缓冲器来加强驱动能力,这样input信号只驱动3个负载,而每个缓冲器再驱动3个负载,这样可以大大减轻信号的负载压力。
所以,约束的第三点功能是,传递给综合工具驱动外部负载的驱动能力,让工具可以决定放置多少缓冲器。
三、综合中其它问题
- 设计划分:由于现在的top-down设计结构,导致一个电路被划分成多个模块,这样约束也被划分成多个,需要分别编写各个模块之间接口的约束。
- 更新约束:在实际开发中,可能会出现改变子模块a的约束,导致b的约束不满足;当修改b至满足后,c、d、e都不满足,这就导致了约束蠕变的现象。
- 多时钟设计:在处理器的多核设计中,可能有不同核使用不同主频的现象,需要避免用低频约束来设计高频核心。
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!