¿Cuándo debo usar negedge en una señal de reloj?

3

Estaba leyendo sobre block ram y encontré la siguiente publicación. Observo aquí que quien haya escrito el código está usando negedge en la señal del reloj. Hasta ahora, casi todos los ejemplos que he visto de verilog utilizan el uso de señales en el reloj. De hecho realmente no he visto ningún bloque siempre con negedge especificado. Me pregunto cuándo querrá usar eso y por qué el código siguiente puede contener negedge.

module RAM_param(clk, addr, read_write, clear, data_in, data_out);
    parameter n = 4;
    parameter w = 8;

    input clk, read_write, clear;
    input [n-1:0] addr;
    input [w-1:0] data_in;
    output reg [w-1:0] data_out;

    reg [w-1:0] reg_array [2**n-1:0];

    integer i;
    initial begin
        for( i = 0; i < 2**n; i = i + 1 ) begin
            reg_array[i] <= 0;
        end
    end

    always @(negedge(clk)) begin
        if( read_write == 1 )
            reg_array[addr] <= data_in;
        if( clear == 1 ) begin
            for( i = 0; i < 2**n; i = i + 1 ) begin
                reg_array[i] <= 0;
            end
        end
        data_out = reg_array[addr];
    end
endmodule
    
pregunta chasep255

2 respuestas

4

Si eres un principiante en diseño digital, te recomendaría que solo utilices el registro de activación por flanco negativo para interactuar con otros circuitos donde sea necesario para obtener la sincronización correcta. Un ejemplo de esto es una interfaz DDR como @Paebbels mencionada en su comentario.

Por supuesto, si usted es un diseñador digital experimentado, puede utilizar un registro con activación por flanco negativo en un diseño por lo demás positivo para interconectar entre dominios de reloj alineados.

El punto principal a recordar es que no debe mezclar registros positivos y negativos activados por el borde en un diseño a menos que esté absolutamente seguro de que sabe lo que está haciendo; de lo contrario, esto puede causar errores que pueden ser muy difíciles de encontrar.

P.S. La mayoría de las herramientas de síntesis no mostrarán el código que muestra, ya que la señal clara establece el contenido en cero. Lo más probable es que se implemente en registros discretos y sea muy lento.

Editar: Otra posibilidad de utilizar un reloj de activación por flanco negativo en un diseño de activación por flanco positivo está en un ram del bloque síncrono. Si tiene un ram de bloque síncrono entre dos registros positivos activados por flanco y cronometra el ram del bloque en el borde negativo, evita el retardo del ciclo de un reloj del ram del bloque de otro modo síncrono.

    
respondido por el Rasmus B. Sorensen
0

cada vez que quieras hacer algo entre bordes positivos.

RAM tiene RAS / ~ CAS en el borde negativo de lo que desearía bloquear la otra mitad de la dirección, etc. ...

    
respondido por el Jasen

Lea otras preguntas en las etiquetas