You are on page 1of 5

Personal

Open source

Business

Explore

Pricing

Blog

Support

This repository

Obijuan / open-fpga-verilog-tutorial
Code

Issues 0

Pull requests 0

Search

Watch
Wiki

Pulse

Sign in

13

Star

31

Sign up

Fork

15

Graphs

Captulo 4: Contador de 26 bits


Juan Gonzalez-Gomez edited this page Dec 31, 2015 3 revisions

Pages 40

Inicio (EN)

Captulos
Ejemplos de este captulo en github

Introduccin
Modelaremos nuestro primer circuito secuencial: un contador conectado a los LEDs. Los circuitos
secuenciales, a diferencia de los combinacionales, almacenan informacin. El contador almacena
un nmero 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 su salida
data es de 26 bits.

La seal de reloj de la placa iCEstick es de 12Mhz. Si hacemos un contador de slo 4 bits y le


conectamos a su entrada clk esta seal de 12Mhz, el resultado ser que se incrementar tan rpido
que siempre veremos los leds encendidos. Por ello utilizaremos un contador de 26 bits y usaremos
los 4 ms significativos para mostrarlos en los leds.

Descripcin 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.

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 Mltiples 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 reset
sncrono
15 Divisor de frecuencias
16 Contador de segundos
17 Generando tonos audibles
18 Tocando notas
19 Secuenciando notas
20 Comunicaciones serie
asncronas
21 Baudios y transmisin
22 Reglas de diseo sncrono
23 Controladores y autmatas
finitos
24 Unidad de transmisin serie
asncrona
25 Unidad de recepcin serie
asncrona
26 Memoria ROM
27 Memoria ROM genrica
28 Memoria RAM
29 Puertas triestado
30 Hacia el microprocesador y ms
all
Clone this wiki locally

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

Clone in Desktop

converted by Web2PDFConvert.com

//----------------------------------//-- Entrada: seal 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 <= data + 1;
end
endmodule

El funcionamiento del componente se describe dentro del bloque always @(posedge clk), que
indica que todo lo que est dentro de este bloque slo se evaluar cada vez que llegue un flanco de
subida en la seal clk. Cada vez que llega uno, se incrementa en una unidad el registro data (y
saldr por la salida del componente).
Cualquier contador, con independencia de su nmero de bits, se construye de esta manera. Si
queremos que tenga 20 bits, slo tenemos que cambiar el nmero 25 por 19 en las definiciones del
registro data.

Sntesis en la FPGA
Los 4 bits de mayor peso (data[25], data[24], data[23] y data[22]) los conectaremos a los pines de la
fpga donde estn los leds. El reloj de la iCEstick entra por el pin 21, que lo conectaremos a la seal
de reloj clk de nuestro contador

La asociacin entre pines de nuestro componente y pines de la fpga se establece en el fichero


counter.pcf:
set_io
set_io
set_io
set_io
set_io

data[25]
data[24]
data[23]
data[22]
clk 21

96
97
98
99

converted by Web2PDFConvert.com

Realizamos la sntesis como siempre:


$ make sint

Los recursos empleados son:

Recurso

ocupacin

PIOs

14 / 96

PLBs

6 / 160

BRAMs

0 / 16

Para probarlo lo cargamos en la FPGA como siempre:


$ sudo iceprog counter.bin

En este vdeo de youtube podemos ver el contador en funcionamiento:

Simulacin
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 seal cuadrada para incrementar el contador. La salida
converted by Web2PDFConvert.com

del contador se comprueba en dos componentes diferentes. Uno hace la comprobacin 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 simulacin se para transcurridas 100 unidades
de tiempo.
El cdigo en verilog es:
//-- counter_tb.v
module counter_tb();
//-- Registro para generar la seal 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 <= counter_check + 1;
end
//-- Proceso al inicio
initial begin
//-- Fichero donde almacenar los resultados
$dumpfile("counter_tb.vcd");
$dumpvars(0, counter_tb);
//-- Comprobacin del reset.
# 0.5 if (data != 0)
$display("ERROR! Contador NO est a 0!");
else
$display("Contador inicializado. OK.");
# 99 $display("FIN de la simulacion");
# 100 $finish;
end
endmodule

Es importante darse cuenta de que todos estos componentes estn funcionando en paralelo, todos a
la vez (el cdigo NO es secuencial). Por eso, dara igual cambiar el orden de escritura de los
elementos.
Para simular, ejecutamos:
$ make sim

converted by Web2PDFConvert.com

Efectivamente el contador cuenta. En la imagen slo 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 ms rpidamente

Conclusiones
TODO

FPGA Libres: [Wiki] [Repo]

2016 GitHub, Inc. Terms Privacy Security Contact Help

Status API Training Shop Blog About

converted by Web2PDFConvert.com

You might also like