龙空技术网

浅谈IC设计中的模块划分对netlist的影响(一)

单眼皮老王 219

前言:

现时我们对“netlist对象id拼接”大致比较看重,朋友们都想要知道一些“netlist对象id拼接”的相关文章。那么小编也在网摘上网罗了一些有关“netlist对象id拼接””的相关资讯,希望看官们能喜欢,同学们一起来学习一下吧!

之前的文章中我们谈到,大量的事实证明,Verilog编码效率决定Design Compiler综合得到的电路性能的高低。如果是一段非常低效的RTL代码,DC也不能综合出来一个高效的电路。我们列出了一些比较好的编码风格,其中的一条是RTL的代码层次要清楚。功能越是复杂,越要注意RTL的逻辑层次结构。这是保证数据流和所设计模块清晰的基本条件。今天我们再深入谈一下,RTL代码层次中的模块划分问题。

RTL module层次概念

在Verilog编写的RTL中,module是一个重要的概念。它可以指代一颗芯片、一个IP、一个模块、一个cell等等。正是通过一个一个的module,经过很多层次的调用,组合共同完成了一个芯片的设计。

在进行电路设计之初,我们要按照一定的原则(一般情况下,都是根据功能)进行module的划分,即将一个复杂的电路设计,划分成为一个个子电路模块,在这些子电路模块下面,在进行进一步的拆分,拆分成更小的一些计算逻辑等等。

module之间的层次关系,在DC合成的时候,会保留下来。所以说module层次的划分、层次之间的编码方式,对DC合成的结果影响很大,一个好的module层次划分,以及高效的编码风格,显得就格外重要。

RTL module层次划分以编码原则

下面给出几个划分以及编码的原则,供大家参考:

module之间接口干净

这边的干净是指,从input\output的角度进行考虑,尽量减少port上面的信号,模块之间尽量减少中间计算信号的交互。

组合电路不要出现在接口

具体见图一所示。

图一 较差的module划分

上图中共有三个module,module A、module B、module C。module A中包括一个Register和一个组合逻辑A,module B中包括一个Register和一个组合逻辑B,module C中只有一个组合逻辑C。我们看到组合逻辑A、C、B分别位于module A、module C和module B中,并且三个组合逻辑块,直接相连。

从前面我们介绍的情况可以知道,DC在合成的时候,会保持module之间,层与层的连接关系。所以DC在优化过程中,会认为组合逻辑A、B、C分别属于三个module,故分别对三个module进行优化,显然,这样的优化结果是要打折扣的,一般不会得到最优的优化结果。

图二 较好的module划分

图二中,我们给出一个较好的module划分。将组合逻辑A、B、C放到一个module内部,DC在合成的过程中,会把A、B、C之间的逻辑,进行统一优化,可以得到比图一更好的合成结果。但是图二所示的module划分,还不是最好的划分方法,下面我们给出一种更好的module划分方法。

图三 更好的module划分

图三中,我们将组合逻辑A、B、C合并之后,放到一个Register的前面,这样DC在合成过程中,在将A、B、C组合逻辑一并优化的同时,还会和Register统一进行优化,选择更加高效的触发器,达到更好的优化结果。

小结

今天我们介绍了在IC设计过程中,不同的module划分对综合得到的netlist的影响,通过三个不同的module划分分析,可以看出,不同的module划分对综合结果影响很大。后面的文章中,我们还会再深入的探讨,胶合逻辑(glue logic)以及其他影响的因素,欢迎大家继续关注。

欢迎阅读、点赞、转发、评论。加关注“单眼皮老王”,阅读IC设计、图像处理、ASIC、FPGA、AI等相关文章。

标签: #netlist对象id拼接