流水线考虑因素
另一种提升性能的方法是对拥有多个逻辑级数的长数据路径进行重新组织,并将其分配在多个时钟周期上。这种方法
以时延和流水线开销逻辑管理为代价,来达到加快时钟周期和提高数据吞吐量的目的。
由于
FPGA
器件带有大量的寄存器,额外的寄存器和开销逻辑通常不是问题。但是,数据路径跨多个周期,您必须对
设计的其余部分进行特殊注意,以考虑所添加的路径时延。
考虑
SSI
器件的流水线
在对需要
SLR
边界交汇的高性能寄存器间连接进行设计时,必须在
HDL
代码中描述正确的流水线,同时在综合中加以
控制。这样可以确保移位寄存器
LUT (SRL)
推断和其它优化工作不会发生在必须跨
SLR
边界的逻辑路径上。以这种方式
修改代码加上适当使用
Pblock
可以设定
SLR
边界交汇发生的位置。
预先考虑流水线
预先而不是滞后考虑流水线可以降低时序收敛的难度。在较晚阶段对特定路径添加流水线常常会跨越电路传输时延差
异。这样一个看似微小的修改可能需要对部分代码进行大规模的重新设计。
在设计中尽早发现需要使用流水线的地方往往可以大幅度提升时序收敛、实现运行时间 (因时序问题更容易解决)和
器件功耗 (因逻辑转换数量下降)。
检查推断的逻辑
在对您的设计进行编码时,应注意正在推断的逻辑。在想要添加流水线时,应注意下列条件:
•
带有大扇入的逻辑椎
例如,需要大量总线或多个组合信号来计算输出的代码
•
具有布局限制、输出相对于时钟时延
(clock-to-out)
更短或大量建立要求的块
例如,没有输出寄存器的块
RAM
或没有正确流水线化的算术代码
•
强制布局导致长布线
例如一个管脚强制一条跨越芯片的布线,可能需要流水线来实现高速运行
•
包括大型
XOR
函数的逻辑
大型
XOR
函数通常具有会造成大量动态功耗的高转换速率。流水线化函数能减少转换,从而对所述电路的功耗产
生积极影响。
下图中,时钟速度受下列因素限制:
•
源触发器的时钟到输出时间;
•
贯穿四个逻辑级数的逻辑延迟;
•
四个函数发生器的相关布线;
•
目的地寄存器的建立时间。
。由于触发器与函数发生器位于相同的
slice
中,时钟速度受源触发器的输出相
对于
clock-to-out
延迟、贯穿一个逻辑级数的逻辑延迟、一个布线延迟和目的地寄存器的建立时间限制。在这个例子
中,流水线化后的系统时钟的运行速度明显高于流水线化之前。
确定是否需要管道
常用的流水线技术可以识别大的组合逻辑路径,将其分成较小的路径,并在这些路径之间引入寄存器级,理想地平衡
每个流水线级。
要确定设计是否需要流水线,请确时序钟的频率和分布在每个时钟组中的逻辑数量。您可以使用
report_design_analysis
Tcl
命令与
-logic_level_distribution
选择来确定每个时钟组的逻辑级分布。
提示:
设计分析报告还突出显示具有零逻辑层的路径数,您可以使用这些路径确定在代码中进行修改的位置。
平衡时延
要通过添加流水线级来平衡时延,请将该级添加到控制路径而不是数据路径。数据路径包括更宽的总线,这增加了所
使用的触发器和寄存器资源的数量。
例如,如果您有
128
位数据路径,
2
级寄存器,并且需要
5
个周期的时延,则可以插入
3
个寄存器级:
3 x 128 = 384
触发器。或者,您可以使用寄存器来控制逻辑使能数据路径。使用
5
级单比特寄存器来控制数据路径触发器的使能信
号,进而相应地控制多周期路径时序例外。
注释:
此示例仅适用于某些设计。例如,在存在来自中间数据路径触发器的扇出的情况下,仅具有
2
个级不工作。
建议:
FPGA
中的最佳
LUT
:
FF
比为
1
:
1
。具有显着更多
FF
的设计将增加不相关的逻辑打包成片,这将增加布线复杂
性并且可以降低
QoR
。
平衡管线深度和
SRL
使用
如果存在深度寄存器流水线,应将尽可能多的寄存器映射在
SRL
中,以避免寄存器利用率的显著增加。例如,
9
层深
的流水线 (对于
32
的数据宽度)导致每个比特的
9
个寄存器,使用
32×9 = 288
个寄存器。将相同的结构映射到
SRL
使用
32
个
SRL
。每个
SRL
都连接到
5’b01000
的地址引脚
(A4A3A2A1A0)
,以实现
9
级深度。
在综合期间推断
SRL
有多种方法,包括以下:
• SRL
• REG -> SRL
• SRL -> REG
• REG -> SRL -> REG
您可以使用
RTL
代码中的
srl_style
属性创建这些结构,如下所示:
• (* srl_style = “srl” *)
• (* srl_style = “reg_srl” *)
• (* srl_style = “srl_reg” *)
• (* srl_style = “reg_srl_reg” *)
常见的错误是在较深的流水线阶段使用不同的使能
/
复位控制信号。下面是在
9
深度流水线级中使用的复位的示例,其
中复位连接到第三,第五和第八流水线级。使用这种结构,工具只将流水线级映射到寄存器,因为
SRL
原语有一个复
位引脚。
FF->FF->FF(reset) -> FF->FF(reset)->FF->FF->FF(reset)->FF
利用
SRL
推断:
•
确保没有用于流水线级的复位。
•
分析是否真的需要复位。
•
在一个触发器上使用复位 (例如,在管道的第一级或最后一级)。
避免不必要的流水线
对于高度利用的设计,太多的流水线可能导致次优的结果。例如,不必要的流水线级增加了触发器和布线资源的数量,
如果利用率高,这可能限制布局和布线算法。
注释:
如果有许多具有
0/1
逻辑级别的路径,请检查以确保这是有意这么做的。
考虑流水线宏原语
基于目标架构,如果使用足够的流水线,专用原语 (如块
RAM
和
DSP
)可在
500 MHz
以的上的频率范围工作。对于
高频设计,赛灵思建议使用这些块中的所有流水线。