数字电路综合划分及编码风格

1. 综合划分

合理的设计划分和好的HDL编码风格对成功的综合影响很大。逻辑划分是成功综合(和布局布线,如果布图示层次化的)的关键。传统上,设计人员根据每个模块的功能划分设计,而不考虑综合过程。正确地划分设计能显著地增强综合的效果,减少编译时间和简化脚本管理。而好的编码风格不仅对综合过程,而且对HDL代码的易读性都是必要的。

划分可视为采用”分而治之“的思想,即把复杂的设计化简为更简单的和易处理的模块。划分设计的一个最重要的优点是它提高设计的复用。

合理划分的设计除了容易满足时序约束,也能方便组员分发和管理不同的设计模块。

以下建议可取得相对较优的结果并减少编译时间:

——相关组合逻辑保持在同一模块中;

——将状态机从其他逻辑中分离出来;

——避免一个模块有多个时钟;

——分离用于同步多个时钟的模块;

——划分时,考虑布局风格。

在设计层次已经由先前编写的HDL代码确定后,group和ungroup命令给设计者提供了在DC中改变划分的能力,下图描述了这个行为。

group命令把指定的实例组合成一个单独的模块,在图中,使用如下命令将实例U1和U2组合在一起形成一个名为sub1的子模块。

dc_shell > current_design top

dc_shell > group {U1 U2} -design_name sub1

ungroup命令则进行逆操作。

2. RTL

RTL或寄存器传输级是高层次设计规范中最流行的形式。设计的RTL描述通过从一个寄存器到另一个寄存器的逻辑变换和传输来描述设计。逻辑值被存储在寄存器中,通过一些组合逻辑对其求值,随后将结果存储在下一个寄存器中。

3. 通用指导方针

摘自参考文献:

3.1 工艺无关

HDL代码应采用与工艺无关的方式编写,这样做的优点是通过重新综合能用任何ASIC库和新工艺来实现RTL代码。如果不可避免要布置库中的门,那么将所有例化的门组合起来以形成自己的模块,有助于设计特定库方面的管理。

3.2 时钟相关逻辑

——包括门控时钟逻辑的时钟逻辑和复位生成应当保持在一个模块内:综合一次并且不再设计了。这有助于生成简明的时钟约束规范。

——避免每个模块有多个时钟:尽量保持每个模块有一个时钟。这样的限制有助于避免以后约束包含多个时钟的模块时出现的困难,也有助于在物理级处理时钟扭曲问题。有时这是无法避免地,例如从一个时钟域跨到另一个时钟域同步信号的同步逻辑。对于这种情况,可以将同步逻辑隔离为一个独立的模块单独综合。这包括在主模块中例化同步逻辑之前,设置dont_touch属性。

——给时钟赋予有意义的名称。建议保持时钟名以反映其功能和频率。

3.3 模块名与文件名一致

不要在一个文件中描述多个模块或实体,一个文件应只包含一个面向综合的模块/实体定义,这有助于后端定位到模块的具体文件及位置。

3.4 最小化不必要的层次

不要生成不必要的层次(面向对象的编程思想可能会这样做),每个层次设置一个边界。如果生成不必要的层次,则性能会下降。这是因为DC不能跨层次进行有效的优化。为取得更佳的结果,在编译设计前,可用ungroup命令打散不需要的层次。

3.5 寄存器输出

这是著名的Synopsys(黑人问号??)。模块的输出应直接从寄存器输出,这一风格可避免组合逻辑跨模块边界(有什么优点= =)。

3.6 FSM综合指导

——状态名应使用VHDL中的”枚举类型“或Verilog中的”参数“来描述;

——计算下一状态的组合逻辑应在与状态寄存器独立的process或always块中;

——用case语句实现下一个状态组合逻辑。

参考文献:

https://book.douban.com/subject/2150040/​book.douban.com

你可能感兴趣的:(数字电路综合划分及编码风格)