Verilog: cambiar un cierto retraso según la salida actual

2

Para Verilog 2005, al escribir el banco de pruebas, ¿es posible crear una tabla de búsqueda de valores de retardo y luego asignar un cierto valor en ella para que sea el retardo de algún bloque de procedimiento?

Por ejemplo:

reg        clk;
reg  [9:0] delay [0:15]; //suppose delay[i] = 10'di;

always #delay[i]
begin
    clk <= ~clk;
end

y de alguna manera cambiamos i para leer un cierto valor de retardo.

Además, ¿es posible hacer una tabla de búsqueda de retrasos con valores de punto flotante?

    
pregunta Chetan Bhargava

2 respuestas

1

Una matriz de 16 elementos de punto flotante: real delay [0:15]; .

Dentro del bloque siempre, se necesita una instrucción wait para permitir que los valores de retardo se completen. Debido a que es un reloj, sugiero agregar un verificador de condición para terminar la simulación si falla. Esta protección es para capturar bucles infinitos 0 veces mientras se ejecuta la simulación.

reg clk;
integer i;
real delay [0:15];

always begin
  wait( ^i !== 1'bx); // This gives us a change to populate delay
  if (delay[i] <= 0.0 || i < 0 || i > 15) begin
    $display("FATAL @ %0t :: Something gone honorably wrong. i:%0d range 0 to 15, delay[%0d]:%0f",
      $realtime,i,i,delay[i]);
    $finish(1);
  end
  #(delay[i]);
  clk = ~clk;
end

Ejemplo de

trabajo     
respondido por el Greg
0

Aquí el retardo [j] es una tabla de consulta de valores reales que se puede variar en la expresión "retardo [i] = 1.2 + i". Este retardo de valor real se puede usar como ajuste del período de tiempo para un reloj en el bloque siempre como se muestra a continuación.

'timescale 1ns/1ps
 module del;
 real delay[0:15];
 integer i,j;
 reg clock;

 initial begin
 for(i=0;i<16;i=i+1) begin
  delay[i]=1.2+i;  //can be any expression such that delay can be a real value
 end
 end

 initial begin
 $dumpfile("dump.vcd");
 $dumpvars(1);
 clock=0;
 j=3;  // Can be any integer
 #400 $finish;
 end

 always begin
 #delay[j] clock=~clock;
 end
 endmodule
    
respondido por el Abhi

Lea otras preguntas en las etiquetas