一.DC逻辑综合概述
1.1 逻辑综合是在干嘛
把行为级的RTL代码在工艺、面积、时序等约束下转换成对应的门级网表。
- 行为级RTL代码:RTL(Register Transfer Level)代码通常用于描述数字电路的硬件结构和数据流,而行为级的 RTL 代码则是在 RTL 的基础上,更侧重于对电路行为和功能的抽象描述,它处于比传统 RTL 描述更高的抽象层次。例如,在描述计数器时,行为级 RTL 代码可能使用类似
count <= count + 1
这样的语句来表示计数值的增加,而不详细描述具体的寄存器操作和组合逻辑实现。 - 其它描述级别:RTL 级描述、门级描述
1.2 综合的三个阶段
转换(translation)、优化 (optimization)、映射(mapping)
- 转换:将高层语言描述的电路用门级的逻辑来实现
- 优化:对已有的初始电路进行分析,去掉电路中的冗余单元,并对不满足限制条件的路径进行优化
- 映射:将优化之后的电路映射到由制造商提供的工艺库上
1.3 输入输出文件有哪些
输入文件:RTL文件(.v
(Verilog)、.vhdl
(VHDL))、约束文件(.sdc
(Synopsys Design Constraints))、工艺库文件(.db
(Synopsys数据库格式))、库文件(.lib
(Liberty格式))、脚本文件(.tcl
)
输出文件:综合后的门级网表、带时序约束信息的sdc文件
1.4 电路综合的一些要求
1.4.1 综合脚本要求
综合脚本是在数字电路设计中,用于指导综合工具(如 DC - Design Compiler)进行逻辑综合过程的一系列指令和设置的集合。它是一个文本文件,通常包含了一系列的命令和参数,用于控制综合工具的行为
1)综合脚本必须是可重用的:需要自己实践发现其含义
2)在添加限制条件时,必须对如下的对象施加限制条件:实践发现其含义
1.4.2 综合结果要求
实践
二.DC综合的流程
2.1 流程概述
1)设置综合环境,准备设计文件(一般为HDL文件):推荐参数化环境变量的配置,目录结构的设置,文件的管理,
2)指定综合的库文件(对应lab1_Task2的流程):链接库(link library) 、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)
3)读取RTL(对应lab1_Task3的流程):综合工具会对RTL进行转化成布尔表达式,之后再将其映射成门级网表(有错误会报错) ,读入设计有两种实现方法实现方法:read 和 analyze & elaborate。下图给出了区分。
4)设置综合参数:定义对象包括工艺参数(温度、电压等),I/O 端口属性(负载、驱动、扇出),统计 wire-load 模型,设计环境将影响设计综合及优化结果。下面给出一个例子:
# 定义工艺参数
set_app_var process 130_nm
set_app_var temperature 25
set_app_var voltage 1.2
# 设置I/O端口属性
# 假设设计中有一个名为clk的时钟端口和一个名为data_in的输入端口,以及一个名为data_out的输出端口
# 设置时钟端口属性
set_clock_latency 0.5 [get_ports clk] ;# 设置时钟端口clk的延迟为0.5ns
set_clock_uncertainty 0.1 [get_ports clk] ;# 设置时钟端口clk的不确定性为0.1ns
# 设置输入端口属性
set_driving_cell -lib_cell bufbdl -pin Y [get_ports data_in] ;# 设置输入端口data_in的驱动单元为bufbdl,驱动引脚为Y
set_input_delay 1.0 -clock clk [get_ports data_in] ;# 设置输入端口data_in相对于时钟clk的输入延迟为1.0ns
# 设置输出端口属性
set_load 0.2 [get_ports data_out] ;# 设置输出端口data_out的负载为0.2pf
# 统计wire-load模型
set_wire_load_model -name wl100 -library my_lib ;# 选择名为wl100的wire-load模型,该模型位于my_lib库中
# 其他可能的设置,例如设置最大转换时间
set_max_transition 0.5 [all_outputs] ;# 设置所有输出端口的最大转换时间为0.5ns
# 可以继续添加更多与设计环境相关的设置,根据具体需求进行调整
5)设置约束文件(对应lab1_Task6的流程)
6)映射门级单元及优化
8)检查综合结果并输出报告(对应lab1_Task8的流程)
- report_constraint -all (查看是否违规)
- report_timing (查看时序报告)
- report_area (查看面积情况)
关于这些实验的碎碎念
跟着lab大概过一下就行,主要读的文件是tcl文件和source___下面的文件,其它文件有时间可以仔细看看。