capítulo 5 prescaler de n bits

Upload: kevinarias

Post on 06-Jul-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    1/8

    Inicio (EN)

    Capítulos

    0 You are leaving the privative

    sector  (EN)

    1 ¡Hola mundo! (EN)

    2 De un bit a datos (EN)

    3 Puerta NOT (EN)

    4 Contador de 26 bits (EN)

    5 Prescaler de N bits (EN)

    6 Múltiples prescalers

    7 Contador de 4 bits con prescaler 

    8 Registro de 4 bits

    9 Inicializador 

    10 Registro de desplazamiento

    11 Multiplexor de 2 a 1

    12 Multiplexor de M a 1

    13 Inicializando registros

    14 Registro de N bits con resetsíncrono

    15 Divisor de frecuencias

    16 Contador de segundos

    17 Generando tonos audibles

    18 Tocando notas

    19 Secuenciando notas

    20 Comunicaciones serie

    asíncronas

    21 Baudios y transmisión

    22 Reglas de diseño síncrono

    23 Controladores y autómatas

    finitos

    24 Unidad de transmisión serieasíncrona

    25 Unidad de recepción serie

    asíncrona

    26 Memoria ROM

    27 Memoria ROM genérica

    28 Memoria RAM

    29 Puertas triestado

    30 Hacia el microprocesador y más

    allá

    Clone this wiki locally

    Capítulo 5: Prescaler de N bitsJuan Gonzalez-Gomez edited this page Dec 31, 2015 · 21 revisions

    Ejemplos de este capítulo en github

    Introducción

    Los prescalers sirven para ralentizar las señales de reloj. Por la entrada entra una señal de reloj

    de frecuencia f y por la salida se obtiene una de frecuencia menor. En este tutorial haremos un

    prescaler de N bits para hacer parpadear un led a di ferentes frecuencias

    Para un prescaler de N bits, las fórmulas que relacionan las frecuencias y periodos de entrada con

    los de salida son:

    Entendiendo el prescaler de 2 bits

     Antes de implementar un prescaler de N bits, vamos a entender cómo funciona uno de 2 bits

    13 31 15Watch Star ForkObijuan / open-fpga-verilog-tutorial

     Code Issues 0  Pull requests 0  Wiki  Pulse Graphs

     Pages 40

    https://github.com/Obijuan/open-

     Clone in Desktop

    Personal Open source Business Explore   Pric ing Blog Support   This repository Search Sign upSign upSign inSign in

    converted by Web2PDFConvert.com

    https://github.com/Obijuan/open-fpga-verilog-tutorial/tree/master/tutorial/ICESTICK/T05-prescalerhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-30%3A-Hacia-el-microprocesador-y-m%C3%A1s-all%C3%A1http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://github.com/Obijuan/open-fpga-verilog-tutorial/tree/master/tutorial/ICESTICK/T05-prescalerhttps://windows.github.com/https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-30%3A-Hacia-el-microprocesador-y-m%C3%A1s-all%C3%A1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-29%3A-Puertas-triestadohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-28%3A-Memoria-RAMhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-27%3A-Memoria-ROM-gen%C3%A9ricahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-26%3A-Memoria-ROMhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-25%3A-Unidad-de-recepci%C3%B3n-serie-as%C3%ADncronahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-24%3A-Unidad-de-transmisi%C3%B3n-serie-as%C3%ADncronahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-23%3A-Controladores-y-aut%C3%B3matas-finitoshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-22%3A-Reglas-de-dise%C3%B1o-s%C3%ADncronohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-21%3A-Baudios-y-transmisi%C3%B3nhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-20%3A-Comunicaciones-serie-as%C3%ADncronashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-19%3A-Secuenciando-notashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-18%3A-Tocando-notashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-17%3A-Generando-tonos-audibleshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-16%3A-Contador-de-segundoshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-15%3A-Divisor-de-frecuenciashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-14%3A-Registro-de-N-bits-con-reset-s%C3%ADncronohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-13%3A-Inicializando-registroshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-12%3A-Multiplexor-de-M-a-1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-11%3A-Multiplexor-de-2-a-1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-10%3A-Registro-de-desplazamientohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-9%3A-Inicializadorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-8%3A-registro-de-4-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-7%3A-Contador-de-4-bits-con-prescalerhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-6%3A-Multiples-prescalershttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-5%3A-N-bit-prescalerhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-5%3A-Prescaler-de-N-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-4%3A-26-bit-counterhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-4%3A-Contador-de-26-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-3%3A-NOT-Gate.-Invhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-3%3A-Puerta-NOT.-Invhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-2%3A-From-bit-to-data.-Fporthttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-2%3A-De-un-bit-a-datos.-Fporthttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-1%3A-%C2%A1Hello-world%21-Setbithttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-1%3A-%C2%A1Hola-mundo%21-Setbithttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-0%3A-you-are-leaving-the-privative-sectorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-0%3A-you-are-leaving-the-privative-sectorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Home_ENhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Homehttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-5:-Prescaler-de-N-bits/_historyhttps://github.com/Obijuan/open-fpga-verilog-tutorial/graphshttps://github.com/Obijuan/open-fpga-verilog-tutorial/pulsehttps://github.com/Obijuan/open-fpga-verilog-tutorial/wikihttps://github.com/Obijuan/open-fpga-verilog-tutorial/pullshttps://github.com/Obijuan/open-fpga-verilog-tutorial/issueshttps://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuanhttps://github.com/Obijuan/open-fpga-verilog-tutorial/networkhttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/stargazershttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/watchershttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://help.github.com/https://github.com/bloghttps://github.com/pricinghttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorial%2Fwiki%2FCap%25c3%25adtulo-5%3A-Prescaler-de-N-bitshttps://github.com/join?source=header-repohttps://github.com/explorehttps://github.com/businesshttps://github.com/open-sourcehttps://github.com/personalhttps://github.com/

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    2/8

    Internamente está constituido por un contador de 2 bits, cuyas salidas son d0 y d1. La de mayor 

    peso es la que se saca como señal de salida. Este contador se incrementa en cada flanco de subida

    de clk, que tiene un periodo T. Si observamos las señales de salida de sus dos bits (d0 y d1):

    vemos que el periodo de la señal d0 es 2 veces T, y la de la señal d1 es 4 veces T. Es decir, que

    cada nuevo bit duplica el periodo de la señal anterior. Siguiendo la fórmula general, el periodo de

    este prescaler de 2 bits es: Tout = 2 2̂ * T = 4 * T (y gráficamente comprobamos que es así).

    Frecuencias y periodos del prescaler 

    La frecuencia de entrada al prescaler en la placa iCEStick es de 12Mhz. Aplicando la fórmula

    anterior, obtenemos esta tabla con periodos y frecuencias para prescalers con diferente número

    de bits (N). Esto nos da una idea de qué valor de N elegir para hacer parpadear el led

    converted by Web2PDFConvert.com

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    3/8

    Bits (N) Frecuencia Periodo Visible

    1 6 MHz 0.167 usec No

    2 3 MHz 0.333 usec No

    3 1.5 Mhz 0.666 usec No

    4 750 Khz 1.333 usec No

    5 375 Khz 2.666 usec No

    6 187.5 Khz 5.333 usec No

    7 93.75 KHz 10.666 usec No

    8 46.875 Khz 21.333 usec No

    9 23437.5 Hz 42.666 usec No

    10 11718.7 Hz 85.333 usec No

    11 5859.37 Hz 170.66 usec No

    12 2929.68 Hz 341.33 usec No

    13 1464.84 Hz 682.66 usec No

    14 732.42 Hz 1.365 ms No

    15 366.21 Hz 2.73 ms No

    16 183.1 Hz 5.46 ms No

    17 92.552 Hz 10.92 ms No

    18 45.776 Hz 21.84 ms No

    19 22.888 Hz 43.69 ms Si

    20 11.444 Hz 87.38 ms Si

    21 5.722 Hz 174.76 ms Si

    22 2.861 Hz 349.52 ms Si

    El ojo humano tiene una frecuencia de refresco de unos 25Hz. Esto significa que frecuencias

    superiores no se aprecian. Si hacemos parpadear el led con una frecuencia superior, lo

    apreciaremos como si siempre estuviese encendido (no lo veremos parpadear)

     Al usar el prescarler con el led, a partir de 19 bits es cuando se puede apreciar el parpadeo.

    Cuanto más bits, más lento parpadeará el led.

    Descripción del hardware

    El código es prácticamente igual al de un contador, sin embargo introducimos la novedad de que el

    prescaler es paramétrico, de forma que el número de bits está determinado por el parámetro N.

    Sólo cambiando este parámetro podemos sintetizar prescalers de diferentes tamaños

    converted by Web2PDFConvert.com

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    4/8

    //-- prescaler.v

    //-- clk_in: señal de reloj de entrada

    //-- clk_out: Señal de reloj de salida, con menor frecuencia

    module prescaler (input clk_in, output clk_out);

    wire clk_in;

    wire clk_out;

    //-- Numero de bits del prescaler (por defecto)

    parameter  N = 22;

    //-- Registro para implementar contador de N bits

    reg [N-1:0] count = 0;

    //-- El bit más significativo se saca por la salida

    assign clk_out = count[N-1];

    //-- Contador: se incrementa en flanco de subida

    always @(posedge(clk_in)) begin

      count

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    5/8

    Recurso ocupación

    PIOs 2 / 96

    PLBs 5 / 160

    BRAMs 0 / 16

    Lo descargamos en la FPGA mediante:

    $ sudo iceprog prescaler.bin

    El led D1 empezará a parpadear 

    En este vídeo de youtube se puede ver el led parpadeando:

    Simulación

    En el banco de pruebas colocamos el prescaler de N bits (por defecto con N = 2), un generador de

    reloj y un bloque de comprobación que se ejecuta con cada flanco de bajada del reloj. Este bloque

    tiene un registro interno que se incrementa y su bit más significativo se comprueba con clk_out, para

    asegurarse que está funcionando correctamente. Hay un cuarto bloque que inicializa todo y espera a

    que se termine la simulación

    converted by Web2PDFConvert.com

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://www.youtube.com/watch?v=HSqNa5iC2Qc

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    6/8

    El código del banco de pruebas es el siguiente:

    converted by Web2PDFConvert.com

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    7/8

    //-- prescaler_tb.v

    module prescaler_tb();

    //-- Numero de bits del prescaler a comprobar 

    parameter  N = 2;

    //-- Registro para generar la señal de reloj

    reg clk = 0;

    //-- Salida del prescaler 

    wire clk_out;

    //-- Registro para comprobar si el prescaler funciona

    reg [N-1:0] counter_check = 0;

    //-- Instanciar el prescaler de N bits

    prescaler  #(.N(N)) //-- Par ámetro N

      Pres1(

      .clk_in(clk),

      .clk_out(clk_out)

      );

    //-- Generador de reloj. Periodo 2 unidades

    always #1 clk = ~clk;

    //-- Comprobacion del valor del contador 

    //-- En cada flanco de bajada se comprueba la salida del contador 

    //-- y se incrementa el valor esperado

    always @(negedge clk) begin

      //-- Incrementar variable del contador de prueba

      counter_check = counter_check + 1;

      //-- El bit de mayor peso debe coincidir con clk_out

      if  (counter_check[N-1] != clk_out) begin

      $display("--->ERROR! Prescaler no funciona correctamente");

      $display("Clk out: %d, counter_check[2]: %d",clk_out, counter_check[N-1]);

      end

    end

    //-- Proceso al inicio

    initial begin

      //-- Fichero donde almacenar los resultados

      $dumpfile("prescaler_tb.vcd");

      $dumpvars(0, prescaler_tb);

      # 99 $display("FIN de la simulacion");

      # 100 $finish;

    end

    endmodule

    Para simular ejecutamos:

    $ make sim

    converted by Web2PDFConvert.com

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF

  • 8/17/2019 Capítulo 5 Prescaler de N Bits

    8/8

    En esta simulación del prescaler de 2 bits vemos cómo efectivamente la señal de salida tiene un

    periodo de 4 veces el de la señal de entrada.

    Repetimos la simulación pero ahora estableciendo un prescaler de 3 bits, cambiando esta línea:

    parameter N = 2;

    El resultado es:

     Ahora la señal de salida tiene un periodo 8 veces mayor que el de la entrada

    Ejercicios propuestos

    Modificar el prescaler para valores de N = 18, 19, 20 y 21. Sintetizarlos y descargarlos en la

    iCEstick

    Realizar la simulación para N = 4

    Conclusiones

    TODO

    FPGA Libres: [Wiki] [Repo]

    Status   API  Training  Shop  Blog   About© 2016 GitHub, Inc. Terms  Privacy  Security  Contact  Help

    http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://help.github.com/https://github.com/contacthttps://github.com/securityhttps://github.com/site/privacyhttps://github.com/site/termshttps://github.com/abouthttps://github.com/bloghttps://shop.github.com/https://training.github.com/https://developer.github.com/https://status.github.com/https://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki