Spyglass使用小总结
脚本启动spyglass进行一系列的代码检查,包括指定了项目的配置文件,以批处理模式运行,不需要用户在命令行输入命令就可以完成自动化执行命令,以及明确了一系列要执行的分析类型。
上图要进行的检查有:
lint/lint_rtl,lint/lint_turbo_rtl,lint/lint_functional_rtl,adv_lint/adv_lint_struct,adv_lint/adv_lint_verify,cdc/cdc_setup_check,cdc/clock_reset_integrity,cdc/cdc_verify_struct,cdc/cdc_verify
lint/lint_rtl:基本的RTL代码检查,检查代码风格和常见错误。
lint/lint_turbo_rtl:更深入的RTL代码检查,包括一些性能相关的检查。
lint/lint_functional_rtl:功能性的RTL代码检查,检查代码是否满足功能要求。
adv_lint/adv_lint_struct:结构化的高级RTL代码检查,它检查代码的结构问题。
adv_lint/adv_lint_verify:包括一些综合后或布局布线后的检查。
cdc/cdc_setup_check:时钟域交叉(CDC)设置的检查。
cdc/clock_reset_integrity:时钟和复位完整性的检查,避免时序问题。
cdc/cdc_verify_struct:CDC结构的验证,指时钟域交叉的信号路径。
cdc/cdc_verify:确保CDC的正确性,以避免时序问题。
在GUI操作,可以按照需求选择要检查的goal。在Goal Setup的Select页面可以进行操作,比如可以只进行cdc_setup_check检查,选择后点击Run Goal(s)。
如果有特殊需求,可以在lint_rtl里右键选择Edit Rules and Parameters来修改或waive规则。
配置文件gmac.prj,主要告诉SpyGlass如何处理和分析设计,包括指定源文件、顶层模块、时钟约束、分析目标等。
read_file -type sourcelist ../lis/sg.lis:告诉SpyGlass从../lis/sg.lis文件中读取源文件列表。sg.lis文件通常包含所有Verilog源文件的路径,这些文件构成了设计的RTL代码。
read_file -type sgdc gmac.sgdc:告诉SpyGlass读取设计约束文件gmac.sgdc。.sgdc文件包含了与设计相关的各种约束信息,如时钟约束、复位约束等。
set_option projectwdir .:设置了项目的工作目录为当前目录。
set_option designread_enable_synthesis no:设置在读取设计时关闭综合功能。综合是硬件描述语言(HDL)代码转换为实际硬件的过程。
set_option designread_disable_flatten no:设置在读取设计时不禁用扁平化。扁平化是设计中模块实例化展开的过程。
set_option top xins_gmac_wrapper:指定了设计的顶层模块为xins_gmac_wrapper。顶层模块是设计中的最高层模块,它包含了所有子模块的实例化。
set_option enableSV yes:启用了SystemVerilog(SV)支持,这可能意味着在分析过程中会考虑SV代码的特性。
set_option incdir {../src}:设置了包含目录为../src,这告诉SpyGlass在编译RTL代码时搜索包含文件的地方。
set_option stop TS6N28HPCPHVTA256X68M2SWBSO:设置了停止标志TS6N28HPCPHVTA256X68M2SWBSO,这可能在分析过程中用于停止处理特定的实例。
set_option stop xins_DWC_ether_qos:设置了停止标志xins_DWC_ether_qos,这可能在分析过程中用于停止处理特定的实例。
set_option active_methodology /opt/synopsys/spyglass/SPYGLASS2018.09-SP2/SPYGLASS_HOME/GuideWare/latest/block/rtl_handoff:指定了要使用的分析方法论为rtl_handoff,这是一个SpyGlass的预定义方法论,用于处理RTL代码。
current_methodology /opt/synopsys/spyglass/SPYGLASS2018.09-SP2/SPYGLASS_HOME/GuideWare/latest/block/rtl_handoff:指定了当前的活动方法论为rtl_handoff,这与active_methodology设置相同,这可能是SpyGlass的一个配置选项。
也可以在Design Setup的Set Option页面来进行一系列的配置。
添加.sgdc约束文件,它包含了与设计相关的各种约束信息,如时钟约束、复位约束等。设计约束文件的作用是定义时序和信号完整性要求,以确保设计在特定工艺和操作条件下能够正确工作。
current_design xins_gmac_wrapper:指定了当前的设计为xins_gmac_wrapper模块。在SpyGlass的分析过程中,这定义了分析的入口点。
clock -domain "clk_rx" -name "clk_rx_i" -period 8 -edge {0 4}:定义了名为clk_rx_i的时钟信号,它属于clk_rx时钟域。
clock -domain "clk_osc" -name "clk_osc_i" -period 8 -edge {0 4}:定义了名为clk_osc_i的时钟信号,它属于clk_osc时钟域。
clock -domain "clk_tx" -name "clk_tx_from_phy" -period 10 -edge {0 5}:定义了名为clk_tx_from_phy的时钟信号,它属于clk_tx时钟域。
clock -domain "pclk" -name "pclk" -period 10 -edge {0 5}:定义了名为pclk的时钟信号,它属于pclk时钟域。
clock -domain "aclk" -name "aclk_i" -period 3.2 -edge {0 1.6}:定义了名为aclk_i的时钟信号,它属于aclk时钟域。
reset -name "presetn" -value 0:定义了一个低电平复位信号presetn。
reset -name "aresetn_i" -value 0:定义了一个低电平复位信号aresetn_i。
ip_block -name xins_DWC_ether_qos:定义了一个名为xins_DWC_ether_qos的IP块。
约束文件包含了用于描述和约束设计时序和行为的规则,通常要包括:
时钟约束(Clock Constraints):
时钟源(Clock Source)约束:定义时钟信号的源、频率、相位、边沿等属性。
时钟网络(Clock Network)约束:定义时钟信号在设计中的传播延迟、相位关系等。
复位约束(Reset Constraints):
复位信号(Reset Signal)约束:定义复位信号的源、宽度、时序等属性。
复位网络(Reset Network)约束:定义复位信号在设计中的传播延迟、复位时间等。
电源约束(Power Constraints):
电源信号(Power Signal)约束:定义电源信号的源、电压、上电/下电时间等属性。
电源网络(Power Network)约束:定义电源信号在设计中的传播延迟、电源噪声等。
引脚约束(Pin Constraints):
引脚(Pin)约束:定义引脚的驱动能力、负载类型、I/O类型等属性。
引脚网络(Pin Network)约束:定义引脚在设计中的传播延迟、驱动/负载关系等。
延迟约束(Delay Constraints):
信号传播延迟(Signal Propagation Delay)约束:定义信号在设计中的传播延迟、路径长度等。
同步延迟(Synchronization Delay)约束:定义信号在不同时钟域之间的同步延迟、路径长度等。
设置完后进行检查,检查结果按照各个Goal分别放在不同的文件夹。spyglass.log会记录report所在的位置,然后就可以查看检查结果。
点击方框中的类似图像界面的符号,还可以查看设计的电路原理图。
红色信息表示错误,橙色信息表示警告,绿色信息表示正常。
选中违规信息,右键选择Waive Selected Messages可以忽略掉某种类型的检查。
*免责声明:本文由作者原创。文章内容系作者个人观点,路科验证转载仅为了传达一种不同的观点,不代表路科验证对该观点赞同或支持,如果有任何异议,欢迎联系路科验证。
✦
✧
END
✦