【问题标题】:How to write SDC timing constraint an encrypted verilog code?如何编写加密的verilog代码的SDC时序约束?
【发布时间】:2016-09-27 14:19:56
【问题描述】:

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

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

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

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


注1:

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

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

同时更改优化参数似乎会严重破坏代码。例如。目前只有“平衡”模式有效。应该提高性能的“性能”和“激进性能”模式会在接收信号中引起很多错误。上游信号处理模块的内存内容也会以这种方式影响 MIPI-CSI2 TX。

首先让我觉得有些不确定性并未完全受 SDC 时序约束。


注2:

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

【问题讨论】:

    标签: verilog fpga quartus


    【解决方案1】:

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

    当然还有其他类型的约束,但其中大部分是用于指定异常。 “使它成为一个多周期或错误的路径......”等等。这些可能不是你想要的。限制在时钟上,这应该很紧。

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

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

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

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

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

    【讨论】:

    • 我想我使用了错误的语言(“时序约束不足”),而我真正的意思是“不完整的时序约束”。就我而言,我的 TX 内核已加密,但顶级时序约束文件没有任何约束。我可能是错的,但我认为它根本没有受到限制。我正在阅读 Altera 的 AN433。但它给我的印象是我需要知道时钟提供输出的确切节点以指定最小/最大输出延迟。
    • 好的,那么 Altera Quartus 就这样继续下去。如果您可以在 GUI 中打开项目,然后使用 TimeQuest。在任务菜单中,您必须设置操作条件。无所谓温度,随便挑一个。有几种方法可以做到这一点,但您会明白,运行报表数据表任务。然后在报告中,您将在“输出引脚的最小时钟”下看到报告列表。在里面,您将看到一个输出列表及其相关的时钟参考。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多