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提出反馈,如下图所示。

相关推荐
日晨难再5 天前
Design Compiler&HDL Compiler:可综合操作符SELECT_OP和MUX_OP的推断和综合
数字ic
PM老周5 天前
2026年软硬件一体化项目管理软件怎么选?多款工具对比测评
java·安全·硬件工程·团队开发·个人开发
潜创微科技--高清音视频芯片方案开发5 天前
联阳 ITE IT66122 HDMI 1.3 低功耗发射芯片(兼容 IT66121)
硬件工程
上海合宙LuatOS5 天前
LuatOS核心库API——【ioqueue】IO序列化操作
linux·运维·服务器·网络·嵌入式硬件·物联网·硬件工程
上海合宙LuatOS5 天前
LuatOS核心库API——【iperf 】吞吐量测试
linux·运维·服务器·单片机·嵌入式硬件·物联网·硬件工程
上海合宙LuatOS5 天前
LuatOS核心库API——【iotauth 】 IOT 鉴权库
java·单片机·嵌入式硬件·物联网·struts·计算机外设·硬件工程
LCMICRO-133108477466 天前
长芯微LDM63085完全P2P替代ADM2483,是一款基于数字隔离技术的高可靠性的半双工隔离RS-485收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发
LCMICRO-133108477466 天前
长芯微LSC3490完全P2P替代MAX3490,3.3V 高静电防护 10M 全双工 RS485/RS422 收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发
二十画~书生6 天前
攻克BGA扇出+高速信号难题—逻辑派FPGA-G1开发板6层PCB全流程设计总结
嵌入式硬件·fpga开发·硬件工程·pcb工艺
石家庄光大远通电气6 天前
学生公寓离人断电人走断电系统的技术特点和组成
硬件工程