zoukankan      html  css  js  c++  java
  • DC学习(2)综合的流程

    一:逻辑综合的概述

      synthesis = translation + logic optimization + gate mapping

    1:Translation

      主要把描述RTL级的HDL语言,在约束下转换成DC内部的同意用门级描述的电路,以GTECH或者没有映射的ddc形式展现

    2:logic optimization

      逻辑优化,就是把统一用门级描述的电路进行优化,例如把路径调整一下,门改一下。

    3:Gate mapping

      门级映射;DC用别的厂商的工艺库把电路给映射出来,得到一个ddc文件;包括映射的门电路信息与网表,.v格式的网表,延时信息(sdf),工作约束(sdc)。(.ddc不能用文本编辑器打开)。.ddc这个包含的网表文件是实际意义的网表文件,而.v这个形式的网表问价是用来做后仿真的文件。

      延时信息的得出:线负载模型、拓扑结构模型(现在)。

    二:DC启动方式

    1:dc_shell

      DC以命令行的格式启动

    2:design_vision

      DC图形界面启动

    3:Batch_mode

      批处理模式。前面两种方式只是把DC启动起来,没有真正的工作。需要通过source命令把脚本写进去以后,DC读取才真正工作;这种批处理模式是,在启动的同时,告诉DC执行哪些脚本

      例如:$dc_shell -topo -f run.tcl | tee -i run.log

      意思是:使用拓扑模式启动DC,启动的同时执行run.tcl脚本文件,并且把启动过程中显示在终端的信息记录到run.log中。|  tee  -i就是写进信息的管道命令,讲dc_shell -topo -f run.tcl 执行后显示的信息(输出结果),流入到run.log文件中。这样子是为了在DC启动失败的时候,通过查看启动信息,进而排除错误

    三:基本流程概述

    1:高层次设计流程图

      

      ①在设计之前,准备好库,verilog代码,约束条件

      ② 完成 RTL 源码设计之后,应让设计开发与功能仿真并行进行:

        ·在设计开发阶段,我们使用DC来实现特定的设计目标,以及执行默认选项的初步综合

        ·如果设计开发结果未能在10%的偏差范围内满足时序目标,则需要修正HDL代码,然后重复设计开发和功能验证的过程。 

      ③ 使用 DC 完成设计的综合并满足设计目标.这个过程包括三个步骤,即综合=翻译+逻辑优化+映射,首先将 RTL 源代码转化为通用的布尔等式,然后设计的约束对电路进行逻辑综合和优化,使电路能满足设计的目标或者约束,最后使用目标工艺库的逻辑单元映射成门级网表,在将设计综合成门级网表之后,要验证此时的设计是否满足设计目标。如果不能满足设计目标,此时需要产生及分析报告确定问题及解决问题。

      ④当设计满足功能、时序以及其他的设计目标的时候,需要执行物理层设计最后分析物理层设计的性能,也就是使用DC的拓扑模式,加入floorplan的物理信息后进行综合分析设计的性能。如果结果未能满足设计目标,应返回第三步.如果满足设计目标,则本部分设计周期完成.

    2:流程图与相应的命令

      

      ①准备设计文件,DC 的设计输入文件一般为 HDL 文件。

      ②指定库文件,需要指定的库文件包括:

      链接库(link library) 、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)

      工艺库文件的配置放在三个地方,A:软件安装目录$SYNOPSYS/admin/setup。B:~user,用户安装目录。C:DC startup directory前两个目录是早已配置好,最好不要动的;第三个目录放在工作目录下的隐藏目录:.synopsys_dc.setup,通过ls -al才能看到此文件。

      一般有两种文件,后缀名为lib(人看,可转化为db文件)和db(工具读)

      例如:set target_library 22nm.db

         set_app_var target_library 22nm.db   #对于DC内部原变量,最好使用第二种方法,set_app_var会检查变量拼写是否为内部变量,若拼写错误,则出现error。

      下面是库的解释,具体的解释在后面有说,这里先进行简单地概述一下:

      Link  library 和 target  library 统称为 technology  library(即工艺库,习惯称之为综合库),technology  library  由半导体制造商提供,包含相关 cell 的信息及设计约束标准,其中:

      Target library:    在门级优化及映射的时候提供生成网表的 cell,即DC 用于创建实际电路的库。

      Link  library:设置里面不仅有Target library,还有其他东西,例如IP核。“*65n_wc.db”,*指DC在内存里开辟一片区域给自己用,别的操作不可使用。

      symbol library:Symbol library 提供 Design Vision GUI 中设计实现的图形符号,如果你使用脚本模式而不使用 GUI,此库可不指定 Symbol library。

     ③读入设计:

      设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros”  如  adders, comparators 等组成,这些组件来自 synopsys  的 synthetic lib,每种组件具有多种结构。读入设计有两种实现方法实现方法:read  和  analyze & elaborate(实际上read 是 analyze  与  elaborate 的打包操作  ),下面介绍二者在使用中的区

    别:

      

      从中可以看到,analyze & elaborate  可以自由指定设计库,并生成 GTECH中间文件前生成.syn 文件存储于 work 目录下,便于下次 elaborate 节省时间,我们一般选择  analyze & elaborate 的方法读入设计。

      ④定义设计环境: 

      定义对象包括工艺参数(温度、电压等),I/O 端口属性(负载、驱动、扇出), 统计 wire-load 模型,设计环境将影响设计综合及优化结果。

      ⑤设置设计约束: 

      设计约束包括设计规则约束和优化约束,设计规则约束(design rule constraint)由工艺库决定,在设计编译过程中必须满足,用于使电路能按功能要求正常工作。设计优化约束定义了 DC 要达到的时序和面积优化目标,该约束由用户指定,DC 在不违反设计规则约束的前提下,遵循此约束综合设计。

      ⑥选择编译策略: 

      对于层次化设计,DC 中有两种编译策略供选择,分别为 top down 和 bottom up。在 top down 策略中,顶层设计和子设计在一起编译,所有的环境和约束设置针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略不适合与大型设计,因为 top down 编译策略中,所以设计必须同时驻内存,硬件资源耗费大。在 bottom up 策略中,子设计单独约束,当子设计成功编译后,被设置为 dont_touch 属性,防止在之后的编译过程中被修改,所有同层子设计编译完成后,再编译之上的父设计,直至顶层设计编译完成。Bottom  up 策略允许大规模设计,因为该策略不需要所有设计同时驻入内存。

      ⑦编译: 

      用 Compile 命令执行综合与优化过程,还可以利用一些选项指导编译和优化过程。

      ⑧分析及解决设计中存在的问题 

      DC可以产生一些报告以反应设计的综合和优化结果,如:时序、面积、约束等报告,这些报告有助于分析和解决设计中存在的问题以改善综合结果,我们还可以利用 check_design 命令检验综合的设计的一致性。

      ⑨存储设计数据 

      DC不会自动存储综合后的设计结果,因而需要在离开 DC 时手动存储设计数据。比如存储网表、延时信息等数据文件,ddc文件。

    四:例子(练习lab1)

     1:准备好rtl代码(放在rtl文件夹里),约束文件(scripts里),库文件(.synopsys_dc.setup)   .

      

      $ ls -al  #可以看到.synopsys_dc.setup文件,gvim打开该文件(截取部分如下图)

      

      12-19行,alias命令是对后面的变量起简称;

      33-34行,source命令,在当前命令下引用该文件;

      打开common_setup.tcl文件,如下图

      

      

      common_setup.tcl文件定义了库的名字和名称,上面是逻辑库,下面物理库:

      5行:定义库的搜索路径,当找不到库时,从这个路径中寻找

      8行:定义target library使用的库(注意,只是定义一个变量)

      10行:定义图形库变量

      15行:定义顶层设计库的变量名称

      17行:定义milkyway(参考)库(的位置)

      19行:定义工艺库(的位置)

      21行:定义寄生参数库(的位置)

      23行:定义工艺库和寄生参数库的映射关系库(的位置)

       打开dc_setup.tcl文件,如下图

      

      dc_setup.tcl文件就是指定库了,而不是单单地定义了,ser_app_var是定义DC内部变量,4~7这是指定搜索路径个各种库的路径和名称

      4行:search_path搜索路径

      下面的物理库设置中:

      13行:指定milkyway(参考)库的名称

      14行:指定当前设计的库的名称

      16行:创建milkyway库,格式如图上面,需要工艺库、参考、当前设计库

      19行:打开当前的设计库

      20行:加载寄生参数(库)

     2:启动dc

      

    3:读代码前的检查

      *检查库是否正确设置

       ,printvar link_library,printvar search_path

      *检查逻辑库和物理库的一致性(检查可能不会通过,结果不影响综合的话,可以忽略)

      check_library

      *检查寄生参数文件和工艺库文件的一致性:(物理综合的时候需要检查)

      check_tlu_plus_files

      通过的话会有三个passed

    4:读入代码和查看设计

      *读入代码:

      输出:

      

      *读入代码后,查看顶层设计;也可通过 current_design top.v设置顶层设计

      

      *link设计:查看当前综合的设计是否缺少子模块,返回值为1,说明子模块完整。

      

      *检查当前设计的连接性层次性(设计是否有问题)check_design

      check_design  返回值为1则正确,但warning有时也要解决。

      *以ddc的格式保存未映射的设计(注意需要先创建unmapped文件夹,但每次改变verilog时,都要重新刷新此句):

      Write  -hierarchy  -f  ddc  -out  unmapped/TOP.ddc

        *查看内存中的设计与库

      

      

    5:插入约束设计,在scripts文件里

      

      可在此处加上check_timing

    6:进行综合

      compile_ultra

    7:  综合后的检查(检查不通过的需要优化,这里只作为一般流程,没有进行优化)

      report_constraint -all  (查看是否违规)

      report_timing (查看时序报告),report_timing -delay_type max ;#查看最差路径

      report_area (查看面积情况)

      

      

    8:  保存综合后的设计(注意先创建mapped这个文件夹)

      

      

       

      

      

      

  • 相关阅读:
    Vijos1986
    vijos1790
    洛谷1005
    洛谷3381
    bzoj4034
    bzoj1564
    bzoj2648
    洛谷3348
    jzoi4964
    codevs3990
  • 原文地址:https://www.cnblogs.com/xh13dream/p/8671868.html
Copyright © 2011-2022 走看看