01数字IC综合
数字IC设计综合入门目录
[*]数字IC设计综合入门
[*]目录
[*]1. 什么是数字IC综合?
[*]2. 综合EDA工具简介
[*]3. 综合的输入文件 (Inputs)
[*]3.1 RTL代码 (Verilog/VHDL)
[*]3.2 工艺库文件 (Technology Library)
[*]3.3 设计约束文件 (SDC)
[*]4. 综合的核心流程
[*]4.1 读入与链接 (Read & Link)
[*]4.1.1 如何读入多个Verilog文件
[*]4.2 设定约束 (Apply Constraints)
[*]4.3 编译与优化 (Compile & Optimize)
[*]4.4 报告生成 (Reporting)
[*]4.5 验证环境设置 (Verifying the Setup)
[*]5. 综合的输出文件 (Outputs)
[*]6. 实战案例:4位加法器综合
[*]6.1 设计文件 (adder.v)
[*]6.2 约束文件 (adder.sdc)
[*]6.3 综合脚本 (run_dc.tcl)
[*]6.4 运行与分析
[*]7. 总结
1. 什么是数字IC综合?
数字集成电路综合 (Digital IC Synthesis) 是将高层次的硬件描述语言(HDL),如Verilog或VHDL,自动转换为门级网表(Gate-Level Netlist)的过程。这个过程是连接抽象设计与物理实现的桥梁。
[*]在IC设计流程中的位置: 它位于功能仿真(RTL Simulation)之后,布局布线(Place & Route)之前。
RTL设计 -> 功能仿真 -> 综合 -> 布局布线 -> 后仿真与验证
[*]综合的核心目标: 在满足设计约束(如时序、面积、功耗)的前提下,生成一个最优的门级电路实现。
[*]主要的目标 通过使用综合工具来实现将rtl转化为门级网表并进行优化处理
[*]首先要将rtl代码进行读入
[*]之后还要加载工艺库和约束
[*]设置约束constraints也即是con文件
[*]之后就是将rtl代码转化为门级网表
[*]产生时序检查等报告
[*]分析并对代码进行优化处理
[*]产生netlist文件
[*]synthesis = translation + logic optimization + gate mapping
[*]主要的延迟
[*]单元延迟 cell delay
[*]线延迟 通过使用线负载模型来进行建模
[*]dc基础操作
[*]打开可视化界面 design_vision
[*]打开shell界面 dc_shell
[*]批处理 dc_shell -topo -f run.tcl |tee -i run.log
[*]rtl synthesis flow
[*]加载rlt代码和工艺库数据
[*]rlt files
[*]setup file
[*]添加设计的约束
[*]constraints file
[*]对设计进行综合
[*]分析设计
[*]写出设计数据
2. 综合EDA工具简介
业界主流的综合工具主要有两款:
[*]Synopsys Design Compiler (DC): 业界应用最广泛的综合工具,通常简称为DC。
[*]Cadence Genus Synthesis Solution: Cadence公司的综合工具。
本文将主要以 Synopsys DC 为例进行讲解。
3. 综合的输入文件 (Inputs)
综合过程如同一个精密的工厂,需要三种关键的原材料。缺少任何一种,都无法产出合格的产品。
3.1 RTL代码 (Verilog/VHDL)
这是设计的蓝图,描述了电路要做什么(What),而不是它由什么构成(How)。
[*]角色: 定义电路的逻辑功能和算法。
[*]格式: 通常是 .v (Verilog) 或 .vhd (VHDL) 文件。
[*]核心要求: 可综合性 (Synthesizability)。综合工具需要将代码中的描述一一对应到硬件电路上。
可综合代码 vs. 不可综合代码
特性可综合示例 (会被转换为硬件)不可综合示例 (仅用于仿真)时序控制always @(posedge clk)initial begin #10 a = 1; end解释描述了一个由时钟边沿触发的寄存器。#10 这样的绝对时间延迟在物理电路中不存在。赋值方式always @(posedge clk) qget_app_var link_library* slow.db dw_foundation.sldbdc_shell> list_libsWarning: No libraries to list. (UID-275)0原因解析:
这完全是正常现象。get_app_var 只是查询配置变量,它告诉你DC已经被告知要去哪里找库、要用什么库。但此时,DC并没有真正将这些库加载到内存中。
list_libs 命令是检查当前内存中已经加载的库。因为还没有执行任何需要库文件的操作(如链接设计),所以内存中自然是空的。
正确的验证流程:
库是在需要时才被加载的。这个“需要”的时刻通常是 link 设计或 read_lib 时。因此,正确的验证步骤是:
[*]启动 dc_shell。
[*]读入你的RTL文件。
[*]链接 (link) 设计。这个命令会促使DC去 search_path 中寻找 link_library 定义的库文件,并把它们加载到内存中。
[*]此时再执行 list_libs,你就能看到库列表了。
# 创建一个名为CLK,周期为2ns的时钟,施加在端口clk上
create_clock -name CLK -period 2.0 5. 综合的输出文件 (Outputs)
综合完成后,会生成一系列文件,作为交付给下一阶段(布局布线)的产物和本次综合结果的证明。
[*]门级网表 (Gate-Level Netlist, .v or .vg):
[*]内容: 这是综合最核心的产出。原始的RTL描述(如 a + b)被替换为由工艺库中标准单元(如 ADD_X1, FA_X1, DFFR_X1)的实例化和连线构成的Verilog文件。它精确地描述了电路的门级结构。
[*]示例: 对于我们的4位加法器,网表的一部分可能看起来像这样:
# 假设输入信号在时钟沿前0.8ns就稳定了
set_input_delay 0.8 -clock CLK
[*]更新后的约束文件 (Updated SDC, .sdc):
[*]内容: 它包含了所有原始输入约束,并可能增加了综合工具自动推断出的新约束,如传播时钟 (propagated clocks) 和 门控时钟 (gated clock) 的定义。这个文件将传递给布局布线工具,以确保后续优化目标与综合阶段一致。
[*]标准延时格式文件 (SDF, Standard Delay Format, .sdf):
[*]内容: 包含了门级网表中每个单元的实例延迟(Cell Delay)和信号路径的线延迟(Net Delay)的精确值。
[*]用途: 用于后综合仿真(门级仿真)。通过将SDF文件反标到网表中进行仿真,可以验证设计在考虑了实际门延迟和预估线延迟后的功能和时序是否仍然正确。
[*]报告文件 (Reports, .rpt):
[*]内容: 记录了综合质量(QoR)的详细信息,是工程师判断综合是否成功、分析和解决问题的依据。
[*]关键报告解读:
[*]report_timing:
[*]WNS (Worst Negative Slack): 最差路径的时序余量。必须为正数,否则表示存在时序违例。
[*]TNS (Total Negative Slack): 所有违例路径的余量总和。
[*]report_area:
[*]报告组合逻辑面积、非组合逻辑(触发器等)面积和总面积。面积单位通常是等效的最小与非门数量或实际的平方微米。
[*]report_power:
[*]报告静态功耗(漏电功耗)和动态功耗(开关功耗)。
[*]report_qor:
[*]提供一个综合质量的摘要,包括时序、面积、功耗等关键指标的概览。
[*]Synopsys数据库文件 (.ddc):
[*]内容: 这是Synopsys工具集的内部格式,以二进制形式打包了网表、约束、工艺库信息等所有设计数据。
[*]用途: 作为DC到Synopsys布局布线工具(如IC Compiler II)的无缝交接文件,比传递文本格式的网表和SDC更高效、更不容易出错。
6. 实战案例:4位加法器综合
下面我们通过一个完整的实例来演示综合流程。
6.1 设计文件 (adder.v)
// adder.vmodule adder (input clk,input rst_n,input a,input b,output reg sum);always @(posedge clk or negedge rst_n) begin if (!rst_n) begin sum
页:
[1]