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文件放在工程目录下。

土壤温度、水分、盐分速测仪的作用是什么
超低功耗/超省电LCD液晶段码驱动IC-VKL076 SSOP28 FAE技术支持
半导体光电及激光智能制造技术会议
设计专利索赔!三星吐槽苹果要价太高
土壤养分检测仪厂家有哪些
FPGA手工布局的原因、方法、工具和差异
简单总结一下MOS管
中微已制造出5纳米蚀刻机,对中国半导体领域影响深远
变频器的制动方式及电路原理图
油电混合电池坏了怎么办_油电混合电池多久换
为何U盘经久不衰?看完进化版的USSD固态U盘,你就知道了
苹果发布M3系列新款MacBook Pro/iMac:业界首批PC 3nm芯片
IC涨价大盘点,缺货与涨价并存
中国电信将携手GSMA和5G产业链共同推进5G SA产业规模化发展
USB供电的DVI/HDMI至VGA转换器解决方案
达索系统新版SOLIDWORKS支持用户在VR和AR中进行体验
1N4001S~1N4007S整流二极管
液压传动装置组成部分介绍(优缺点和工作原理及分类介绍)
WiFi也能充电?无线充电将成为标配?
输入100V宽电压降压恒压DC-DC电源管理芯片AP8851L