如何在FPGA内实现一个小延时,比如0.5ns?
时钟本身是多少频率?如果是90°,180°这种相位关系的话,也可以用DCM
正在研究
好,谢谢!
不是90°这种相位关系,我那块FPGA里面跑个200M顶多了,而要实现的是0.5ns这么小的延时
如果你主时钟就是200M,那就困难了。只能用组合逻辑慢慢搭,这很不好控制。为啥需要这么小的延迟?
0.5ns的精度不可能吧。
1. 用组合逻辑搭的话,有什么综合和布线策略可以保证延时的精度呢?
2. 另外,刚刚看到说明文档,说pll输出时钟的最小相移是VCO周期除以8,这个时间是可以满足的。不过我自己做了个实验如下:
10M输入,输出三个100M,相移分别为c0:0.31ns,c1:0.62ns,c2:0.93ns
在fitter阶段出现waring:
“Warning: Can't achieve requested value 32.4 degrees for clock output pll:inst|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[2] of parameter phase shift -- achieved value of 33.8 degrees”
“Info: Implementing clock multiplication of 10, clock division of 1, and phase shift of 34 degrees (938 ps) for pll:inst|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[2] port”
做后仿发现c0和c1之间相位差是0.31ns,但是c2的相位确完全不对。
问题:请教达人,通过PLL产生一组相差0.3~0.5之间的采样时钟是否可行?
用INDELAY之类的元件或者时钟移相吧,
感觉时钟移相更简单点。
不知道怎么实现
端口的话可以用器件本身的IO上的delay来实现,内部逻辑,就算用组合逻辑实现在综合的时候也会被优化掉的,0.5ns不算很大,可以在route之后看一下实际延时是多少,手动改变走线调整大概5ns,然后在约束文件里面固定下来。 不过不建议这种设计方式。
ls的建议不失为一种方法
为什么需要呢?
使用加法器中的进位链试试