¿Cómo medir la diferencia de tiempo entre 2 cambios de señal en verilog?

0

Hay dos señales sig, habilitar , y quería encontrar la diferencia de tiempo después de lo cual habilitar alterna después de que caiga la firma. (> Sig Low to Enable < time)

Entiendo que siempre el bloque @ () no se puede anidar dentro de otro, así que probé el siguiente enfoque:

  realtime toggletime ;
  realtime sig_low;

  always@(negedge sig) begin
   sig_low = $time ;
           @(enable)begin
               toggletime= $time - sig_low ;
               end
  end

Mi idea fue rastrear sig, y cada vez que baja, anote la hora (en sig_low ) y, desde ese punto, habilite el rastreo y cada vez que cambie note la diferencia entre ese punto y el anterior Valor sig_low. Pero esto no me está dando el resultado requerido. ¿Hay alguna otra forma de hacer esto?

* La señal sig es un pulso periódico que baja, por ejemplo, cada 500us. habilitar es una señal que cambia a intervalos esporádicos. Estoy tratando de medir el tiempo transcurrido después de la última señal y luego habilitar los cambios.

* Ambos están sincronizados con el mismo reloj. No se disparan al mismo tiempo. Si hay varios bordes negativos, solo el último borde es de interés.

    
pregunta Ambareesh Sr Ja

1 respuesta

1

El código que escribiste debería funcionar. El único problema posible es que debe usar $realtime en lugar de $time si la escala de tiempo actual es superior a 1 ms. Eso evita que el tiempo se redondee a un entero.

Puedo reorganizar los bloques begin/end para explicar mejor cómo se ejecuta.

   always begin
       @(negedge sig) // wait for sig to goto 0
       sig_low = $realtime ;
       @(enable)      // wait for enable to change its value
       toggletime= $realtime - sig_low ;
    end

Esto es funcionalmente equivalente a lo que escribiste.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas