Tips :仿真竞争条件 指的是什么?

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

在数字电路仿真中, 仿真竞争条件(Simulation Race Condition) 是指多个并行的信号或事件在同一仿真时间步(time step)内因实行序次不确定,导致仿真效果不可预测或与真实硬件举动不同等的征象。这种问题在 Verilog 中较为常见,而 System Verilog 通过引入新的机制来规避它。
<hr> 为什么会出现仿真竞争条件?

仿真器是序次实行的(非并行),但电路举动本质是并行的。当多个操作(如信号赋值、时钟边沿触发等)在同一仿真时间步内发生,仿真器须要决定它们的实行序次。若序次差异导致效果差异,就产生了竞争条件。
典范场景举例

假设在 always @(posedge clk) 触发时,测试平台(Testbench)同时修改输入信号:
  1. // Verilog 示例:潜在的竞争条件
  2. module design (input clk, input a, output reg b);
  3.   always @(posedge clk) begin
  4.     b <= a;  // 在时钟上升沿将 a 的值赋给 b(非阻塞赋值)
  5.   end
  6. endmodule
  7. module testbench;
  8.   reg clk = 0;
  9.   reg a = 0;
  10.   design dut (clk, a, b);
  11.   initial begin
  12.     #10;
  13.     clk = 1;  // 时钟上升沿
  14.     a = 1;    // 同时修改输入信号 a
  15.     #10;
  16.     $display("b = %d", b);  // 输出可能不确定!
  17.   end
  18. endmodule
复制代码


  • 问题:在 clk 上升沿(posedge clk)触发的同一时刻,测试平台修改了输入 a。
  • 仿真器的实行序次可能有两种
         
    • 先实行 clk=1 触发 always 块,此时 a 仍为旧值 0 → b 被赋值为 0。   
    • 先实行 a=1,然后 clk=1 触发 always 块 → b 被赋值为 1。  
      
  • 效果取决于仿真器的实行序次,导致不可预测的输出。
<hr> System Verilog 怎样办理竞争条件?

1. 使用 program 块隔离测试平台

System Verilog 引入了 program 块,将测试代码设计代码的实行阶段分离:


  • 设计代码(module):在仿真器的 Active 地区 实行。
  • 测试代码(program):在 Reactive 地区 实行(在 Active 地区之后)。
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表