Anda di halaman 1dari 67

ARQUITECTURAS LGICAS

PROGRAMABLES
PLDS (FPGAS, CPLDS) Y SUS APLICACIONES

Fernando Cladera - Eduardo Iriarte

Actualizado: 2016/05/25
clase-MyEP-FPGAs

Facultad de Ingeniera - UNCuyo


MOTIVACIN
Motivacin: control de velocidad de un motor de CC

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

Proposicin: utilizar un controlador de bucle cerrado


(feedback). Variable controlada, tensin en bornes del motor.
Motivacin: control de velocidad de un motor de CC

Problemas a resolver

# Sensor de velocidad Unidad 2


# Electrnica de potencia Unidad 6
# Controlador
Motivacin: etapa de potencia

Motor de baja potencia MOSFET


Electrnica digital PWM
Motivacin: etapa de potencia

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

# Power Control PWM Module (8 channels)


# Motion Feedback Module w/ Quadrature Encoder
Interface
Motivacin: controlador
Motivacin: controlador
Motivacin: controlador

Escalabilidad

# Algoritmo de control complejo + tiempo real


Microcontrolador ms potente
# Ms de un encoder en simultneo
Mltiples microcontroladores + comunicacin (Ej. ISP)
Utilizar mltiples timers
...
Motivacin: controlador

Algo ms potente...

EDU-CIAA-NXP LPC4337 (ARM Cortex-M4/M0)

# CPU frequencies of up to 204 MHz


# Four 32-bit timer/counters
Count cycles of the system derived clock or an
externally-supplied clock
Generate interrupts
Two capture inputs to trap the timer value when an input
signal transitions
CONCEPTOS ELEMENTALES
CPLDs y FPGAs - Principios

Idea general

# El sistema no presenta una arquitectura definida


# Se dispone de bloques funcionales
Generales: Look-up Tables + Mux. Permiten
configuraciones lgicas ms complejas.
Especficos: Bloques DSP, memorias, ADCs. Tienen una
funcin especfica.
# Programar conectar bloques funcionales entre s
mediante un lenguaje de descripcin de hardware
# Integracin de bloques funcionales
Ejemplo de bloque funcional general

Altera
MAXII EPM240 CPLD
Ejemplo de bloque funcional general

Xilinx Spartan
Ejemplo de bloque funcional especfico - DSP

Xilinx DSP48 block


Ejemplo de sntesis: operacin lgica

library IEEE; -- Bibliotecas utilizadas


use IEEE.std_logic_1164.all;

entity andGate is -- Descripcin del componente


port(
in_a, in_b : in std_logic; -- Definicin entradas binarias
output : out std_logic -- Definicin salidas
);
end andGate;

architecture arch of andGate is -- Descripcin de la arquitectura


begin
output <= in_a and in_b;
end arch;
Ejemplo de sntesis: operacin lgica
Ejemplo de sntesis: biestable D

entity D_flipflop is
port(
S, R, clk : in std_logic;
Q : out std_logic
);
end D_flipflop;

architecture arch of D_flipflop is


begin
process(clk, reset)
begin
if reset='1' then
Q <= '0';
elsif rising_edge(clk) then
Q <= S;
end if;
end process;
end arch;
Ejemplo de sntesis: biestable D
Ejemplo de sntesis: multiplicador

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;

architecture arch of multiplier_4bit is


signal result : unsigned(7 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
result <= unsigned(in_a)*unsigned(in_b);
end if;
end process;
output <= std_logic_vector(result);
end arch;
Ejemplo de sntesis: multiplicador
Ejemplo de sntesis: multiplicador
Procesadores embebidos

Idea: utilizar la potencia bruta para tareas que requieren gran


poder de cmputo, realizar el control del sistema con un
algortmo corriendo en un procesador.

# 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

Descripciones de hardware con funciones especficas realiza-


dos por un tercero

# CODECs video
# Crypto
# Operadores lgicos optimizados
# Procesadores
Opencores

OpenCores is the worlds largest site/community for


development of hardware IP cores as open source.
Opencores
Opencores
PROGRAMACIN Y SNTESIS DE PLDS
Proceso de desarrollo

Descipcin (HDL) Simulacin RTL Sntesis


Simulacin funcional Place and route
Simulacin gate-level Programacin
Descripcin de HW en VHDL

VHSIC Hardware Description Language


VHSIC (Very High Speed Integrated Circuit)

# Lenguaje de descripcin de hardware para diseo


electrnico
# Aplicable a PLDs y ASIC, como as tambin a simulacin
# Fuerte nfasis en el paralelismo
# Fuertemente tipado (no deja lugar a dudas)
# Para PLDs, no todos las construcciones son sintetizables
Tipos de datos

clk : in std_logic; -- entrada de reloj

result : out std_logic_vector(7 downto 0); -- resultado del clculo


Descripcin de HW en VHDL - Entity

# Define entradas y salidas para el componente (port)


# Define valores genricos del componente (generic)

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

# Descripcin RTL del funcionamiento de un componente

architecture RTL of generic_concatenate is


begin
process(clk)
begin
if rising_edge(clk) then
output <= in_a & in_b;
end if;
end process;
end RTL;
Descripcin de HW en VHDL - Concurrent statements

# Se ejecutan en paralelo, independientemente de un reloj


# til para interconectar componentes, multiplexacin,
tablas de consulta

entity mux is
port(
in_a, in_b, select : in std_logic;
out_c : out std_logic
);

architecture RTL of mux is


begin
out_c <= in_a when select = '1' else in_b;
end RTL;
Descripcin de HW en VHDL - Concurrent statements

entity bcd2led7seg is
port(
digit : in std_logic_vector(3 downto 0);
output : out std_logic_vector(6 downto 0)
);
end bcd2led7seg;

architecture RTL of bcd2led7seg is


begin
--abcdefg
with digit select output <=
"1111110" when "0000", "0110000" when "0001",
"1101101" when "0010", "1111001" when "0011",
"0110011" when "0100", "1011011" when "0101",
"1011111" when "0110", "1110000" when "0111",
"1111111" when "1000", "1111011" when "1001",
"0000001" when others;
end RTL;
Descripcin de HW en VHDL - Sequential statements

# El bloque de cdigo se ejecuta si se modifican las seales


en la lista de sensitividad
# til para circuitos sncronos, comandados por un reloj
Descripcin de HW en VHDL - Sequential statements

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 stateMachine is architecture RLT of stateMachine is


port( type states is (INIT, STOP, RUN);
out_1, out_2 : out std_logic; signal current_state, next_state : states;
in_1 : in std_logic; begin
clk, reset : in std_logic process(clk, in_1)
); if reset = '1' then
end stateMachine; next_state <= INIT;
in1  0 elsif rising_edge(clk) then
current_state <= next_state;
end if;
STOP
case current_state is
1
when INIT =>
start INIT in1  1 out_1 <= '0'; out_2 <= '0' next_state <= ST
when STOP =>
1 out_1 <= '1'; out_2 <= '0';
RUN if in_1 = '1' then
next_state <= RUN;
end if;
when RUN =>
out_1 <= '0'; out_2 <= '1'; next_state <= I
when others =>
Descripcin de HW en VHDL - Instanciacin

# Instanciar y conectar los diferentes componentes entre s


# Generalmente mediante instrucciones concurrentes
# Por medio de cdigo o grficamente
Descripcin de HW en VHDL - Instanciacin

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

Objetivo: verificar el correcto funcionamiento de los


componentes descriptos anteriormente mediante seales de
estmulo.
Utilizamos ModelSim (ALTERA - Mentor Graphics).
Ejemplo: contador

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.

# Se requiere asignar los pines correspondientes en el CPLD


Pin Planner + Esquemtico PCB
# Hay que especificar restricciones de diseo para que la
herramienta de sntesis verifique si el diseo puede
cumplir con los requerimientos de timing mnimos
Asignacin de pines

# clk pin 12
# out(3 downto 0)
LEDs
# out(7 downto 4)
output pin header
Creacin de requerimientos de timing

1. Crear un archivo de texto y nombrarlo nombreProyecto.sdc


(reemplazar consiguientemente.
2. Crear requerimientos de timing para clk
20.000 ns  50 MHz, valor del reloj en PIN 12
3. Compilar y verificar errores

create_clock -period 20.000 [get_ports clk]


derive_pll_clocks
derive_clock_uncertainty|
Programacin

1. Abrir Programador (Tools > Programmer)


2. Seleccionar el programador adecuado en Hardware Setup
3. Add File, directorio output files, archivo pof
4. Seleccionar Program/Configure y Verify
5. Start
CONCLUSIONES Y PERSPECTIVAS
Conclusiones

Ventajas

# Velocidad ++
# Paralelizacin +
# Baja latencia ++
# Flexibilidad ++

Desventajas

# Tiempo de diseo
# Dificultad
FPGAs en el futuro - HLS

High Level Synthesis

Programacin de FPGAs con lenguajes de alto nivel (C, C++)

/* The actual bilinear interpolation core. */


if (write_x && write_y && (i >= MAXCOLS + 1) && col > 0 && (col - 1) < cols) {
uint4 pix0 = convert_uint4(buf[0]);
uint4 pix1 = convert_uint4(buf[1]);
uint4 pix2 = convert_uint4(buf[MAXCOLS]);
uint4 pix3 = convert_uint4(buf[MAXCOLS + 1]);
/* The following operations process all components in a pixel together. */
unsigned int rc=(accumRow&0xff)*(accumColumn&0xff);
uint4 tmp_pixel;
#pragma unroll
for (int d = 0; d < 4; ++d){
tmp_pixel.d[d] =(pix3.d[d]*SCALE_GRAN*SCALE_GRAN +
((pix1.d[d]-pix3.d[d])&0x3ffffff)*(accumRow&0x3ffffff)*SCALE_GRAN +
((pix2.d[d]-pix3.d[d])&0x3ffffff)*(accumColumn&0x3ffffff)*SCALE_GRAN +
((pix0.d[d]+pix3.d[d]-pix2.d[d]-pix1.d[d])&0x3ffffff)*(rc&0x3ffffff));
}
uchar4 pixel=convert_uchar4(tmp_pixel);
resized_image.write(convert_uint(pixel));
}
Proyecto Papilio

FPGAs made simple

# Libreras de circuitos drag and drop


# MegaWings, equivalente a Arduino Shields
Arquitecturas reconfigurables dinmicamente

Habilidad de modificar la operacin del FPGA en tiempo de


ejecucin

# Reutilizar hardware, con aceleradores materiales


# Evita la obsolescencia
# Reduce consumos de energa
# Tiempos variables de 4 ms a 12 ms
Preguntas?
fcladera@fcladera.com

Anda mungkin juga menyukai