相关阅读
Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482
背景
逻辑锥的等价性检查时,存在两种验证模式:一致(consistency)和等同(equality),要理解这两点,首先得明白综合工具(Design Compiler)是如何处理不定态(x)的信号。
下面是一个存在x值的RTL代码示例(这不推荐,因为会造成前仿和后仿的不一致)。
// 文件:case_example.v
module case_example (
input [1:0] state,
output reg out
);
always @ (state) begin
case (state)
2'b00: out = 1'b0;
2'b01: out = 1'b1;
2'b10: out = 1'b1;
2'b11: out = 1'bx;
endcase
end
endmodule
当进行前仿时,如果state信号取得10值时,输出信号out直接为x值,如图1所示。
图1 前仿中出现的x值
但在使用Design Compiler进行综合时,x值会被当做不关心(don't care),因而可以有任意的实现方式,如果state信号取得11值时,输出信号out的值由Design Compiler决定,在这个例子中,Design Compiler选择输出1,因为这样就可以直接用一个与门描述逻辑功能了,如图2所示。
图2 综合结果
正题
下面介绍一致(consistency)和等同(equality)的概念。
一致(consistency)
对于参考设计中比较点响应为1或0的每一个输入模式(pattern),实现设计必须给出相同的响应;对于参考设计中比较点响应为x(不关心,don't care)的每一个输入模式,实现设计在相应为1或0时都可以通过。可以注意到,这与Design Compiler的处理方式是一致的。一致是不对称的,也就是说如果RTL到门级设计的验证通过,但门级到RTL的验证可能会失败。
等同(equality)
在一致性的基础上增加了额外的要求,对于参考设计中比较点响应为1或0或x的每一个输入模式(pattern),实现设计必须给出相同的响应才可以通过。等同常在检查两个RTL之间的等价性时很有用。
可以在Setup模式下使用下面的两种方式切换验证的两种模式(默认为consistency):
|-------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| fm_shell | GUI |
| 使用set_app_var verification_passing_mode [consistency**|equality]命令 | 1、选择Edit** > Formality Tcl Variables ,将会显示Formality Tcl Variables对话框。 2、在Verification 部分,选择verification_passing_mode变量。 3、点击consistency 或equality |
实践
下面将继续用上面的例子进行详细说明,假设其综合后的网表如下所示。
/
// Created by: Synopsys DC Expert(TM) in wire load mode
// Version : O-2018.06-SP1
// Date : Sun Jan 12 14:18:23 2025
/
module case_example ( state, out );
input [1:0] state;
output out;
OR2X1 U4 ( .A(state[0]), .B(state[1]), .Y(out) );
endmodule
默认情况
当设置为一致时,验证结果如图3所示,可以从Pattern窗口中看出,当state信号取得11值时,参考设计输出x而实现设计输出1(符合预期),最终验证通过。
图3 默认情况下的匹配结果
非默认情况
当设置为等同时,验证结果如图4所示,可以从Pattern窗口中看出,当state信号取得11值时,参考设计输出x而实现设计输出1(符合预期),但验证没有通过。
图4 非默认情况下的匹配结果
x值的建模
可能有人会有疑问,在参考设计中x值是如何建模的?要回答这个问题,可以从逻辑锥入手,首先打开输出端口对应的逻辑锥,如图5所示。
图5 逻辑锥
接着选中输出值为x的线网,并依次右键->Find->Find X Sources,结果如图6所示。
图6 x值的源头:C0单元
C0单元是x值的源头,当DC引脚为1时,无论F引脚是何值,输出都为x值。