如何编写 SDC 时序约束加密的 verilog 代码?

How to write SDC timing constraint an encrypted verilog code?

我收到了一个verilog项目,其中一个关键组件被加密了。

FPGA 的性能因构建环境和配置而异[注 1],我怀疑这是由于时序约束不充分造成的[注 2]。

在 TimeQuest 时序分析器中,我可以看到加密内核中的引脚、网络、寄存器、端口的名称,但如果不查看实际代码,我不知道它们的确切含义。

那么在这种情况下我应该如何开始编写 SDC 时序约束?


注一:

该组件是一个 MIPI-CSI2 TX。在测试 RX 端,我不断收到 SoT 错误(SoT 错误和未实现同步),有时还会出现 ECC 错误。

有一段时间,要在 FPGA 上实现 "work",代码必须在 Windows 机器上构建。然后对代码进行一些小的和不相关的更改,如果在 Linux 机器上构建它可以工作。然后最近 Linux 构建机器似乎比 Windows 机器表现更好。

同时更改优化参数似乎会严重破坏代码。例如。目前只有 "Balanced" 模式有效。 "Performance" 和 "Aggressive Performance" 模式,本应提高性能,但会导致接收信号出现大量错误。上游信号处理块的内存内容也会以这种方式影响 MIPI-CSI2 TX。

最重要的是让我觉得有一些不确定性没有完全受到 SDC 时序约束的约束。


注2:

我无法完全验证这个理论,因为我没有设备来完全测试信号,我也无法进行门级仿真,因为加密代码不允许我生成 EDA 网表。

所以一般来说,我通常会预先关注两种类型的约束。一种是 IO 约束,在信号离开芯片的情况下,您希望控制数据与用于传输数据的时钟之间的关系,当然还有接收时钟和接收数据。第二种是时钟约束。您想要验证时钟本身是否已正确指定。根据工具的不同,一旦你完成了,通常会有一个推导时钟的过程来获得任何 PLL 衍生时钟......这部分可能是自动的,或者如果它像 Altera,你只需要调用 derive_clocks 你已经在路上了。

当然还有其他类型的约束,但其中大部分是用于指定例外情况。 "Make this a multi-cycle, or false path that.." 等。这些可能不是您想要的。限制时钟,这应该非常严格。

如果是 input/output 约束问题,您可以改变 RX 和 TX 时钟与相关数据之间的关系。

除此之外,如果此加密 IP 由供应商提供,他们通常会提供除您需要的基本输入时钟约束之外所需的任何其他约束。

一个策略,如果你真的认为这是一个时钟变化问题,你可以指定输入时钟比实际快一点。这在技术上会导致时间变得更难满足,但您将在最终图像中获得利润。

需要考虑的另一件事是,根据您要构建的技术,由于速度等级,您需要正确指定设备部件号。您可能有一个缓慢的部分,并且正在编译为一个快速的部分。这将造成严重破坏。有些供应商会防备错误的部分加载错误的图像,但有些供应商会让你挂掉。

最后,检查您的 I/O 信号标准和终止规范。如果您认为信号完整性在这里发挥作用,那么就必须考虑这些因素。确保在您应该使用 HSSL 时使用的是 LVDS 还是 CML,或者您可能需要将上拉电阻添加到信号引脚等。