VERDVANA'S BLOG Verdvana

PLDRC


1 简介

1.1 概述

        PLDRC(Progressive Logic Design Rule Checking)使用Atrenta SpyGlass tool,使设计人员能够在RTL开发期间检测设计问题。每当RTL、库或输入路径发生改更改时,PLDRC应该再次运行。以下是PLDRC目前支持的方法:

  • Lint;
  • DFT(Design for Testability);
  • DFTDSM(At-speed testing or Design for Test at Deep Sub-Micron);
  • LP(Low Power Linting)。

1.2 先决条件

        相关说明网站:

1.3 Flow主要特性

        PLDRC flow有以下主要特点:

  • 可以运行在芯片,子系统,核心和块级别;
  • 支持测试设计(DFT)、速度测试(DFTDSM)、低功耗Linting (LP)的逻辑设计规则检查;
  • 可以使用makefile或compile自动生成设计文件列表,或使用用户直接提供的设计文件列表;
  • 支持多个PLDRC目标并行运行(默认限制=3);
  • 支持不同目标的不同LSF资源需求,以及由于LSF失败而自动重新提交;
  • 提供工作总结的电子邮件通知;
  • 支持HTMI中度量报告的生成;
  • 在线提供简单的帮助信息。还提供了用户指南和Qwiki文档;
  • 支持用户自定义。

1.4 flow结构

        PLDRC参考流是一个基于make的流。所有流步骤都使用一组配置变量进行管理。这些变量及其默认值在配置文件模板(config file template, config.cfg)中提供,该配置文件模板位于流发布位置。除了配置模板之外,流发布位置还附带一个Makefile模板,用户可以使用它来设置流。如果需要,用户可能需要更改config.cfg模板中变量的默认值。Makefile模板是可用户自定义的。它用作第一级Makefile,用于定义流脚本、实用程序和运行流的用户配置文件的位置。它还包括第二级Makefile (Makefile)。定义了一组受支持的流目标。第二层的Makefile并不是用户可定制的。PLDRC执行Makefile目标来创建PLDRC流目录。分析和预编译设计和相关库,运行PLDRC目标,并查看指定目标的PLDRC结果。PLDRC流程的make调用语法为:

% gunmake target [VAR1=value VAR2=value ...]

        PLDRC flow架构描述如下:

1

        flow的输入包括:

  • 设计文件列表;
  • 库文件列表:
  • 其他文件列表;
  • PLDRC规则模板;
  • PLDRC约束文件;
  • 配置文件。

        flow执行脚本:

  • Flow Makefile(Makefile.pldrc);
  • Flow default config(pldrc.cfg.default);
  • 工具脚本:
    • mjrun.pl;
    • webreport.pl;
    • sg_shell.pl。

2 启动

        要使用参考flow设置PLDRC运行,需要具备以下内容:

  • PLDRC Flow配置文件;
  • RTL设计文件;
  • 库文件;
  • 需要的约束文件等。

2.1 设置工作路径

        根据以下步骤设置PLDRC工作目录:

  • 新建工作目录;
  • 复制Makefile和config.cfg模板文件到工作路径;
  • 如果需要更在config.cfg中更改template*.tcl文件中更改tcl选项,首先将这两个模板tcl文件从flow发布位置复制到工作目录中,然后更改config.cfg来使用。

2.2 Flow 输入

        Flow输入的是RTL文件、库文件、约束文件和配置文件。

        需要一个文件列表文件来指定PLDRC Flow所需RTL文件的路径。文件列表格式如下:

  • 搜索路径(Verilog使用include来包含另一个文件时):
    • Syntax:
        +indir+<path>
      
    • Example:
        +incdir+${WORKSPACE}/libs/arm1136/verilog/rtl_src
        +incdir+${WORKSPACE}/top/sub/lib/src
      
  • 指定具有相同逻辑到物理映射的RTL文件(还可以提供特定文件的选项,如定义路径、搜索路径):
    • Syntax:
        <RTL file>
        +define+<MARCO><RTL file>
        +incdir+<PATH><RTL file>
      
    • Example:
        ${WORKSPACE}/core_libs/address/src/uartaddr_pkg.vhd
        ${WORKSPACE}/imem/src/imem_pkg.vhd
        +define+SYNTH ${WORKSPACE}/voyager/sub/a9sssrc/arm9_ram.v
        +incdir+${WORKSPACE}/top/src ${WORKSPACE}/top/src/imem.v
        ${WORKSPACE}/top/sub/fabric/src/fabric_axi.sv
        +define+HVT=0 +define+NVT=1 ${WORKSPACE}/top/src/secoder.v
      

        库文件列表包含所有库文件,通过flow变量LJBLIST指定。用户需要创建一个可以在所有前端流之间共享的通用合成库文件列表。flow可以从库列表中找出它们需要的文件。通常,库列表将包含标准单元模型(.lib,VHDL,verilog), QCTLIB模型(VHDL,Verilog)、硬宏定时模型(.lib,.db)、网表(.ddc,.v)、自定义视点、设计软件组件等。

        PLDRC流所需的库文件描述如下:

  • 具有不同逻辑到物理映射的库的规范使用此语法,用户可以指定任何具有不同逻辑名称而不是“work”的库文件:
    • Syntax:
        +lib+<logical_name><library file>
      

      该流将在分析过程中为每个逻辑名称创建一个物理目录,并使用.spyglass.setup文件将逻辑名称映射到物理位置。

    • Example:
        +lib+q145hd_r2hd
        ${WORKSPACE}/libs/q145hd_r2hd/vhdl/q145hd_r2hd.vhd
        +lib+q145hd_r2hd
        ${WORKSPACE}/libs/q145hd_r2hd/verilog/q145hd_r2hd.synth.v
        +lib+qctlib
        ${WORKSPACE}/libs/qctlib_q145hd_r2hd/src/qctlib.synth.asic.vhd
      
  • 别名库的规范(在某些情况下,例如在遗留的qmembist库中,可以有多个逻辑库映射到同一个物理库)。下面是处理这种情况的语法:
    • Syntax:
        +alias_lib_<new_logical_name><physical_library_name>
      
    • Example:
        +alias_lib+uart_qmembist2_lib   qmembist2_x2r2
        +alias_lib+venc_qmembist2_lib   qmembist2_x2r2
      
  • 包括其他库文件列表,用户可以使用以下语法包含多个库文件列表(该特性有助于在同一项目的不同内核之间维护和共享标准单元库列表或硬宏列表):
    • Syntax:
        include <file_name>
      
    • Example:
        +alias_lib+uart_qmembist2_lib   qmembist2_x2r2
        +alias_lib+venc_qmembist2_lib   qmembist2_x2r2
      

        可选的Misc文件列表包含应用于设计文件列表的筛选器命令。它是使用PLDRC_MISCLIST流变量指定的。此文件列表的主要用途是在design makefile数据库不干净时过滤设计文件。它是最有用的在芯片级集成。但是,此变量不适用于用户直接提供的设计文件列表。

        支持以下过滤命令:

  • Syntax:
      +rm_file+<file>
      +rm_block+<block>
      +rm_block_keep_pkg+<block>
      +add_block+<block>
      +add_file+<file>
      +exec+<script>
    

    在这个过滤器文件中,用户可以通过使用rm_file/block或者add_block/block命令来注释文件和块,或者取消注释文件和块。

  • Example:
      +rm_file+mux_wrapper.vhd        -- comments out mux_wrapper.vhd
      +rm_file+async_*                -- comments out all files starting from async_
      +rm_file+*.sv                   -- comments out all files ending in .sv
      +rm_block+cm_cdc                -- comments out all files inside cm_cdc block
      +rm_block_keep_pkg+lpass        -- comments out all files inside lpass block
      +add_block+fifos_comps          -- uncomments commented out files inside fifos_comps block
      +add_file+custom_pkg.vhd        -- uncomments filtered file custom_pkg.vhd in the filelist
      +exec+my_file.pl                -- executes my_file.pl after all filtering commands
    

        默认情况下,flow应用包含QCTLIB库和标准单元库豁免的全局common_lib.swl豁免文件约束文件

。。。

        包含运行PLDRC目标的PLDRC规则模板的目录是通过PLDRC_RULES_DIR变量指定的。在默认配置文件中。使用包含官方和推荐PLDRC规则模板的目录指定PLDRC_RULES_DIR。用户可以更改这个目录来使用他/她自己的自定义模板,前提是它们具有与PLDRC规则模板相同的结构和命名约定。

        Makefileconfig文件(默认名称为:config.cfg)应该在同一个路径下。

        变量可以在Makefile或配置文件中指定。建议指定配置文件中的大多数变量。 每个流变量都分配了默认值。流变量具有以下优先级顺序(从高到低),其值由flow使用:

  • 要Make的命令行参数;
  • Makefile;
  • 用户配置文件Config.cfg;
  • Flow的默认配置。

        其中,Makefile(第一级Makefile):

  • 配置文件和流发布位置在Makefile中指定。如果要使用PLDRC flow,用户需要在Makefile中指定以下包:
    • pldrc:由PLDRC_FLOW_DIR变量定义的PLDRC flow;
    • rtlutil:包包含文件列表生成和LSF处理脚本,这些脚本在RTLUTIL_DIR变量定义的多个工具流之间共享。
    • 举例:
        export FLOW             = pldrc
        export CONFIG           = config.cfg
        export PLDRC_FLOW_DIR   = /..../....
        export RTLUTLL_DIR      = /..../....
      
        ifeq ($(FLOW),pldrc)
            include $(PLDRC_FLOW_DIR)/Makefile.pldrc
        endif
      
  • 可变FLOW(默认是pldrc)用于在流之间切换。如果用户使用相同的Makefile和配置文件运行多个工具流。下面是一个用于设置pldrc、synth、sta和fv流的Makefile示例:
          export FLOW     = pldrc
          export CONFIG   = config.cfg
          export PLDRC_FLOW_DIR   = /..../....
          export SYNTH_FLOW_DIR   = /..../....
          export FV_FLOW_DIR      = /..../....
          export STA_FLOW_DIR     = /..../....
          export RTLUTLL_DIR      = /..../....
          export SYNTHUTLL_DIR    = /..../....
    
          ifeq ($(FLOW),pldrc)
              include $(PLDRC_FLOW_DIR)/Makefile.pldrc
          endif
          ifeq ($(FLOW),synth)
              include $(SYNTH_FLOW_DIR)/Makefile.synth
          endif
          ifeq ($(FLOW),sta)
              include $(STA_FLOW_DIR)/Makefile.sta
          endif
          ifeq ($(FLOW),fv)
              include $(FV_FLOW_DIR)/Makefile.fv
          endif
    

        配置文件:

  • Flow提供一个基于文本的配置文件来指定flow参数。支持三种构造:
    • 简单变量:为一个小块或内核运行PLDRC所需的关键变量。语法:
            Variable    = Value
      
    • 哈希-查找表(LUT):除了简单变量之外,还有LSF_CFG_LUT,它通常用于配置芯片或子系统级别的运行。语法:
            <Variable_LUT>
            Key         = Value
            <Variable_LUT>
      
    • Include:配置文件还可以包括如下所示的其他配置文件。这在运行多个流时非常有用。语法:
            include pldrc.cfg
      

2.3 Flow 执行

        Makefile Targets:Makefile.pldrc(第二级flow的Makefile),下表解释了第二级流Makefile中的目标。用户不应该更改该文件:

Target Description
all 使用默认或用户定义的变量值执行整个pldrc流程(从文件列表生成到gen_metrics)
classic2tcl(option) 使用Tcl选项将现有的config.cfg转换为atcl config.cfg
filelist 创建运行目录,调用fe_gen_filelist工具在分析目录中生成文件列表pldrc_filelist
analyze Analyzes design and associated libraries
sg_run 设置块级和全局约束/豁免目录;对设计进行pldrc规则检查分析
sg_view 在交互模式下启动Spyglass GUI
gen_metrics 根据pldrc的结果生成html度量报告
help 显示文本格式流帮助消息
doc 打开流程用户指南(PDF格式)
clean 删除由PASS指定的运行目录

        下面的流程图显示了PLDRC流程目标的执行顺序:

2

        PLDRC流程执行的步骤如下:

  • 在文件列表阶段,流自动生成设计文件列表(从makefile或compile.xml)。或者如果设计文件列表是由用户直接提供的,则将其复制到analyze目录中。该流还将用户提供的库文件列表复制到analyze目录中。文件列表运行后,分析目录中生成的关键文件如下:
          Log file: filelist_work/fe_gen_filelist.log
          Design filelist: pldrc_filelist
          Library filelist: pldrc_liblist
    
  • 在分析阶段,flow使用分析目录中的pldrc_filelist和pldrc_liblist分别编译设计和库。VHDL,Verilog和SystemVerilog文件都收集在一个.f文件列表中进行分析。在analyze目录中创建一个run_spygalss.csh脚本,它由flow调用,如下所示:
          /<WORK dir>/pldrc/analyze/run_spyglass.csh -designread -batch -pldrc_run analyze
    

    分析后,在分析目录中生成的关键文件如下:

          Log file: analyze.log
          Summary file: run.summary
          Reports: <TOP>/Design_Read/spyglass_reports
          sglib database: lib2sglib (converted from .lib files in LIBLIST)
    
  • 在sg_run阶段,流运行PLDRC目标,在目录中对设计执行Spyglass规则检查分析。在运行目标之前。该流创建并设置SG_CONSTR_DIR、SG_TCL_CONSTR_DIR和目录。为“pldrc//pldrc_/”目录中的每个目标创建的run_spygalss.csh脚本被调用来运行PLDRC目标,如下所示:
          Run script: run_spyglass.csh
          Log file: sg_run.log spyglass.log
          Summary file: run.summary
          Reports: reports
    
  • 在sg_view阶段,流以交互模式运行Spyglass以启动GUI来查看结果。在“pldrc//pldrc_/”目录中调用相同的run_spyglass_csh脚本,如下所示:
          ./run_spyglass.csh -goal<GOAL> -pldrc_run sg_view
    

    可以使用sg_view启动的相同GUI会话来检查来自不同目标的结果。你可以通过打开“文件”菜单,选择“关闭现有目标的项目”,然后选择“打开另一个目标的项目”。您需要导航到新的目标目录,选择.prj文件并打开它。

  • 在gen_metrics阶段,流为设计生成html报告。的报告文件将在/.html。
  • 在clean阶段,flow删除了目录。

        pldrc运行目标,如分析和sg运行,是由run_spyglass.csh脚本执行的。在成功执行时,流接触一个名为PASS的空文件,以指示运行成功。(不应该将此与makefile变量PASS混淆,后者表示pldrc运行目录)。这个PASS文件用来告诉下一个阶段它可以继续进行。例如,sg_run只有在成功分析之后才能继续运行。

        下面描述了主pldrc flow目录结构。这里的MKDIR指的是流程Makefile所在的pldrc工作目录:

3

2.4 Flow 输出

        Flow输出日志文件,SpyGlass报告和html指标报告为不同的目标。用户需要查看SpyGlass报告,并在必要时修复RTL。豁免只能作为最后的手段。

        其中,以下是PLDRC flow在不同阶段生成的Log files

  • fe_fen_filelist.log:显示文件列表执行的错误/警告。如果生成文件列表失败,用户需要检查此日志文件;
  • analyze.log:显示望远镜分析运行的设计信息。如果分析成功,则Spyglass退出代码为0。负责如果在分析设计时发现致命的语法错误,Spyglass会异常终止非零退出代码;
  • sg_run.log:显示设计的望远镜规则检查分析信息。如果望远镜成功地执行规则检查分析。那么Spyglass退出代码为0。否则,如果在设计的精化或合成阶段出现致命问题,或者如果设计约束/放弃/会话文件有语法错误,Spyglass将异常终止,退出代码为非零;
  • sg_view.log:显示Spyglass GUI运行信息。

        用于分析和sg_run阶段。该流生成一个名为run.summary的文件。这个文件包含致命/错误/警告/信息摘要和LSF信息,如机器、内存使用情况等。

        以下是Spyflass工具生成的Spyglass reports

  • moresimple.rpt:显示按严重程度(致命/错误/警告/信息)、规则名称、文件名和行号排序的规则消息。用户需要查看报告的消息。验证它们是否会导致真正的设计问题;
  • count_sevsort.rpt:列出报告的每种类型的消息的总数,包括放弃的消息的数量;
  • summary.rpt:显示每个特定规则类型的消息计数汇总列表以及严重性;
  • waiver.rpt:列出所有放弃规则的消息。用户需要检查放弃的消息,以确保它们不是无意中被放弃的。一个好的设计实践是使用最小的豁免。

        至于Metrics reports,针对不同目标的PLDRC指标报告在gen_metrics阶段以HTML格式被合并和生成。HTML文件被命名为.html,它被输出到目录中。