lanlingshan 发表于 2015-7-31 23:18:22

关于扇出较大如何约束的问题?

FPGA程序在常温和高温下测试都正常,在低温下就出现了错误,低温下用Signap抓到的数据看是SPI的片选信号出错了,偶尔会乱跳,用示波器量外部输入信号是没有问题的。在查看Timing Optimization Advisor时发现该节点的Fan-out比较大达到了107;本来想的是通过修改代码来解决这个问题(对每个模块引用该信号时,插入一个D触发器再给模块使用),但是复制后Fan-out转移了而且更大了达到了255;能否通过时序约束解决这个问题呢?
        说明:SPI的片选信号时2ms一个周期,FPGA通过边沿采样设计采样SPI片选信号的下降沿,把该下降沿给其他模块使用,所以很多模块都需要用到该信号。

没有加寄存器复制的扇出结果

清霜一梦 发表于 2015-7-31 23:52:59

我没有遇到这种问题,我尝试用我所理解的来解答你,你适当采用—— 毕竟没有去真实的解决这个问题。

我在Altera的官网视频上看到这种问题的解决方案。我提出几点
1,官网上说是复制输出逻辑或者是触发器,所以你可以尝试复制输出逻辑。
2,官网上没有说可以通过约束来解决find out 过大的问题,当然也或者是我水平有限无法实现
3,官网提出的解决意见中有一个是综合优化的办法, setting --> physical synthesis optimizations -->fitter netlist optimizations  -->perform register duplication .就是说这种优化会导致代码移植性变差。

可是从你描述的问题看,如果你是通过高频去采集SPI上的01信号,适当的对采集clock进行降频试试,再注意采集clock的质量。当然,速率不能低于SPI的3倍,我通常用5倍。

清霜一梦 发表于 2015-8-1 00:24:21

找到,官网提示,以下情况,复制reg无法解决find out 过大
1,        时钟域之间的寄存器。A)驱动另外一个寄存器的时钟 ,B)由另外一个时钟域中寄存器驱动的寄存器
2,        影响时序约束的寄存器 。A)驱动另外一个寄存器的衣服控制信号的寄存器,B)同步寄存器链上的寄存器,C)由没有Tsu约束的输入引脚驱动的寄存器。
3,        约束到一个LAB位置的寄存器。
4,        被认为是虚拟I/O引脚的寄存器。
5,        将Nestlist Optimizations 选项设置为Never Allow的寄存器。



你这个问题,还是我上面说的,建议你降低采样频率以及保证采样时钟质量后再找是不是find out 过大引起的:),毕竟这些好搞定一些:lol

lanlingshan 发表于 2015-8-10 09:57:14

确实出发点错了,最开始怀疑是扇出过大导致低温下驱动不了后级模块,但是看同事的另外一个项目扇出达到500多,低温下也没有问题;然后弄个简单的没有任何逻辑的测试程序,低温下,signalnap抓取I/O口的数据,发现竟然还有毛刺现象,判定为硬件问题······最终发现是由于FPGA该引脚焊接的问题,问题解决!
页: [1]
查看完整版本: 关于扇出较大如何约束的问题?