PROGRAMABLES
PLDS (FPGAS, CPLDS) Y SUS APLICACIONES
Actualizado: 2016/05/25
clase-MyEP-FPGAs
Problema
Se dispone de un motor de CC de imanes parmanentes con
escobillas y carga variable, se desea realizar un control de
velocidad.
Especificaciones
# P 20 W
# 250 rpm
# U 24 V
Motivacin: control de velocidad de un motor de CC
Problemas a resolver
Allegro A4973
Motivacin: sensor de velocidad
Encoder incremental
# Bajo costo
# Alta resolucin (1000 PPR)
Motivacin: sensor de velocidad
Encoder incremental
# Direccin: biestable D
# Pulsos: XOR
Motivacin: controlador
Opcin 1: PIC18F2331
Escalabilidad
Algo ms potente...
Idea general
Altera
MAXII EPM240 CPLD
Ejemplo de bloque funcional general
Xilinx Spartan
Ejemplo de bloque funcional especfico - DSP
entity D_flipflop is
port(
S, R, clk : in std_logic;
Q : out std_logic
);
end D_flipflop;
entity multiplier_4bit is
port(
in_a, in_b : in std_logic_vector(3 downto 0);
output : out std_logic_vector(7 downto 0);
clk : in std_logic
);
end multiplier_4bit;
# SoftCore
Baja velocidad (200 MHz)
Modificables (agregar o quitar perifricos, capacidades del
procesador)
Posibilidad de agregar o quitar procesadores
# HardCore
Alcanzan altas velocidades
No modificables
SoftCore: Xilinx microblaze
HardCore: Xilinx Zynq
IPs
Intelectual Propierties
# CODECs video
# Crypto
# Operadores lgicos optimizados
# Procesadores
Opencores
entity generic_concatenate is
generic(
inputWidth : integer := 8
);
port(
in_a, in_b : in std_logic_vector(inputWidth-1 downto 0);
output : out std_logic_vector(2*inputWidth-1 downto 0);
clk : in std_logic
);
end generic_concatenate;
Descripcin de HW en VHDL - Architecture
entity mux is
port(
in_a, in_b, select : in std_logic;
out_c : out std_logic
);
entity bcd2led7seg is
port(
digit : in std_logic_vector(3 downto 0);
output : out std_logic_vector(6 downto 0)
);
end bcd2led7seg;
entity Q is
port(
in_a : in std_logic_vector(3 downto 0);
out_b : out std_logic_vector(5 downto 0);
clk : in std_logic
);
end Q;
architecture RTL of Q is
signal intermediate : std_logic_vector(3 downto 0); -- signal ->
begin
process(clk) -- el proceso se ejecuta al modificarse el estado de clk
begin
if rising_edge(clk) then
intermediate <= in_a;
end if;
end process;
out_b <= "10" & intermediate;
end RTL;
Descripcin de HW en VHDL - Sequential statements
architecture RTL of C is
constant max: integer := 2**8-1;
signal count : integer range 0 to max;
begin
process(clk)
entity C is
begin
port(
if rising_edge(clk) then
value : out
if count = max then
std_logic_vector(7 downto 0);
count <= 0;
clk : in std_logic
else
);
count <= count + 1;
end C;
end if;
end if;
end process;
value <= std_logic_vector(to_unsigned(count, 8));
end RTL;
Descripcin de HW en VHDL - Mquinas de estado
entity Q is
port(
architecture RTL of top is
in_a : in
signal interconnect :
std_logic_vector(3 downto 0);
std_logic_vector(10 downto 0);
out_b : out
begin
std_logic_vector(5 downto 0);
Q_a : entity Q port map(
clk : in std_logic
in_a => in_top_A,
);
out_b => intectonnect(5 downto 0)
end Q;
);
entity top is
Q_b : entity Q port map(
port(
in_a => in_top_B,
in_top_A : in
out_b => intectonnect(11 downto 6)
std_logic_vector(3 downto 0);
);
in_top_B : in
std_logic_vector(3 downto 0);
out_top <= interconnect;
out_top : out
end architecture;
std_logic_vector(11 downto 0);
);
Simulacin RTL
entity C is
port(
value : out
std_logic_vector(7 downto 0);
clk : in std_logic
);
end C;
1. Ejecutar ModelSim
2. Crear nuevo proyecto (File > New Proyect)
3. Agregar archivos .vhd o crear nuevos archivos
4. Compilar, corregir errores (click en mensaje de error)
1. Iniciar simulacin (Simulate > Start Simulation)
2. Elegir componente a simular en librera work
3. Agregar visualizaciones de ondas para las seales
deseadas (Add Wave)
4. Crear seales de estmulo
5. Ejecutar (escribir run en la consola de comandos)
Objetivo: pasar de una descripcin de hardware a un
programa para configurar un CPLD o FPGA.
Utilizamos Quartus (FPGAs y CPLDs Altera)
Ejemplo: contador
# Ejecutar Quartus
# Crear nuevo proyecto (File > New Proyect Wizard)
# Configurar nombre y directorio (misma carpeta que
proyecto ModelSim)
# Agregar archivos .vhd (Add All)
# Configurar el FPGA/CPL correcto
# Finish (!)
1. Para cada archivo .vhd, abrirlo y crear smbolos (File >
Create/Update > Create Symbol Files for Current File)
2. Crear diagrama de bloques (File > New > Block
Diagram/Schematic File)
3. Insertar bloques (buscar en Project)
4. Insertar Entradas/Salidas
5. Interconectar
6. Sintetizar y ver mensajes de error (Processing > Start
Compilation)
Critical Warning (169085): No exact pin location assignment(s) for 9 pins of 9 total pins. For the
list of pins please refer to the I/O Assignment Warnings table in the fitter report.
Critical Warning (332012): Synopsys Design Constraints File file not found: test.sdc. A Synopsys
Design Constraints File is required by the TimeQuest Timing Analyzer to get proper timing constraints.
Without it, the Compiler will not properly optimize the design.
# clk pin 12
# out(3 downto 0)
LEDs
# out(7 downto 4)
output pin header
Creacin de requerimientos de timing
Ventajas
# Velocidad ++
# Paralelizacin +
# Baja latencia ++
# Flexibilidad ++
Desventajas
# Tiempo de diseo
# Dificultad
FPGAs en el futuro - HLS