Pages Menu
TwitterFacebook



BANNER1_ALT

Posted by on Mar 11, 2015 in Verilog | 0 comments

Contadores y Clocks

Contadores y Clocks

Diseño de Contadores y Clocks

Clk

Clock

El diseño de contadores y clocks (señales de reloj) regulan la lógica de las señales para que los sistemas secuenciales puedan correr a una velocidad óptima.

Para la generación de estímulos se utilizan los procesos initial y always. La elección de éstos viene determinada por las características de las señales a generar. Dependiendo de la naturaleza de la señal, éstas se pueden generar de forma síncrona o asíncrona.

La generación asíncrona se basa en el uso de retardos para activar y desactivar señales, mientras que la generación síncrona se basa en el uso de eventos, disparados por flancos para activar y desactivar señales. En este caso todas las señales que se activen de forma síncrona se harán con un retardo.

Señal de Reset Síncrona

initial
  begin
    rst = 1'b0;
    repeat(2)
      @(posedge clk) #1;
    rst = 1'b1;
      @(posedge clk) #1;
    rst = 1'b0;
  end
Diagrama Clock FPGA

Diagrama Clock FPGA

Fuentes de Oscilación  (Clocks)

Clock Multiplicación / Divición

Clock Multiplicación / Divición

Fuente de Oscilación (Hz)

Fuente de Oscilación (Hz)

Fuente de oscilación del FPGA

Fuente de oscilación del FPGA

Pin_17

En verilog podemos sintetizar relojes mediante contadores síncronos.

Diseño de un Oscilador de 1Hz.

Practica Clocks:

Esta practica consiste en generar un oscilador entre estados altos y bajos a 1Hz en un LED. El diseño de este oscilador se muestra en el siguiente diagrama:

Diseño de un Oscilador de 1Hz

Diseño de un Oscilador de 1Hz

  • C_50Mhz: Entrada externa de oscilación.
  • C_1Hz: Oscilación de salida.
  • [24:0] Cuenta -Variable del divisor.

Los periodos que tendrá una señal a una frecuencia de 50 Mhz en 1 segundo son 50,000,000 en 0.5 segundos son 25,000,000 a 0.001 segundos son 50,000. De esta manera se hace el divisor de frecuencia.

Código en Verilog

module Cloks (C_50Mhz,C_1Hz);
 input C_50Mhz;         //Clock de entrada del FPGA de entrada (Pin 17).
 output reg C_1Hz = 1;  //Señal de salida (<em>Se debe asignar un estado lógico</em>).

 reg[24:0] contador = 0; //Variable Contador equivale a 25 millones de estados. 

 always @(posedge C_50Mhz)
  begin
   contador = contador + 1; //0.5 segundos LED encendido
   if(contador == 25_000_000)
    begin
      contador = 0;
      C_1Hz = ~C_1Hz; //0.5 segundos LED apagado
    end
  end
endmodule

Se debe de asignar un estado lógico inicial a la salida C_1Hz ya que de esta manera  asignamos el estado de el led al poner nosotros “1” declaramos que el LED inicializara encendido, o viveversa si declaramos un “0”, de cualquiera de las dos formas es aseptable.

El bloque always que presente un posedge, únicamente se «ejecutara» cuando ocurra el flanco positivo.Si presenta un negedge, únicamente se «ejecutara» cuando ocurra el flanco negativo.

negedge

Negedge

posedge

Posedge

Cuando un bloque always es usado para sintetizar lógica secuencial, no se recomienda mezclar con otro tipo de flancos o entradas.

Descargar el código a la FPGA, asignar la señal C_50Mhz a la entrada PIN_17 y la salida C_1Hz a un led (cualquiera).

Asinacion de Pines S3A2

Asignación de Pines

Probaremos nuestro programa en físico mostrando la oscilación en un LED en estados altos y bajos a 1 Hz de frecuencia.

Imagen Representativa On

Imagen Representativa On

Imagen Representativa Off

Imagen Representativa Off

 

 

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *