我收到了一个verilog项目,其中一个关键组件正在加密。
FPGA的性能因构建环境和配置而异[注1],我怀疑这是由时序约束不足造成的[注2]。
在TimeQuest时序分析器中,我可以看到加密内核中的引脚,网络,寄存器,端口的名称,但是如果不查看实际代码,我就不知道它们的确切含义。
那么在这种情况下我该如何开始编写SDC时序约束呢?
注1:
该组件是MIPI-CSI2 TX。在测试RX端,我经常出现SoT错误(SoT错误和未实现同步),有时还会出现ECC错误。
有一段时间,让它"工作"在FPGA上,代码必须在Windows机器上构建。然后对代码进行一些小的和无关的更改,如果在Linux机器上构建它可以工作。然后,最近Linux构建机器似乎比Windows机器表现更好。
同样改变优化参数似乎会严重破坏代码。例如。目前只有"平衡"模式有效。 "性能"和#34;激进的表现"模式应该提高性能,在接收信号中引起很多错误。上游信号处理块的存储器内容也以这种方式影响MIPI-CSI2 TX。
最重要的是让我觉得有一些不确定因素并未完全受到SDC时序约束的限制。
注2:
我无法完全验证这一理论,因为我没有完全测试信号的设备,也不能进行门级仿真,因为加密代码不允许我生成EDA网表
答案 0 :(得分:1)
所以一般来说,我通常会预先考虑两种类型的约束。一个是IO约束,如果信号从芯片发出,你想要控制数据和用于传输数据的时钟之间的关系,当然还有接收时钟和接收数据。第二种类型是时钟约束。您想要验证时钟本身是否正确指定。根据工具的不同,一旦完成,通常会有一个导出时钟的过程,以获得任何PLL衍生时钟......该部分可能是自动的,或者如果它像Altera一样,你只需要调用derive_clocks和你在路上。
当然还有其他类型的约束,但大多数都是用于指定异常。 “让它成为一个多周期,或错误的道路......”等等。那些可能不是你想要的。限制时钟,这应该非常紧张。
如果是输入/输出约束问题,您可以改变RX和TX时钟与相关数据之间的关系。
除此之外,如果此加密IP由供应商提供,它们通常会提供除了您需要的基本输入时钟约束之外所需的任何其他约束。
一种策略,如果你真的认为它是一个时钟变化问题,你可以指定输入时钟比它实际上快一点。这在技术上会导致时间变得更难以满足,但是你将在最终图像中获得余量。
需要考虑的另一件事是,根据您正在构建的技术,您需要正确指定设备部件号,因为速度等级。你可能有一个缓慢的部分,并正在编译为快速部分。这将造成严重破坏。有些供应商防止在错误的部分加载错误的图像,但有些供应商会让你自己挂起。
最后,检查您的I / O信号标准和终止规范。如果您认为信号完整性在这里起作用,则必须考虑这些。当您使用HSSL时,确保使用LVDS或CML,或者您可能需要在信号引脚上添加上拉等。