利用工具将RTL代码转换为门级网表的过程叫做逻辑综合(Logic Synthesis),常见的逻辑综合工具是synopsys的design compile(DC);
综合一个设计的过程从读取RTL代码开始,通过施加时序约束关系,映射 产生一个门级网表文件;它可以分为三步:
1. 翻译:读入电路的RTL级描述,并将语言描述翻译成相应的功能块以及功能块之间的拓扑结构。这一过程的结果是在综合器内部生成电路的布尔函数表达式,不做任何逻辑重组和优化。
2. 优化:根据所施加的时序和面积约束,按照一定的算法对翻译结果进行逻辑重组和优化。
3. 映射:根据所施加的时序和面积约束,从目标工艺库中搜索符合条件的单元来构成实际电路的逻辑网表
如下图所示:逻辑综合=翻译+优化+映射
流程介绍
(1)用RTL代码进行设计
即用可综合的RTL代码进行设计的编写;
(2)指定工艺库
在根据约束条件进行逻辑综合时,对于选择的流片工艺,工艺库会提供综合工具所需要的标准逻辑单元的全部信息,即工艺库含有特定工艺条件下的标准逻辑单元的逻辑功能、单元面积、输入到输出的时序关系、输出的扇出限制以及对逻辑单元进行时序检查所需要的信息等.综合工具将根据工艺库提供的这些信息,对器件进行选择和电路结构调整,使其达到时序收敛;主要包括以下几个库:
link_library:链接库,它是DC在解释综合后网表时用来参考的库;一般情况下,它和目标库相同;当使用综合库时,需要将该综合库加入链接库列表中;
target_library:综合的目标库,它一般是由生产线提供的工艺相关的库;
symbol_library:指定的符号库;
synthetic_library:综合库,它包含了一些可综合的与工艺无关的IP;
(3)读入RTL代码文件
将RTL代码输入给综合工具,由综合工具进行编译;
(4)定义环境的约束条件
主要包括 : 设置环境条件 set_operating_conditions
设置线负载模型 set_wire_load_model
设置驱动强度 set_drive set_driving_cell
设置电容负载 set_load
设置扇出负载 set_fanout_load
(5)定义设计的约束条件
主要包括:时钟定义的命令
creat_clock
set_colck_latency
set_clock_uncertainty
creat_generated_clock
设计规则约束
set_max_transition 最大跳变时间
set_max_fanout 最大扇出
set_max_capacitance 最大电容
输入输出端口的延时
set_input_delay
set_output_delay
设置最大面积 set_max_area
设置伪路径 set_false_path
设置多周期路径 set_multicycle_path
(6)设定综合策略
提供两种综合策略:自顶向下和自底向上
对于一些规模较小的设计,一般采用自顶向下的策略,该方法的缺点是编译时间太长,一旦改变其中的某一个模块就必须重新编译;该方法的优点是仅需要对顶层进行约束,将整个设计作为整体来进行优化,可以得到较好的优化效果;
自底向上的综合策略是指先将各个单独的子模块进行综合和优化,然后将它们整合到上一层模块中进行综合,重复这一过程直至顶层模块;这种方法的优点是对各个模块的管理很方便,缺点是需要很多脚本来维护综合后的设计;