DDVHDL c1 Prog VHDL 23ad
DDVHDL c1 Prog VHDL 23ad
DDVHDL c1 Prog VHDL 23ad
C1
Programación con VHDL
C1 PROGRAMACIÓN VHDL
.1.0 Antecedentes
1.1 Elementos del lenguaje VHDL
1.2 Declaración de objetos
1.3 Declaraciones concurrentes
1.4 Ejemplos de declaraciones concurrentes
1.5 Funciones y subprogramas
1.6 Programación de FPGA o CPLD en diferentes aplicaciones
2
1.1 Elementos del lenguaje VHDL
3
C1 Introduction
C1 Introduction
VHDL es un lenguaje para describir sistemas electrónicos
digitales.
• Surgió de los circuitos integrados de muy alta velocidad del
gobierno de los Estados Unidos (VHSIC), iniciado en 1980.
VHDL
A lo largo de la guía
• La sintaxis de las características del lenguaje se presenta en
la Forma de Backus-Naur (BNF).
• Las especificaciones de la sintaxis se extraen de la Estándar
IEEE VHDL.
• Se dan ejemplos concretos para mostrar las características
del lenguaje.
• En algunos casos, se omiten algunas alternativas de BNF.
9
C1 Introduction
La descripción estructural se utiliza a nivel de chip, figura 1.4 Figura 1.4 Descomposición estructural
de un diseño a nivel de chip
12
C1 Introduction
15
C1 Introduction
16
C1 Introduction
17
C1 Introduction
18
C1 Introduction
19
C1 Introduction
En la fase de inicialización
• Las señales reciben valores iniciales
• El tiempo de simulación se establece en cero
• Cada programa ejecuta el comportamiento de su módulo.
21
C1 Introduction
En la 2ª fase
• Los módulos que reaccionan a los eventos, que ocurrieron
en la 1ª fase, se debió a que se ejecutó su programa de
comportamiento.
• Estos programas por lo general programan más
transacciones en sus señales de salida.
• Cuando todos los programas de comportamiento
terminaron de ejecutarse, el ciclo de simulación se repite.
• Si no hay más transacciones programadas, la simulación se
ha completado.
22
C1 Introduction
23
C1 Introduction
24
C1 Introduction
26
C1 Introduction
component inverter
port (a : in bit; y : out bit);
end component;
29
C1 Introduction
30
C1 Introduction
32
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
33
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
ELEMENTOS SINTÁCTICOS
Los elementos sintácticos de VHDL son:
• Comentarios
• Símbolos especiales
• Identificadores
• Números
• Caracteres
• Cadenas
• Cadenas de Bits
• Palabras reservadas
34
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> Comentarios
Los comentarios en VHDL comienzan con dos guiones
adyacentes ('--') y se extienden a el fin de la línea.
• No tienen significado de una descripción VHDL
Ejemplo:
-- This is a comment
35
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> Identificadores
Los identificadores en VHDL
• Se utilizan como palabras reservadas y como nombres
definidos para programar.
• Se deben ajustarse a la regla:
identifier ::= letter { [underline ] letter_or_digit}
letra o dígito::= letra | digito
letra::= letra_mayúscula | letra_minúscula
El identificador
• Da nombre a variables, señales, rutinas, ...
• Es un nombre compuesto por letras, números y símbolo de
subrayado “_”.
• No debe contener símbolos especiales
• No debe contener palabras claves del VHDL
• No debe empezar por un número o subrayado.
• No debe acabar con un subrayado
• No debe haber dos subrayados seguidos.
• Las mayúsculas o minúsculas son consideradas iguales.
• Ejemplo
SIGNAL x: STD_LOGIC;
SIGNAL y: STD_LOGIC_VECTOR(7 DOWNTO 0);
x <= 'Z’;
38
y <= "001-";
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> Números
Números
Los literales números pueden expresarse en decimal o en una • Base 10
base entre dos y dieciséis. • Notación científica
• Si el literal incluye un punto, representa un número real • Base hexadecimal 16#82
• Si el literal no tiene punto, representa un número entero. • Base Binaria 2#10000010
40
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
41
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> Caracteres.
Los literales de caracteres se forman encerrando un carácter
ASCII en comillas simples como ´1´, ´3´, ´t´ .
Ejemplo
'A’ '*’ ‘’’ ‘ ‘
x <= '1’;
y <= ‘Z’;
42
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> Cadenas.
Cadenas
Las cadenas de caracteres se forman encerrando los
caracteres en comillas dobles. “ Esto es una cadena: Base 10”
• Para incluir una comilla doble en una cadena, se deben
juntar dos comillas dobles.
• Ejemplo “Mi cadena”
Ejemplos de cadenas:
"A string"
"" -- empty string
"A string in a string:“"A string"". “ -- contains quote marks
43
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Ejemplo
ENTITY Siren IS
PORT ( M: IN BIT;
D: IN BIT;
V: IN BIT;
S: OUT BIT);
END Siren;
46
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
47
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
La sintaxis del VHDL es estricta con respecto a los tipos de Tabla 1.2 Palabras clave agregadas, VHDL’93
datos.
48
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
49
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Ejemplo 1
50
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Ejemplo 2
-- outputs a “1” if the 4-bit input is a prime number, “0” otherwise.
ENTITY Prime IS PORT (
number: IN BIT_VECTOR(3 DOWNTO 0);
yes: OUT BIT);
END Prime;
52
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-> OPERADORES
Un operador en VHDL se caracteriza por:
• Nombre
• Función o cómputo
• Número de operandos
• Tipos de operandos
• Tipo del valor resultado
53
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
54
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
A+B*C = A + (B * C)
not BOOL and (NUM = 4)= (not BOOL) and (NUM = 4)
55
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
56
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operadores Lógicos
Los operadores lógicos AND, OR, NAND, NOR, XOR y NOT
operan:
• Sobre valores de tipo bit o booleano
• Sobre arreglos unidimensionales de estos tipos.
• Para operandos de matriz, la operación se aplica entre los
elementos correspondientes de cada matriz, produciendo
una matriz de la misma longitud que el resultado.
59
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
62
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
63
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operadores de relación
Los operadores relacionales son: =, /=, <, <=, > y >=
• Deben tener ambos operandos del mismo tipo
• Producen resultados booleanos.
64
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
65
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
IEEE VHDL define los operadores de orden (<, <=, > y > =)
para:
• Todos tipos enumerados
• Tipos enteros
• Matrices unidimensionales de enumeración o tipos enteros.
67
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
68
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operadores de suma
Los operadores de adición incluyen
• Operadores aritméticos
• Operadores de concatenación.
71
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
72
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Operadores de suma
73
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Ejemplo
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY AddSub IS
GENERIC(n: NATURAL :=8); -- default number of bits = 8
PORT(A: IN std_logic_vector(n-1 downto 0);
B: IN std_logic_vector(n-1 downto 0);
subtract: IN std_logic;
carry: OUT std_logic;
sum: OUT std_logic_vector(n-1 downto 0));
END AddSub;
74
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
BEGIN
PROCESS(subtract, A, B)
BEGIN
IF (subtract = '0') THEN -- addition add the two
-- operands with one extra bit for carry
result <= ('0' & A)+('0' & B);
sum <= result(n-1 downto 0); -- extract the n-bit result
carry <= result(n); -- extract the carry bit from
--result
75
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
ELSE -- subtraction
result <= ('0' & A)-('0' & B);
sum <= result(n-1 downto 0); -- extract the n-bit result
carry <= result(n); -- extract the borrow bit from
-- result
END IF;
END Behavioral;
76
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
77
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Negación Unaria
78
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operadores de multiplicación
Foundation Express predefine los operadores de
multiplicación (*, /, mod, y rem) para todos los tipos enteros.
Operadores de multiplicación
80
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
81
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Tabla de operadores
83
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
--Operandos
Los operandos especifican los datos que el operador usa para
calcular su valor.
• Un operando devuelve su valor al operador.
84
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
86
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operando Bit-Width
Foundation Express utiliza el ancho de bits del operando más
grande para determinar el ancho de bits necesario para
implementar un operador en un circuito.
87
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
Ejemplo:
type ENOUGH: INTEGER range 0 to 255;
variable WIDE: INTEGER range -1024 to 1023;
signal NARROW: INTEGER range 0 to 7;
88
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
-- Operandos computables
Algunos operadores, como el de división, restringen sus
operandos a ser calculables.
• Un operando calculable es aquel cuyo valor puede ser
determinado por Foundation Express.
• La computabilidad es importante porque las expresiones no
computables pueden requerir puertas lógicas para
determinar su valor.
90
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
91
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
signal S: BIT;
...
function MUX(A, B, C: BIT) return BIT is
begin
if (C = ’1’) then
return(A);
else
return(B);
end if;
end;
92
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
process(S)
variable V0, V1, V2: BIT;
variable V_INT: INTEGER;
subtype MY_ARRAY is BIT_VECTOR(0 to 3);
variable V_ARRAY: MY_ARRAY;
begin
V0 := ’1’; -- Computable (value is ’1’)
V1 := V0; -- Computable (value is ’1’)
93
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
94
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
if (S = ’1’) then
V2:= ’0’; -- Computable (value is ’0’)
else
V2 := ’1’; -- Computable (value is ’1’)
end if;
V0 := V2; -- Noncomputable; V2 depends on S
V1 := S; -- Noncomputable; S is signal
V2 := V1; -- Noncomputable; V1 is no longer
--computable
end process;
95
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
96
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
97
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
ENTITY Sirena IS
PORT (M: IN STD_LOGIC;
98
C1 Programación VHDL 1.1 Elementos del lenguaje VHDL
D: IN STD_LOGIC;
V: IN STD_LOGIC;
S: OUT STD_LOGIC);
END Sirena;
100
C1 Programación VHDL 1.2 Declaración básica de objetos
Objetos en VHDL
Un objeto en VHDL es un elemento del lenguaje que tiene un
nombre en una descripción HVDL con un valor de tipo
especifico, por ejemplo, un valor del tipo bit.
101
C1 Programación VHDL 1.2 Declaración básica de objetos
Ejemplos
signaI vcc: bit:´1‘
signal suma: bit_vector (3 downto 0);
103
C1 Programación VHDL 1.2 Declaración básica de objetos
Si se omite la expresión
• Se le asignará un valor inicial predeterminado.
104
C1 Programación VHDL 1.2 Declaración básica de objetos
Ejemplos
file operaciones: Archivo_Enteros is in "datos.in";
file salidas: Archivo_Enteros is out "datos.out"; 105
C1 Programación VHDL 1.2 Declaración básica de objetos
106
C1 Programación VHDL 1.2 Declaración básica de objetos
107
C1 Programación VHDL 1.2 Declaración básica de objetos
Ejemplos
constant Vcc: real: = 5.0;
constant cinco: integer: = 3 + 2;
constant tiempo: time := 100 ps;
constant valores: bit_vector := "10100011";
Ejemplo
Si la constante se declara en la arquitectura, nada más es
visible en la arquitectura.
• Si se define en la región de declaraciones de un proceso,
sólo es visible para ese proceso.
109
C1 Programación VHDL 1.2 Declaración básica de objetos
BEGIN
PROCESS
BEGIN
WAIT UNTIL clock_25Mhz'EVENT and clock_25Mhz='1’;
IF count < max THEN
count <= count + 1;
ELSE
count <= 0;
END IF;
IF count < half THEN
toggle <= '0’;
ELSE
toggle <= '1’;
END IF;
clk <= toggle;
111
C1 Programación VHDL 1.2 Declaración básica de objetos
END PROCESS;
END Behavior;
112
C1 Programación VHDL 1.2 Declaración básica de objetos
o como
variable identificador: tipo rango:[expresión] ;
EJEMPLO
VARIABLE v1, v2: bit:= ‘1’;
113
C1 Programación VHDL 1.2 Declaración básica de objetos
114
C1 Programación VHDL 1.2 Declaración básica de objetos
La sintaxis es:
alias_declaration::= alias identifier: subtype_indication is name ;
Por ejemplo:
variable instr : bit_vector(31 downto 0);
alias op_code : bit_vector(7 downto 0) is instr(31 downto 24);
116
C1 Programación VHDL 1.2 Declaración básica de objetos
Ejemplos
variable contador: bit_vector (0 to 7);
variable x, y: integer;
119
1.3 Declaraciones Concurrentes
120
C1 Programación VHDL 1.3 Declaraciones concurrentes
concurrent_signal_assignment_statement::=
[label:]conditional_signal_assignment | [label:] selected_signal_assignment
122
C1 Programación VHDL 1.3 Declaraciones concurrentes
B. Asignaciones condicionales
s <= a when c='1' else b;
125
C1 Programación VHDL 1.3 Declaraciones concurrentes
s <= waveform_1;
elsif condition_2 then
s <= waveform_2;
elsif …
else
s <= waveform_n;
wait [ sensitivity_clause ];
end process;
s <= waveform;
129
C1 Programación VHDL 1.3 Declaraciones concurrentes
Es equivalente a:
process
s <= waveform;
wait [ sensitivity_clause ];
end process;
Ejemplo
A una señal se le asigna valores dependiendo de si cumplen
las condiciones que se van evaluando.
131
C1 Programación VHDL 1.3 Declaraciones concurrentes
132
C1 Programación VHDL 1.3 Declaraciones concurrentes
when choice_list_2=>
s <= waveform_2;
…
when choice_list_n=>
s <= waveform_n;
end case;
wait [ sensitivity_clause ];
end process;
135
C1 Programación VHDL 1.3 Declaraciones concurrentes
En resumen
Se le asigna un valor a una señal dependiendo del valor que
tome una expresión:
136
C1 Programación VHDL 1.3 Declaraciones concurrentes
137
C1 Programación VHDL 1.3 Declaraciones concurrentes
138
1.4 Declaraciones Secuenciales
139
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencias secuenciales
Las sentencias secuenciales en VHDL son
• IF
• CASE
• WAIT
• LOOP.
Con estas sentencias se utiliza
• Asignación de variable (:=)
• NEXT – EXIT para el Loop
• NULL
• ASSERT
• Asignación de señal (<=).
140
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sintaxis
name_variable:= expresión;
Ejemplos
var := 112;
a := func(dato, 8);
varint:= func1(dato, 8) + 500 * func2()varint – 2**dato;
141
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencia IF
Selecciona la ejecución de sentencias dependiendo de una o
más condiciones
Sintaxis.
IF condición THEN sentencias1
{ELSEIF condición THEN sentencias2}
[ELSEIF sentencias3]
END IF
Ejemplo
Entity nand2 is
Port(a,b: IN bitx01, c: OUT bitx01);
END nand2; 142
C1 Programación VHDL 1.4 Declaraciones secuenciales
ARCHITECTURE df OF nand2 IS
BEGIN
PROCESSD()
VARIABLE temp:bitx01;
BEGIN
temp:= a andx01 b;
IF (temp = ‘1’) THEN
c <= temp AFTER 6 ns;
ELSEIF (tem = ‘0’) THEN
c <= temp AFTER 5 ns;
ELSE
c<= temp AFTER 10 ns;
END IF;
END PROCESS;
END and2;
143
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencia CASE
CASE selecciona una secuencia de sentencias en función del
valor de una expresión.
Sintaxis
CASE expresión IS
alternativa {alternativa}
END CASE;
alternativa::= WHEN elecciones => sentencias1
sentencias1::= {sentencia_secuencial}
elecciones::= elección{|elección}
elección::= expresión_simple|rango_discreto|nombre simple| otros
144
C1 Programación VHDL 1.4 Declaraciones secuenciales
Ejemplo
ENTITY muxc IS
PORT( i3, i2, i1, i0, x1, x0: IN BIT; z: OUT BIT);
END muxc;
ARCHITECTURE df OFmuxc is
BEGIN
PROCESS
TYPE peso IS RANGE 0 to 3;
VARIEBLE muxval, peso;
BEGIN
muxval:= 0;
IF (x0 = ‘1’) THEN muxval := muxval + 1;
END IF;
145
C1 Programación VHDL 1.4 Declaraciones secuenciales
CASE muxval IS
WHEN 0 =>
z <= i0 AFTER 10 ns;
WHEN 1 =>
z <= i1 AFTER 10 ns;
WHEN 2 =>
z <= i2 AFTER 10 ns;
WHEN 3 =>
z <= i3 AFTER 10 ns;
WAIT ON i3, i2, i1, i0, x1, x0;
END PROCESS
146
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sintaxis
[rotulo:] [esquema_de_iteración] LOOP
sentencias1
END LOOP [rótulo];
esquema_de_iteración::= WHILE condición (FOR especificacion_de_parámetros)
especificacion_de_ parámetros::= identificador IN rango_discreto
147
C1 Programación VHDL 1.4 Declaraciones secuenciales
Ejemplo
ENTITY and_mask IS
PORT(x, y, m: IN bit_vector (7 downto 0); z: OUT bit_vector(7 downto 0));
END and_mask;
ArCHITECTURE df OF and_mask IS
BEGIN
PROCESS
BEGIN
FOR i IN 0 to 7 LOOP
IF(m(i) = ‘0’) THEN
NEXT;
148
C1 Programación VHDL 1.4 Declaraciones secuenciales
ELSE
z(i) <= x(i) NAD y(i);
END IF;
END LOOP;
WAIT ON x, y, m;
END PROCESS;
END and_mask;
149
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencia NULL
La sentencia NULL se utiliza para mostrar explícitamente que
no se requiere ninguna acción.
• Se usa comúnmente en la sentencia CASE para las acciones
por defecto.
Sintaxis
NULL
Ejemplo
ENTITY miniALU IS
PORT(i1, i2, op: IN integer; s: OUT integer);
END miniALU;
150
C1 Programación VHDL 1.4 Declaraciones secuenciales
ARCHITECTURE df OF miniALU IS
BEGIN
PROCESS
VARIABLE result: integer;
BEGIN
CASE op IS
WHEN 0 => result:= i1 + i2;
WHEN 1 => result := i1 - i2;
WHEN 2 => result := i1 + 1;
WHEN 3 => result := i2 + 1;
WHEN 4 => result := i1 - 12;
WHEN 5 => result := i2 - 1;
WHEN 6 => result := i1;
WHEN OTHERS => NULL;
END CASE;
151
C1 Programación VHDL 1.4 Declaraciones secuenciales
s <= result;
WAIT ON i1, i2, op;
END PROCESS
END df;
152
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencia ASSERT
La sentencia ASEERT se utiliza para comprobar una condición
e informar si es falsa.
Sintaxis
ASSERT
Ejemplo
ENTITY tiempo_setup_FF IS
PORT(d, clk: IN BIT; q: OUT BIT);
END tiempo_setup_FF;
Architecture df OF tiempo_setup_FF IS
BEGIN 153
C1 Programación VHDL 1.4 Declaraciones secuenciales
PROCESS
VARIABLE ultimo_cambio:TIME:= 0ns;
VARIABLE ultimo_valor: BIT := ‘0’;
VARIABLE ultimo_valor_clk:= ‘0’;
BEGIN
IF (ultimo_valor /= d) THEN
ultimo_cambio:= NOW;
ultimo_valor:= d;
END IF;
IF (ultimo_valor_clk /= clk) THEN
ultimo_valor_clk:= NOW;
IF (clk=‘1’) THEN
ASSERT (NOW – ultimo_cambio >= 20ns)
154
C1 Programación VHDL 1.4 Declaraciones secuenciales
155
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sintaxis
señal <= [TRANSPORT] forma_de_onda;
forma_de_onda::= elemento{ ,elemento}
elemento::= expresión_valor [AFTER expresión_tiempo] | NULL
[AFTER expresión_tiempo]
EJEMPLO
ENTITY línea_de_retardo IS
PORT (a: IN BIT; b : OUT BIT);
END linea_de_retardo;
156
C1 Programación VHDL 1.4 Declaraciones secuenciales
ARCHITECTURE df OF línea_de_retardo IS
BEGIN
PROCESS
b <= TRANSPORT of AFTER 29 ns;
WAIT ON a;
END PROCESS;
END df;
157
C1 Programación VHDL 1.4 Declaraciones secuenciales
Sentencia WAIT
Esta sentencia suspende y activa los procesos para permitir la
sincronización del intercambio de información en el dominio
concurrente.
Sintaxis
WAIT[clausula_sensibilización][clausula_condición][clausula_temporización];
clausula_sensibilización::= ON lista_sensibilización
lista_sensibilización::= señal{ , señal}
clausula_condición::)= UNTIL condición
clausula_temporización::= FOR expresión_tiempo
158
C1 Programación VHDL 1.4 Declaraciones secuenciales
Ejemplo
ENTITY unidad IS
PORT(e1, e2, cap: IN BIT; s: OUT BIT);
END unidad;
160
C1 Programación VHDL 1.4 Declaraciones secuenciales
ARCHITECTURA df OF unidad IS
BEGIN
PROCESS
BEGIN
WAIT ON e1, e2 UNTIL cap =‘1’ FOR 70 ns;
s <= e1 NAD e2;
END PROCESS
END df;
161
C1 Programación VHDL 1.4 Declaraciones secuenciales
162
C1 Programación VHDL 1.4 Declaraciones secuenciales
Máquina de Moore
164
C1 Programación VHDL 1.4 Declaraciones secuenciales
165
C1 Programación VHDL 1.4 Declaraciones secuenciales
166
C1 Programación VHDL 1.4 Declaraciones secuenciales
167
C1 Programación VHDL 1.4 Declaraciones secuenciales
Máquina de Mealy
168
C1 Programación VHDL 1.4 Declaraciones secuenciales
169
C1 Programación VHDL 1.4 Declaraciones secuenciales
170
C1 Programación VHDL 1.4 Declaraciones secuenciales
171
1.5 Funciones y subprogramas
172
C1 Programación VHDL 1.5 Funciones y subprogramas
-- Sintaxis de un Procedimiento
PRECEDURE nombre (parámetros) IS
declaraciones
BEGIN
sentencias
END nombre;
173
C1 Programación VHDL 1.5 Funciones y subprogramas
174
C1 Programación VHDL 1.5 Funciones y subprogramas
Lista de parámetros
La lista de parámetros
• Es opcional, si no hay parámetros no requiere paréntesis.
• Esta lista es un conjunto de parámetros que se le pasan al
programa
• Se declaran de forma parecida a como se declaran los
puertos en una entidad, es decir, considera:
• El tipo de objeto (señal, variable o constante)
• Nombre del objeto con dos puntos
• Modo del puerto (IN, OUT, INOUT)
• Tipo de objeto
175
C1 Programación VHDL 1.5 Funciones y subprogramas
176
C1 Programación VHDL 1.5 Funciones y subprogramas
En las funciones
• Sólo se admiten objetos de clase constante o señal en Funciones
modo IN. Ya que los parámetros no se modifican en una NO a variables
función. No se recomienda uso de
• No hay variable puesto que la clase constante ya juega el señales
mismo papel. Usar Return
No se recomienda usar en parámetros a las señales
• Se presta a confusión.
• Su uso es posible
177
C1 Programación VHDL 1.5 Funciones y subprogramas
178
C1 Programación VHDL 1.5 Funciones y subprogramas
En procedimientos y funciones
Las declaraciones dentro de estas pueden incluir las mismas
que incluye un PROCESS
• Pues son bloques de ejecución en serie
• No se pueden declarar señales en estas.
• Todo lo que se declara en esta parte sólo es visible en el
cuerpo de la función.
Visibilidad
Por motivos de visibilidad
• Es útil declarar la función antes de especificar su cuerpo.
179
C1 Programación VHDL 1.5 Funciones y subprogramas
Ejemplo de procedimiento
El procedimiento calcula los valores máximo y mínimo de los
números contenidos en una matriz cuyo rango ha sido
definido en algún sitio como tipo matriz.
180
C1 Programación VHDL 1.5 Funciones y subprogramas
Del ejemplo
• Se muestra el encabezado completo.
• Se utiliza la variable de entrada “conjunto” y no la modifica
dado que es entrada.
• Devuelve los resultados min y max
Se utiliza un procedimiento
• A la cual se le pasen dos parámetros que se puedan
modificar.
181
C1 Programación VHDL 1.5 Funciones y subprogramas
PACKAGE my_package IS
PROCEDURE sort_data (SIGNAL in1, in2: IN INTEGER;
SIGNAL out1, out2: OUT INTEGER);
END my_package;
183
C1 Programación VHDL 1.5 Funciones y subprogramas
184
C1 Programación VHDL 1.5 Funciones y subprogramas
-- Ejemplo de procedure …
ARCHITECTURE sorter OF sorter IS
BEGIN
sort_data (a, b, x, y);
END sorter;
185
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
1.5.2 Subprogramas
Para hacer una descripción compleja de un circuito
• Es necesario organizar grandes cantidades de información
para su diseño.
188
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
Subprogramas
En VHDL se puede estructurar la información con
subprogramas.
Sintaxis de un subprograma
PROCEDURE identificador [parte_formal]/ FUNCTION designador
[parte_formal] RETURN ipo
designador::= identificador/ operador
operador::= literal_cadena
parte_formal::= (especificación_parámetro)( ; especificación
_parametro)
189
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
Llamadas a subprogramas
• Para invocar un subprograma se pone el nombre seguido
190
por los argumentos entre paréntesis.
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
1.5.2 Subprogramas
192
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
1.5.2 Subprogramas
Ejemplo de subprograma
ENTITY fibo IS
PORT (n: IN natural; f: OUT natural)
END fibo:
1.5.2 Subprogramas
END IF
END fibon;
BEGIN
f <= fibon (n); < -- Llamada
END PROCESS;
END recursivo;
195
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
Sobrecarga de operadores
La sobrecarga de funciones permite que puedan existir
funciones con el mismo nombre, y la diferencia es:
• El tipo de datos que devuelven
• El tipo de datos de sus argumentos
196
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
197
C1 Programación VHDL 1.5 Funciones y subprogramas
1.5.2 Subprogramas
En resumen
El elemento sobrecargado tiene más de un significado
• El significado concreto está determinado por el contexto
local del elemento
1.5.2 Subprogramas
1.5.3 Paquetes
1.5.3 Paquetes
Librerías
Se han visto las estructuras de VHDL para describir circuitos.
• Las entidades y arquitecturas vistas se les conoce como
unidades.
200
C1 Programación VHDL 1.5 Funciones y subprogramas
Librería de diseño
Librería de diseño
• Es el resultado de la compilación de uno o más archivos de
diseño, contenían la descripción del hardware. Resultado de compilar
• Esta librería contiene todas las descripciones de todos los archivos de diseño
elementos que componen al circuito.
201
C1 Programación VHDL 1.5 Funciones y subprogramas
203
C1 Programación VHDL 1.5 Funciones y subprogramas
LIBRARY IEEE
• Contiene tipos y funciones que completan los que vienen
incorporados por defecto.
PAQUETES
Es una colección de declaraciones de objetos, tipos,
constantes, subprogramas, etc. Con la posibilidad de
referenciarlos desde muchos puntos fuera del paquete.
• Se utilizan para implementar un servicio o aislar un
grupo de elementos relacionados.
• Se hacen visibles las interfaces de algunas funciones
o procedimientos que están ocultos en las
descripciones de estos elementos.
PAQUETE
Sintaxis de un paquete
PACKAGE identificador IS
parte_declarativa_paquete
END [nombre_paquete];
Parte_declarativa_paquete::= declaración_subprograma
| declaración_tipo | declaración_subtipo
| declaración_constante | declaración_señal
| declaración_use | declaración_componente
207
C1 Programación VHDL 1.5 Funciones y subprogramas
PACKAGE general IS
TYPE bit01xz (‘0’, ‘1’, ‘Xx’, ‘Z’)
FUNCITON and01xz (x, y: bit01xz) return bit01xz;
FUNCITON or01xz (x, y: bit01xz) return bit01xz;
FUNCITON not01xz (x, y: bit01xz) return bit01xz;
FUNCITON nand01xz (x, y: bit01xz) return bit01xz;
FUNCITON nor01xz (x, y: bit01xz) return bit01xz;
FUNCITON xor01xz (x, y: bit01xz) return bit01xz;
END general;
208
C1 Programación VHDL 1.5 Funciones y subprogramas
209
C1 Programación VHDL 1.5 Funciones y subprogramas
Ejemplo
-- FUNCTION AND
PACKAGE BODY general IS
FUNCTION and01xz(x, y: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
IF x = ‘x’ OR y = ‘y’ THEN z <= ‘x;
ELSIF x = ‘1’ and y = ‘1’ THEN z<= ‘1’;
ELSE z<= ‘0’;
END IF:
RETURN z;
END and01xz;
210
C1 Programación VHDL 1.5 Funciones y subprogramas
-- FUNCTION OR
FUNCTION or01xz(x, y: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
IF x = ‘1’ OR y = ‘1’ THEN z<= ‘1;
ELSIF x = ‘0’ and y = ‘0’ THEN z<= ‘0’;
ELSE z<= ‘1’;
END IF:
RETURN z;
END or01xz;
211
C1 Programación VHDL 1.5 Funciones y subprogramas
-- FUNCTION NOT
FUNCTION not01xz(x: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
IF x = ‘x’ THEN z <= ‘x’;
ELSIF x = ‘1’ THEN
z <= ‘0’;
ELSE z <= ‘1’;
END IF:
RETURN z;
END not01xz;
212
C1 Programación VHDL 1.5 Funciones y subprogramas
-- FUNCTION NAND
FUNCTION nan01xz(x, y: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
z <= not01xz(and01xz(x,y));
Return Z;
END nand01xz;
-- FUNCTION NOR
FUNCTION nor01xz(x, y: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
z <= not01xz(or01xz(x,y));
RETURN z;
END nor01xz;
213
C1 Programación VHDL 1.5 Funciones y subprogramas
-- FUNCTION XOR
FUNCTION xor01xz(x, y: bit01xz) return bit01xz IS
VARIABLE z: bit01xz;
BEGIN
z<= or01xz(and01xz(not01xz(x),y),
and01xz(x,not01xz(y)));
Return Z;
END xor01xz;
END general;
214
C1 Programación VHDL 1.5 Funciones y subprogramas
215
C1 Programación VHDL 1.5 Funciones y subprogramas
216
C1 Programación VHDL 1.5 Funciones y subprogramas
USE tipos_mios.ALL
VARIABLE pc: tipos.mios.direcc;
pila:= tipos_mios.inicio +X”FF”;
desp:= tipos_mios.datosint(registro)
218
C1 Programación VHDL 1.5 Funciones y subprogramas
-- Ejemplo Package:
PACKAGE my_package IS
FUNCTION shift_integer (SIGNAL a, b: INTEGER) RETURN INTEGER;
END my_package;
END shift_integer;
END my_package;
221
C1 Programación VHDL 1.6 Programación de FPGA y CPLD
Creación de proyecto
Se abre el entorno de Xilinx Ise Design Suite
Aparece pantalla
• Dar nombre del proyecto, ubicación o ruta y tipo de archivo
222
C1 Programación VHDL 1.6 Programación de FPGA y CPLD
Se presenta un resumen
223
C1 Programación VHDL 1.6 Programación de FPGA y CPLD
224
C1 Programación VHDL 1.6 Programación de FPGA y CPLD
Síntesis
Se hace la síntesis del proyecto
• Estando bien la síntesis, se pone una palomita blanca
dentro de un círculo de color verde en síntesis, ver figura
de arriba.
Archivo ucf
Asignación de pines al código
• Uno revisa la tarjeta y distribución de pines
• Estás se utilizarán vara asociar variables y pines.
225
C1 Programación VHDL 1.6 Programación de FPGA y CPLD
En el se escribe.
1 NET nombre-variable CLK LOC = “Nombre Pin FGPA”;
Ejemplo
1 NET CLK LOC = “E7”;
2 NET reset LOC = “L1”;
3 NET ENABLE_LCD CLK LOC = “N2”;
4 etc
228
FIN
229