IC 流程之逻辑综合

我不生产知识,我只是知识的搬运工。

IC 流程之逻辑综合

一、定义

       IC 流程中,在满足设计电路的功能、速度及面积等限制条件下,将寄存器传输级描述 RTL(register transfer level)代码转换为门级网表(gate level netlist)的过程叫做逻辑综合Logic Synthesis

输入:RTL 代码、工艺库、综合环境文件、时序约束文件。

输出:门级网表。

PS

  1. 为什么要做逻辑综合

       RTL 代码是对电路逻辑的理想描述,而实际的电路中会有门的延迟、走线的延迟、信号的转换时间及时钟信号到达各触发器时间不一等情况,所以为了寻求电路时序和面积的平衡, 功耗和时序的平衡,需要将 RTL 代码转换为门级网表,同时对电路做一定的优化。

  1. 逻辑综合在数字电路设计流程中的位置

图 1. 数字电路设计流程

       综合(Synthesis)在整个数字电路设计流程中的位置如上图所示。由于 Synthesis 步骤将集成电路的表达形式由逻辑描述转换到了电路描述,步骤前后所做的工作(逻辑开发和物理实现)截然不同,因此,大家一般将 Synthesis 当做数字电路设计前端(FE)和后端(BE)的分界点。

  1. 常见的逻辑综合工具是 synopsys 的 dc 和 cadence 的 genus

二、步骤

图 2. 综合步骤

翻译:将电路的 RTL 级描述翻译成用 GTECH 库元件组成的逻辑电路。

       GTECH 是 synopsys 的通用工艺库,它仅表示逻辑函数的功能,并没有映射到具体的厂家工艺库,是独立于厂家工艺的。这一过程的结果是在综合器内部生成电路的布尔函数表达式,不做任何逻辑重组和优化。

优化:根据所施加的时序和面积约束,按照一定的算法对翻译结果进行逻辑重组和优化。

映射:根据所施加的时序和面积约束,把用 GTECH 库元件的映射到某一固定厂家的工艺库上,此时的电路包含了厂家的工艺参数。

图 3. RTL 转 Netlist

三、流程介绍(DC

(1)用 RTL 代码进行设计

       即用可综合的 RTL 代码进行设计的编写。

(2)指定工艺库

       在根据约束条件进行逻辑综合时,对于选择的流片工艺,工艺库会提供综合工具所需要的标准逻辑单元的全部信息,即工艺库含有特定工艺条件下的标准逻辑单元的逻辑功能、单元面积、输入到输出的时序关系、输出的扇出限制以及对逻辑单元进行时序检查所需要的信息等。综合工具将根据工艺库提供的这些信息,对器件进行选择和电路结构调整,使其达到时序收敛;主要包括以下几个库:

target_library:综合的目标库,它一般是由生产线提供的工艺相关的库。

link_library:链接库,它是 DC 在解释综合后网表时用来参考的库。一般情况下,它和目标库相同,当使用综合库时,需要将该综合库加入链接库列表中。

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)设定综合策略 

       提供两种综合策略:自顶向下和自底向上。

       对于一些规模较小的设计,一般采用自顶向下的策略,该方法的缺点是编译时间太长,一旦改变其中的某一个模块就必须重新编译。该方法的优点是仅需要对顶层进行约束,将整个设计作为整体来进行优化,可以得到较好的优化效果。

       自底向上的综合策略是指先将各个单独的子模块进行综合和优化,然后将它们整合到上一层模块中进行综合,重复这一过程直至顶层模块。这种方法的优点是对各个模块的管理很方便,缺点是需要很多脚本来维护综合后的设计。

四、综合 39 问

1. Design Compiler 综合过程中,target_library 是如何被使用的?

       target_library 使用在 "compile" 过程中,用来生成工艺相关的门级网表。Design Compiler 尽量选择面积最小的逻辑门去满足设计功能和时序的要求。

如果不通过 “settarget_library *” 指定目标工艺库,默认值是 your_library.db,同时工具会报出 warning

2. Design Compiler 综合过程中 “link” 命令完成了什么功能?

       link 是 Design Compiler ”resolve” 设计中例化模块的过程。DesignCompiler 通过变量 “link_library” 指定例化模块库的位置,和 target_library 一样,默认为 your_library.db。建议显式地使用 link 命令,否则工具可能带着 “unresolved references” 进行综合,产生没有意义的结果,同时浪费时间。

3. Design Compiler 逻辑综合中 search_path 变量的作用是什么?

       DC 在 search_path 指定的目录底下寻找设计代码和库文件。建议在 search_path 中使用相对路径,增强脚本环境的可移植性

4. 将综合前的设计保存为.ddc 的格式文件有什么好处?

       read 命令将 rtl(unmapped)翻译成 GTECH 格式。对于一个较大的设计,rtl to ddc 需要花费很长的时间。当我们需要对设计重新进行 compile 时,只要读取保存的 unmapped 的设计(.ddc)就能节省很多时间。如果 rtl 已经被更新,还是要重新读入 rtl。

5. 请问在 DesignCompiler 综合过程中,下述命令的作用是什么?
       change_name -rule Verilog -hier

       DesignCompiler 完成了 asic 设计流程中的 rtl to netlist 过程,后续需要有第三方工具完成 netlist toGDSII 的实现。而第三方工具对于 netlist 有字符语法上的限制,所以需要使用 change_names 命令,才能让第三方工具正确识别 netlist。

6. 下面哪个是关于 target_library 和 link_library 变量正确的表述?

a) 所有在设计中例化的宏模块都应该在 target_library 中设置  

b) 在 compile 期间,DC 从 link_library 中选择最小的逻辑门去满足时序要求  

c) link_library 用于 resolve 例化模块,target_library 用于在 compile

d) link_library 自动加载.ddc 文件  

答案:C

a) 应该是  link_library

b) 应该是  target_library

d) 应该是  link

7. 在设计中,port 和 pin 有什么异同?

       相同点:port 和 pin 都是一个 input/output;

       不同点:port 是当前设计的 input/output;

       pin 是当前设计中例化模块的 input/output。

       如果当前设计被另外的设计例化,则 port 会变成 pin

8. 在 Design Compiler 中如何正确地使用 set_max_area 约束命令?

       如果是面积约束过于严格,或者直接设为 0,Design Compiler 将执行面积优化,直到无法优化为止。面积优化可能会增加 runtime, 但是不会影响时序优化。 时序约束优先级总是高于面积约束。 如果 run time 是一个需要在乎的问题,请将面积约束设为实际设计要求的值。如果不关心 run time,可以将其设置 0。  

9. Design Compiler 是如何划分时序路径进行时序分析的?

       DesignCompiler 将设计划分为一个个 timing path, 每一条路径都有一个 startpoint (input port、触发器的 clock pin) 和一个 endpoint (output ports、触发器的 data pin)

       DesignCompiler 会计算每一条路径的延时,然后比较 arrive time 和 require time 来判断这条路径是否满足时序要求。

10. Design Compiler 如何在逻辑综合的时候考虑到时钟树的影响?

       DesignCompiler 可以使用 set_clock_uncertAInty 命令来建模时钟的 skew + jitter + margin。如果不设置的话,默认值为 0。

11. Design Compiler 如何在逻辑综合阶段考虑时钟延迟的影响?

       时钟的 network latency 是指时钟输入端口到触发器的时钟端延迟;

       时钟的 source latency 是指实际的时钟源到时钟输入端口延迟。

       在 pre_layout 阶段,使用 set_clock_latency (-source) 来建模;

       在 post_layout 阶段,使用 set_propagated_clock 来建模。

12. 什么是 virtual clock,有什么用处?

       未连接到任何 port 或 pin 的时钟,用作输入或输出延迟的参考点。

13. 为什么模块级设计推荐寄存器输出?

       方便后级模块时序约束和时序预算。

14. input path、output path 和 reg-to-reg path 分别被什么 sdc 语句约束?

       input path   :set_input_delay

       output path :set_output_delay

       reg-to-reg    : create_clock

15. Design Compiler 综合中,set_max_capacitance 命令的用处是什么?

       max_capacitance 属于 “逻辑 DRC”,它限制了端口的扇出电容。默认情况下,逻辑 DRC 的优先级高于时序和面积约束。max_capacitance 是由工艺厂的库决定的。

16. Design Compiler 在综合时如何估计 pre_layout 的 cell 和 net 延时?

       Design Compiler 使用非线性延迟模型生成查找表,用于计算 cell 延迟。


       基于扇出和工艺厂提供的线负载模型(set_wire_load_model)计算 net 延迟。

17. Design Compiler 的 Topographical Mode 相比 Wire LoadModels 有什么优势?

       线负载模型(WLM)是基于工艺厂的数据统计,而不是特定于自己的设计。在深亚微米(UDSM)设计中,互连寄生参数对路径延迟有很大的影响
,WLM 是不够准确的。

       TopographicalMode 使用 placement 算法来估计线延时,提供和实际物理布局更好的时序相关性。

       TopographicalMode 除了逻辑库之外,还需要物理库(Milkyway)。

18. 使用 DesignCompiler,在 compile 或 optimize 之后应该执行的分析操作是什么?

       report_constraint –all_violators,如果这个报告表明没有违规行为,不需要进一步的时序和逻辑 DRC 分析。 如果有违规,可以使用 report_timing 执行更详细的分析。

19. Milkyway 库包含了哪些信息,DesignCompiler 中如何指定 Milkyway 库?

       物理 Milkyway 库(例如 std,ip 和 pad)包含 cell 的物理布局描述,用于执行 placement。 technology file 定义了该工艺金属层,物理设计规则,电阻,电容单位等。TLU-plus 文件定义深亚微米 RC 寄生模型。 这些文件由工艺厂商提供。

       在 Design Compiler 中,由下列命令定义:

20. Floorplan 是通过什么指标来设置芯片的大小和形状的?

       AspectRatio(height/width),默认比值为 1

       Utilization(利用率)决定了 cell 的密集程度,提高利用率将减少 core 大小,默认利用率为 0.6

21. DC Topographical mode 如何读入设计的实际物理布局信息?

       * source  PhysConstr.tcl

       * extract_physical_constraints  <def_file>

22. 为什么用于综合的 verilog 不建议使用 for 循环?

       DC 无法优化 for 循环的逻辑,只是单纯进行展开和复制,这可能降低电路的面积和性能。

23. Milkyway 库中的 “Layout” vs. “Abstract”  视图有什么不同?

       Milkyway 库中包含相应的 Abstract 视图和 Layout 视图, Abstract 视图用于 Place & Route 减少工具处理的数据量。

       Abstract 视图不包含底层器件细节,仅包含以下内容:

       - cell 的轮廓(placement 工具将每个 cell 放置在 core 中的 site 上。Placement 工具只需要知道的是 cell 的大小和形状(轮廓)。)

       - 引脚位置和层(引脚通常是金属连接的区域。routing 工具使用这些引脚位置来布线

      -Metal blockages(cell 中某些不能布线的金属层区域,因为这些区域已经被该 cell 使用。上面的示例布局太简单,不需要 Metal blockages。 Metal blockages 更常见于 IP 宏模块。

24. 针对下图,分别使用 report_timing、report_timing-max_paths 2、report_timing -nworst 2-max_paths 2 会输出哪些 slack ?

       report_timing: 由于 4 条路径都属于同一 path group,因此 report_timing 只会报出一条路径,即时序最差的路径(Slack =-0.3)

       report_timing-max_paths 2 在每个 endpoint 都会报出一个最差的 slack ,即(Slack = -0.3、Slack = -0.15)

       report_timing-max_paths 2 -nworst 2 在每个 endpoint 允许报出两个最差的 slack,即(Slack = -0.3、Slack = -0.25)

25. 用什么命令来设置设计驱动和负载约束?

       set_driving_cell、set_load

26. group path 中的 –weight 选项有什么实际用处?

       DesignCompiler 以降低 cost function 为优化方向,–weight 用于给特定 path group 设置优先级或权重

       例如:path group 1:

       slack =-2ns,weight=5, 则 cost function = 10

       path group 2:

       slack =-3ns,weight=1, 则 cost function = 3.Design Compiler 优化的方向是降低两个 pathgroup 的 cost function 之和。

27. group path 中的 –critical 选项有什么实际用处?

       –critical 选项用于优化 critical range 范围内的路径,critical range 不应超过时钟周期的 10%。优化次关键路径可能有助于关键路径。

默认情况下,所有路径的 critical range 均为零。

28. 下列关于 DesignWare 库的描述正确的是?

a、compile_ultra 之前需要额外设置库变量

b、推断综合各种各样的算术和关系运算符

c、推断综合各种各样的标准 IP,例如 fifo,移位寄存器,分频器

d、以上都是

答案:B

compile_ultra 自动设置库变量;非算术 / 关系 IP 不能由 DC 推断,它们必须在 RTL 代码中实例化。

29. 下列关于 optimize_registers 的描述正确的是?

a、拆分 / 合并寄存器 - 不优化组合逻辑

b、可以增加 pipeline 中的寄存器级数

c、可能会增加违规,以减少寄存器数量

d、可能生成更快和更小的流水线设计

答案:D

optimize_registers:不改变寄存器级数;可能会增加

寄存器数量;将利用正 slack 以减少寄存器数量;将执行增量编译,以进一步优化组合逻辑。

30. 通过增加 Design Compiler delay 优化的的优先级将不会修复任何逻辑 DRC 违规 - True or False?

       False
       Design Compiler 将修复逻辑 DRC 违规,只要不增加负 slack。

31. 在单时钟设计中,默认情况下,Design Compiler 不会自动创建任何 path group - True or False?

       False

       DesignCompiler 为时钟创建至少一个 path group。 如果有任何不受约束的路径,这些路径会被分组为名为 default 的 path group。

32. 默认情况下,path group 内的优化会停止在关键路径的优化上 - True or False?

       True

       当关键路径无法进一步优化时,、默认情况下,次关键路径不会优化。 Design Compile 进入下一个 path group 的优化。

33. 为什么建议优化次关键路径?

       通过优化次关键路径,可能能够改善相关的关键路径,最终会减少违规路径,更容易通过 Place&Route 物理设计工具来修复。

34. 默认情况下被忽略优化的次关键路径如何能够得到优化

a)将它们放在自己的 path group 中

b)将 criticalrange 应用于 create_clock

c)将 weight 应用于其 path group

d)以上所有

答案:A

critical range 适用于 pathgroup,而不是时钟约束;

应用 weight 没有指示 Design Compiler 来优化否则被忽略的路径 - 它只是对已经考虑优化的路径施加更多的优化权重。

35. 通过将 - weight 选项应用于 path group,它可能会恶化另一条路径上 WNS - 对错吗?True or False?

       True

       如果 DesignCompiler 可以降低整体的 cost function 的话。

36. Topographical mode 相比 WLM 模式,通常提供更好的速度 / 面积结果 - True or False?

       False

       Topographicalmode 导致与实际布局更好的时序相关性,不一定是更好的速度和 / 或面积结果。

37. 在 Topographical mode 中包括物理约束

a)获得更好的速度 / 面积优化

b)生成一个 readyfor clock tree synthesis 的设计

c)是可选的,但建议用,以提高与实际物理布局更好的时序相关性

d)以上所有

答案:C

虽然 Topographicalmode 确实执行了 placement 引擎,但这仅适用于时序计算的目的。只有能够保存网表,用于 Place&Route 物理设计工具。

38. 综合后,已经完成映射的网表为什么不能够包含 assign 语句,assign 语句可能是由什么引起的?

       布局工具可能无法处理 Verilog 网表中 assign 语句,网表中 assign 语句可能是由多端口网络和三态网络导致。

39. Design Compiler 怎么 fix 三态网络导致的网表中含有的 assign 语句问题?

       DesignCompiler 使用 assign 语句描述三态网络,我们需要将三态网络声明转换为 wire 声明。

参考文献:

【1】https://wenku.baidu.com/view/1c471db40b4c2e3f572763de.html

【2】http://bbs.eetop.cn/thread-848822-1-1.html

【3】https://blog.csdn.net/bleauchat/article/details/97786529

  • 12
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IC设计流程是指在设计集成电路(Integrated Circuit)的过程中所要经历的一系列步骤。主要包括设计规范制定、框图设计、电路设计、电路模拟、物理设计、电路布局与布线、电气规则检查、电路模拟验证、软件编程、功能仿真、静态时序仿真、动态时序仿真、电信号完整性仿真、稳定性分析、功率分析、设计可靠性分析等。 首先,设计规范制定阶段是为了明确IC的功能需求、性能指标、技术要求等。在这个阶段,需要对设计目标进行明确,并确定工艺和设备。 接下来是框图设计和电路设计阶段,主要是根据设计规范和功能需求,进行逻辑设计和电路设计。在这个阶段,需要进行功能分区、选择适合的门电路,以及进行元件的选型和参数设置。 然后是电路模拟阶段,通过电路仿真软件验证设计的正确性和稳定性。这个阶段通过电路仿真软件对设计电路进行功能仿真和工作参数调整。 接下来是物理设计阶段,主要包括电路布局和布线。通过设计布局和优化电路走线,保证电路的性能,并满足布线规则和工艺要求。 之后进行电路模拟验证,通过模拟工具验证设计的正确性和电路性能是否达到要求。 接下来是软件编程,对设计中的控制单元、通信接口等进行程序编写,实现电路逻辑功能。 最后是功能仿真、时序仿真、电信号完整性仿真、稳定性分析、功率分析和设计可靠性分析等,检查和验证设计的性能和可靠性。 在整个设计流程中,需要使用到各种设计工具和软件,如EDA工具等。同时,还需要工程师之间的合作和协调,确保设计流程的顺利进行。 ### 回答2: IC设计流程是指芯片设计的整个过程,它包括了需求分析、系统设计、电路设计、物理设计和验证等环节。 首先,需求分析阶段是IC设计流程的起点。在这个阶段,设计团队与客户沟通,明确设计的目标和功能需求,同时进行市场调研,了解竞争对手和市场需求。 接下来,系统设计阶段。在此阶段,设计团队制定芯片的整体架构,包括功能和性能的分配,以及模块之间的接口和通信方式。系统设计要考虑功耗、性能、可靠性等方面的要求。 然后是电路设计阶段,设计团队根据系统设计的要求开始设计各个功能模块的电路。这一阶段需要熟悉各种电路设计方法和工具,如仿真工具和布局工具,以确保设计的可行性和准确性。 接下来是物理设计阶段,设计团队将电路设计转化为实际的物理布局。这一阶段需要考虑芯片的面积、功耗、时序等方面的要求,并使用专业的物理设计软件进行布局和布线。 最后是验证阶段,也是整个IC设计流程中最为关键的环节。设计团队对设计的芯片进行各种测试和验证,以验证其功能和性能是否符合设计要求。这一阶段包括功能验证、时序验证、电气验证等多个子阶段。 综上所述,IC设计流程是一个复杂且高度专业化的过程,需要设计团队具备深厚的技术功底和严谨的工作态度。同时,不断创新和学习新的设计方法和工具也是设计团队不可或缺的能力。 ### 回答3: IC设计流程是指集成电路的设计过程。下面我来简单介绍一下。 首先,IC设计的第一步是需求分析,这一阶段需要与客户合作,了解具体的需求和技术规范,确定设计目标,包括电路功能、性能指标和功耗等。 接着,进入架构设计阶段,根据需求分析的结果,设计出整个电路的框架,确定各个模块的功能和相互连接方式,以及电源供应和时钟等重要模块的设计。 然后,进行逻辑设计,将电路分为多个逻辑模块,使用硬件描述语言进行逻辑综合优化。通过逻辑综合工具,将逻辑电路转化为门级电路,减小电路规模,提高性能。 接下来,进行物理设计,将门级电路转化为物理布局,包括库元件选择、布局规划和连线设计等。通过物理设计工具,生成版图文件,准备进行后续的验证和仿真。 在布局布线阶段,根据物理布局文件进行器件布置和连线,保证电路布局的规范和紧凑。使用布局布线工具进行自动布线或手动调整,解决信号延迟、噪声、功耗等问题。 接下来,进行电气验证,通过仿真工具对电路进行功能验证和时序分析,确保设计的正确性和性能指标的满足。同时,进行功耗分析和信号完整性分析。 最后,进行芯片加工和封装,将设计好的电路提交给集成电路制造厂商进行加工生产。在芯片返回后,进行功能和性能测试,确保芯片的质量和性能指标的达标。 总而言之,IC设计流程包括需求分析、架构设计、逻辑设计、物理设计、布局布线、电气验证、制造和测试等多个阶段,各个阶段相互衔接,共同完成集成电路的设计和制造。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值