Capítulo 4 Contador de 26 Bits

Embed Size (px)

Citation preview

  • 8/17/2019 Capítulo 4 Contador de 26 Bits

    1/5

    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 

    10Registro de desplazamiento

    11Multiplexor de 2 a 1

    12Multiplexor de M a 1

    13 Inicializando registros

    14Registro de N bits con reset

    síncrono

    15Divisor de frecuencias

    16Contador de segundos

    17Generando tonos audibles

    18Tocando notas

    19Secuenciando notas

    20Comunicaciones serie

    asíncronas

    21Baudios y transmisión

    22Reglas de diseño síncrono

    23Controladores y autómatas

    finitos

    24Unidad de transmisión serieasíncrona

    25Unidad de recepción serie

    asíncrona

    26Memoria ROM

    27Memoria ROM genérica

    28Memoria RAM

    29Puertas triestado

    30Hacia el microprocesador y más

    allá

    Clone this wiki locally

    Capítulo 4: Contador de 26 bitsJuan Gonzalez-Gomez edited this page Dec 31, 2015 · 3 revisions

    Ejemplos de este capítulo en github

    Introducción

    Modelaremos nuestro primer circuito secuencial: un contador conectado a los LEDs. Los circuitos

    secuenciales, a diferencia de los combinacionales, almacenan información. El contador almacena

    un número que se incrementa con cada tic del reloj.

    Esta es la pinta de nuestro componente. Se actualiza en cada flanco de subida del reloj, y susalida

    data es de 26 bits.

    La señal de reloj de la placa iCEstick es de 12Mhz. Si hacemos un contador de sólo 4 bits y le

    conectamos a su entrada clk esta señal de 12Mhz, el resultado será que se incrementará tan rápido

    que siempre veremos los leds encendidos. Por ello utilizaremos un contador de 26 bits y usaremos

    los 4 más significativos para mostrarlos en los leds.

    Descripción del hardware

    El contador tiene una entrada clk, que es un cable, y una salida data de 26 bits que nos devuelve

    el valor del contador. Esta salida es un registro de 26 bits, que almacena el valor de la cuenta.

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

     Code Issues 0  Pull requests 0  Wiki  Pulse Graphs

     Pages 40

    https://github.com/Obijua

     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/wiki/Homehttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Home_ENhttps://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/T04-counterhttps://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-4:-Contador-de-26-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-4%3A-Contador-de-26-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 4 Contador de 26 Bits

    2/5

    //-----------------------------------

    //-- Entrada: señal de reloj

    //-- Salida: contador de 26 bits

    //-----------------------------------

    module counter(input clk, output [25:0] data);

    wire clk;

    //-- La salida es un registro de 26 bits, inicializado a 0

    reg [25:0] data = 0;

    //-- Sensible al flanco de subida

    always @(posedge clk) begin

      //-- Incrementar el registro

      data

  • 8/17/2019 Capítulo 4 Contador de 26 Bits

    3/5

    Realizamos la síntesis como siempre:

    $ make sint

    Los recursos empleados son:

    Recurso ocupación

    PIOs 14 / 96

    PLBs 6 / 160

    BRAMs 0 / 16

    Para probarlo lo cargamos en la FPGA como siempre:

    $ sudo iceprog counter.bin

    En este vídeo de youtube podemos ver el contador en funcionamiento:

    Simulación

    El banco de pruebas está compuesto por 4 elementos (en paralelo) unidos por cables. El diagrama

    es el siguiente:

    Hay un generador de reloj que produce una señal cuadrada para incrementar el contador. La salida

    converted by Web2PDFConvert.com

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

  • 8/17/2019 Capítulo 4 Contador de 26 Bits

    4/5

    del contador se comprueba en dos componentes diferentes. Uno hace la comprobación inicial,

    verificando que inicialmente arranca desde 0. El segundo tiene una variable interna que se

    incrementa con cada flanco de bajada del generador del reloj y su salida se comprueba con la del

    contdor, para verificar que efectivamente está contando. Como es un contador de 26 bits, no se

    comprueban todos los 67108864 valores, sino que la simulación se para transcurridas 100 unidades

    de tiempo.

    El código en verilog es:

    //-- counter_tb.v

    module counter_tb();

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

    reg clk = 0;

    //-- Datos de salida del contador

    wire [26:0] data;

    //-- Registro para comprobar si el contador cuenta correctamente

    reg [26:0] counter_check = 1;

    //-- Instanciar el contador

    counter C1(

      .clk(clk),

      .data(data)

    );

    //-- 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

      if (counter_check != data)

      $display("-->ERROR!. Esperado: %d. Leido: %d",counter_check, data);

      counter_check

  • 8/17/2019 Capítulo 4 Contador de 26 Bits

    5/5

    Efectivamente el contador cuenta. En la imagen sólo se muestran los primeros valores, pero

    desplazando la imagen se pueden ver hasta el instante 100

    Ejercicios propuestos

    Cambiar el contador de 26 a 24 bits, para que se incremente más rápidamente

    Conclusiones

    TODO

    FPGA Libres: [Wiki] [Repo]

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

    t d b W b2PDFC t

    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