首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

异步置位或清零问题,仿真

异步置位或清零问题,仿真

以下为消除scl_insda_io毛刺的语句,可是在仿真时却看不到正确的输出,sda_srscl_sr这两个移位寄存器一直维持1111没有变化。而当把if(clr_in)(包含beginend)这一段的删除,或在仿真时使clr_in一直为低电平,则sda_srscl_sr开始起作用,输出正确的波形。此种感觉仿真时一直在执行if(clr_in)这一段的语句,而不执行else中的代码。请问这是什么原因呢?
期待各位大侠指教,感谢

// Debounce, then delay debounced signals for edge detection
always @ (posedge clk_in or posedge clr_in)
  if (clr_in)
    begin
      sda_sr <= 4'b1111;  
      sda <= 1;
      was_sda <= 0;
      scl_sr <= 4'b1111;  
      scl <= 1;
      was_scl <= 0;
    end
  else
    begin
      sda_sr <= {sda_sr[2:0], sda_io};  
      if (sda_sr == 4'b0000) sda <= 0;
      else if (sda_sr == 4'b1111) sda <= 1;
      was_sda <= sda;
      scl_sr <= {scl_sr[2:0], scl_in};
      if (scl_sr == 4'b0000) scl <= 0;
      else if (scl_sr == 4'b1111) scl <= 1;
      was_scl <= scl;
    end

或则把异步复位改为同步复位也可以,请各位高手指教,为何异步复位不可仿真呢?
谢谢
顶一个  不错
返回列表