用FPGA实现均匀延迟线?
我感觉有两个方法:
1、用fpga editor类的底层布局布线工具进行强制定位综合,即可得到固定延迟。
2、利用IO buffer里面的Idelay,Odelay一类功能,可以完成ns级延迟测量。
首先,在FPGA里手动加buffer很简单,在RTL里声明信号时加上KEEP注释即可,比如wire buf0 /*synthesis keep*/;
但是,Quartus的库是自带OCV(Quartus官方叫On-Die-Variation)的,换句话说,这个延迟时间是不准的(有相当大变化范围)。
我觉得这些延迟cell的delay本身就跟温度,电压有很大的关系。
不如用FPGA内部的PLL生成一个很高频(450MHZ-600HMZ)的始终去采样你的信号来进行时间的判断。因为PLL内部有反馈电路,所以cycle to cycle的偏移比较小。
路过,看一下
请问fpga editor哪里有?我知道这个方法,但是不知道在哪里有这个东西。
个人不推荐fpga_editor的方法,因为你无法每次都用fpga_editor来得到同样的结果。由于每次都手动编辑布线网表,很难保证每次的delay都一样。如果不一样,那么设计又会出问题。所以这是不保险的。
当然,也许可以set place constraint来解决。不过难度还是偏大。
推荐用PAD的IDELAY和ODELAY的方式,将采样的寄存器放到I/O BUFFER内,然后调整IDELAY(输入采样)或者ODELAY(输出采样)。这个delay是可以在设计代码中调整的。比较方便。
当然,对于你的设计不是很了解,也许这个方法也不能用。
