蓝冠招商《Q374919》在过去的几个月里,我们一直在研究如何编写好的RTL代码。我们已经了解了如何编写寄存器驱动的RTL,蓝冠官网 如何编写组合过程,以及如何编写状态机。
在过去的几个月里,我们一直在研究如何编写好的RTL代码。我们已经了解了如何编写寄存器驱动的RTL,如何编写组合过程,以及如何编写状态机。所有这些工作都假设我们有一个合成工具,可以将编写良好的RTL转换为gates。
这使得合成工具成为我们工作流程的关键部分。我们必须理解合成是如何工作的,以及如何让它为我们工作。在本文中,蓝冠注册 我们将讨论综合的基础知识。
首先要知道的是硬件合成不是软件编译。当我们编写软件时,我们很少考虑编译器是如何将对象、数据结构、类型和函数转换为汇编语言的。我们只是假设它能很好地让我们的代码在目标平台上运行。事实上,过于深入地思考编译问题并没有什么好处,因为我们很难用自己的编码风格来控制它。
合成就不是这样了。硬件合成对我们编写RTL的方式非常敏感。通过以不同的方式编写RTL,我们可以创建截然不同的硬件。(关于如何使用编码风格控制合成的示例,请参阅过程代码中的带有组合逻辑的控制合成输出。)鉴于这种敏感性,蓝冠招商 我们需要知道合成是如何工作的。
基本合成过程
在最基本的情况下,一个硬件合成工具做三件事:
编译RTL并在设计中创建逻辑和寄存器的硬件表示。
将设计的通用表示转换为目标硬件,而不用担心时间问题。通常合成工具会尝试在这一点上做出尽可能小的设计。
将设计中的逻辑路径与计时约束进行比较,并对不进行计时的路径进行加速。这叫做时间优化。
理解这三个步骤突出了关于综合的一个最重要的事实:如果你不创建时间约束,你可能会得到尽可能小的设计,但你可能无法满足你的时间目标。
这三步过程也帮助我们理解当我们有非常简单的时间限制时会发生什么。考虑这样一种情况:由于目标芯片非常快而路径非常短,所以很容易满足时间约束。在这种情况下,合成工具将不会在步骤3中找到任何错过时间的路径,并且您将以最短的合成时间获得尽可能小的设计。
理解这三个步骤也告诉我们,过多地限制设计比不给它任何时间限制更糟糕。许多人错误地认为时间约束与我们认为汽车加速器的方式相同。如果你猛踩油门,汽车就会更努力地工作,跑得更快。合成就不是这样了。
如果您过度约束一个设计——例如,如果您将约束设置为目标时钟速率的2倍——就不会使合成工具工作得更困难。相反,你的合成工具将到达第3步,并发现几乎没有路径可以定时。它将开始处理最糟糕的问题,可能是那些从未打算创造2倍时间的路径,然后它将在尝试优化其它内容前放弃。
结果呢?一个非常过度约束的设计实际上会比一个适度过度约束10%的设计得到更糟糕的计时。时间是随机的,因为合成工具不知道在哪里集中精力,它会过早地放弃这个过程。