Logic Synthesis
目的:
在满足约束(时序、面积、功耗等约束)的前提下,把design从RTL映射到门级网表(netlist)
需要满足setup timing检查,不需要理会hold timing检查。
工具:
Synopsys Design Compiler(DC)
Cadence Genus Synthesis
Input文件:
1,RTL文件.v
2,SDC约束文件
3,library ***.db
Output文件:
1,Mapped.v
2,Mapped.ddc
ddc为二进制文件,包含时序约束,还包含基本的布局物理信息。
先做一次综合,然后让后端布一个初步的物理信息,然后再做综合,吐出的.ddc文件,里面的时序信息更准确,而且和后端的一致性更好。
3,Map.svf
DC改变了RTL代码的结构,但是逻辑没有改变。比如调整组合逻辑的位置,但是最终的功能是一样的。 其中的变化写入到.svf中,该文件用于后面的形式验证
4,report
具体脚本:
1,设置工艺库文件
set target_library "***.db"
set link_library "* $target_library"
2,读入RTL文件
read_verilog ***.v
current_design ***
link (将读入的RTL设计和综合库连接起来)
3,设置约束或者读入约束
- # 时钟设定:
- reset_design
- create_clock
- set_clock_latency
- set_clock_uncertainty
- set_clock_transition
- # 输入延迟设定:
- set_input_delay
- # 输出延迟设定:
- set_output_delay
- # 输入转换时间
- set_input_transition
- # 输出负载
- set_load
4,综合
compile_ultra
5,结果输出
report_power > ***.power
report_area > ***.area
report_timing > ***.timing
report_constraint -all_violators > ***.violation(违例报告)
write_file -format ddc -hierarchy -output ***.ddc (保存DC的各种数据)
write -h -f verilog -output ***.v(verilog门级网表,用于ICC)
write_sdc ***.sdc(SDC格式的约束,用于ICC)
如何启动:
pt_shell
背后逻辑:
逻辑综合共分为三步:
1,翻译(Translation):
将RTL描述转换成未优化的门级布尔描述,包括相应的功能块以及功能块之间的拓扑结构。
input:RTL文件.v
output: gtech.v gyech.ddc
命令:read_verilog
其中的GTECH格式是DC先将不同语言的RTL网表(如Verilog,VHDL等),转化成统一的与工艺无关的门级网表形式。
转化的过程中,DC会利用其内部的DesignWare库对RTL代码进行结构级和逻辑级的优化。
- 比如,通过共用表达式,进行结构级优化:
- 比如,通过展平,把组合逻辑路径减少两级,变为乘积之和的电路,进行逻辑优化
2,优化(Optimization):
根据所施加的时序和面积约束,按照一定的算法对翻译结果进行逻辑重组和优化。
3,映射(Mapping):
根据所施加的时序和面积约束,从目标工艺库中搜索符合条件的单元来构成实际电路的逻辑网表。
优化和映射的命令:compiler_ultra
优化和映射的input:Gtech.db + SDC + library.db