Vous êtes sur la page 1sur 16

1

NUMEROS PRIMOS A UNA FRECUENCIA MANEJABLE


CEDEO GUERRERO MARIA FERNANDA, ROBLES GALLO NOE, POZADA
MORALES HUGO ISMAEL
mariferguerrerol@hotmail.com, ismael.150@hotmail.com, n.roblesgallo@ugto.mx,
Electronica Digital II, Universidad de Guanajuato, DICIS.



RESUMEN

El trabajo final es un secuenciador de nmeros primos del 1 al 9999 los cuales
son mostrados en un display, declarados a diferentes frecuencias comenzando con 4 Hz
disminuyendo a 0 Hz manejndolos con switchs, todo esto codificado en vhdl para
poder exponer el proyecto en una tarjeta programable (FPGA).



INTRODUCCION

VHDL es el acrnimo que representa la combinacin de VHSIC y HDL, donde
VHSIC es el acrnimo de Very High Speed Integrated Circuit y HDL es a su vez el
acrnimo de Hardware Description Language.

Es un lenguaje definido por el IEEE (Institute of Electrical and Electronics Engineers)
(ANSI/IEEE 1076-1993) usado por ingenieros para describir circuitos digitales. Otros
mtodos para disear circuitos son la captura de esquemas (con herramientas CAD) y
los diagramas de bloques, pero stos no son prcticos en diseos complejos. Otros
lenguajes para el mismo propsito son Verilog y ABEL.

Aunque puede ser usado de forma general para describir cualquier circuito se usa
principalmente para programar PLD (Programable Logic Device - Dispositivo Lgico
Programable), FPGA (Field Programmable Gate Array), ASIC y similares.

Formas de describir un circuito

Dentro del VHDL hay varias formas con las que podemos disear el mismo circuito y
es tarea del diseador elegir la ms apropiada.

Funcional: Describimos la forma en que se comporta el circuito. Esta es la forma que
ms se parece a los lenguajes de software ya que la descripcin es secuencial. Estas
sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL. Los
procesos son ejecutados en paralelo entre s, y en paralelo con asignaciones
concurrentes de seales y con las instancias a otros componentes.

Flujo de datos: describe asignaciones concurrentes (en paralelo) de seales.

2

Estructural: se describe el circuito con instancias de componentes. Estas instancias
forman un diseo de jerarqua superior, al conectar los puertos de estas instancias con
las seales internas del circuito, o con puertos del circuito de jerarqua superior.

Mixta: combinacin de todas o algunas de las anteriores.

En VHDL tambin existen formas metdicas para el diseo de mquinas de estados,
filtros digitales, bancos de pruebas etc.

Secuencia de diseo

El flujo de diseo de un sistema podra ser:

Divisin del diseo principal en mdulos separados. La modularidad es uno de los
conceptos principales de todo diseo. Normalmente se diferencia entre dos
metodologas de diseo: top-down y bottom-up. La metodologa top-down consiste en
que un diseo complejo se divide en diseos ms sencillos que se puedan disear (o
describir) ms fcilmente. La metodologa bottom-up consiste en construir un diseo
complejo a partir de mdulos, ya diseados, ms simples. En la prctica, un diseo usa
generalmente ambas metodologas.

Entrada de diseos, pueden usarse diversos mtodos tal como se vio anteriormente.

Simulacin funcional, es decir, comprobaremos que lo escrito en el punto anterior
realmente funciona como queremos, si no lo hace tendremos que modificarlo. En este
tipo de simulacin se comprueba que el cdigo VHDL o Verilog (u otro tipo de
lenguaje HDL) ejecuta correctamente lo que se pretende.

Sntesis. En este paso se adapta el diseo anterior (que sabemos que funciona) a un
hardware en concreto, ya sea una FPGA o un ASIC. Hay sentencias del lenguaje que no
son sintetizables, como por ejemplo divisiones o exponenciaciones con nmeros no
constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables es que
el VHDL es un lenguaje genrico para modelado de sistemas (no slo para diseo de
circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a
circuitos digitales. Durante la sntesis se tiene en cuenta la estructura interna del
dispositivo, y se definen restricciones, como la asignacin de pines. El sintetizador
optimiza las expresiones lgicas con objeto de que ocupen menor rea, o bien son
eliminadas las expresiones lgicas que no son usadas por el circuito.

Simulacin post-sntesis. En este tipo de simulacin se comprueba que el sintetizador ha
realizado correctamente la sntesis del circuito, al transformar el cdigo HDL en
bloques lgicos conectados entre s. Este paso es necesario ya que, a veces, los
sintetizadores producen resultados de sntesis incorrectos, o bien realiza
simplificaciones del circuito al optimizarlo.

Ubicacin y enrutamiento. El proceso de ubicacin consiste en situar los bloques
digitales obtenidos en la sntesis de forma ptima, de forma que aquellos bloques que se
encuentran muy interconectados entre s se siten prximamente. El proceso de
enrutamiento consiste en interconectar adecuadamente los bloques entre s, intentando
3

minimizar retardos de propagacin para maximizar la frecuencia mxima de
funcionamiento del dispositivo.
Anotacin final. Una vez ha sido completado el proceso de ubicacin y enrutamiento, se
extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar
una simulacin temporal (tambin llamada simulacin post-layout). Estos retardos son
anotados en un fichero SDF (Standard Delay Format) que asocia a cada bloque o
interconexin un retardo mnimo/tpico/mximo.

Simulacin temporal. A pesar de la simulacin anterior puede que el diseo no funcione
cuando se programa, una de las causas puede ser por los retardos internos del chip. Con
esta simulacin se puede comprobar, y si hay errores se tiene que volver a uno de los
anteriores pasos.

Programacin en el dispositivo. Se implementa el diseo en el dispositivo final y se
comprueba el resultado.

Procedimiento de diseo

El primer paso del diseo consiste en la construccin del diagrama en bloque del
sistema. En diseos complejos como en software los programas son generalmente
jerrquicos y VHDL ofrece un buen marco de trabajo para definir los mdulos que
integran el sistema y sus interfaces, dejando los detalles para pasos posteriores.

El segundo paso es la elaboracin del cdigo en VHDL para cada mdulo, para sus
interfaces y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se
puede utilizar cualquier editor para esta tarea, aunque el entorno de los programas de
VHDL incluye su propio editor de texto. Despus de que se ha escrito algn cdigo se
hace necesario compilarlo. El compilador de VHDL analiza este cdigo y determina los
errores de sintaxis y chequea la compatibilidad entre mdulos. Crea toda la informacin
necesaria para la simulacin. El prximo paso es la simulacin, la cual le permite
establecer los estmulos a cada mdulo y observar su respuesta. El VHDL da la
posibilidad de crear bancos de prueba que automticamente aplica entradas y compara
las salidas con las respuestas deseadas. La simulacin es un paso dentro del proceso de
verificacin. El propsito de la simulacin es verificar que el circuito trabaja como se
desea, es decir es ms que comparar entradas y salidas. En proyectos complejos se hace
necesario invertir un gran tiempo en generar pruebas que permitan evaluar el circuito en
un amplio rango de operaciones de trabajo. Encontrar errores en este paso del diseo es
mejor que al final, en donde hay que repetir entonces una gran cantidad de pasos del
diseo. Hay dos dimensiones a verificar:

Su comportamiento funcional, en donde se estudia su comportamiento lgico
independiente de consideraciones de tiempo, como las demoras en las compuertas.
Su verificacin en el tiempo, en donde se incluyen las demoras de las compuertas y
otras consideraciones de tiempo, como los tiempos de establecimiento (set-up time) y
los tiempos de mantenimiento (hold time).

Despus de la verificacin se est listo para entrar en la fase final del diseo. La
naturaleza y herramientas en esta fase dependen de la tecnologa, pero hay tres pasos
bsicos. El primero es la sntesis, que convierte la descripcin en VHDL en un conjunto
de componentes que pueden ser realizados en la tecnologa seleccionada. Por ejemplo,
4

con PLD se generan las ecuaciones en suma de productos. En ASIC genera una lista de
compuertas y un netlist que especifica cmo estas compuertas son interconectadas. El
diseador puede ayudar a la herramienta de sntesis especificando requerimientos a la
tecnologa empleada, como el mximo nmero de niveles lgicos o la capacidad de
salida que se requiere. En el siguiente paso de ajuste (fiting) los componentes se ajustan
a la capacidad del dispositivo que se utiliza. Para PLD esto significa que acopla las
ecuaciones obtenidas con los elementos AND OR que dispone el circuito. Para el caso
de ASIC se dibujaran las compuertas y se definira como conectarlas. En el ltimo paso
se realiza la verificacin temporal, ya que a esta altura es que se pueden calcular los
elementos parsitos, como las capacidades de las conexiones. Como en cualquier otro
proceso creativo, puede ser que ocasionalmente se avance dos pasos hacia delante y uno
hacia atrs (o peor).

Estructura de programa

VHDL fue diseado con base a los principios de la programacin estructurada. La idea
es definir la interfaz de un mdulo de hardware mientras deja invisible sus detalles
internos. La entidad (ENTITY) en VHDL es simplemente la declaracin de las entradas
y salidas de un mdulo mientras que la arquitectura (ARCHITECTURE) es la
descripcin detallada de la estructura interna del mdulo o de su comportamiento. En la
siguiente figura se ilustra el concepto anterior. Muchos diseadores conciben la Entity
como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro
(architecture).

Esto forma la base de un sistema de diseo jerrquico, la arquitectura de la entidad de
ms nivel (top level) puede usar otras entidades, dejando invisible los detalles de la
arquitectura de la identidad de menos nivel. En la figura las entidades B, E y F no
utilizan otras entidades. Mientras que la entidad A utiliza todas las dems. A la pareja
entidad-arquitectura se la llama modelo. En un fichero texto VHDL la entidad y la
arquitectura se escriben separadas, por ejemplo a continuacin se muestra un programa
muy simple en VHDL de una compuerta de 2 entradas. Como otros programas, VHDL
ignora los espacios y saltos de lneas.

Los comentarios se escriben con 2 guiones (--) y terminan al final de la lnea. En la
figura siguiente se muestra la estructura de un modelo en VHDL. SINTAXIS PARA LA
DECLARACIN DE LA ENTIDAD VHDL define muchos caracteres especiales
llamados palabras reservadas. Aunque las palabras reservadas no son sensibles a las
maysculas o minsculas, en el ejemplo que sigue las utilizaremos en maysculas y
negrita para identificarlas.

Adems de darle nombre a la entidad el propsito de la declaracin es definir sus
seales (o ports) de interfaz externa en su declaracin de ports. Adems de las palabras
reservadas o claves ENTITY, IS, PORT and END, una ENTITY tiene los siguientes
elementos.

Nombre_entidad; es un identificador seleccionado por el usuario para seleccionar la
entidad.
Nombre de seal; es una lista de uno o ms identificadores separados por una coma y
seleccionados por el usuario para identificar las seales externas de la interfaz.
5

MODO es una de las 4 siguientes palabras reservadas para indicar la direccin de la
seal:


Modo Descripcin
IN En este modo las seales solo entran en la entidad
OUT Las seales salen de la entidad
BUFFER
Este modo se utiliza para las seales que adems de salir de la entidad pueden
usarse como entradas realimentadas
INOUT
Este modo se utiliza para seales bidireccionales. Se emplea en salida con tres
estados. Se puede asignar como sustituto de los tres modos anteriores, pero no
se aconseja pues dificulta la comprensin del programa.


Cuando se omite el modo de una seal en la declaracin de la entidad se sobreentiende
que es de entrada.

Tipo de seal; en VHDL, hay varios tipos de seales predefinidas por el lenguaje,
tales como:


TIPO Caractersticas
BIT En este tipo las seales solo toman los valores de "1" y "0"
Booleana En este tipo las seales solo toman los valores de True y False
Std_logic
En este tipo las seales toman 9 valores, entre ellos tenemos: "1",
"0", "Z" (para el 3er estado), "-" (para los opcionales).
Integer
En este tipo las seales toman valores enteros. Los 1 y los 0 se
escriben sin
Bit_Vector
En este tipo los valores de las seales son una cadena de unos y
ceros. Ejemplo: 1000
Std_Logic_Vector
En este tipo los valores de las seales son una cadena de los nueve
valores permisibles para el tipo std_logic.
Character
Contiene todos los caracteres ISO de 8 bits, donde los primeros 128
son los caracteres ASCII.


Operadores:


Tipo Std_logic
U Uninitialized (Sin inicializar)
X
Forcing Unknown (Forzar valor
desconocido)
0 Forcing 0 (Forzar un cero)
1 Forcing 1 (Forzar un uno)
Z High Impedance (Alta impedancia)
6

W
Weak Unknown (Valor dbil
desconocido)
L Weak 0 (Cero dbil)
H Weak 1 (uno dbil)
-
Dont care (Cualquier valor)

Este tipo es parte del paquete IEEE 1164

Adems el usuario puede definir otros tipos de seales, lo que resulta muy conveniente
en algunos casos, como en el diseo de mquinas de estados. El lenguaje VHDL
concede mxima importancia a los tipos de seales, no se admite realizar una asignacin
mezclando tipos diferentes. Un PORT de una entidad y sus modos y tipos pueden ser
vistos por otros mdulos que la utilicen. La operacin interna de la entidad est definida
en la architecture.

Las declaraciones y definiciones que preceden al BEGIN, pueden estar presentes todas,
algunas o ninguna. Esto depende del tipo de diseo que se est realizando. No obstante
la declaracin de seales se utiliza mucho, pues contribuye entre otras cosas a la
claridad del diseo.

Nombre_entidad es el nombre de su entidad. Nombre_arquitectura es el nombre dado
por el usuario a la arquitectura. Las seales externas de la arquitectura son las
declaradas en el port de la entidad, no obstante una arquitectura puede contener seales
y otras declaraciones que solo existen localmente en esa arquitectura. Declaraciones
comunes a varias entidades pueden ser puestas en un paquete separado utilizado por
todas las entidades. Las declaraciones en la arquitectura pueden aparecer en diferente
orden, pero lo ms usual es comenzar por la declaracin de las seales. Signal signal-
name : signal-type Variables en VHDL son similares a las seales excepto que ellas no
tienen significado fsico en el circuito. En el ejemplo anterior no se puso declaracin de
variables, ellas son usadas en funciones, procedimientos y procesos. Todas las seales,
variables y constantes en VHDL tienen asociadas un tipo, este especifica el conjunto de
valores que el objeto puede tomar. Tambin hay un conjunto de operadores tales como
add, and etc, asociados con un tipo dado.

Operadores en VHDL

En VHDL existen diferentes operadores entre los que tenemos:
Operadores Definidos en VHDL para los tipos: Lgicos AND, OR, XOR, NOT,
NAND, NOR, XNOR Bit y Booleanos De relacin =, /=, <, >, >=, <= Integer, Bit y
Bit_Vector Concatenacin & Bit, Bit_Vector y para las cadenas Aritmticos +, -, *, /,
Mod, Rem, Abs, ** Integer* Mod: Modulo de la divisin. Rem: Resto de la divisin
Abs: valor absoluto.

Sintaxis para el trabajo con vectores. Los vectores se describen como: a(3), a(2), a(1),
a(0), siempre comenzando por 0.Cuando un vector se declara en orden descendente
utilizando la palabra clave DOWNTO por ejemplo (3 DOWNTO 0), debemos
interpretar que el MSB es a(3) y el LSB es a(0). Si se declara (0 to 3) , entonces el LSB
es a(3) y el MSB es a(0).
Bibliotecas
7


Una biblioteca en VHDL es un lugar en donde se guarda la informacin relacionada con
un diseo determinado. Al comienzo de cada diseo el compilador crea
automticamente una biblioteca llamada WORK con este objetivo. Adems de esta
biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto
de definiciones que pueden utilizarse en cualquier diseo. Un ejemplo de biblioteca
general es la llamada Library IEEE, que contiene definiciones estndar para VHDL.
Para utilizar una biblioteca general es necesario escribir su nombre al inicio del
programa, por eso es muy comn que en la primera lnea de un diseo en VHDL
aparezca escrito "Library IEEE", de sta forma dicha biblioteca se hace visible para el
diseo.

Paquetes

En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en
los diferentes diseos que invoquen su utilizacin. Un paquete muy utilizado es el
paquete estndar IEEE_STD_LOGIC_1164.ALL; La utilizacin de un paquete en un
diseo se realiza invocando su empleo mediante la clusula USE y el nombre del
paquete. Por ejemplo USE IEEE_STD_LOGIC_1164.ALL;

La terminacin ALL, permite utilizar todas las definiciones y objetos que contiene
dicho paquete. Adems del estndar, existen otros paquetes de utilizacin general y
tambin los diseadores que trabajan con VHDL pueden definir sus propios paquetes, lo
que les permite reutilizar diseos realizados anteriormente como parte de nuevos
diseos.

METODO EXPERIMENTAL

El proyecto fue elaborar un secuenciador de nmeros primos del 1 al 9999, el
cual cont con diferentes frecuencias manejables con switch mostrando la secuencia en
displays de 7 segmentos.

Primero se obtuvieron todos los nmeros primos con el programa MATLAB, utilizando
el comando p=prime(9999) as sucesivamente tras obtenerlos estos mismos se
convirtieron a cdigo binario en el mismo programa. Teniendo estos nmeros se realiz
el cdigo de nmero primos a base de mquinas de estado. Consecutivamente se realiz
el cdigo de binario a bcd y de bcd a 7 segmentos, tambin se procedi a elaborar el
cdigo de frecuencia el cual al manejar los switch se cambiara de frecuencia con
determinada combinacin ya establecida. (Cuando 000= 4 Hz, 001=2 Hz, 010=1Hz,
011= 0.5 Hz, 100=0.25 Hz, 101=0.125 Hz, 110=0.0625Hz y 111=0Hz)










8







RESULTADOS

El proyecto finalmente qued as ya programado en quartus.



Y ya en la tarjeta FPGA se muestra asi:




El primer programa elaborado para la codificacin de bcd a 7 segementos fue:

library ieee;
9

use ieee.std_logic_1164.all;

entity bcd_7segmentos is port(
entrada: in std_logic_vector(15 downto 0);
disp1: out std_logic_vector(6 downto 0);
disp2: out std_logic_vector(6 downto 0);
disp3: out std_logic_vector(6 downto 0);
disp4: out std_logic_vector(6 downto 0));
end bcd_7segmentos;

architecture conversion of bcd_7segmentos is
begin
process(entrada)
begin
case entrada(3 downto 0) is
when "0000" => disp1 <="0000001";
when "0001" => disp1 <="1001111";
when "0010" => disp1 <="0010010";
when "0011" => disp1 <="0000110";
when "0100" => disp1 <="1001100";
when "0101" => disp1 <="0100100";
when "0110" => disp1 <="0100000";
when "0111" => disp1 <="0001111";
when "1000" => disp1 <="0000000";
when "1001" => disp1 <="0001100";
when others => disp1 <="1111111";
end case;
case entrada(7 downto 4) is
when "0000" => disp2 <="0000001";
when "0001" => disp2 <="1001111";
when "0010" => disp2 <="0010010";
when "0011" => disp2 <="0000110";
when "0100" => disp2 <="1001100";
when "0101" => disp2 <="0100100";
when "0110" => disp2 <="0100000";
when "0111" => disp2 <="0001111";
when "1000" => disp2 <="0000000";
when "1001" => disp2 <="0001100";
when others => disp2 <="1111111";
end case;
case entrada(11 downto 8) is
when "0000" => disp3 <="0000001";
when "0001" => disp3 <="1001111";
when "0010" => disp3 <="0010010";
when "0011" => disp3 <="0000110";
when "0100" => disp3 <="1001100";
when "0101" => disp3 <="0100100";
when "0110" => disp3 <="0100000";
when "0111" => disp3 <="0001111";
when "1000" => disp3 <="0000000";
10

when "1001" => disp3 <="0001100";
when others => disp3 <="1111111";
end case;
case entrada(15 downto 12) is
when "0000" => disp4 <="0000001";
when "0001" => disp4 <="1001111";
when "0010" => disp4 <="0010010";
when "0011" => disp4 <="0000110";
when "0100" => disp4 <="1001100";
when "0101" => disp4 <="0100100";
when "0110" => disp4 <="0100000";
when "0111" => disp4 <="0001111";
when "1000" => disp4 <="0000000";
when "1001" => disp4 <="0001100";
when others => disp4 <="1111111";
end case;
end process;
end conversion;

El segundo programa elaborado para la codificacin binario a bcd fue:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity bin_bcd is
port(
f: in std_logic_vector(15 downto 0);
reg :out std_logic_vector(15 downto 0)
--reg1: out std_logic_vector(3 downto 0);
--reg2: out std_logic_vector(3 downto 0);
--reg3: out std_logic_vector(3 downto 0);
--reg4: out std_logic_vector(3 downto 0)
);
end bin_bcd;

architecture conversion of bin_bcd is
signal reg1,reg2,reg3,reg4: std_logic_vector(3 downto 0);
begin
process(f)
variable z: std_logic_vector(29 downto 0);
begin
for i in 0 to 29 loop
z(i):='0';
end loop ;
z(18 downto 3):=f;

for i in 0 to 10 loop
if z(17 downto 14)>4 then
11

z(17 downto 14):=(z(17 downto 14) + 3);
end if;

if z(21 downto 18)>4 then
z(21 downto 18):=(z(21 downto 18) + 3);
end if;

if z(25 downto 22)>4 then
z(25 downto 22):=(z(25 downto 22) + 3);
end if;

if z(29 downto 26)>4 then
z(29 downto 26):=(z(29 downto 26) + 3);
end if;

z(29 downto 1):=z(28 downto 0);

end loop;

reg1 <= z(17 downto 14);
reg2 <= z(21 downto 18);
reg3 <= z(25 downto 22);
reg4 <= z(29 downto 26);
reg <= reg4&reg3&reg2&reg1;
end process;
end conversion;

El tercer programa elaborado para la frecuencia fue:

library IEEE;

use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity frecuencia is
port(
entrada: in std_logic_vector(2 downto 0);
reset: in std_logic;
clk_entrada: in std_logic;
clk_salida: out std_logic
);
end frecuencia;

architecture divisor of frecuencia is
signal Qn, Qp, Qc: std_logic_vector(31 downto 0);


begin
process(entrada)
12

begin
case entrada is
when "000" => Qc <= "00000000010111110101111000010000"; --4
when "001" => Qc <= "00000000101111101011110000100000"; --2
when "010" => Qc <= "00000010111110101111000010000000"; --1
when "011" => Qc <= "00000101111101011110000100000000"; --0.5
when "100" => Qc <= "00001011111010111100001000000000"; --0.25
when "101" => Qc <= "00101111101011110000100000000000"; --0.125
when "110" => Qc <= "10111110101111000010000000000000"; --
0.0165
when others=> Qc <= "00000000000000000000000000000000";--0
end case;
end process;

Secuencial: process(reset,clk_entrada)
begin
if(reset='0')then
Qp<=(others=>'0');
elsif(clk_entrada' event and clk_entrada='1')then
Qp<=Qn;
end if;
end process Secuencial;
Combinacional: process(Qp)
begin
if(Qp="00000000000000000000000000000000")then
clk_salida<='1';
Qn<=Qc;
else
clk_salida<='0';
Qn<=Qp-1;
end if;
end process combinacional;
end divisor;

El cuarto programa para el secuenciador de nmeros primos de 3 a 9999 fue:

library IEEE;
use IEEE.std_logic_1164.all;
entity Numeros_primos is
port(
clk_entrada: in std_logic;
--RST,E: in std_logic;
f: buffer std_logic_vector(15 downto 0));
end Numeros_primos;

architecture example of Numeros_primos is

begin
process(clk_entrada) begin
if(clk_entrada'event and clk_entrada='1')then
13

case f is
when"0000000000000000"=>f<="0000000000000010";
when"0000000000000010"=>f<="0000000000000011";
when"0000000000000011"=>f<="0000000000000101";

As sucesivamente por mquinas de estado hasta llegar al nmero 9973 que es el ltimo
nmero primo, y se cerr el programa con

when others =>f<="0000000000000000";
end case;
end if;
end process;
end example;

Y el ultimo cdigo elaborado es pfin el cual adjunta todos los programas en uno:

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity pfin is
port(
clk: in std_logic;
reset: in std_logic;
frec : in std_logic_vector(2 downto 0);
salida1: out std_logic_vector(6 downto 0);
salida2: out std_logic_vector(6 downto 0);
salida3: out std_logic_vector(6 downto 0);
salida4: out std_logic_vector(6 downto 0));
end pfin;

architecture pfin of pfin is
signal reg:std_logic_vector(15 downto 0);
signal clk_salida: std_logic;
signal f: std_logic_vector(15 downto 0);

component frecuencia is
port(
entrada: in std_logic_vector(2 downto 0);
clk_entrada: in std_logic;
reset: in std_logic;
clk_salida: out std_logic);
end component;

component Numeros_primos is
port(
clk_entrada: in std_logic;
f: buffer std_logic_vector(15 downto 0)
);
14

end component;

component bin_bcd is
port(
f: in std_logic_vector(15 downto 0);
reg: out std_logic_vector(15 downto 0));
end component;

component bcd_7segmentos is port(
entrada: in std_logic_vector(15 downto 0);
disp1: out std_logic_vector(6 downto 0);
disp2: out std_logic_vector(6 downto 0);
disp3: out std_logic_vector(6 downto 0);
disp4: out std_logic_vector(6 downto 0));
end component;


--ENLAZANDO CADA COMPONENT CON LA ENTIDAD DEL JERARQUICO

begin
u0:frecuencia port map(frec,clk,reset,clk_salida);
u1:Numeros_primos port map(clk_salida,f);
u2:bin_bcd port map(f,reg);
u3:bcd_7segmentos port map(reg,salida1,salida2,salida3,salida4);
end pfin;



CONCLUSIONES

Mara Fernanda Cedeo Guerrero
En el proyecto se pudo observar como es el lenguaje vhdl, desde como declarar entradas
hasta agregar a un proyecto global las componentes que utiliza, sea agregar varios
cdigos en uno mismo, como se declaran estas componentes, como es la manera de
enlazar los cdigos, ya sea entradas, salidas, el proyecto se dividi en 5 cdigos, uno de
frecuencia en el cual en el cdigo se implement un case, if, la frecuencia sealada se
fue dividiendo en dos hasta llegar a las que se necesitaban convirtiendo en seales que
son de reloj las cuales en ciertas combinaciones binarias eran diferentes estas sirvieron
para manejar el secuenciador a diferente frecuencia, tambin se declar que cuando
estuvieran en otros valores automticamente se mandara a un valor cero, en el binario a
bcd fue difcil ver cmo adaptar los vectores para convertir tanto valor binario ya que
era un valor binario muy alto, en el cdigo de numero primos fue fcil ya que se
implement con pura mquinas de estados, desde 0 que fue un estado inicial hasta 9999
pero realmente llegaba hasta un estado de 9973, aparentemente el programa MATLAB
nos solucion mucho este cdigo ya que de otra manera habra que haber implementado
un algoritmo, pero no se utiliz as, primero se obtuvieron los nmeros primos los
cuales eran bastantes, y consecutivamente se convirtieron a binarios, y ya de ah se
empez a redactar el cdigo, en este apartado se pudo observar como todos los
conocimientos llevan a una solucin, aunque a veces sea largo el camino pero uno se
maneja a la segura porque as en mquinas de estado ya se sabe que saldr el nmero
15

que se necesita sin problemas, el cdigo de bcd a 7 segmentos no fue tan difcil ya que
se tom como base el principal visto en clase y ya de ah a cada display se le asigno sus
valores. En el cdigo final fue un poco ms laborioso ya que eso de enlazar los dems
cdigos no se haba manejado tanto, y haba que declarar entradas en cada componente,
como sus salidas tambin, enlazando por seales el cdigo, ordenando a su vez entradas
y salidas en este cdigo final, declarando seales. El proyecto en general fue fascinante,
se ve su implementacin en la vida real como los display se ajustan para mostrar lo
requerido, asombra ver como es manejable una tarjeta FPGA y como por medio de la
computadora se maneja mediante un lenguaje visto en materia.


No Robles Gallo
Como podemos ver el proyecto fue desarrollado en tiempo preciso con todas las
aplicaciones que se pidieron, se cumpli el objetivo del proyecto, donde se puso a
prueba cada una de los conocimientos de esa materia as como del prerrequisito de dicha
materia, por otro lado vemos como los cdigos deben de ser prisas a la hora de la
implementacin ya que se puede llevar a un error que puede costar mucho, ya se tanto
econmico como tiempo.
La programacin en vhdl es importante para poder hacer una decisin de trabajo, poder
hacer una simulacin que permite dar una aproximacin de como funcionara un circuito
o un cdigo, sin embargo tambin tenemos el software quartus que permiti exhibir el
cdigo de forma ordenada y clara, viendo el resultado de una serie de nmeros primos y
haciendo una pequea manipulacin que permitiera ver un cambio de frecuencia 4Hz
hasta que este llegara a quedar en cero.
Los cdigos desarrollados en cada una de los archivos fueron desarrollados de tal forma
que simulaban un bloque al cual entraban y salan seales donde se aprovechaba de una
generacin de pulsos que permitan ver el trabajo realizado mediante la ayuda de una
tarjeta FPGA.
Lo importante de todo es que queda una experiencia muy padre el poder hacer un
trabajo de esta magnitud donde pones a prueba los conocimientos que has adquirido a lo
largo de estos dos cursos de digital, los cuales fueron de gran ayuda para este proyecto,
se cumpli el objetivo de deseado del proyecto.


Pozada Morales Hugo Ismael
Este tipo de proyecto como lo es el generador de nmeros primos a cierta frecuencia
pone a prueba los conocimientos adquiridos durante el curso pues implementa muchas
herramientas para su realizacin entre ellas el cdigo pues se utilizan varios
componentes con diversas funciones cada uno para poder manipular de cierta manera el
programa.
El uso de la tarjeta FPGA es de mucha ayuda pues nos permite de una manera ms
prctica visualizar los resultados obtenidos al finalizar el proyecto adems de que la
podemos manipular fsicamente al encender o apagar interruptores lo que la hace muy
interactiva




16




REFERENCIAS
[1] VHDL: el arte de programar sistemas digitales, David G. Maxinez, Jessica Alcal.
[2] Electronica Digital y Logica Programable, Dr. Ren de J. Romero Troncoso.
[3] http://eciencia.urjc.es/handle/10115/4045