我正在设计一个用于与 USB 芯片通信的 ULPI 接口。
但是我遇到了一些关于时序约束的问题。
数据在时钟的上升沿输出,在下降沿采样。
我可以看到(使用 Post-Route)从时钟上升沿到数据输出有大约 6ns 的“最佳情况可实现延迟”是有效的。
如果我想要更小的延迟,我是否应该重写我的代码,例如延迟我的时钟,直到上升沿适合数据输出?
我知道上面的解决方案可能不好,因为它既依赖于 fpga 设备又依赖于路由......但是还有哪些其他选择?
我正在设计一个用于与 USB 芯片通信的 ULPI 接口。
但是我遇到了一些关于时序约束的问题。
数据在时钟的上升沿输出,在下降沿采样。
我可以看到(使用 Post-Route)从时钟上升沿到数据输出有大约 6ns 的“最佳情况可实现延迟”是有效的。
如果我想要更小的延迟,我是否应该重写我的代码,例如延迟我的时钟,直到上升沿适合数据输出?
我知道上面的解决方案可能不好,因为它既依赖于 fpga 设备又依赖于路由......但是还有哪些其他选择?
您的数据输出寄存器是否打包到 IO 寄存器中?UCF 中的约束是:INST "some_ff" IOB = TRUE;
或者,您可以使用 map 选项-pr b
,它将输入和输出 ([b]oth) 打包到 io 寄存器中。
这有两个效果:
编辑:上述建议适用于 Xilinx 工具链。其他供应商可能具有类似的架构,但调用该选项所需的参数/控件不同。
假设 Xilinx 器件:
使用 FPGA 编辑器检查触发器的位置。有时,如果它们是从非顶级块中推断出来的,则工具不会将它们打包到 IOB 中,即使 UCF 和选项设置为它们应该是的。
作为一种解决方法,在顶层添加额外的触发器层会有所帮助。或者您可以实例化一个 ODDR2 块来强制解决问题,并将两个数据输入连接到相同的内部信号。