1、什么是spyglass cdc sgdc约束
Spyglass 是一款IC设计的EDA工具,可以用来进行Verilog代码质量检查、功耗分析等等。
Verilog质量检查包含lint和cdc检查。Lint主要用来检查语法方面,如组合逻辑、时序逻辑位宽是否匹配,是否有latch,时序逻辑是否缺少复位值,......等等。
Cdc检测通常用来检查verilog代码跨时钟是否正确,它会提取所有的跨时钟路径,按相应的规则列举出来,让使用者逐项确定。
Spyglass cdc检查需要格式为xxx.sgdc格式的约束文件,说明哪些信号是时钟,哪些是复位,以及数据类信号的时钟域。
1、为什么要写Sgdc约束
是否匹配spyglass 工具自己也能产生约束文件,我们需要检查工具产生的约束文件,并查缺补漏,修改错误的约束,补充遗漏的约束。Sgdc约束越详细,spyglass cdc报的Error和warning越少,能够有效减少工作量。
3、哪些信号需要用Sgdc约束
模块的输入信号,说明哪些信号是时钟,哪些是复位,以及数据类信号的时钟域。
模块的输出信号,不用约束
Black-box的输入,输出信号都需要约束。
4、如何编写Sgdc约束
定义当前的顶层:用current_design,如下图所示:mac是当前顶层,rmon_cnt是mac内部的一个black box,只有input和output定义,内部没有逻辑。
定义时钟用clokc,定义复位用reset,定义数据信号的时钟域用abstract
5、注意事项
- Black box的input和output都需要约束
- 约束中多多比特信号不能用[*]替代位宽,如tx_data[*]不能被识别,必须写tx_data[1023:0]
- 多比特数据位宽表达[xxx:xxx]不能有计算,如错误表达tx_data[1024-1:0]
current_design "mac"
clock -name "mac.host_clk" -domain host_clk -tag host_clk
clock -name "mac.sys_clk" -domain sys_clk -tag sys_clk
reset -name "mac.host_clk_soft_rst_n" -value 0
reset -name "mac.host_clk_hard_rst_n" -value 0
abstract_port -module mac -ports soc_wr -clock mac.host_clk
abstract_port -module mac -ports soc_rd -clock mac.host_clk
abstract_port -module mac -ports soc_rw_addr[12:0] -clock mac.host_clk
abstract_port -module mac -ports soc_wr_dat[31:0] -clock mac.host_clk
abstract_port -module mac -ports tx_data[1023:0] -clock mac.sys_clk
abstract_port -module mac -ports tx_eop -clock mac.sys_clk
abstract_port -module mac -ports tx_sop -clock mac.sys_clk
abstract_port -module mac -ports tx_vld -clock mac.sys_clk
#---------- rmon_cnt is the black box , only has input and output signal ,don't have logic in rmon_cnt.v " ------#
#### input signal ######
abstract_port -module rmon_cnt -ports mem_wr -clock mac.host_clk
abstract_port -module rmon_cnt -ports mem_rd -clock mac.host_clk
abstract_port -module rmon_cnt -ports mem_rw_addr[12:0] -clock mac.host_clk
abstract_port -module rmon_cnt -ports mem_wr_dat[31:0] -clock mac.host_clk
#### output signal ######
abstract_port -module rmon_cnt -ports mem_rd_datvld -clock mac.host_clk
abstract_port -module rmon_cnt -ports mem_rd_dat[31:0] -clock mac.host_clk