Verilog:检测大于tmax的脉冲
我有一个问题,我希望有人能给我一个提示来解决这个问题 如果输入信号“in”的周期大于tmax,我需要一个verilog代码使信号“reset”立即变高 信号“复位”应在“in”的下一个正边缘处再次变低(如果存在下一个正边缘) 如果输入信号“in”的周期小于tmax,则信号“reset”应保持低 例1Verilog:检测大于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纳
tmax=100ns
period(in) = 80ns
- 重置始终保持低位
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”,并且“重置”也应保持在高位。