FPGA手工布局的原因、方法、工具和差异
Q1. 为啥要手工布局?
A1. 首先人比机器更聪明,更了解自己设计的需求和结构。其次在关键路径上的手工布局能提高时序性能,使不满足要求变成满足要求。
Q2. 有没有可能整个设计都用手工布局?
A2. 从原理上来说是没有不可能的,但这是没有必要的。我们只要保证最关键的路径能满足时序要求即可。
Q3. 手工布局牵涉哪些技术?
A3. RPM - RelaTIvely Placed Macros (其实就是使用RLOC约束限制布局的相对关系)
DIRT - Directed RouTIng (不仅限制位置,还限制走线)
HardMacro - 硬核,记录所有信息
Q4. Hard Macro 和 RPM + DIRT 的功能有什么区别吗?
A4. RPM位置基于Slice,Slice-based RPM可以在Slice所有范围内任意布局,不以CLB的位置作为分界。Grid-based RPM只是加入了BRAM乘法器之类的支持,原则上也跟CLB边界无关。而Hard Macro只有在完全相同的结构内在可以移动,所以他的边界至少是CLB,某些时候还需要考虑BRAM和乘法器的位置。
Q5. 什么是Slice-based RPM 和 Grid-based RPM?
A5. Slice-based 方法为整个器件内的slice设定坐标。看上去两个相邻的坐标位置实际上可能中间隔着一个BRAM。Grid-based则将整个器件统一编址,坐标系统看上去可能在某些地方会有缺少,但是不会造成上面提到的那种现象。
Q6. 什么时候用Slice-based RPM,什么时候又用Grid-based RPM呢?
A6. 如果RPM中包含既有Slice又有乘法器、DSP48、BRAM等器件的时候,就用Grid。如果RPM中只含有Slice,那么两种都可以使用,但是用Slice-based更简单一点,因为他的X和Y坐标都是逐个增加的。
Q7. 有什么工具可以用来做RPM?
A7. FloorPlanner和PlanAhead都可以生成包含RPM的UCF。我们也可以自己将一些约束添加到VHDL/Verilog中去。RPM规模较小时,后者更方便。用FPGA Editor生成DIRT约束时,也会同时产生相关路径RPM的约束。
Q8. 通常RPM都是多大规模?
A8. 通常RPM只是规定关键路径的位置,因此不会很大。比如3-5个寄存器之间的位置关系、BRAM和输出数据的第一级寄存器的位置关系等等,这些都不涉及到很多的元件。当然FloorPlanner可以把整个已布局的设计都导出成RPM,但个人以为没多大用处。
Q9. 用FloorPlanner建RPM的流程是什么?
A9. 参见Xapp422
Q10. 用PlanAhead建RPM的流程是什么?
A10. 导出Pblock就行。详细文档可以查阅PlanAhead User Guide。
Q11. 手动写RPM的约束会很难吗?
A11. 其实更简单更方便。一个例子:
(* RLOC = "X1Y2" *)
reg e_reg;
另一个例子:
(* RLOC = "X0Y1" *)
FDCPE #(
.INIT(1'b0) // IniTIal value of register (1'b0 or 1'b1)
) FDCPE_a (
.Q(a_reg), // Data output
.C(clk), // Clock input
.CE(1'b1), // Clock enable input
.CLR(reset), // Asynchronous clear input
.D(a), // Data input
.PRE(1'b0) // Asynchronous set input
);
Q12. RPM的语法是什么?
A12. 最基本的就是RLOC约束的用法。参考Constraint Guide.
Q13. RPM有没有什么辅助约束?
A13. RLOC_ORIGIN和RLOC_RANGE可以规定把某个RPM放在设计中的某个位置。 RPM可以建组(H_SET, U_SET, HU_SET)。几个寄存器放在一个Slice里的时候,可以用BEL规定某个寄存器的位置,甚至还可以用LOCK_PINS约束规定某个寄存器IO的位置。这些约束的定义都在Constraint Guide中。
Q14. 怎么做DIRT呢?
A14. 打开FPGA Editor,打开布局布线好的ncd文件,选择Tools --> Directed RouTIng Constraints..., 选中关心的网线,生成UCF或将约束显示在FPGA Editor Console中,然后复制到HDL代码或UCF中。更详细的流程参考Constraint Guide -->DIRT.
Q15. 怎么做Hard Macro呢?
A15. 还是用FPGA Editor。将NCD存成NMC, 删除不关心的逻辑,包括所有IO。与外部逻辑交互的端口通过Edit --> Add Hardmacro External Pin 添加Hard Macro Pin. 更详细的流程参考AR10901.
Q16. 怎么用Hard Macro呢?
A16. 在设计源代码中要使用Hard Macro的地方,就用一个Black Box就可以了。NMC文件放在工程目录下。
- 用大电流LDO为FPGA供电需要低噪声、低压差和快速瞬态响应(08-17)
- 基于FPGA 的谐波电压源离散域建模与仿真(01-30)
- 基于FPGA的VRLA蓄电池测试系统设计(06-08)
- 降低从中间总线电压直接为低电压处理器和FPGA供电的风险(10-12)
- FPGA和功能强大的DSP的运动控制卡设计(03-27)
- DE0-Nano-SoC 套件 / Atlas-SoC 套件(10-30)