采用UltraScale/UltraScale 芯片进行DFX设计时,建议从以下角度对设计进行检查。
动态区是否包含全局时钟缓冲器或MMCM/PLL?
当这些时钟物理单元出现在动态区,那么相关的物理单元都要以PU(Programmable Unit)的一部分出现在动态区。如下图所示,图中红色标记为MMCM,黄色标记为相关的PU,包括以整个Clock Region为高度的I/O Bank,与之紧邻共享布线资源的CLB。
这就意味着在画Pblock时,Pblock的高度要Clock Region对齐,同时Pblock的形状最好为矩形。一旦为其他形状,最高的矩形部分必须与Clock Region对齐且包含I/O Bank和相应的全局时钟缓冲器或MMCM/PLL,如下图所示。图中右侧高亮矩形为最高的矩形,其边界与Clock Region对齐,且包含上图所示的黄色区域。
是否使用了下列逻辑单元:
BSCAN/DCIRESET/FRAME_ECC/ICAP/STARTUP/USR_ACCESS?
这些模块必须放置在静态区。
是否设置了Pblock的边界?
对于UltraScale/UltraScale 芯片,DFX设计时Pblock的X轴边界(水平方向)可以是PU如CLB、BRAM、DSP等,Y轴(竖直方向)边界可以时钟区域(CR)或IO Bank为边界,如果动态区包含了时钟缓冲器,那么整个CR都要在动态区。
如果是SSI芯片,动态区是否跨die?
如果目标芯片为SSI芯片,建议将动态区放置在一个SLR内。如果不可避免动态区要跨die,那么就要保证足够的跨die资源(LAGUNA寄存器)可用。这时最好将die边界的时钟区域放置在动态区,例如,目标芯片为xcvu5p,有两个die。动态区如果在die1,那么还要包括die0的边界CR,即die1 CR(die0边界)。
高速收发器是否在动态区?
UltraScale/UltraScale 的GT是支持动态可重配置的,如果GT出现在动态区,那么GT所在的整个Quad包括GT_CHANNEL、GT_COMMON和BUFG_GT都必须包含在对应的动态区。
输入/输出管脚是否出现在动态区?
如果输入/输出管脚出现在动态区,那么I/O管脚所在的Bank包括I/O逻辑(XiPhy)和时钟资源也要在动态区。同时同一个RP下的不同RM的I/O电平标准和方向必须保持一致,且要遵循DCI级联规则。
同一个RP下的逻辑是否要封装在一起?
DFX的直观体现是同一个RP下有不同的RM,所以要动态可重配置的逻辑单元必须封装在一个RM内。
关键路径是否在RM内?
RP的边界会限制一些优化,因此,建议将关键路径放置在RM内。方法是将RM的输入/输出管脚都用流水寄存器打一拍,即给RM的信号在RM内先打一拍再使用,RM输出的信号先打一拍再给出去。
Pblock是否合理?
Pblock的高度应与CR高度一致,以CR为边界。若存在多个RP,避免RP共享同一个CR。Pblock的宽度以PU为准进行划分。Pblock的形状为标准矩形,避免阶梯或回子形等特殊形状。
在RM输出端口是否设置了解耦逻辑?
在加载RP的部分bit文件时,RM输出端口呈现不确定状态,这时要添加解耦逻辑,以防止加载过程干扰动态区正常工作。
是否对configuration进行了验证?
要使用命令pr_verify对所有的configuration进行验证,保证匹配。
对综合后的设计是否执行了DRC检查?
对于DFX设计,综合后的DRC检查尤为重要,这可在设计早期发现潜在的问题。
是否要对RM侧进行调试?
如果需要,具体方法可参考这篇文章。
如何对DFX设计进行调试?