Sie sind auf Seite 1von 27

Curso Diseo digital con VHDL

INFORMACIN INTRODUCTORIA AL
LENGUAJE

P A R T E S B S I C A S D E U N P R O G R A M A
S I N T A X I S ( A S I G N A C I N ( < = ) , I F , E L S I F ,
WHEN-CASE,
H O L A M U N D O E N V H D L
M A P E O
S I M U L A C I N E N A C T I V E - H D L
I M P L E M E N T A C I N E N F P G A P O R M E D I O D E L
SOFTWARE ISE
Objetivos de primer sesin.

Entender sintaxis bsica de VHDL.


Conocer las partes de un programa.
Hacer su primer programa.
Conocer sobre seales y entender el uso del mapeo.
Terminar prctica 1
Conocer software ISE y saber cmo se implementarn los
cdigos en su FPGA.
Conocer su FPGA
Poder explicar el funcionamiento de un programa y
detectar errores.
Tarea 1: Elegir la palabra de 12 caracteres para la prctica
2 y hacer el anlisis de las ecuaciones booleanas.
Qu se pretende?
Partes bsicas de un programa en VHDL.
Partes bsicas de un programa.

Libreras.
Contiene una lista de libreras a usar en el programa y
los paquetes de dichas libreras.
Sintaxis:
LIBRARY librera_a_utilizar;
USE nombre_de_librera_a_utilizar . nombre_del_paquete .partes_del_paquete;

Ejemplo:
library ieee;
use ieee.std_logic_1164.all; Tres
USE IEEE.STD_LOGIC_ARITH.ALL; paquetes
Use ieee.std_logic_unsigned.all; ms usados

Cada librera tiene tipos de datos y funciones exclusivas, para evitar complicaciones
pueden poner las 3 siempre pero posteriormente se explicar cundo usar cada una.
Partes bsicas de un programa.

Entidad o Entity.
Es la parte en la que definimos cuntas entradas y
salidas tendr y de qu tipo sern esas entradas o
salidas.
Ejemplo:
Entity Nombre_que_decidamos is
Port( Entrada_A : in std_logic;
Entrada_b : in std_logic; Tipo de
Salida_C : out std_logic entrada o
Salida_D: out std_logic); salida elegida.
End Nombre_que_decidamos ;
Los identificadores en este color pueden ser cualquiera que elijamos, que no empiece con un
nmero ni con dos guiones seguidos. No deben incluir smbolos (&%!$) ni . Ni sea una palabra
reservada.
Arquitectura o Architecture.
Aqu se escribe el comportamiento de la(s) entrada(s) dentro del
programa, para ser capaz de dar un valor (valores) a la(s) salida(s).

Ejemplo:
Architecture Tipo_de_arquitectura of Nombre_que_decidamos is
Begin
Salida_C <= Entrada_A and Entrada_b ;
Salida_D <= Entrada_A xor Entrada_b ;

End Tipo_de_arquitectura ;
Ejemplo de programa en VHDL.
Library IEEE;
Use ieee.std_logic_1164.all
Sintaxis bsica en VHDL.

El equivalente al signo igual (=) de lenguaje C es:


<= usado en operaciones lgicas o aritmticas
Para condicionar la igualdad en un IF s se usa el signo
=
Ejemplos del uso del signo igual:
Y <= (A nand B); If (a = 1)
S<=not (A or B ) ;
S_2 <= A nor B; If (b= 1010)
Contador<= Cuenta +1; If ( clkevent and clk=1 )
A<= 0; If(c=24999999)
B<=1100;
Para dar valor a constantes, variables, seales y expresiones booleanas, se usa
:= (dos puntos y signo de igual)
Se usa comilla simple() para establecer valores de bits y comillas () para vectores de bits,
Operadores segn el paquete.

Use ieee.std_logic_1164.all;
And, or, not, nor, xor, nand
Tipos de entradas y salidas:
Std_logic, std_logic_vector, bit, buffer.
Use ieee.std_logic_arith.all;

+ (suma), - (resta), * (multiplicacin), / (divisin)


Std_logic;
Este tipo de entrada o de salida funciona como un bit nico, el cual
puede tomar valor de cero o de uno.
Se puede ver como un push button, un switch nico, una seal de
reloj, etc. El sentido de (# to #) o (# downto #)
cambia nicamente la interpretacin
Std_logic_vector (0 to 6); del vector, as como cul es el MSB
Std_logic_vector (17 downto 0);
Este tipo de entrada o de salida pudiera ser la analoga de los arreglos
unidimensionales en lenguaje C. Cada posicin de ese vector de bits
tiene un valor de cero o de uno (0 1). A cada posicin de ese vector de
bits le compete una asignacin de pin.
Para acceder al valor directamente de un vector de
bits se escribe el nombre del vector seguido de
parntesis y el nmero que enumera la posicin del
bit requerido.
Ejemplo:
(dentro de architecture)
S(0)<=Entrada_A nor Entrada_B;
S(3)<=Entrada_A xor Entrada_B;
IF

Despus
veremos
procesos
Ejemplo para el primer caso de IF-ELSIF

if (X = 5) and (Y = 9) then
Z <= A;
elsif (X >= 5) then
Z <= B;
else
Z <= C;
end if;

Como se mencionaba en la diapositiva anterior, los IF van dentro de


procesos, los cuales van dentro de la arquitectura y se explicarn ms
adelante
Nota:

El uso de ELSIF y de ELSE son opcionales.


Ejemplo:
process (EN, D)
begin
if (EN = '1') then
Q <= D;
end if;
end process;
Adems

En vez poner una condicin, podemos escribir un


valor/expresin booleano(a).
Ejemplo:
process ( Tiempo_en_que_suene, Hora_actual )
variable Comparacin: boolean;
Begin
Comparacin := (Tiempo_en_que_suene = Hora_actual);
if Comparacin then
Sonar_alarma <= '1';
else
Sonar_alarma <= '0';
Lo importante
end if;
de este
end process; ejemplo.
IF anidados

Cuando se tiene ms de una condicin a cumplir despus de una


sentencia(accin).
Ejemplo:

process(CLK, RESET)
begin La presencia de ELSIF y/o de ELSE
if RESET = '1' then No ameritan un
COUNT <= 0; end if;
elsif CLK'event and CLK='1' then En otras palabras, por cada IF
if (COUNT >= 9) then Va un
COUNT <= 0; end if;
Else
COUNT <= COUNT + 1;
end if;
end if;
end process;
Case Is When

La variable
que se va a
evaluar

Las sequential statements/declaraciones


secuenciales son las acciones que se
realizarn cuando el selector est en esa
posicin

Choice se refiere a una seleccin que hace la variable a evaluar, visto


de otro modo, es el valor en que debe estar la variable que se va a
evaluar .
Si slo hubiera dos situaciones a evaluar, (1 y 0) en el cuadro de arriba en vez de la palabra
choice, se usara 0 y 1 respectivamente. Si es un vector de bits, se pondra 000 en cada when
hasta el 111
Se ver mejor en los siguientes ejemplos, cualquier
duda hasta aqu, podemos regresar sin problema.
Reglas

Todas las posibilidades deben incluirse en el listado de


when; si se incluye la palabra others, sta dicta que
todas las posibles posiciones del selector no escritas
antes sern motivo de la misma secuencia de acciones.
Se pudieron haber dictado ms
acciones adems de la accin de
case SEL is asignarle un valor a Z. Se pudo haber
asigndole a los 7 segmentos de un
when "01" => Z <= A; display respectivamente si van
when "10" => Z <= B; prendidos o no a partir de la posicin
del selector.
when others => Z <= 'X';
Ejemplo aislado:
end case; When 0000 => a<= 1111110;
Bandera_Z<=1;
if(d= 0)
Otra_cosa<=100;
end if;
Reglas, rangos de valor en case

Podemos tambin especificar un rango o rangos de


valores para los cuales se realizarn las mismas
acciones.
Ejemplo:
case INT_A is
Los rangos de valores no
when 0 => Z <= A; se deben encimar, para
when 1 to 3 => Z <= B; cada posicin del selector
una secuencia de
when 4|6|8 => Z <= C; acciones a realizar, no
dos distintas.
when others => Z <= 'X'; No se puede usar rangos
end case; para vectores de bits.
Ejemplo de encimamiento (overlap):

case INT_A is
when 0 => Z <= A;
when 1 to 3 => Z <= B;
when 2|6|8 => Z <= C; -- illegal
when others => Z <= 'X';
end case;
No se puede poner rangos con vectores de bits.

case VEC is
when "000" to "010" => Z <= A; -- illegal
when "111" => Z <= B;
when others => Z <= 'X';
end case;
Seales.
Se pueden entender como variables auxiliares para
tener un contador o un acumulador, as como para
unir dos terminales en un Mapeo
Mapeo
Se explicar junto al grupo la sintaxis y las uniones con
seales, si las hay.
Realizar Prctica 1.

Das könnte Ihnen auch gefallen