Formality:Bug记录

相关阅读

Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


本文记录博主在使用Synopsys的形式验证工具Formality中遇到的几个Bug。

Bug复现

情况一

复制代码
// 例1
module dff (
    input clk,    
    input d_in,      
    output d_out    
);
    reg q1, q2;  

    always @(posedge clk) begin
        q1 <= d_in;  
        q2 <= q1;       
    end

    assign d_out = q2;
endmodule

首先以例1的RTL代码作为参考设计和实现设计,然后在setup模式使用以下set_constant命令使得q1、q2触发器变成不可读触发器。

复制代码
set_constant -type net r:/WORK/dff_chain/d_out 1
set_constant -type net i:/WORK/dff_chain/d_out 1

关于不可读的更详细信息,可以参考下面的博客。

Formality:不可读(unread)的概念https://chenzhang.blog.csdn.net/article/details/145242304

随后在fm_shell中使用match命令进行匹配,或在GUI界面点击Run Matching,此时fm_shell中显示的匹配结果与GUI界面显示的匹配结果出现了差别,如下所示。

复制代码
// fm_shell的匹配结果
*********************************** Matching Results ***********************************
 1 Compare points matched by name
 0 Compare points matched by signature analysis
 0 Compare points matched by topology
 0 Matched primary inputs, black-box outputs
 0(0) Unmatched reference(implementation) compare points
 0(0) Unmatched reference(implementation) primary inputs, black-box outputs
****************************************************************************************

// GUI界面的匹配结果
3 points matched by name
0 points matched by signature analysis
0 points matched by topology
0 points matched by user
0 unmatched reference points
0 unmatched implementation points

结果显示fm_shell没有考虑两对匹配的不可读触发器,而GUI界面考虑了,更严重的是,此时输入/输出端口没有显示在任何匹配报告中。

这对最后的验证结果没有影响,不可读触发器在默认情况下会被归为Not Compared类而不进行验证(可通过verification_verify_unread_compare_points变量改变),如下所示。

复制代码
********************************* Verification Results *********************************
Verification SUCCEEDED
----------------------
 Reference design: r:/WORK/dff_chain
 Implementation design: i:/WORK/dff_chain
 1 Passing compare points
----------------------------------------------------------------------------------------
Matched Compare Points     BBPin    Loop   BBNet     Cut    Port     DFF     LAT   TOTAL
----------------------------------------------------------------------------------------
Passing (equivalent)           0       0       0       0       1       0       0       1
Failing (not equivalent)       0       0       0       0       0       0       0       0
Not Compared
  Unread                       0       0       0       0       0       2       0       2
****************************************************************************************

情况二

以例2的RTL代码的作为实现设计,而使用例1的RTL代码作为参考设计,匹配结果如下所示。

复制代码
// 例2
module dff (
    input clk,    
    input d_in,      
    output d_out    
);
    reg q1, q2, q3;  

    always @(posedge clk) begin
        q1 <= d_in;  
        q3 <= d_in; 
        q2 <= q1;       
    end

    assign d_out = q2;
endmodule

// fm_shell的匹配结果
*********************************** Matching Results ***********************************
 3 Compare points matched by name
 0 Compare points matched by signature analysis
 0 Compare points matched by topology
 2 Matched primary inputs, black-box outputs
 0(0) Unmatched reference(implementation) compare points
 0(0) Unmatched reference(implementation) primary inputs, black-box outputs
 1(0) Unmatched reference(implementation) unread points
****************************************************************************************

// GUI界面的匹配结果
5 points matched by name
0 points matched by signature analysis
0 points matched by topology
0 points matched by user
0 unmatched reference points
0 unmatched implementation points

结果显示fm_shell的匹配结果中列出了这个未匹配的不可读触发器,而输入/输出端口显示在了匹配报告中。

情况三

以例2的RTL代码作为参考设计和实现设计,匹配结果如下所示。

复制代码
// fm_shell的匹配结果
*********************************** Matching Results ***********************************
 3 Compare points matched by name
 0 Compare points matched by signature analysis
 0 Compare points matched by topology
 2 Matched primary inputs, black-box outputs
 0(0) Unmatched reference(implementation) compare points
 0(0) Unmatched reference(implementation) primary inputs, black-box outputs
****************************************************************************************

// GUI界面的匹配结果
6 points matched by name
0 points matched by signature analysis
0 points matched by topology
0 points matched by user
0 unmatched reference points
0 unmatched implementation points

结果显示fm_shell没有考虑这对匹配的不可读触发器,而GUI界面考虑了,而输入/输出端口显示在了匹配报告中。

Bug总结

1、当使用set_constant命令导致不可读触发器时,fm_shell和GUI界面的匹配结果不一致,输入输出端口不会出现在任何匹配报告中,而匹配的不可读触发器不出现在fm_shell中(对最终验证没有影响)。

2、即使不使用set_constant命令,fm_shell和GUI界面的匹配结果也不一致,匹配的不可读触发器不出现在fm_shell中(对最终验证没有影响)。

Bug反馈

目前已在Solvnet上向Synopsys提出反馈,如下图所示。

相关推荐
JNX_SEMI2 天前
AT2659 L1频段多模卫星导航低噪声放大器技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
qq_383189622 天前
05-二极管钳位电路
硬件工程
智者知已应修善业2 天前
【 LM358AD方波】2024-12-31
驱动开发·经验分享·笔记·硬件架构·硬件工程
来生硬件工程师2 天前
【硬件笔记】DCDC电源设计—BUCK电路设计要点
笔记·单片机·嵌入式硬件·硬件工程·智能硬件
独孤九剑打醒他2 天前
双层Master-Worker软硬协同调度架构:从根源解决分布式数据一致性难题
后端·嵌入式硬件·硬件架构·硬件工程
JNX_SEMI2 天前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
2601_954526752 天前
【工控底层架构】进口阀门和国产阀门哪个性价比高?从TCO模型到边缘诊断源码的全栈解析
人工智能·架构·硬件工程
ICGOODFIND13 天前
国巨电阻电容怎么选?常用封装型号、材质用途一次讲清
嵌入式硬件·硬件工程·智能家居
爱看大明王朝156620 天前
半桥 IGBT/MOS 驱动自举电路原理与设计计算
硬件工程
ོ椿生拥蝶21 天前
基于 Simulink 的三相全桥 SPWM 逆变器仿真(含 50Hz/32V 输出实现)
硬件工程