Verilog:检测大于tmax的脉冲

Verilog:检测大于tmax的脉冲,verilog,detection,pulse,Verilog,Detection,Pulse,我有一个问题,我希望有人能给我一个提示来解决这个问题 如果输入信号“in”的周期大于tmax,我需要一个verilog代码使信号“reset”立即变高 信号“复位”应在“in”的下一个正边缘处再次变低(如果存在下一个正边缘) 如果输入信号“in”的周期小于tmax,则信号“reset”应保持低 例1 tmax=100ns period(in) = 80ns 重置始终保持低位 例2 tmax=100ns period(in) = 130ns 在“in”的第一个正边缘后,重置变为高100纳

我有一个问题,我希望有人能给我一个提示来解决这个问题

如果输入信号“in”的周期大于tmax,我需要一个verilog代码使信号“reset”立即变高

信号“复位”应在“in”的下一个正边缘处再次变低(如果存在下一个正边缘)

如果输入信号“in”的周期小于tmax,则信号“reset”应保持低

例1

tmax=100ns
period(in) = 80ns
  • 重置始终保持低位
例2

tmax=100ns
period(in) = 130ns
  • 在“in”的第一个正边缘后,重置变为高100纳秒
  • 如果有第二个脉冲,复位在“in”的下一个正边缘变低


我应该从哪里开始?

这个怎么样。您仍然需要检查Tmax是否超过,但结果之间的时间分辨率为1

always @ (*)
    begin
        while(1)
            begin
            current_time = $realtime; 
            if (last_time > 0.0) freq = 1.0e9 / (current_time - last_time); 
            last_time = current_time; 
            # 1;  // This allows for 1 timescale between loops.  If you leave
                  // this out, most simulators become non-responsive in the loop.
            end
    end

这仅仅是一个Verilog测试台吗?告诉我们你到目前为止尝试了什么以及它是如何出错的。嗨,toolic,不,它实际上是一个模型,根据上面的描述监控输入信号“输入”,并输出“复位”。非常感谢。首先,我尝试实现这样的东西:`timescale 1ns/1ps module freq_meas(clk);输入时钟;实时最后时间、当前时间、频率;初始开始最后时间=0.0;频率=0.0;结束始终@(posedge clk)开始当前时间=$realtime;如果(上次时间>0.0)频率=1.0e9/(当前时间–上次时间);上次时间=当前时间;end-EndModules问题在于,此代码必须等待输入“in”的下一个正边缘来测量周期并做出决定。想象一下“in”变高并保持高。上述代码将无法正常响应。我需要的是,如果“in”变高并保持在高位,则“重置”应在“in”的正边缘之后变高“tmax=100ns”,并且“重置”也应保持在高位。