SGDC的书写

慈云数据 2024-03-27 技术支持 56 0

目录

综述

SGDC脚本举例

SGCD适用于CDC的语法有下图所示:

Clock

reset

abstract_port

举例

assume_path

quasi_static

set_case_analysis

其他

SDC2SGDC

Blackbox

bbox的约束方式

两个概念 verification validation

综述

在CDC概述部分我们介绍,做CDC时候,需要我们写一个SGDC文件,SGDC = SpyGlass Design Constraints,就是SpyGlass设计约束文件,类似于DC/SAT的约束,可以使用SDC来转为SGDC,但是其是不够的,因为他没有对CDC特定的数据流进行描述(SDC中会设置false_path屏蔽异步路径进行计算,但是CDC就是用来检查这些路径的)。

我们做跨时钟检查,肯定需要定义时钟,同时还有复位的同步撤离电路检查,因此需要定义复位,对于在设计中需要切时钟的地方(不是时钟产生逻辑单元),我们需要选择一路时钟(选择异步的时钟),同时有些信号是可以不需要关心异步问题的,例如测试模式下的观测信号,寄存器配置的信号都是不用关心的静态信号。另外,一般时钟生成模块,使用到的标准单元,ram,IP一般设置为bbox(black box)。这是因为,不正确的设置会带来噪声。

  • 噪声:这里定义噪声为本身不需要分析的内容,由于没有进行正确的约束而引入的分析结果,但是同样需要注意不要遗漏真正的问题~

    简单回顾下软件的基本使用,SpyGlass可以在命令行以及GUI页面下运行:

    BATCH:spyglass -project training.prj -goals cdc/cdc_setup -batch
    GUI:spyglass -project training.prj -goals cdc/cdc_setup

    通常情况下以批处理模式运行分析,然后使用 GUI 调试结果

    • SpyGlass 选项用于控制 SpyGlass 运行,并且对于所有目标都是全局的 ex:set_option top TOPNAME
    • 使用 set_goal_option 可以在goals中使用某些选项 ex: set_goal_option extractDomainInfo yes 注意,需要明确当前的goal是否可以使用该选项
    • SpyGlass 参数在目标中用于指导目标本身的行为方式 ex:set_parameter enable_fifo none

      SGDC脚本举例

      #Define current_design name
      current_design "LOGIC_TOP_NAME"
      #Define clock
      clock -name "LOGIC_TOP_NAME.i_pll_clk" -domain  PLL_CLK -edge {"0" "5"} -period 10
      clock -name "LOGIC_TOP_NAME.U_CRG.o_pll_clk" -domain PLL_CLK  -edge {"0" "10"} -period 20
      clock -name "LOGIC_TOP_NAME.i_data_clk" -domain D_CLK  -edge {"0" "10"} -period 20
      #Define virtual clk
      clock -domain VLK -tag VCLK -edge {"0" "5"} -period 10
      #Define rst
      reset -name "LOGIC_TOP_NAME.i_rst_n" -value 0
      reset -name "LOGIC_TOP_NAME.U_CRG.o_rst_n" -value 0
      #constrain TOP input
      abstract_port -module LOGIC_TOP_NAME -ports "i_data" -clock i_pll_clk
      abstract_port -mosule LOGIC_TOP_NAME -ports "i_en" -clock VCLK
      #bbox mem
      assume_path -module BBOX_NAME -input data_in -output data_out
      #bbox CRG
      abstract -module -scope cdc -ports i_rst_n -direction input
      abstract -module -scope cdc -ports i_cfg_pll_sel -clock o_pll_clk#注意这里必须是模块端口定义的时钟,否则将会认为是虚拟时钟
      #quasi_static
      quasi_static -name LOGIC_TOP_NAME.U_MONITOR.i_cfg_monitor_sel

      基本上上述举例的语法就已经可以完成一个不是很复杂的约束。下面是对于这些语法的解释与笔者自身的理解,同时包括其他可能会用到的其他语法

      SGCD适用于CDC的语法有下图所示:

      Clock

      用于声明设计的时钟信息,语法如下

      current_design

      clock -name | -tag

      [ -period ]

      [ -edge ]

      [ -domain ]

      [ -add ]

      -name 时钟端口/管脚名称,可以指定单个或是多个以空格分隔的端口信号列表

      -domain 时钟域名,未指定时钟域名默认时钟域名将于时钟名称一致

      -tag 未指定时钟约束的-name参数,则由tag参数指定的名称将被视为虚拟时钟名称

      -period 时钟周期

      -edge 时钟边值列表

      -add 可以在同一个名称上指定两个时钟,如下所示

      clock -name top.clk -tag C1 -domain A -period 10.0

      clock -name top.clk -tag C2 -domain B -period 10.0 -add

      reset

      current_design

      reset -name

      [ -async | -sync ]

      [ -value ]

      [ -soft ]

      -value 复位有效值,若是复位低有效,就设置为0即可

      -sync/aysnc 一般是我们设计中都是异步复位,同步释放,所以就是异步的复位,默认是异步复位,若是没有特殊需求可以不进行设置

      -soft 在CDC中不使用

      abstract_port

      用来描述定义模块端口的理论信息,我们更多的使用其来对黑盒进行约束。关于abstract_port的约束选项比较多,下面就常用的进行介绍

      abstract_port -module

      -ports

      -clock

      [ -reset ]

      [ -combo ]

      [ -sync

      -from -to

      [ -seq ]

      [ -sync_names ]

      ]

      [ -related_ports ]

      [ -scope ]

      [ -mode ]

      [ -connected_inst ]

      [ -inst_master ]

      [ -inst_pin ]

      [ -path_logic ]

      [ -path_polarity ]

      [ -phase_list ]

      [ -multiplier_value ]

      [ -path_constraint ]

      [ -ignore ]

      [ -combo_ifn ]

      [ -start ]

      [ -end ]

      [ -direction ]

      • -module 指定为其指定此约束的模块的名称
        • -ports 指定模块的端口
        • -clock 指定定义的端口被那个时钟驱动,你可以指定一个虚拟时钟,注意该时钟必须是该模块定义的时钟,否则会被当做虚拟时钟
        • -scope 指定约束的作用域

          很多可选的约束设置都没有给出,是在目前使用的过程中没有遇见,后续有使用了在对其进行补充~

          举例

          在官方给出的示例中对输入输出分别做了举例,如下所示

          assume_path

          assume_path约束用于指定黑盒的输入引脚和输出引脚之间的路径。该约束应该仅用于指定从黑盒输入到输出的组合路径。示例如下:

          quasi_static

          设计中存在一些主要输入、触发器、网络或术语,它们可能在开始时发生短暂变化,但在电路的其余操作中会假定静态值为0或1。您可以使用准静态约束将主输入、触发器、网络或术语指定为静态信号,以跳过对涉及此类信号的路径的验证。可以理解为一些不需要做CDC的信号,或者是不需要考虑时序问题的信号,都可以设置为静态信号来减少噪声。

          quasi_static -name ex quasi_static -name top.A

          set_case_analysis

          set_case_analysis -name {} -value

          set_case分析约束指定案例分析条件。看如下一个案例,它主要是对时钟做一个选择:set_case_analysis ‐name sel ‐value 0。一般这种我们都选择异步时钟通过这个mux。

          其他

          SDC2SGDC

          首先定位使用该功能的目的:并不是代替SGDC的书写,而只是给我提供一个模板,我们需要对其进行有选择的使用!!!使用sdc2sgdc项目文件命令将块级SDC命令转换为相应的SGDC约束。具体使用方式如下:

          创建一个xxx.sgdc 文件,里面的内容如下

          current_design u_top

          sdc_data -file  xxx.sdc

          这里的sdc路径是对于prj的路径而言的。执行的结果会在 prj_name/current_design_name/cdc/cdc_current_goal(就是你在执行的目标)/sdc2sgdc目录下。

          Blackbox

          当主要从设备、系统或对象的角度查看时,黑盒是指设备、系统或对象。当主要从输入和输出特征的角度查看设备、系统或对象时,黑盒是指设备、系统或对象。CDC分析基于对所有时钟网络的完整拓扑遍历,黑盒导致分析不完整,源于黑盒的时钟可能驱动的不同的逻辑。同时黑盒的定义时用来简化CDC分析的,不正确的约束会带来过多的噪音或是放过真正的问题。正确的bbox设置可以有效的减少噪声的产生,帮助分析。

          • 设置bbox(blackbox)的方式:在prj文件中使用 set_option stop module_name or set_option stopfile file_addres/file_name.v
          • 推荐设置为bbox的情况
            • 复杂的时钟生成逻辑可以简化分析,产出更多有意义的结果,建议bbox时钟生成逻辑(clock generation logic)
            • 复杂的门控结构
            • 稳定的IP,实例化的门单元,存储器,PLL……
            • 其他

            bbox的约束方式

            • assume_path

              对缺失模块的输出应用时钟约束,或使用assume_path约束定义输入/输出关系。该约束应该仅用于指定从黑盒输入到输出的组合路径。示例如下:

              • abstract_port

                见对与其语法进行描述的部分~

                两个概念 verification validation

                verification 验证 根据客观实事,应该是怎么样的,验证检查某样东西是否符合之前已定好的标准 validation 确认 实际是什么样的,检查软件在终于的执行环境上是否达到预期的目标,N.A可以理解为not applicable,不适用的意思,在查询spreadsheet的时候会遇见上述的概念,参看

                本文参考:ConsolidatedConstraintsAppNote.pdf(Appendix: SpyGlass Design Constraints)

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon