规范SGDC的书写规范:提升代码可读性与可维护性

目录

综述

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 <du-name>

    clock -name <clk-name> | -tag <logical-clock-name>

    [ -period <period> ]

    [ -edge <edge-list> ]

    [ -domain <domain-name> ]

    [ -add ]

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

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

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

    -period <period>时钟周期

    -edge <edge-list>时钟边值列表

    -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 <du-name>

    reset -name <rst-name>

    [ -async | -sync ]

    [ -value <0 | 1> ]

    [ -soft ]

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

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

    -soft 在CDC中不使用

    abstract_port

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

    abstract_port -module <module-name>

    -ports <port-name-list>

    -clock <clock-port-list >

    [ -reset <reset-name> ]

    [ -combo <yes | no | unknown> ]

    [ -sync <active | inactive>

    -from <src-clk list> -to <dest-clk list>

    [ -seq <yes | no> ]

    [ -sync_names <sync-names> ]

    ]

    [ -related_ports <related-ports> ]

    [ -scope <dft | cdc | const | base> ]

    [ -mode <mode-name> ]

    [ -connected_inst <instance-name> ]

    [ -inst_master <instance-master> ]

    [ -inst_pin <instance-pin> ]

    [ -path_logic <path-logic> ]

    [ -path_polarity <path-polarity> ]

    [ -phase_list <min|max|rise|fall|setup|hold|start|end> ]

    [ -multiplier_value <multiplier-value> ]

    [ -path_constraint <min_delay | max_delay> ]

    [ -ignore ]

    [ -combo_ifn <clock_port> ]

    [ -start ]

    [ -end ]

    [ -direction <input/output> ]

  • -module <module_name> 指定为其指定此约束的模块的名称
  • -ports <ports-name-list> 指定模块的端口
  • -clock <clock-port-list> 指定定义的端口被那个时钟驱动,你可以指定一个虚拟时钟,注意该时钟必须是该模块定义的时钟,否则会被当做虚拟时钟
  • -scope<dft|cdc|const|base> 指定约束的作用域
  • 很多可选的约束设置都没有给出,是在目前使用的过程中没有遇见,后续有使用了在对其进行补充~

    举例

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

    assume_path

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

    quasi_static

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

    quasi_static -name <sig-name-list> ex quasi_static -name top.A

    set_case_analysis

    set_case_analysis -name {<name>} -value <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)

    物联沃分享整理
    物联沃-IOTWORD物联网 » 规范SGDC的书写规范:提升代码可读性与可维护性

    发表评论