Upload
kevinarias
View
226
Download
0
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