Está en la página 1de 13

Practica 1.

CONTADOR DE 0 A 16

OBJETIVO: La presente práctica tiene como objetivo diseñar un contador de 0 a 16,


activando una bandera cuando llega a este valor y el conteo ascendente y descendente se
realiza automáticamente llegando a los valores limite de 0 y 16.

DESARROLLO:

- Creación del proyecto:


o Para crear un nuevo proyecto ir al menú File>New Project Wizard

o A continuación aparecerá el asistente para la creación de proyectos, deberemos


asignar la dirección donde será guardado el proyecto (de preferencia crear una
carpeta en donde se almacenen los proyectos) así mismo asignaremos un nombre al
proyecto (ejemplo: contador) y el nombre la entidad principal de diseño (ejemplo:
contador).

o En la siguiente ventana del asistente se nos pide seleccionar los


archivos que deseamos asignar al proyecto. Si se tiene un archivo existente
(diagrama a bloque, texto, etc.), se puede agregar al proyecto, sino, continúe sin
agregar nada.
o Posteriormente tendremos que seleccionar el dispositivo que se va a usar para
descargar el firmware (EPC2C8Q208C7).

o Una vez teniendo toda esta información podemos generar el proyecto, dando click en
finish. Se presentara un resumen de las características del proyecto.

- Generación de nuestro código.


o Lo primero que se tiene que hacer antes de comenzar a escribir nuestro código es
realizar nuestro diagrama de flujo. En este caso tenemos que diseñarlo para un contador
ascendente – descendente de 0 a 16, con un indicador que se activa cuando llegue a 16.

En el diagrama a flujo podemos visualizar la lógica que vamos a necesitar para generar
nuestro código correcto. Una vez declaradas las variables que usaremos, accedemos al
primer estado de nuestra máquina, que esta demarcada con rojo, en esta se pregunta por
el valor de CONTA[ ] , la cual se compara con 16, si es menor se suma en 1 a dicho
valor, si esta condición es falsa, es decir, que ya alcanzo el valor de 16, se accede al otro
estado, marcado en azul, donde ahora la comparación es con cero. Si esta condición es
verdadera, se descuenta 1 a CONTA[ ], en caso contrario, es decir, que ya haya
alcanzado el cero, se regresa al primer estado para continuar el ciclo.
o Usamos el lenguaje HDL que es bastante simple y versátil para comenzar a construir
nuestro código. Declaramos nuestra variable conta la cual será flip-flop D “DFF” para
que no haya pérdida de datos.

o Una vez declarando nuestras señales, y las variables que ocuparemos. Asignamos en
“BEGIN”, una señal de reloj y de reset a las variables que tengamos (conta[]).

o También tenemos que tomar en cuenta que en cada de estado de una máquina de
estados, se tiene que refrescar las variables que ocupemos, esto es para evitar una
perdida e información al pasar de un estado a otro.

Procedemos a elaborar el código en base a nuestro diagrama a flujo.


o Accedemos a la opción File>New. En la ventana que se abre seleccionamos
AHDL File

o Posteriormente
siguiente: escribimos nuestro código, que en este caso seria el
SUBDESIGN Contador16
(
CLK : INPUT;
RESETN : INPUT;
CONTA[5..0] : OUTPUT;
SALIDA : OUTPUT;
)

VARIABLE
conta[5..0] :DFF;
estados: machine with states (ST0, ST1);
BEGIN
conta[].(clk,clrn)= (clk,resetN);
estados.(clk,reset)= (clk,!resetN);
CASE estados IS
WHEN ST0=>
IF conta[]<16 THEN
conta[]=conta[]+1;
ELSE
conta[].d=conta[].q;
estados=ST1;
END IF;

WHEN ST1 =>


IF conta[]>0 THEN
conta[]=conta[]-1;
SALIDA=VCC;
ELSE
conta[].d=conta[].q;
estados=ST0;
END IF;

WHEN OTHERS =>


estados=ST0;

END CASE;
END;
- Generación de nuestro diagrama a bloques.
o Después de escribir el código guardamos el archivo con el nombre que
escribimos después de SUBDESIGN en nuestro código (contador16), este nombre
tiene que ser diferente del nombre del proyecto.

o Aun en nuestro código en AHDL, accedemos a la opción


File>Create/Update>Create Symbol Files for current file.

o Posteriormente creamos un nuevo archivo en File>New>Block


Diagram/Schematic File e insertamos el grafico creado dando click derecho con el
mouse seleccionando Insert>Symbol o con el icono
o El diagrama creado se encuentra en la librería del proyecto.
o Después asignamos los pines de entrada y salida estos se encuentran en la
librería C/:Altera/quartus50/libraries/primitives/pin

o Después de asignar los pines podemos cambiar los nombres asignados por
default por los de nuestro diagrama.

o Guardamos el archivo con el mismo nombre del proyecto (contador) y


empezamos el análisis con la herramienta Processing>Start Compilation.

o Al terminar, el diagrama quedara como el de la siguiente figura:

- Asignación de pines
o Para asignar los pines creados en el proyecto a los del FPGA, accedemos al menú
Assignments>Pins .

o Comprobamos que en el menú Category este seleccionada la categoría


pin.
o Seleccionamos en la columna To el valor de la entada o salida
que queremos asignar y enseguida se define el numero de pin.

o Terminando la asignación de pines debemos guardar los archivos creados.

o Posteriormente podemos compilar el proyecto mediante el menú


Processing>Start Compilation.
o Al finalizar el proceso de compilado observaremos que el numero de pin ya es
asignado al diagrama de bloques.

- Simulación.
o La simulación de onda nos permitirá visualizar el comportamiento de
nuestro diseño, para comprobar si tienen un funcionamiento correcto antes de
descargar el firmware.

o Abrimos el menú “New” (File menu), y accedemos a la pestaña “Other files”, en la


cual damos click en “Vector Waveform File”, con lo cual abrimos un documento se
simulación de onda.

o Para colocar nuestras señales accedemos a node finder (View ->


Utility Windows), con esta herramienta podemos visualizar todos las señales que
tengamos en nuestro proyecto. Por default, en Look in aparece el proyecto actual.
Damos click en List para ver todos los nodos que se han encontrado.

o El espacio de trabajo se divide en dos secciones, una donde se encuentran los


nombres de los nodos y su valor, y en la otra una escala de tiempo para ver los
cambios en la simulación.
o De Node Finder, podemos arrastrar las señales que queramos hacia el espacio
de trabajo en donde dice Name. En este caso agregaremos todas

o Tenemos 3 entradas y dos salidas, podemos manipular los valores de nuestras


entradas para ver el comportamiento de las salidas.

o Seleccionamos la señal RESETN y damos click derecho, en el menú


que aparece accedemos a value y seleccionamos forcing high, con lo que RESETN se
pondrá en alto en toda la recta de simulación.

o CLK necesitamos que sea una señal de reloj, por lo que a esta le
hacemos lo mismo que la señal anterior pero en lugar de forcing high, le asignamos
una señal clock, con lo que se abre una ventana donde podemos configura el periodo
y la fase de la señal de reloj, ponemos 100 MHz y damos OK.
o Podemos seleccionar segmentos de la recta para poder dar un valor
alto, bajo, etc. Esto lo podemos hacer para asignar le valor bajo o alto a la señal
Ascendente para cambiar el sentido del conteo en el momento que sea de la
simulación.

o Ya que tengamos nuestra señal de reloj asignada y nuestro reset en


alto podremos guardar nuestro archivo y comenzar la simulación. Esto lo hacemos
con Start Simulation

o Ahora podemos visualizar la simulación completa en el intervalo de


tiempo que deseemos.

- Programación

o Para grabar el firmware en el dispositivo debemos comprobar que los siguientes


parámetros tengan los valores correctos:

o En assignments>Device>Device & Pin options>General>Configuration scheme


seleccionamos Passive Serial. Y en Configuration Device EPC2.

o En assignments>Device>Device & Pin options>Unused Pins>Reserve all


unused pins, seleccionamos As inputs, tri-stated
o Posteriormente podemos programar nuestro firmware con la opción
Tools>Programmer
o Seleccionamos el archivo de configuración (extensión pof).
La siguiente imagen muestra el correcto funcionamiento del programa ya implementado
en el FPGA

También podría gustarte