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)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月7日
下一篇 2023年12月7日

相关推荐