|
20资产
小弟最近接了个任务,要调试FPGA跟外部PHY板子的通信,目前测试是FPGA输出的数据外部芯片能正常收到解析,但外部芯片发送来的数据FPGA接收会出现错误,看了一些资料,设置了以下的set input delay约束,大佬们帮我看下计算是否正确
示意图如下:
约束的是FPGA的 input IO接口,也就是图中A点
具体时间参数如下:
外部PMA芯片:
Tclk1: 0.3ns
Tco: 0.238ns
Tdly_pma: 0.4ns
Tdly1: 0.3ns
PCB走线延时:
Tpcb_data: 0.5ns
Tpcb_clk: 0.36ns
FPGA内部:
Tdly_net: 0.918ns
Tdly_bufg: 6.251ns
时钟频率是T是8ns, 我是假定FPGA内部触发器的Tsetup为4ns, Thold为2ns,约束时没有考虑FPGA内部走线,只考虑setup和hold,所以计算公式如下:
计算input max:
Tarrive = Tclk1+Tco+Tdly1+Tpcb_data+Tinput_max = 1.338+Tinput_max
Trequest = T+Tdly_pma+Tpcb_clk - Tsetup = 4.76ns
因为Tarrive <= Trequest, 所以计算出Tinput_max <= 3.422ns
计算input min:
Tarrive = Tclk1+Tco+Tdly1+Tpcb_data+Tinput_min = 1.338+Tinput_min
Trequest = Tdly_pma+Tpcb_clk + Thold = 2.76
因为保持时间需要Tarrive >= Trequest, 所以Tinput_min >= 1.422ns
因此我设置的约束是set_input_delay -max 3.422, set_input_delay -min 1.422ns (此处不知道计算是否正确,求大佬指出错误)
后面看了一些资料,验证设置的约束是否正确还要计算FPGA内部这些延时,看了书上列的计算公式, setup检查时:
Tarrive = Tclk1+Tco+Tdly1+Tpcb_data+Tinput_max + Tdly_net = 2.256 + Tinput_max
Trequest = T+Tdly_pma+Tpcb_clk + Tdly_fpga - Tsetup = 11.011ns (这都超过了一个CYCLE)
按之前的公式,算出的Tinput_max是8.755(大于一个周期)这个结果让我非常疑惑,恳求大佬们指出错误
hold检查:
Tarrive = Tclk1+Tco+Tdly1+Tpcb_data+Tinput_min + Tdly_net = 2.256 + Tinput_min
Trequest = Tdly_pma+Tpcb_clk + Tdly_fpga + Thold = 9.011ns (大于一个周期)
按之前的公式,算出的Tinput_min是6.755ns (接近1个周期) 这个结果也让我非常疑惑,恳求大佬们指出错误
目前疑问是对于这种计算都超过一个周期是正常的吗,还是因为我的整个计算流程有问题,看了下数值,主要是因为fpga内部bufg走线延迟过大,但不知道要如何正确约束
|
最佳答案
查看完整内容
你对fpga设置input delay可能有些误解。input delay 指的是在端口时,时钟与数据的延迟关系,所以需要考虑的参数是
外部PMA芯片:
Tclk1: 0.3ns
Tco: 0.238ns
Tdly_pma: 0.4ns
Tdly1: 0.3ns
PCB走线延时:
Tpcb_data: 0.5ns
Tpcb_clk: 0.36ns
这些参数有些会有最大值与最小值,不会是定值。当fpga知道约束条件后,会分析内部逻辑的建立和保持时间。
...
|