文章目录
target_library 是综合的目标,用于逻辑综合和优化,直接影响综合结果的性能、面积和功耗。
link_library 用于解决模块之间的引用关系,确保设计的完整性。
LIB_CORNER_SEL 用于选择特定工艺角的库文件,以满足不同工艺条件下的设计要求。
1. target_library
定义:目标库是在综合过程中,用于将 RTL(寄存器传输级)代码映射为门级网表的标准单元库。它包含了各种标准单元(如与门、或门、触发器等)的物理信息和时序信息。
功能:DC 依据目标库中的单元特性,对设计进行逻辑综合和优化,以满足设计的性能、面积和功耗要求。例如,DC 会根据目标库中单元的延迟信息,调整电路的时序,使设计满足时钟约束。
2. link_library
定义:链接库用于在综合过程中解决模块之间的引用关系。它包含了设计中所使用的所有模块的定义和接口信息,这些模块可以是标准单元、宏单元、IP 核等。
功能:当设计中包含多个模块时,DC 会通过链接库来查找和解析这些模块的定义和接口,确保设计的完整性。链接库主要用于模块的链接和解析,不直接参与逻辑综合和优化。
3. 工艺库角
在 Synopsys Design Compiler(DC)中,LIB_CORNER_SEL 是用于管理多工艺角(PVT: Process, Voltage, Temperature)库文件选择的环境变量或配置机制。它允许用户在综合过程中根据不同的工艺条件(如慢速-慢速(SS)、快速-快速(FF)、典型(TT)等)动态切换目标工艺库,以确保设计在不同物理条件下的时序和功耗符合要求
LIB_CORNER_SEL 主要用于多工艺角(Multi-Corner)设计环境下的库条件选择。以下是其关键点解析:
1. 工艺库角(Library Corner)的定义
工艺角:在集成电路制造过程中,由于光刻、掺杂等工艺步骤存在一定的偏差,会导致实际制造出来的晶体管参数(如阈值电压、载流子迁移率等)与设计值存在差异。为了确保芯片在不同的工艺条件下都能正常工作,通常会定义几种典型的工艺条件组合,即工艺角。常见的工艺角包括 FF(Fast - Fast,快速工艺、高电压、低温)、SS(Slow - Slow,慢速工艺、低电压、高温)等。
工艺库角是Foundry提供的工艺库中定义的一组操作条件(Operating Conditions),包括工艺(Process)、电压(Voltage)和温度(Temperature)的极端组合(PVT)。常见的库角包括:
WC(Worst-Case):慢工艺、低电压、高温(最差性能条件)。
BC(Best-Case):快工艺、高电压、低温(最佳性能条件)。
TT(Typical):典型工艺、标称电压和温度38。
set LIB_CORNER_SEL "wc" # 选择最差工艺角库
set target_library "tsmc65_${LIB_CORNER_SEL}.db"
这里选择了慢速工艺角的库文件,DC 在综合过程中会使用该工艺角的库文件进行分析和优化
2. LIB_CORNER_SEL的作用
是用于选择特定工艺角库的参数或设置选项。不同的工艺角对应不同的标准单元库(.lib 文件),这些库文件中包含了在该工艺角下标准单元的时序、功耗等信息。通过 LIB_CORNER_SEL 可以指定 DC 在综合过程中使用哪个工艺角的库文件进行分析和优化。
与多模式(Multi-Mode)结合:支持同时分析不同工作模式(如高性能模式、低功耗模式)下的时序和功耗。
3. 相关命令与操作
在Design Compiler中,库角通常通过以下方式管理:
set_operating_conditions:显式设置当前设计的操作条件(如set_operating_conditions -max WCCOM)8。
report_lib:查看工艺库中定义的可用操作条件8。
多角优化:通过set_scenario和set_active_scenario支持多角多模式(MCMM)分析8。
4. 实际应用场景
静态时序分析(STA):需覆盖所有关键库角以确保设计鲁棒性。
功耗优化:在BC角下优化漏电功耗,在WC角下优化动态功耗。
4. 命令
check_design
check_design -summary 命令的主要作用是对当前设计进行全面检查,并输出检查结果的摘要信息。
这些检查涵盖设计的多个方面,像连接性、时序约束、逻辑完整性等,有助于快速发现设计中存在的问题。
输出信息
执行 check_design -summary 命令后,会输出一系列检查结果的摘要信息,主要包含以下几类:
- 端口连接问题:显示设计中端口连接不正确的情况,比如悬空的输入端口、未驱动的输出端口等。
- 时序约束问题:指出时序约束方面存在的问题,像缺少时钟定义、约束冲突等。
- 逻辑完整性问题:检查设计的逻辑是否完整,有无未使用的逻辑单元、逻辑错误等。
- 其他问题:还可能包括其他类型的问题,如层次结构错误、库文件缺失等。
输出示例
Check Design Summary:
---------------------
- Number of unconnected inputs: 2
- Number of undriven outputs: 1
- Number of missing clock definitions: 0
- Number of logic errors detected: 1
read_verilog
功能:用于读取 Verilog 格式的设计文件
read_vhdl 用于读取 VHDL 格式的设计文件
read_sdc
功能:读取 Synopsys Design Constraints(SDC)文件,该文件包含了设计的时序约束信息。
set_clock_period
功能:设置时钟信号的周期
compile
功能:对设计进行综合,将 RTL 代码转换为门级网表,并根据约束条件进行优化
compile_ultra
功能:比 compile 命令更高级的综合优化命令,能提供更深入的优化。
report_checks
功能:生成设计的检查报告,包括时序检查、面积检查等。
report_checks -all_violators
解释:生成包含所有违反约束情况的检查报告。
report_area
功能:生成设计的面积报告,显示设计的总面积、各模块的面积等信息。
report_timing
功能:生成时序报告,分析设计的时序性能,包括最大延迟路径、建立时间和保持时间等信息。
report_power
功能:生成功耗报告,估算设计的功耗情况,涵盖动态功耗、静态功耗等。
库管理命令
- set_target_library
功能:指定综合时使用的目标库,该库包含了标准单元的信息。
示例:
set_target_library "lib/standard_cell.lib"
解释:将 lib/standard_cell.lib 设置为目标库。
- set_link_library
功能:指定链接库,用于解决模块之间的引用关系。
示例:
set_link_library "* $target_library"
解释:设置链接库,* 表示搜索当前工作目录和环境变量中指定的路径,$target_library 表示将目标库也包含在链接库中。
设计检查
check_timing
功能:检查设计的时序约束是否满足要求,列出违反时序的路径。
check_physical
功能:检查设计的物理规则是否符合要求,如布局布线规则等
Other
命令类别 | 命令名称 | 功能 | 示例 | 解释 |
---|---|---|---|---|
库和环境设置 | set_search_path | 设置文件搜索路径,DC读取文件时会在这些路径查找 | set_search_path [list ./lib ./design_files] | 将当前目录下的 lib 和 design_files 文件夹添加到搜索路径 |
库和环境设置 | set_liberty_behavior | 控制DC处理Liberty库文件信息的方式,可设置对库中某些属性的解释方式 | set_liberty_behavior -max_delay_check | 设置为最大延迟检查模式 |
设计处理 | ungroup | 将已分组的设计模块解组,便于对单个模块操作和分析 | ungroup [get_cells group_name] | 对名为 group_name 的模块进行解组 |
设计处理 | flatten_design | 将设计的层次结构扁平化,把所有子模块展开为单层结构,简化设计分析和优化 | flatten_design | - |
约束操作 | set_false_path | 设置虚假路径,告知DC某些路径无需进行时序分析,排除实际工作中不会出现的路径 | set_false_path -from [get_pins start_pin] -to [get_pins end_pin] | 将从 start_pin 到 end_pin 的路径设置为虚假路径 |
约束操作 | set_multicycle_path | 设置多周期路径,处理信号在多个时钟周期内有效的情况 | set_multicycle_path 2 -setup -from [get_pins src_pin] -to [get_pins dst_pin] | 将从 src_pin 到 dst_pin 的建立时间设置为多周期路径,周期数为2 |
优化与综合 | optimize_design | 对设计进行优化,可在综合前后使用,改善设计的性能、面积和功耗 | optimize_design | - |
优化与综合 | map_design | 将设计映射到目标库中的标准单元,是综合过程重要步骤 | map_design | - |
报告生成与分析 | report_checks -verbose | 生成详细的设计检查报告,比 check_design -summary 信息更丰富,便于深入排查问题 | report_checks -verbose | - |
报告生成与分析 | report_constraint | 生成约束报告,展示当前设计应用的所有约束信息,检查约束设置是否正确 | report_constraint | - |
报告生成与分析 | report_worst_paths | 报告设计中最差的时序路径,帮助定位影响设计性能的关键路径 | report_worst_paths 5 | 报告最差的5条时序路径 |
调试与监控 | show_lib | 显示库文件信息,如库中的单元、端口等,用于调试和确认库内容 | show_lib my_library.lib | 显示 my_library.lib 文件的详细信息 |
调试与监控 | watchpoint | 设置监控点,跟踪设计中特定信号或节点的变化,辅助调试设计问题 | watchpoint [get_nets signal_name] | 对名为 signal_name 的网络设置监控点 |