zoukankan      html  css  js  c++  java
  • 数字asic流程实验(四) DC综合

    数字asic流程实验(四) DC综合

    1.Design Compiler 简介

    Design Compiler(以下简称DC)是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺的门级网表。

    逻辑综合分为三个阶段:

    • 转译(Translation):把电路转换为EDA内部数据库,这个数据库跟工艺是独立无关的;    
    • 优化(Optimozation):根据工作频率、面积、功耗来对电路优化,来推断出满足设计指标要求的门级网表; 
    • 映射(Mapping):将门级网表映射到代工厂给定的工艺的元件库上,最终形成该工艺对应的门级网表。  

    如下图所示,将Verilog编写的电路,代工厂提供的元件库,以及设计约束输入综合软件中,便会输出可用于布局布线的基于工艺的门级网表。

    image-20210726153233526

    为何要通过综合步骤生成工艺所对应的门极网表?这是因为不管多么复杂的数字电路,其最终实现时都要使用MOS管搭建一个个的门电路实现其逻辑功能,而实际的MOS工艺存在各种寄生参数,进而对电路的性能造成一定的影响,代工厂会提供各个基本单元具体的工艺参数,根据这些工艺参数对门极网表进一步做仿真,从而能够更好的模拟芯片实际流片后的工作情况。

    2.TCL脚本编写

    DC可以使用GUI界面,也可以使用TCL(Tool Command Language)脚本工作。通过将指令语句保存在TCL脚本中,使用dc_shell调用执行就能够高效的完成综合。

    DC综合实验的TCL脚本的目标包括:

    1. 指定工艺库
    2. 读入设计
    3. 规定设计环境,设计约束
    4. 执行综合
    5. 输出网表、时序描述等文件

    TCL文件的编写流程及每个步骤主要使用的命令如下图所示:

    image-20210726160602291

    重点针对定义设计环境(Define design environment)和设置设计约束(Set design constraints)两个步骤进行一些补充说明。

    DC定义设计环境时所使用的模型如下图所示,该步骤主要需要设置驱动(drive)和负载(load)相关的参数,使用set_drive命令设置输入端口的驱动电阻,使用set_load命令设置输出端口的负载电容,使用set_driving_cell设置驱动使用的基本单元,使用set_fanout_load设置预期扇出负载值,使用set_wire_load_model设置线负载模型(线负载模型一般来自工艺库内部),这些设置值都要根据单元的实际设计需求进行确定。

    image-20210726163715307

    下图展示了一个通过TCL定义设计环境的例子:

    image-20210726171816803

    设置设计约束时首先要通过create_clock指令创建时钟,需要注意的是create_clock中,-period xx用于指明时钟周期,还需要用-waveform {xx xx}来指明时钟信号为正的时间段。如下图所示,一个周期为40ns,0-15ns为正的时钟信号,使用create_clock信号进行描述时,应写为

    create_clock -period 40 -waveform {0 15} clk
    

    image-20210726221531364

    设置设计约束除了需要声明时钟信号的延迟、翻转时间等,还需要通过set_input_delay指令和set_output_delay指定声明输入延迟和输出延迟,输入延迟指信号从时钟边缘通过外部逻辑到输入端口的时间,即输入信号是在时钟沿后多长时间到达模块的端口上的 。输出延迟指信号从时钟边缘到引脚有效输出的时间,即输出信号在后级模块中需要在时钟沿之前提前多长时间准备好。DC在综合时会根据这些约束规划门极电路,从而确保所有的信号能够被正确的采样,从而保证芯片工作正常。

    下图所示为一个通过TCL规定输入延迟和输出延迟的例子:

    image-20210726171935652

    本次实验的TCL脚本内容如下

    set search_path "../lib/logic   ../src"   #设置搜索路径
    
    set target_library " slow.db "     #设置标准元件库
    set link_library   "* $target_library "
    set symbol_library " smic18.sdb "  #设置标准元件图标库
    
    set access_internal_pins true
    
    set report_path "./reports"    #设置reports文件夹
    set output_path "./outputs"    #设置outputs文件夹
    
    
    read_file -format verilog cic_filter.v   #读取verilog设计文件
    read_file -format verilog divider64.v
    
    
    current_design cic_filter   #指明主程序
    link   #工艺库链接
    uniquify
    
    
    set     design_name     [get_object_name [current_design]]
    
    set_wire_load_model -name "smic18_wl10"    #设置线负载模型
    set_wire_load_mode top
    
    create_clock -period 156 -waveform {0 78} [get_ports clk]  -name clk    #设置时钟,周期156ns,脉宽0-78ns
    
    
    create_generated_clock  [get_pins div/clk_div] -source [get_ports clk]  -divide_by 64 -name clk_div   #分频64后的时钟
    
    set_clock_latency 2.5 clk    #延迟时间2.5ns
    set_clock_transition 0.3 clk    #翻转时间0.3ns
    set_clock_uncertainty 1.5 -setup clk   #建立时间1.5ns
    set_clock_uncertainty 0.3 -hold clk    #保持时间0.3ns
    
    set_drive 0 [list clk rst_n]      #设置输入驱动强度为0
    set_driving_cell -lib_cell NAND2X1  in   #设置驱动单元
    
    
    set_input_delay  35 -clock [get_clocks clk] {in rst_n}   #设置输入延时35ns
    set_output_delay 35 -clock [get_clocks clk_div] [get_ports out]   #设置输出延时35ns
    set_load          2        [all_outputs]    #设置输出负载为2pF
    
    set_max_area 0
    
    
    
    check_design > $report_path/check_design_before_compile.rpt
    check_timing > $report_path/check_timing_before_compile.rpt
    
    
    compile
    compile -incremental_mapping -map_effort high
    
    
    write_sdf -version 2.1         $output_path/${design_name}_post_dc.sdf   #时序描述
    write -f ddc -hier -output     $output_path/${design_name}_post_dc.ddc
    write -f verilog -hier -output $output_path/${design_name}_post_dc.v    #网表
    write_sdc                      $output_path/${design_name}_post_dc.sdc  #约束
    
    report_constraint -all_violators -verbose          > $report_path/constraint.rpt
    report_qor                > $report_path/qor.rpt
    report_power              > $report_path/power.rpt
    report_area               > $report_path/area.rpt
    report_cell               > $report_path/cell.rpt
    report_clock              > $report_path/clk.rpt
    report_hierarchy          > $report_path/hierarchy.rpt
    report_design             > $report_path/design.rpt
    report_reference          > $report_path/reference.rpt
    report_timing             > $report_path/timing.rpt
    
    check_design > $report_path/check_design_post_compile.rpt
    check_timing > $report_path/check_timing_post_compile.rpt
    
    
    #start_gui
    

    3.运行综合

    1.打开虚拟机,至/home/crazy/Desktop/experiment/dc 文件夹下,右键Open in Terminal

    image-20210726172327779

    2.在terminal中输入

    vim dc_script.tcl
    

    打开TCL脚本,检查脚本内容是否有误,如果有误则敲i健进入编辑模式修改,修改完毕后敲ESC退出编辑模式,敲:后输入wq,敲Enter,退出vim

    image-20210726173226896

    image-20210726173511094

    image-20210726173537904

    3.在terminal中依次输入

    ic
    dc_shell -f dc_script.tcl
    

    执行TCL脚本

    image-20210726172506817

    4.等待脚本执行结束,每一步执行后,如果没有出错,terminal中会打印1,否则会打印0并显示报错信息。如果出现报错,则根据信息返回修改dc_script.tcl,直到没有任何报错信息

    image-20210726172948605

    5.检查outputs文件下是否正常生成网表文件(.v)、时序描述文件(.sdf)等,reports文件夹下是否正常生成各项报告

    image-20210726174257217

    6.至此DC综合步骤已经结束,可以在dc_shell中输入

    start_gui
    

    运行GUI界面,在Logical Hierarchy窗口中选中cic_filter,点击Schematic---->New Schematic View,右侧窗口中显示cic_filter的图标,双击图标后显示DC综合后以逻辑门搭建出的cic_filter的结构

    image-20210726175203637

    image-20210726175355325

    image-20210726175726292

    image-20210726175705401

    4.参考资料

    《Automated Synthesis from HDL models》

    《DesignCompilerUserGuide_VersionF-2011.09-SP2December2011》

    https://zhuanlan.zhihu.com/p/129059203

    https://www.jianshu.com/p/a891ef3fe71e

    https://blog.csdn.net/zyn1347806/article/details/108649518

  • 相关阅读:
    Linux 安装Samba服务器
    常见状态码StatusCode
    urllib详细版
    set uniion()
    python urljoin
    'gbk' codec can't decode byte 0xad in position 12: illegal multibyte sequence
    php 的windows集成开发环境
    图文并茂解释数字证书(转)
    Web安全测试指南--权限管理
    互联互通协议安全设计
  • 原文地址:https://www.cnblogs.com/sasasatori/p/15063690.html
Copyright © 2011-2022 走看看