目录
专用集成电路的设计过程依赖于软件工具来管理和控制那些描述大型复杂电路的数据库。在这些工具中,综合引擎工具有着至关重要的作用。综合工具可以完成许多工作,以下式其中的重要步骤:
(1)检测并消除冗余逻辑
(2)查找组合反馈环路
(3)利用无关紧要条件
(4)检测出未使用状态
(5)查找并消除等价的状态
(6)进行状态分配
(7)在满足物理工艺的面积和/或速度限制的条件下,综合出最优多级逻辑实现。最后一步包括了最优化计数,又有工艺映射的内容。
1. 综合简介
电路模型有三种常见的抽象级别:架构级、逻辑级和物理级。架构级:包含了必须由电路执行的,将输入序列转换为特定输出序列的一些操作,但不将操作与时钟关联。设计的关键在于如何从架构描述中提取一个能实现功能的算法。逻辑级:描述了能够由电路实现的一组变量和一组布尔函数。逻辑模型描述的寄存器资源、功能模块架构和时序均是其描述的一部分。设计任务:将布尔逻辑转换成可满足功能的组合门电路和存储寄存器的最优化的网表。物理描述:涉及实现电路的物理器件的实际几何图形。
1.1 逻辑综合
逻辑综合将电路从逻辑级描述为结构描述视图,最终生成结构化的原语网表。
1.2 RTL综合
RTL综合一般从结构开始,把基于语言的RTL描述转换成可通过逻辑综合工具进行优化的一组布尔方程。
1.3 高级综合
高级综合又称为“行为综合”或“结构综合”,其目标是寻找一个既能实现某种算法,且资源又可规划和分配的结构形式。所要综合的算法仅仅描述了电路的功能,而并没有明确指明寄存器和数据通道的结构,因此可能有多种不同的电路结构实现同一功能。
2、组合逻辑的综合
组合逻辑的描述方式:结构化的原语网表、一系列连续赋值语句、电平敏感的周期性行为
2.1 优先级结构的综合
case语句通常隐含地对首先解码的选项赋予较高优先权,而if语句则隐含地制定第一个分支具有更高优先权。
2.2 利用逻辑无关紧要条件
在综合时case或if语句中实用x的赋值将被处理成无关紧要条件。
如果一个条件操作符将z值放在电平敏感行为中连续赋值语句的右表达式中,那么该语句将会综合成通过组合逻辑驱动的一个三态器件。
2.3 ASIC单元与资源共享
用括号来控制操作符分组以缩减电路尺寸。
3.带锁存器的时序逻辑综合
一个无反馈的组合原语可综合成无锁存的组合逻辑
一组无反馈的连续赋值语句可以综合成无锁存的组合逻辑。
一个带反馈的条件操作符的连续赋值语句会综合出一个锁存器。
3.1 锁存器的无意综合
组合逻辑的Verilog描述给输出赋值时,必须考虑所有可能的输入值。
3.2 锁存器的有意综合
在一个电平敏感行为中的if过程里,如果只在部分而不是所有分支中对一个寄存器变量赋值(即条件不完整),它将会综合出一个锁存器。
4. 三态器件和总线结构的综合
三态器件允许在多个器件之间共享总线。描述三态总线驱动最常用的方法,是使用一个具有高阻态z分支赋值的连续赋值语句。
5. 带有触发器的时序逻辑综合
被综合为触发器的情况:
(1)如果该寄存器变量在行为描述的范围以外被使用;
(2)如果该寄存器变量在未被赋值前就已经在行为描述中被用到;
(3)如果该寄存器变量仅在行为描述工作的某些分支上被赋值。
综合要点:
(1)边沿敏感行为中的变量在被赋值前将综合成一个触发器的输出。
(2)当一个变量在被内部行为而不是外部行为引用前就被周期性行为赋值,综合过程将消除这个变量。
(3)由边沿敏感行为赋值并在该行为之外会用到的变量将被综合为一个触发器的输出。
6. 显式状态机的综合
显式状态机又一个已经明确定义的状态寄存器核一个能够在输入的作用下控制状态转换的逻辑。
综合要点(此处描写的是两段式状态机):
- 用两个周期性行为来描述一个显式状态机:一个电平敏感行为用来描述下一个状态和输出的组合逻辑,一个边沿敏感性为用来描述状态的同步转移。
- 在电平敏感周期性行为中,使用阻塞赋值操作符(=)来描述有限状态机的组合逻辑。
- 在边沿敏感周期性行为中,使用非阻塞赋值操作符(<=)来描述有限状态机的状态转移,以及时序机数据通道的寄存器传输。
- 在描述显式状态机的下一状态和输出的组合逻辑的电平敏感行为时,要对所有可能的状态译码。
6.1 序列检测器的综合
mealy型状态机:检测一个长度为n的序列需要n个状态(包含空闲状态),在第n个时钟周期输出结果。
moore型状态机:检测一个长度为n的序列需要n+1个状态(包含空闲状态),在第n+1个时钟周期输出结果。
重叠检测:使用不带“复位”的状态机,即第n+1个数据到来时继续接着之前的状态检测,例如检测到111时,如果再来一个1,则继续保持最后一个状态。
非重叠检测:使用带“复位”的状态即,即第n+1个数据带来时,从头开始检测,例如检测到111时,如果再来一个1,那么就回到s0状态,从新开始新一轮的检测。
7. 寄存器逻辑
利用时钟进行同步赋值的变量成为寄存器类型变量。寄存器类型的信号在时钟有效沿上被更新,其他时间保持稳定(即不会产生毛刺)。Moore状态机的输出不是寄存器类型的,但当输入端变化时它也不会产成毛刺,因为moore型状态机的输出只于状态有关,状态相对来说比输入信号更加稳定,不容易产生毛刺。
8. 状态编码
(1)如果对于某个给定的输入,两个状态跳转到相同的下一状态,则给他们分配相邻的码字;
(2)对相邻的状态分配相邻的码字;
(3)对于某个给定的输入具有相同输出的状态,分配相邻的码字。
采用格雷码优点:相邻码间仅有一位不同的编码,可以减少相邻物理信号线信号同时变化的情况,从而减少电路串扰的可能。
One_Hot编码:译码逻辑简单,但是占用更多的触发器。使用case语句来描述One_Hot编码可能与使用if语句来描述产生不同的结果。case语句隐含对所有位进行判断,而仅检测单个位的if语句可能生成更简单的译码逻辑。
9. 隐式状态机、寄存器和计数器的综合
9.1 隐式状态机
隐式状态机不使用明确的寄存器变量(reg)来表示状态值,而是由周期性(always...)行为中动作的变化来隐性地定义状态。任何一个在每个时钟周期中具有相同动作流的序列机都是一个单周期隐式状态机。
9.2 计数器综合
仅由单个事件控制表达式描述的状态机也为隐式状态机。在每个有效时钟事件下,状态机都会执行寄存器操作,但是没有明显的状态跳转。
9.3 寄存器综合
时序机种的存储器件由触发器还是锁存器实现,主要取决于时序机的时钟使用方案。
10. 复位
每个时序模块在设计时都需要一个复位信号,否则,该时序机的初始状态将无法控制。
11. 门控时钟与时钟使能综合
设计者会有意避免使用门控时钟,因为它们能引发主电路中不可预测的时序问题。但另一方面,低功耗设计又需要禁用时钟,以降低或者消除由晶体管的无用开关所耗费的能量。
12.预测综合结果
12.1 数据类型综合
综合工具会保留设计中的基本输入/输出线网,而内部线网则可能被消除。
12.2 运算符综合
所有预定义的verilog运算符都可能在产生二进制或布尔值的表达式中用到,有些运算符可通过综合工具中的专用映射器以某种特殊的方式来处理。
12.3 表达式替代
综合工具运用表达式替代,以确定行为中一系列过程(阻塞)赋值的结果。表达式替代会影响综合结果。
13 循环的综合
静态循环:如果周期性行为中的循环迭代次数在仿真前能由编译器确定(即迭代次数是固定的并且与数据无关),这种循环则称为静态的或是与数据独立的。
13.1 不带内嵌定时控制的静态循环
如果循环操作没有内部定时控制也没有数据依赖性,那么它的计算过程是隐式的组合逻辑。
13.2 带内嵌定时控制的静态循环
如果一个静态循环包含内嵌的边沿敏感事件控制表达式,该循环的计算行为会被同步,且分布到一个或多个时钟周期上执行。
13.3 不带内嵌定时控制的非静态循环
具有数据依赖性的循环的迭代次数在仿真前不能确定。如果该循环没有内嵌定时控制,那么该行为能够被仿真但不能综合。
13.4 带内嵌定时控制的非静态循环
非静态循环可以实现多周期操作。因为可以将循环的动作分配到多个时钟周期中去执行,所以单独的数据依赖性并不会对综合造成障碍。但是,为了综合,非静态循环的迭代操作必须通过一个同步的边沿敏感的事件控制表达式来分割。
13.5 用状态机替代不可综合的循环
综合工具不支持没有内嵌定时控制的非静态循环。这样的状态机不能直接综合,但他们的循环结构可由等效的可综合时序行为来替代。替代的关键是用显式有限状态机来描述这种行为。
14. 要避免的设计陷阱
当变量在多个行为中被引用时,软件中可能会存在竞争,并且后综合仿真的行为与前综合的行为可能不一致。因此,任何时候都不要在多个行为中对同一个变量赋值。
15. 分割与合并:设计划分
将设计划分成较小的功能单元可以增加描述的可读性,改善综合的结果,缩短优化周期,简化综合过程。