Hernandez_Hernandez_Practica web de la sesion 12.pptx
Vhdl2
1. Introducción a
VHDL
¿ Qué es VHDL ?
¿ Qué es FPGA ?
¿ Qué significa PLD ?
¿ Qué es un HDL ?
¿ Cuál es la estructura básica de un diseño
Edmundo Barajas Ramírez 1
en VHDL ?
2. Estilos de Descripción
Según el nivel de Abstracción:
Flujo de datos entre registros RTL.
Comportamiento ( Behavior ).
Edmundo Barajas Ramírez 2
Estructural.
3. Modelado de Flujo de Datos RTL
(Register Transfer Level)
Se hace uso de los operadores predefinidos
en las bibliotecas estándar del lenguaje y se
describe por medio de asignaciones como
establece el flujo de datos entre señales y
puertos del circuito.
Edmundo Barajas Ramírez 3
4. Modelado de Comportamiento
En la descripción por comportamiento se
define el funcionamiento del circuito a través
de algoritmos, se usan declaraciones de
mayor nivel de abstracción como IF THEN,
ELSIF, CASE THEN. Las funciones lógicas
a implementar quedan definidas por la
calidad de herramientas de síntesis.
Edmundo Barajas Ramírez 4
5. Modelado Estructural
Se utilizan componentes previamente
compilados y se interconectan entre si. (el
diseñador tiene mas control de la lógica que
se implementa).
La forma del código se asemeja a un “net-list”
de un diagrama esquemático.
Edmundo Barajas Ramírez 5
6. Tipos de Datos
VHDL ofrece los objetos tipo BIT_VECTOR
-- arreglos de bit´s para definir “buses”:
a : OUT BIT_VECTOR(7 DOWNTO 0);
b : IN BIT_VECTOR( 0 TO 3);
Edmundo Barajas Ramírez 6
7. Tipos de Datos
Entre vectores se pueden hacer
asignaciones de uno o varios Bit´s.
Ejemplos: a = 00001111, b =1011
a(5) = b(3);
a = 00101111
……
a(5 DOWTO 3) = b(1 to 3)
a = 00101111
Edmundo Barajas Ramírez 7
9. El Paradigma de VHDL
CONCURRENCIA: Las instrucciones no se
ejecutan en secuencia como en otros
lenguajes convencionales. Las instrucciones
al modelar hardware se ejecutan en
paralelo, a menos que se programe un
proceso, el cual es secuencial.
X= A OR B; Z= A AND X;
Z = A AND X; X= A OR B;
Edmundo Barajas Ramírez 9
12. Objetos en VHDL
Señales: Actuan como conexiones internas
del circuito entre un componente y otro.
Sintaxis: SIGNAL nombre: TIPO [ rango ]
Ejemplos:
SIGNAL X: BIT; -- para el ejemplo anterior.
SIGNAL cuenta: BIT_VECTOR(7 DOWNTO 0);
SIGNAL temp: INTEGER RANGE 0 TO 255;
Edmundo Barajas Ramírez 12
13. Objetos en VHDL
CONSTANTES: Permiten definir valores
fijos para facilitar la lectura del código. Solo
son validas dentro de la unidad de diseño
que se declaran (Entity, Architecture,
Process).
Sintaxis: CONSTANT nombre: TIPO := valor
Ejemplos:
CONSTANT tp: TIME := 16 ns;
CONSTANT v_ini: BIT_VECTOR(1 TO 0):= “10”;
Edmundo Barajas Ramírez 13
14. Objetos en VHDL
Elementos que se manipulan
Variables: Solo se utilizan dentro de
funciones, procedimientos y procesos. Su
valor actualiza inmediatamente despues de
la asignación.
Sintaxis: VARIABLE nombre: TIPO [ rango];
Ejemplo:
VARIABLE cuenta: INTEGER RANGE 0 TO 15;
Edmundo Barajas Ramírez 14
15. Sintaxis de asignación a un
Objeto según su clase
Para una señal o puerto: “ = ”
Para una constante, variable y valor inicial “ := ”
Bit o std_logic: Usar comillas simles ‘x’
Bit_vector o std_logic_vector: Usar comillas
dobles. Ejemplo: Para un vector de 5 bit’s
“10011”
Enteros: Asignación directa, no usar comillas.
Edmundo Barajas Ramírez 15
16. Sintaxis de asignación a un
Objeto según su clase
Edmundo Barajas Ramírez 16
Ejemplos:
signal a: std_logic;
signal b: std_logic_vector(5 downto 0);
signal c: boolean;
variable e: integer range 0 to 255;
BEGIN
a = ‘1’; --usar comillas simples si no es vector
b = “10111”; --usar comillas dobles se es vector
c = TRUE; --puede tomar valores FALSE, TRUE
d := 34; --en enteros no usar comillas
17. Otros Operadores
Operadores de Relación:
=, /=; --para todos los tipos
, =, , =; --para todos los tipos escalar y
--arreglos con rango discreto.
Operadores aritméticos:
+, - (concatenación), *, /, MOD, REM,
Edmundo Barajas Ramírez 17
**(exponente).
18. Especificación
de la Base
Edmundo Barajas Ramírez 18
Para Vectores:
m= H”D3”; --Hexadecimal
n = O”234”; --Octal
p = B”100110”; --Binario
Para Enteros:
q = 16#B3#; --Hexadecimal
r = 10#234#; --Decimal
s = 2#100111#; --Binario
Base por defecto:
t = 187+r; --Decimal, sin comillas
19. Ejemplo: uso de std_logic
a b c f
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
Edmundo Barajas Ramírez 19
Entidad
Prueba
a
b
c
F(a,b,c)
1 1 1 1
20. Ejemplo: uso de std_logic
--Ejemplo combinacional básico
library IEEE
use ieee.std_logic_1164.all
entity tabla is port (
Edmundo Barajas Ramírez 20
a,b,c: in std_logic;
f : out std_logic );
end tabla;
architecture ejemplo of tabla is
begin
f = ‘1’ when (a=‘0’ and b=‘0’ and c=‘0’) else
‘1’ when (a=‘0’ and b=‘1’ and c=‘1’) else
‘1’ when (a=‘1’ and b=‘1’ and c=‘0’) else
‘1’ when (a=‘1’ and b=‘1’ and c=‘1’) else
‘0’ ;
end ejemplo;
21. Ejercicio: uso de std_logic
Una función F depende de cuatro variables
D,C,B,A donde A es la variable menos
significativa. La función F adopta el valor de
uno si el número formado por las cuatro
variables es inferior o igual a ocho y superior
a tres. En caso contrario la función F es cero.
Edmundo Barajas Ramírez 21
22. Ejercicio: uso de std_logic
Solución
Edmundo Barajas Ramírez 22
library ieee
Use ieee.std_logic_1164.all
Entity funcion is port(
D,C,B,A: in std_logic;
f : out std_logic);
End funcion;
Architecture a_func of funcion is
Begin
F = ‘1’ when (D=‘0’ and C=‘0’ and B=‘1’ and A=‘1’) else
‘1’ when (D=‘0’ and C=‘1’ and B=‘0’ and A=‘0’) else
‘1’ when (D=‘0’ and C=‘1’ and B=‘0’ and A=‘1’) else
‘1’ when (D=‘0’ and C=‘1’ and B=‘1’ and A=‘0’) else
‘1’ when (D=‘0’ and C=‘1’ and B=‘1’ and A=‘1’) else
‘1’ when (D=‘1’ and C=‘0’ and B=‘0’ and A=‘0’) else
‘0’ ;
End a_func;
23. Declaraciones concurrentes
asignadas a señales
En este tipo de declaración encontramos las
funciones de salida mediante la ecuación booleana
que describe el comportamiento de cada una de las
compuertas.
Edmundo Barajas Ramírez 23
24. Declaraciones concurrentes
asignadas a señales
Library ieee;
Use ieee.std_logic_1164.all;
Entity logic is port(
a,b,c,d,e,f: in std_logic;
f : out std_logic);
End logic;
Architecture booleana of logic is
Begin
x1 = a xor b;
x2 = (((c and d) or (a xor b)) nand ((e xor f) and
Edmundo Barajas Ramírez 24
(c and d)));
x3 = (e xor f) and (c and d);
End booleana;
25. Uso de std_logic_vector
Library ieee;
Use ieee.std_logic_1164.all;
Entity circuito is port(
a: std_logic_vector (1 downto 0);
c: out std_logic);
Architecture arq_cir of circuito is
Begin
with a select
c = ‘1’ when “00”,
‘0’ when “01”,
‘1’ when “10”,
‘0’ when others
End arq_cir;
Edmundo Barajas Ramírez 25
A(0) A(1) C
0 0 1
0 1 0
1 0 1
1 1 0
26. Tarea
Modelar en VHDL un circuito medio sumador
Modelar en VHDL un circuito sumador total
Modelar en VHDL un circuito de cuatro
entradas llamadas num y una salida que
indique con un ‘1’ si num es primo y un ‘0’
cuando no lo es.
Edmundo Barajas Ramírez 26