Documente Academic
Documente Profesional
Documente Cultură
En el listado anterior, se observan cuatro reas bsicas del programa: descripcin del
proyecto, libreras, definicin de la entidad y descripcin de la arquitectura, las cuales se
explican a continuacin.
rea 1
Descripcin del proyecto: rea donde se guarda la informacin relacionada con un diseo
determinado, la cual es generada automticamente por el sintetizador de programa.
rea 2
Bibliotecas: rea donde se pueden incluir archivos ya sintetizados llamados bibliotecas que permiten
utilizar las distintas funciones y modos de los datos este lenguaje. Algunos ejemplos de estas
libreras son:
rea 3
Definicin de Identidad: Una entidad es la abstraccin de un circuito, ya sea desde un complejo
sistema electrnico hasta una simple compuerta lgica. La entidad nicamente describe la forma
externa del circuito, aqu se enumeran las entradas y salidas del diseo. Una entidad es anloga a un
smbolo esquemtico de los diagramas electrnicos, el cual describe las conexiones del dispositivo
hacia el resto del diseo, el cual describe las conexiones del dispositivo hacia el resto del diseo, en
esta se debe declarar:
Parte 4.
Descripcin de la arquitectura: En esta rea se distinguen dos partes para la inclusin de cdigo
con dos propsitos distintos:
1. La comprendida entre la cabecera y la palabra BEGIN est destinada a la declaracin de
objetos que se precisen para realizar la descripcin del funcionamiento del dispositivo.
2. Entre la palabra BEGIN y END se describe el funcionamiento del diseo.
Ahora bien, para definir la arquitectura de una entidad hay distintos niveles de abstraccin:
Por estilo de flujo de datos (data flow"): En este se describe como la informacin es
transmitida de una seal a otra, de una entrada a una salida, sin el uso de condiciones
secuenciales.
Una constante: es un elemento que puede tomar un nico valor de un tipo dado. A
las constantes se les debe asignar un valor en el momento de la declaracin. Una vez
que se le ha asignado algn valor, ste no puede ser cambiado dentro de la
descripcin del diseo. Los objetos de esta clase tienen un valor inicial que es
asignado de forma previa a la simulacin y que no puede ser modificado durante sta.
Su sintaxis: constant identificador: tipo[:= valor];
Ejemplo: constant x: BIT:=1;
Una Variable: Es similar a las constantes, con la diferencia que su valor puede ser
modificado cuando sea necesario. Las variables en VHDL son similares a cualquier
tipo de variable de un lenguaje de programacin de alto nivel. A las variables tambin
se les puede asignar un valor inicial al momento de ser declaradas. Se
utilizan nicamente en los procesos y subprogramas (funciones y procedimientos).
Las variables generalmente se utilizan como ndices, principalmente en instrucciones
de bucle, o para tomar valores que permitan modelar componentes. Las variables no
representan conexiones o estados de memoria.
Su sintaxis: variable identificador: tipo [:= valor]; La asignacin posterior de valores
a los objetos de este tipo se realiza con el operador
:=.
Ejemplo: variable i :integer :=10;
Una Seal (signal): Es similar a un objeto de la clase variable, con una importante
diferencia: las seales si pueden almacenar o pasar valores lgicos, mientras que una
variable no lo puede hacer. Las seales, por lo tanto, representan elementos de
memoria o conexiones y si pueden ser sintetizadas. Los puertos de una entidad son
implcitamente declarados como seales en el momento de la declaracin, ya que
estos representan conexiones. Tambin pueden ser declaradas en las arquitecturas
antes del BEGIN, lo cual nos permite realizar conexiones entre diferentes estructuras
de programacin.
Su sintaxis: signal identificador: tipo; La asignacin posterior de valores a los objetos
de este tipo se realiza con el operador <=
Ejemplo: signal A: std:logic;
Para desarrollar la estructura de funcionamiento se usan operadores entre las seales de VHDL
que permiten construir diferentes tipos de expresiones mediante los cuales se puede describir la
funcin deseada; un operador nos permite construir diferentes tipos de expresiones mediante los
cuales podemos calcular datos utilizando los diferentes objetos de datos con el tipo de dato que
maneja dicho objeto, existiendo distintos operadores de asignacin con lo que se transfieren
valores de un objeto de datos a otro, y operadores de asociacin que relacionan un objeto de
datos con otro, lo cual no existe en ningn lenguaje de programacin de alto nivel. Dentro los
operadores que se pueden utilizar se encuentran:
a. Operadores Lgicos: Los operadores lgicos AND, OR, NAND, NOR, XOR, XNOR,
y NOT estn definidos para ser usados con los tipos, std_logic, BIT y boolean. Para
utilizar estos operadores, excepto el operador NOT, los operandos deben ser del mismo
tamao. Los operadores lgicos no tiene orden de precedencia por lo que para
expresiones en las que se utilice ms de un operador lgico es necesario indicar mediante
parntesis cual es el orden en que se debe realizar el clculo.
b. Operadores de Comparacin: Estos tipos de operadores se utilizan para ejecutar
pruebas de igualdad, desigualdad, o de magnitud entre dos objetos de datos. Los
operandos que participen en la prueba deben ser del mismo tipo y el resultado de la
operacin es del tipo boolean. Los operadores de igualdad y desigualdad (= y /=) pueden
ser utilizados para todos los tipos de datos predefinidos en el lenguaje Los operadores de
magnitud ("<" menor que, ">" mayor que, "<=" menor o igual que, y ">=" mayor o igual
que) estn definidos para ser utilizados con tipos escalares.
c. Operadores de Adicin: Los operadores + y - son frecuentemente utilizados para
describir sumas y restas adems de signos positivo y negativo. Estn definidos para ser
utilizados con el tipo entero y tambin para el tipo BIT. El operador "&" permite
concatenar cadenas de BITS obteniendo una de mayor tamao. Los tres operadores
tienen la misma precedencia, por lo que para instrucciones en la que se utiliza ms de un
operador de este tipo es recomendable indicar mediante parntesis el orden de las
operaciones. No es posible realizar sumas entre BIT_vectors de diferente tamao, y
tampoco podremos asignar el resultado de una suma o resta entre dos BIT_vectors a un
BIT_vector de diferente longitud. Si se desea obtener el acarreo de la suma del
resultado de una operacin aritmtica entre dos BIT_vectors de la misma longitud, a un
BIT_vector que sea de mayor longitud en un BIT, se permite utilizar el operador de
concatenacin para incrementar el tamao solamente en el primer BIT_vector que
participa en la operacin, con lo cual se indica que deseamos obtener el acarreo de la
suma. (Y <= 0 & X + B; indica que se quiere obtener Y como un vector de un BIT
mas de longitud, X y B son de longitud n-1 que Y, siendo Y de longitud n)
d. Operadores de Multiplicacin: Son los operandos "*" y el "/" que se utilizan para la
multiplicacin y para la divisin respectivamente. Los dos operandos tienen el mismo
orden de precedencia al igual que los operandos MOD y REM. Todos los operandos de
multiplicacin estn definidos para ser utilizados con operandos del mismo tipo, siendo
estos del tipo entero o BIT_vector. El resultado es entonces del mismo tipo que los
operandos por lo que tambin el objeto de datos que recibe el resultado de la operacin
deber ser del mismo tipo que los operandos.
e. Operadores Miscelneos: En esta categora se encuentran los operadores "abs" y "**".
El operador "abs" devuelve el valor absoluto de un operando del tipo entero. El operador
"**" se utiliza para elevar el primer operador a una potencia definida por el segundo
operando, ambos deben ser del tipo entero.
f. Operadores de Asignacin: En VHDL existen dos tipos de operadores de asignacin los
cuales son: "<=" y ":=". El operador ":=" se utiliza para asignar un valor inicial a
constantes, variables y seales en el momento de la declaracin, pero para el resto de la
descripcin nicamente utilizaremos ":=" para ser usado con variables y "<=" para ser
usado con seales.
Sentencias concurrentes
Las instrucciones concurrentes o secuenciales son aquellas que son ejecutadas serialmente, una
despus de otra. La mayora de los lenguajes de programacin, como C o Pascal, utilizan este tipo de
instrucciones. En VHDL las instrucciones secuenciales son implementadas nicamente dentro del
bloque PROCESS.
Un proceso es el bloque bsico concurrente de codificacin secuencial. Contiene una serie de
instrucciones secuenciales que permiten modelar el comportamiento del circuito, sin embargo, el
bloque PROCESS equivale a una sola instruccin concurrente. Un proceso puede ser utilizado
dentro de cualquier arquitectura definiendo para si mismo una regin de declaraciones y otra para la
codificacin secuencial, similar a una arquitectura. La regin de codificacin puede contener
nicamente instrucciones secuenciales, su sintaxis es:
PROCESS ( lista sensible )
-- declaraciones
BEGIN
-- instrucciones secuenciales
END PROCESS
Para desarrollar arquitecturas de manera ms simple usando la estructura process existen un conjunto
de sentencias concurrentes que permiten relacionar las seales involucradas y obtener un resultado,
teniendo entre las ms usadas:
WHEN ELSE: En esta sentencia siempre se modifica el valor de una misma seal, pero las
condiciones pueden ser independientes (actuar sobre distintas seales cada una), dnde la
colocacin de las condiciones indica la preferencia de unas sobre otras, es decir, la condicin
1 tiene preferencia sobre el resto, la condicin 2 sobre todas menos la 1 y as sucesivamente,
y su sintaxis es:
Ejemplo:
-- asignaciones
elsif otra_condicin then
-- asignaciones
Else
-- asignaciones
end if;
end process;
Un ejemplo de esta sentencia seria:
---------------------------------------------- Ejemplo
--------------------------------------------process (control, A, B)
Begin
If control = 00 then
resultado <= A + B;
elsif control = 11 then
resultado <= A B;
Else
resultado <= A;
end if;
end process;
----------------------------------------------
Ejemplo:
PROCESS
BEGIN
WAIT UNTIL rising_edge( clk ) ;
IF reset = '1' THEN
y <= ( OTHERS => '0' )
ELSE
y <= y + 1 ;
END IF ;
END PROCESS ;
Un atributo es una propiedad que es asociada a seales, entidades o arquitecturas. Estos atributos
proporcionan informacin que nos puede ser til dentro de una descripcin en VHDL. Los atributos
se utilizan mediante la comilla simple, por ejemplo el atributo 'event, que probablemente sea el
ms utilizado, nos permite detectar cuando sucede una transicin de estado en una seal, por lo que
es muy til en descripciones de circuitos secuenciales.
Ejemplo:
Process
Begin
IF ( clk 'event and clk = '1' ) THEN
A <= '1' ;
end if;
end process;
Existen ms atributos y a continuacin mencionaremos algunos que son tiles en descripciones para
sntesis, como son:
PASO 2: Abierto seleccione nuevo proyecto del men Getting Started o seleccione:
File > New Project
Este procedimiento abre la caja de dialogo para colocar el nombre que deseamos asignar el proyecto
as como para escoger donde ser guardado; tal como se observa en la figura:
Se recomienda que escoja un nombre asociado con la aplicacin que desea crear para localizarlo mas
fcilmente, en este caso se escogi ejemplo1, como nombre del proyecto y se va alojar en el
directorio asociado con la carpeta .xilinx del disco C.
PASO 3: Luego de asignado el nombre y directorio al proyecto se debe seleccionar correctamente la
Familia, Dispositivo y empaque del dispositivo programable a su proyecto, considerando de que esto
depender del elemento programable que se va utilizar, en nuestro caso la configuracin se realizar
de acuerdo a las caractersticas de los de los mdulos BASYS2 ubicados en los laboratorios de
Lgica Digital de la Universidad de Carabobo, siendo la misma la siguiente:
Se observa que la configuracin del BASYS2 se corresponde con una FPGA de la familia
Spartan3E, especficamente el modelo XCS3S250E, cuyo empaque es del tipo CP132 y con
velocidad -4. El resto de los campos adicionales solicitados en la caja de dialogo pueden dejarse por
defecto, verificando que el lenguaje preferido (preferred language) que se va utilizar es VHDL;
Una vez completada la configuracin hacer clic en next, y se visualizara el resumen del la
configuracin del proyecto creado (Project Sumary)
El panel de Design (1) contiene 2 ventanas, una ventana donde se muestran todos los archivos
fuentes (source) asociados al diseo (hierachy) y una ventana de process donde se observan que
se pueden ejecutar para la fuente (source) seleccionada en el archivo. En el panel de la consola (2)
se visualizan los mensaje de estatus, incluyendo los mensajes de error y precaucin. Finalmente en la
ventana de edicin del HDL (3) se visualiza el cdigo fuente de los archivos seleccionados
(sources) del panel de Desing.
PASO 5: Para adicionar una nueva fuente (source), o crear una source file una vez que se crea
el proyecto se puede visualizar que 2 fuentes se listan entre los archivos del panel Desing, una es
el Project file name (archivo de nombre del proyecto), en nuestro caso ejemplo1 y otra es el
Device Targeted for design (dispositivo programable a ser usado en el proyecto) en nuestro caso
xc3s250e-4cp132.
Para crear una nueva fuente hacer clic en botn derecho del mouse en el archivo de Device
Targeted for design y seleccione una de las tres opciones, ya sea nueva fuente (new source),
adicionar fuente (add source) o adicionar una copia de una fuente (add copy of source), tal como
lo muestra la figura:
Figura N7: Adicin de nuevo Mdulo de VHDL al Proyecto de Xilinx Web Pack
En nuestro caso el file name escogido fue, ejemplo1 y la direccin la misma carpeta donde se
encuentra alojado el proyecto es decir .xilinx del disco C.
Habiendo asignado el nombre de la nueva fuente y su directorio se debe dar clic a next, y la gua de
creacin nos llevar a una tabla donde se pueden definir las entradas y salidas del mdulo que se va
a programar, para el ejemplo que se va a programar, se deben definir A,B,C y D como entradas del
sistemas en este caso del tipo Std_logic ya que son entradas lgicas de un solo BIT y la una
salida X de tipo Std_logic ya que independientemente de la compuerta la salida ser de un solo
BIT.
Utilizada esta tabla de asignacin se presiona Next y se podr observar el archivo resumen de las
entradas y salidas configuradas.
Cuerpo de libreras donde se adicionan todos los mdulos con los cuales va operar nuestro programa.
Para el ejemplo en cuestin se utilizo la tabla de asignaciones para las entradas y salidas ya en la
descripcin de la identidad compuertas ya se adicionaron A, B, C y D como entradas del tipo
Std_logic y X como salida del tipo Std_logic, faltando solo el establecimiento de la sintaxis de
estas entradas para obtener la funcion de X como AND, OR, XOR Y XNOR de las entradas A y B
en funcin de las entradas C y D.
PASO 6: Una vez determinada las lneas de cdigo del mdulo que se esta desarrollando, en nuestro
caso compuertas, introducir las mismas en la cuerpo de programa destinado al comportamiento de la
arquitectura o arquitecture behavior, tal como se muestra en la figura:
Como se observa en la figura anterior en la tarjeta Basys2 hay diferentes elementos para
entrada/salida o almacenamiento de datos. Para la implementacin del programa en curso es de
esperarse que las entradas A, B, C y D se obtengan de los interruptores, y la salida X se muestre en
un LED, por lo tanto el esquema anterior no es suficiente, se requiere conocer a que terminales del
FPGA estn conectados estos elementos; en la figura siguiente se muestra a que terminales del
FPGA estn conectados los dispositivos bsicos de entrada/salida.
En nuestro ejemplo este archivo se denominara pines, para luego de pulsado next visualizar que se
apertura el resumen del archivo generado pines.ucf, pulsar finish.
Al realizar esto se abrir una ventana de edicin de texto donde se deben asociar las entradas y
salidas de nuestro programa A, B, C, D y X a las entradas y salidas fsicas respectivas, siguiendo la
siguiente sintaxis:
net "A" loc = "p11"; donde A es una entrada del programa ya realizado y p11 es un
pin fsico de la fpga en este caso sw0
net "B" loc = "l3"; donde A es una entrada del programa ya realizado y p11 es un
pin fsico de la fpga en este caso sw1
net "C" loc = "k3"; donde A es una entrada del programa ya realizado y p11 es un
pin fsico de la fpga en este caso sw2
net "D" loc = "b4"; donde A es una entrada del programa ya realizado y p11 es un
pin fsico de la fpga en este caso sw3
net "X" loc = "m5"; donde A es una entrada del programa ya realizado y p11 es un
pin fsico de la fpga en este caso led0
Paso 8: Para programar la tarjeta, puede programarse desde dos diferentes puertos, el puerto JTAG o
un puerto mini-USB, el programa puede enviarse directamente al FPGA o a una FLASH, para que el
FPGA cargue el programa automticamente, despus de que es alimentada la tarjeta. En la figura
siguiente se observa como en realidad es slo por el puerto JTAG por el que se tiene acceso al
FPGA y a la Flash. La salida del manejador USB va dirigida hacia el puerto JTAG.
Finalmente probando el diseo, especficamente la opcin C=0 y D=0, que relaciona las seales A y
B a travs de una funcin lgica AND, tenemos:
Para D=0,C=0;A=0;B=0
Para D=0,C=0;A=1;B=0
EJERCICIOS
1. Liste un programa que permita generar un mdulo de VHDL como la figura donde se
comparen dos nmeros de 4 BITS y coloque en la salida C el mayor:
---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity componente1 is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
C : OUT STD_LOGIC_VECTOR (3 downto 0));
end componente1;
---------------------------------------------------------------------------------architecture Behavioral of componente1 is
Begin
process (A,B)
Begin
if A>B then
C <= A;
Else
C <= B;
end if;
end process;
end Behavioral;
2. Liste un programa que permita generar un mdulo de VHDL como la figura donde se
sumen las magnitudes de dos nmeros de 4 BITS Ay B de entrada
---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
entity componente1 is
Port ( A : in STD_LOGIC_VECTOR (4 downto 0);
B : in STD_LOGIC_VECTOR (4 downto 0);
C : OUT STD_LOGIC_VECTOR (4 downto 0));
end componente1;
---------------------------------------------------------------------------------architecture Behavioral of componente1 is
Begin
C <= A + B;
end Behavioral;