1.关键路径的基础
关键路径通常指在同步逻辑电路中,组合逻辑时延最大的路径。关键路径能过对设计性能起到决定性的影响。
采用静态时序分析(STA)能找出逻辑电路的关键路径,通过查看静态时序分析报告可以确定关键路径。
对关键路径进行时序优化可以提高设计性能,对同步逻辑最常用的优化方式包括pipeline(流水线)和retiming(寄存器平衡)
1.流水线pipeline
由于组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器。这些额外插入的寄存器增加的时钟周期延时要不会影响设计的规范要求,从而达到不影响设计总体的功能性实现。
例如:由于数据传播过程,有大部分组合逻辑模块在闲置,浪费了资源:

组合逻辑延时为加法器+求绝对值+求log函数;

当加入寄存器,三部分会在每个时刻都进行工作,此时延时变为其中最大延时的器件,远远小于之前的延时。
但是插入流水线会导致芯片面积增加,可能会导致布线困难和时钟偏差。且过多的级数不一定能产生最快的效率。
2.retiming(寄存器平衡)
在不增加寄存器数量的前提下,通过改变寄存器位置来优化关键路径。
3.操作符平衡
比如在设计中就考虑到硬件的复杂程度和相应的延时。如下面两组代码:
if(A==1) out <=B+C;
else out <= D+E;
//
if(A==1)begin
out1 <=B;
out2 <=C;
end
else begin
out1<=D;
out2 <=E;
end
out <=out1+out2;
第一组的控制延时为一个选择器MUX,第二组控制延时为一个选择器+一个MUX,明显是第二个大,但是第一组使用了两个加法器+1个MUX;第二组用了两个MUX和一共个加法器,加法器的复杂度是比后者高的,这体现了面积与速度互换的原则。
2.面积与速度互换
速度是设计在芯片上稳定运行时能过达到的最高频率,而面积是一个设计所消耗的目标器件的硬件资源数,对FPGA而言,可用消耗的触发器(FF)和查找表(LUT)来衡量。
两者的优先级不同,设计中一般优先考虑速度,当然具体的项目还得看对应的指标。
面积和速度的互换:
1.当设计的时序余量比较大,可用考虑功能模块复用来减少设计消耗的芯片面积。
2.当设计的时序要求很高时,可用通过将数据并行处理或对设计采用乒乓操作来提高处理的速度,但是这会耗费更多的资源也就是占用更多的面积。
参考网址:
https://www.icourse163.org/learn/SWJTU-1207492806?tid=1463309516#/learn/content?type=detail&id=1240704480&cid=1262447412&replay=true