使用VCS进行竞争冒险检查(Race Condition Detection)

来自微信公众号 “数字芯片实验室”

Verilog设计和测试平台的编码风格可能会影响仿真过程的正确(Correctness)和性能(performance),其中涉及仿真正确性的一个方面就是不同仿真器对竞争冒险(race conditions)的不同仿真结果。

竞争冒险的输出是不可预测的,可能在仿真期间导致意外的问题。

示例1 :Using and Setting a Value at the Same Time

module race;
reg a;
initial begin
a = 0;
#10 a = 1;
end
initial begin
#10 if (a) $display("may not print");
end
endmodule

两个initial begin end并行块没有确定的顺序,所以,不确定$display语句是否被执行。

可以在$display语句前增加延时#0,来避免竞争冒险

initial begin
#10 if (a)
#0 $display("may not print");
end

类似地,只要存在在同一时刻对某个信号进行写写、读写、写读都会产生竞争冒险。

Write– Write

initial
#5 var1 = 0; // write operation on signal var1
initial
#5 var1 = 1; // write operation on signal var1

Read – Write

initial
#5 var1 = var2; // read operation on signal var2
initial
#5 var2 = 1; // write operation on signal var

Write– Read

initial
#5 var1 = 0; // write operation on signal var1
initial
#5 var2 = var1; // read operation on signal var1

Race Detection

VCS 可以在编译(compile)和仿真(simulation)期间进行竞争冒险检查。检查到这些竞争冒险很重要,因为在Verilog仿真中,无法控制这些不同并行语句的执行顺序,这意味着不同的仿真器对同一个设计可能产生正确或者错误的仿真结果。

编译设计时,可以针对整个设计(-race)或者部分设计(-racecd)启用竞争冒险检测。针对下面的测试平台:

module race;
reg var1,var2;
//Write– Write
initial
#5 var1 = 0; // write operation on signal var1
initial
#5 var1 = 1; // write operation on signal var1
//Read – Write
initial
#15 var1 = var2; // read operation on signal var2
initial
#15 var2 = 1; // write operation on signal var2

//Write– Read
initial
#25 var1 = 0; // write operation on signal var1
initial
#25 var2 = var1; // read operation on signal var1

endmodule

编译&仿真

vcs -race test.v
./simv

VCS工具会在仿真目录底下生成race.out文件,其中包含了设计和测试平台中的竞争冒险相关信息(仿真时间、变量名、竞争冒险类型和所在行数)。

             Synopsys VCS RACE REPORT


5 "var1": write race (test.v: 6) && write race (test.v: 8) 
15 "var2": read race (test.v: 13) && write race (test.v: 15) 
25 "var1": write race (test.v: 20) && read race (test.v: 22)


             END RACE REPORT

本文转载自公众号:芯片数字实验室
原文链接:https://mp.weixin.qq.com/s/mN2m4PLBWa6GQfE\_WqV31g
未经作者同意,请勿转载!

推荐阅读

  • 基于VCS的计数器数字芯片功能仿真(step by step)
  • 使用PTPX进行time based模式功耗分析
  • 基于Formality的形式验证流程(step by step)

想了解更多内容,欢迎关注芯片数字实验室专栏

发表评论

邮箱地址不会被公开。 必填项已用*标注

Related Post