Tema 11: Dispositivos Lógicos Programables

Anuncio
Tema 11: Dispositivos
Lógicos Programables
11.1
Implementación física de circuitos lógicos.
11.2
Dispositivos Lógicos Programables.
11.3
Arquitectura de un PLD.
11.4
Arquitectura de una FPGA.
11.5
Introducción al lenguaje VHDL.
Implementación física de circuitos
lógicos
Circuitos Integrados estándar (IC):
„
„
SSI (Simple Scale Integration).
MSI (Medium Scale Integration).
„
„
„
„
Contienen puertas lógicas o bien bloques básicos.
Circuito final resulta de la interconexión de varios IC.
Complejidad media-alta implica el uso de muchos IC.
Problemas de tamaño y fiabilidad del circuito.
Implementación física de circuitos
lógicos
Dispositivos Lógicos Programables (PLD’s y FPGA’s):
„
„
„
„
Contienen numerosas puertas lógicas.
Posibilidad de configurar a medida la conexión entre
puertas.
Un único IC implementa un circuito lógico de mediana
complejidad.
Disminución del tamaño y aumento de la fiabilidad del
circuito.
PLD
FPGA
Dispositivos Lógicos Programables
La funcionalidad es fijada por el usuario después del proceso de
fabricación mediante su programación.
Programación distinta a la de un ordenador o microprocesador
Ordenador μP
PLD’s/FPGA’s
Programar consiste en
cambiar las instrucciones
que le llegan al μP
Programar consiste en cambiar las
conexiones y entradas/salidas de la
lógica del dispositivo
Cambia el SOFTWARE
Cambia el HARDWARE
Arquitectura de un PLD
„
Matriz AND programable
„
„
„
„
N entradas: Señales entrada
puertas AND.
M salidas: Señales de salida
puertas AND.
Interconexión de las entradas
y
sus
complementos
al
conjunto de puertas AND.
Posibilidad de programación
„
„
Inicialmente todo conectado
Configuración de productos
fundiendo “fusibles” de conexión.
.
.
.
Arquitectura de un PLD
„
Matriz OR programable
„
I0
I1
Similar a la matriz AND, pero
con puertas OR
O0
O1
.
.
.
On
Arquitectura de un PLD
„
Diagrama de bloques genérico de un PLD.
„
„
n entradas, m salidas.
Lógica salida programable. Suele incluir biestables.
Clasificación de PLD’s
„
„
Los diferentes tipos de SPLD’s que se pueden clasificar en función
del tipo de matriz y de la lógica de salida.
PROM (Programable Read-Only Memory).
„
„
„
„
Matriz AND fija (conexiones preprogramadas).
Matriz OR programable.
Sin lógica de salida.
Normalmente se consideran como memorias.
Clasificación de PLD’s
„
PLA (Programable Logic Array)
„ Matriz AND programable.
„ Matriz OR programable.
„ Sin lógica de salida.
„ Más versátil que las PROM.
„ Muchos fusibles.
„
„
Menor capacidad de integración.
Mayor retardo.
Clasificación de PLD’s
„
PAL (Programable Logic Array)
„ Matriz AND programable.
„ Matriz OR fija.
„ Lógica
de salida fija. Una
única configuración.
„
GAL (Generic Array Logic)
„ Matriz AND programable.
„ Matriz OR fija.
„ Macrocelda
programable
salida.
„
„
Output
(OLMC)
Logic
de
Macro-Cell
Todas las conexiones
pueden reprogramar.
se
FPGA’s
Arquitectura de una FPGA
„
Los elementos básicos constituyentes de una FPGA como las de Xilinx
son:
„
„
„
Bloques lógicos, cuya estructura y contenido se denomina arquitectura.
Hay muchos tipos de arquitecturas, que varían principalmente en
complejidad (desde una simple puerta hasta módulos más complejos o
estructuras tipo PLD). Suelen incluir biestables para facilitar la
implementación de circuitos secuenciales y bloques de E/S.
Recursos de interconexión, cuya estructura y contenido se denomina
arquitectura de rutado.
Memoria RAM, que se carga durante el RESET para configurar bloques y
conectarlos.
Arquitectura de una FPGA
FPGA de XILINK
Proceso de diseño con FPGA’s
Paso 1: Diseño.
Paso 2: Síntesis para crear la Netlist.
Paso 3: Implementación del diseño (Netlist).
Paso 4: Programación de la FPGA.
Descargar el BIT file en la FPGA.
„
Herramienta de diseño: Xilinx-ISE (Integrated
Software Environment):
„ Project Navigator: donde se realizará el
diseño del circuito, bien mediante un
esquemático o utilizando un lenguaje
específico de diseño VHDL.
„ ModelSim:
donde podrá realizarse la
simulación del funcionamiento del circuito
y de este modo comprobar si funciona
según las especificaciones establecidas.
VHDL
„
VHDL es un lenguaje para la descripción de sistemas
electrónicos digitales (combinacionales y secuenciales).
Estándar
IEEE
„
„
Portabilidad entre herramientas y
plataformas.
Permite representar tanto el comportamiento como la
estructura de los circuitos.
Sintácticamente es similar a los leguajes
de programación de alto nivel (C**).
No es un lenguaje
de programación
Estructura de un fichero VHDL
Librerías:
Almacenan los elementos de diseño: tipo de
datos, operadores, componentes, objetos,
funciones,...
Declaración de entidad:
Es el modelo de interfaz de un circuito con el
exterior mediante unos terminales de entrada y
de salida. Cumple, la función de los símbolos
en las representaciones gráficas.
Fichero.vhdl
Librerías
Declaración de
Entidad
Arquitectura (Cuerpo)
Arquitectura:
Es la especificación del funcionamiento de una
Entidad, se puede considerar el equivalente a
las tablas de verdad o a los cronogramas.
Estructura de un fichero VHDL
library < nombre_biblioteca >;
use < nombre_biblioteca.nombre_paquete.nombre_elemento >;
entity < nombre_entidad > is
port( -- listado de puertos, modo y tipo );
end < nombre_entidad > ;
architecture < nombre_arq. > of < nombre_entidad > is
-- Declaración de señales internas.
-- Declaración de tipos de datos de usuario.
-- Declaración de componentes.
Begin --Cuerpo de la arquitectura.
--Asignaciones concurrentes.
--Conexionado de componentes.
--Procesos.
end < nombre_arq. >;
Librerías
„
Tipos de librerías:
„
„
Librería de trabajo (work): Almacena las unidades que
modelan el diseño actual.
Librerías de recursos: Contienen elementos frecuentes
para facilitar la compartición y utilización del mismo código
en varios diseños.
„
„
„
„
L.normalizadas (STD, IEEE, ...).
L.definidas por el usuario (diseños compilados).
Los elementos de las librerías de recursos se suelen agrupar en
unidades denominadas paquetes (“ packages”).
Dentro de un mismo paquete pueden existir elementos diversos
como: tipos de datos, componentes, funciones, etc.
Librerías
„
„
Para poder utilizar los elementos presentes en un paquete (hacerlos
visibles al diseño) se utilizan las sentencias:
Si se quiere tener acceso a todos los elementos del paquete en
nombre_elemento se pone la palabra reservada all.
Sentencias existentes siempre por
defecto en todos los diseños.
LIBRARY std, work;
USE std.standard.all;
Librerías
„
Librerías de recursos normalizadas
Entidad
„
Su declaración equivale a definir un elemento con sus
terminales externos de conexión.
port_list (“lista de puertos”): debe definir nombre, modo (dirección) y
tipo de cada uno de ellos.
„
„
„
„
in: Entrada dedicada, sólo pueden ser leídos en la arquitectura
out: Salida dedicada, sólo se les puede asignar valor en la arquitectura.
inout: Bidireccional, permite lectura y escritura.
buffer: Salida dedicada, pero puede ser leído en la arquitectura.
Arquitectura
„
Es la segunda unidad de diseño y define la funcionalidad o
comportamiento de una determinada Entidad.
Declaraciones: destinada a la declaración de objetos que se precisen
para realizar la descripción del funcionamiento del dispositivo.
Sentencias: descripción del funcionamiento.
Elementos Básicos
„
Objetos
Contienen valores.
Los objetos pertenecen a una clase y tienen un tipo.
„
Clases de objetos:
Constant. Se les asigna un valor inicial que no puede ser modificado.
Variable. Contiene un valor que puede ser cambiado.
Signal. Contiene una lista de valores que incluye el valor actual y un conjunto de
valores futuros.
File. Modelan ficheros y se utilizan en bancos de pruebas.
„
Señales vs. Variables
Ambas se sintetizan en cables que interconectan componentes o básculas.
Tienen semántica de simulación distinta.
Es recomendable usar señales para la descripción de hardware.
„
Tipos
Se caracteriza por un conjunto de valores que puede tener y un conjunto de
operaciones.
„
VHDL es un lenguaje fuertemente tipado:
Todos los objetos tienen un tipo.
No se puede conectar señales que no son del mismo tipo.
Se pueden crear nuevos tipos.
Tipos de datos
„
Tipos Enumerados
„
„
„
„
„
Boolean: Pueden tomar dos valores: True o False
Bit: Pueden tomar dos valores ‘0’ o ’1’
Std_logic: Definido en el estándar IEEE 1164. Pueden tomar como
valores ‘0’, ‘1’, ‘-’, etc...
Definido por el usuario: Se suelen usar en la descripción de
máquinas de estado.
Tipos numéricos
„
Integer: Tipo predefinido en IEEE 1076.
„
„
Rango (-231 ,231-1) 32 bits en complemento a 2.
Si no se acota el rango se sintetizan 32 bits:
„
Signal a: integer range 0 to 7; -- se sintetizan 3 bits.
Tipos de datos
„
Vectores
„
Bit_vector, std_logic_vector: Se suelen utilizar para describir
buses.
„
Signal A: bit_vector(0 to 7);
Signal B: bit_vector(7 downto 0);
„
Se puede asignar un valor a un elemento o a un segmento del vector
„
„
„
„
B(3) <= ‘0’; -- En la asignación a un elemento se emplean comilla
simples.
B(7 downto 0) <= “00101100”; -- En la asignación a un segmento se
emplean comillas dobles.
Se puede usar la cláusula “others” para asignar el mismo valor a todo
el vector o a una parte de él.
„
„
B<= (others => ‘0’); -- Asigna ‘0’ a todo el vector
B<= (7 => ‘1’, others => ‘0’); -- Equivale a B<=“10000000”;
Operadores
„
Operadores lógicos:
and, or, nand, nor, xor y not
Están predefinidos para los tipos de datos:
bit, bit_vector, boolean, std_logic,
vectores de booleanos y vectores de std_logic
„
Operadores relacionales:
= igualdad, /= desigualdad, > mayor, < menor,
>= mayor o igual y <= menor o igual
Igualdad (=) y desigualdad (/=) están definidos para todos los tipos y devuelven un valor
booleano. El resto, están definidos para todos los tipos escalares y para vectores.
„
Operadores aritméticos:
+ Suma, - resta, * multiplicación, / división abs
valor absoluto, mod módulo, ** potenciación y
rem resto de división entera
Están definidos para enteros y reales. Los 2 operandos han de ser del mismo
tipo y el resultado también.
Estilos descriptivos
„
La descripción de sistemas hardware se puede hacer jerárquica, a
distintos niveles de abstracción y de diferentes maneras:
„
„
Descripción funcional: Especifica el comportamiento del diseño en
función de los valores de las entradas.
Descripción estructural: Describe la entidad como un conjunto de
componentes conectados entre sí por señales.
„
Cada subsistema puede ser diseñado independientemente de los otros.
Descripción funcional
„
„
Descripción por Flujo de datos: Descripción
mediante sentencias concurrentes (WITH,
WHEN-ELSE), utilizando operadores aritméticos
y/o lógicos.
Descripción secuencial: Mediante Procesos y
sentencias secuenciales (IF, CASE, FOR LOOP,
etc.).
Sentencias concurrentes
„
WITH: Permite ejecutar un grupo de sentencias secuenciales si se
da una determinada condición.
Los valores de
selección no
pueden solaparse
„
Si la expresión toma el valor_1 se hace la primera asignación, si
toma el valor_2, la segunda, y así sucesivamente
Sentencias concurrentes
„
„
WHEN-ELSE: Es una asignación concurrente condicional similar a
WITH.
La señal recibe una asignación u otra en función de las condiciones
tras WHEN. Si no hay cambio en la señal se puede utilizar la palabra
clave UNAFFECTED.
Procesos
„
„
Se define dentro de la arquitectura una zona de código VHDL en
el que las sentencias se ejecutan de manera secuencial (en un
orden determinado) y por tanto no concurrente.
Todas las señales leídas en el proceso deben estar en la lista de
sensibilidad del proceso.
Sentencias Secuenciales
„
IF: Permite ejecutar un grupo de sentencias secuenciales si se da
una determinada condición.
Sentencias Secuenciales
„
„
Si hay varias condiciones ciertas, la primera que se cumple marca el
resultado final.
Una condición es cualquier expresión booleana.
Sentencias Secuenciales
„
CASE: Permite escoger entre grupos de sentencias secuenciales en
función de la evaluación de una determinada expresión. La
expresión puede ser de tipo discreto o tipo vector
Los valores de
selección no
pueden solaparse
Descripción Estructural
„
„
„
„
Se descompone la entidad en su estructura de elementos más
simples: COMPONENTES.
Los componentes se declaran dentro de la Arquitectura antes de la
sentencia BEGIN de la misma.
La declaración es similar a la de una ENTIDAD, no se define el
comportamiento, sólo los terminales externos.
El comportamiento debe definirse fuera de la arquitectura donde se
declara. Definiendo una ENTIDAD de igual nombre que el
COMPONENTE y con una arquitectura asociada al mismo.
Descripción Estructural
„
A
B
C
D
Una vez declarados los componentes, se asocian las señales de
entrada y de salida dentro de la Arquitectura, definiendo las
interconexiones entre ellos.
S0
M1
S1
M2
Y0
U1: M1 port map (A,B,C,S0,S1);
U2: M2 port map (S0,S1,Y0);
M3
Y1
U3: M3 port map (S1,D,Y1);
Modelado de sistemas
combinacionales
„
„
El modelado de lógica combinacional puede realizarse mediante
flujo de datos, procesos o descripción estructural.
Usar el diseño por flujo de datos cuando:
„
„
„
Usar procesos cuando:
„
„
La lógica a modelar sea simple, para entidades simples.
Como complemento de lógica secuencial en procesos.
La lógica a modelar sea compleja.
Usar una descripción estructural cuando se debe modelar un
circuito compuesto por varios bloques, muchos de ellos de la
misma clase.
Ejemplo
Se pretende diseñar un sistema combinacional descrito mediante la
siguiente tabla de la verdad.
A
B
SEL
Z
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
1
1
0
1
0
1
1
0
1
1
1
1
1
A
B
Sistema
Combinacional
Z
SEL
Z = A·SEL + B·SEL
Ejemplo
Librerías:
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
Entidad:
ENTITYsistema_combinacional IS
PORT(A, B, SEL : in std_logic;
Z: out std_logic);
END sistema_combinacional;
A
B
SEL
Sistema
Combinacional
Z
Ejemplo
Arquitectura:
Descripción por flujo de datos
Ecuación booleana
ARCHITECTURE arquitectura_1 OF sistema_combinacional IS
BEGIN
Z <= (A AND (NOT SEL))OR (B AND SEL);
END arquitectura_1;
Sentencia WHEN-ELSE
ARCHITECTURE arquitectura_2 OF sistema_combinacional IS
BEGIN
Z <= A WHEN SEL = ‘0’ ELSE B;
END arquitectura_2;
Z = A·SEL+ B·SEL
Ejemplo
Arquitectura:
Descripción por flujo de datos
Sentencia WITH
ARCHITECTURE arquitectura_3 OF sistema_combinacional IS
SIGNAL entrada : std_logic_vector (2 downto 0);
BEGIN
entrada <= A & B & SEL;
WITH entrada SELECT
Z <= ‘0’ WHEN “000”,
‘0’ WHEN “001”,
‘0’ WHEN “010”,
‘0’ WHEN “101”,
‘1’ WHEN OTHERS;
END arquitectura_3;
Ejemplo
Arquitectura:
Descripción estructural
ARCHITECTURE arquitectura_4 OF sistema_combinacional IS
SIGNAL S1,S2,S3: std_logic; -- declaración de señales
COMPONENT AND2 -- declaración de componente AND2
PORT (I0,I1:in std_logic; o:out std_logic);
END COMPONENT;
COMPONENT OR2 -- declaración de componentes OR2
PORT (I0,I1:in std_logic; o:out std_logic);
END COMPONENT;
COMPONENT INVERSOR -- declaración de componente INVERSOR
PORT (I:in std_logic; o:out std_logic);
END COMPONENT;
BEGIN -- conexionado de los componentes
U1: INVERSOR PORT MAP (SEL,S1);
U2: AND2 PORT MAP (A,S1,S2);
U3: AND2 PORT MAP(SEL,B,S3);
U4: OR2 PORT MAP (S2,S3,Z);
END arquitectura_4;
Ejemplo
Descripción estructural -- …continuación
ENTITY AND2 IS --Definición del componente AND2
PORT( I0, I1 : in std_logic;
o: out std_logic);
END AND2;
ARCHITECTURE puerta_and OF AND2 IS
BEGIN
o: I0 and I1;
END AND2;
ENTITY OR2 IS --Definición del componente OR2
PORT( I0, I1 : in std_logic;
o: out std_logic);
END OR2;
ARCHITECTURE puerta_or OF OR2 IS
BEGIN
o: I0 or I1;
END OR2;
Ejemplo
Descripción estructural -- …continuación
ENTITY INVERSOR IS --Definición del componente INVERSOR
PORT( I: in std_logic;
o: out std_logic);
END INVERSOR;
ARCHITECTURE puerta_not OF INVERSOR IS
BEGIN
o: not I;
END INVERSOR;
Ejemplo
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITYsistema_combinacional IS
PORT(A, B, SEL : in std_logic;
Z: out std_logic);
END sistema_combinacional;
ARCHITECTURE arquitectura_3 OF sistema_combinacional IS
SIGNAL entrada : std_logic_vector (2 downto 0);
BEGIN
entrada <= A & B & SEL;
WITH entrada SELECT
Z <= ‘0’ WHEN “000”,
‘0’ WHEN “001”,
‘0’ WHEN “010”,
‘0’ WHEN “101”,
‘1’ WHEN OTHERS;
END arquitectura_3;
Descargar