首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemverilog中检测上升/下降沿序列的惯用法

systemverilog中检测上升/下降沿序列的惯用法
EN

Stack Overflow用户
提问于 2020-10-07 14:32:05
回答 1查看 203关注 0票数 0

我正在用系统verilog编写验证码。出于本问题范围之外的原因,我需要检查在下一个时钟周期的高周期内(即在下一个上升沿和下降沿之间),信号是否恰好向上和向下脉冲一次。

虽然这可以通过状态机很容易地完成,因为这不需要是可综合的,我希望利用SV构造来使代码的意图更加突出。

我考虑过使用基于事件的解决方案:

代码语言:javascript
复制
event re_clk, fe_clk, re_sig, fe_sig;

fork
    forever begin @(pos_edge clk)
        -> re_clk; end
    forever begin @(neg_edge clk)
        -> fe_clk; end
    forever begin @(pos_edge sig)
        -> re_sigl end
    forever begin @(neg_edge sig)
        -> fe_sig; end
    begin 
        wait_order(re_clk, re_sig, fe_sig, fe_clk);
            //Set some signals.
        else
            //Set other signals.
    end
join_any
disable fork;

这个解决方案非常冗长。有没有更惯用的方法?

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 15:41:44

您可以执行以下操作,这在我看来更简洁:

代码语言:javascript
复制
bit good_pulse = 0;
fork
  @(posedge clk) @(negedge clk);
  begin
    @(posedge sig) @(negedge sig) good_pulse = 1;
    @(posedge sig) good_pulse = 0;
  end
join_any
disable fork;
if (good_pulse)
   //Set some signals.
        else
   //Set other signals.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64238426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档