FPGA从IBUF到OBUF的最短路经
想设计一个逻辑,输入信号经过IBUF后,一路送给OBUF输出,一路送给ILOGIC在FPGA内做处理。
IBUF i_buf( .I(i), .O(branch));
OBUF o_buf( .I(branch), .O(o));
想让从IBUF到OBUF的延时尽量小,因此把IBUF、OBUF约束在一个IO Tile里(包含两个IBUF、两个OBUF、两个ILOGIC、两个OLOGIC、两个IODELAY),希望能从IBUF出来后直接就近传给OBUF。
可实际上不是这样,信号经过的路径如下:IBUF -> IODELAY -> ILOGIC -> OLOGIC -> OBUF,下图为FPGA Editor的具体走线。

通过后仿确定,从输入引脚到输出引脚的延时为7.359ns。(一个时钟周期2.5ns)
对于从IBUF、OBUF的net加MAXDELAY约束,不管是1ns还是4ns,结果都一样,从输入引脚到输出引脚的延时仍为7.359ns,且时序报告也一样:
==============================================================================
Timing constraint:
NET"branch" MAXDELAY = 4 ns;
1 net analyzed, 0failing nets detected.
0 timing errorsdetected.
Maximum net delayis
3.282ns.
--------------------------------------------------------------------------------
Slack: 0.718 ns branch
Report: 3.282ns delay meets 4.000ns timing constraint by 0.718ns
From To Delay(ns)
W12.I Y12.O 1.409 (不明白这一行是什么意思?)
W12.I ILOGIC_X2Y115.DDLY 3.282
--------------------------------------------------------------------------------
(branch为从IBUF到OBUF的net名,W12为输入引脚,Y12为输出引脚,在一个IO Tile里,ILOGIC_X2Y115.DDLY为输入接的ILOGIC)
为什么要选择这么长的走线,不能直接从IBUF输出接OBUF吗?
因为FPGA也不是万能的啊.
FPGA不是设计用于做这种直连线的啊。直连线就用PCB不是更好吗?因为FPGA不是面向这类应用,所以两个PAD之间没有直接布线通道也很正常啦。建议你可以将输入打一拍出去。
这是Xilinx还是synplicity
信号的频率很高,在PCB上直接分支信号质量太差,所以想在FPGA内部经过IBUF后再分支。同时由于信号的电平比较特殊,找不到其他的分立器件做这件事,只能用FPGA
Xilinx的,FPGA是v6lx130t
如果是这样的话,所有的一组总线都从FPGA里面穿过的话,延迟只要保持一致不就可以了?
我们的做法相当于在原有的总线中串了一个设备,希望延时也尽量小,否则会影响系统的执行。
的确,这种delay可能会影响系统的最高时钟速度,进而影响系统性能。
1. 你可以试试看手动布线,用fpga_editor手动布线看看,如果没有更快的路径,那真的没有办法。
2. 看看有没有随路时钟可以用来对数据打一拍,改善时序状况。不过,时钟和数据延迟又会不容易close。
有点麻烦那。
多高的频率?
如果很高可能FPGA也没有办法。
400MHz,而且是DDR的
不过virtex-6的FPGA可以支持667MHz的DDR信号
400MHz的总线中串一个设备(FPGA),不可想象啊。
FPGA Editor的含义 就是要你理解FPGA内部资源的分布,一开始就要考虑时钟的整体布局布线,把时钟定好后 才能有最佳的FPGA性能,就近走时钟资源的布局布线,一旦要设计FPGA的PCB,那就要根据管脚来分配全局的时钟设计
确实这样,没办法。
学习了
