如何解决成语,用于检测systemverilog中上升/下降沿的顺序
我正在用系统Verilog编写验证码。由于超出了此问题范围的原因,我需要检查在下一个时钟周期的高周期内(即,在下一个上升沿和下降沿之间)信号是否恰好上下脉冲一次。
虽然可以使用状态机轻松完成此操作,但由于它不需要可综合,所以我希望利用SV构造使代码的意图更加突出。
我考虑使用基于事件的解决方案:
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,fe_sig,fe_clk);
//Set some signals.
else
//Set other signals.
end
join_any
disable fork;
此解决方案非常冗长。还有更惯用的方法吗?
解决方法
您可以执行以下操作,对我来说,这看起来更简洁:
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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。