Introducción a los FPGA con VHDL Ing. Guillermo Evangelista Adrianzén Universidad Privada Antenor Orrego
[email protected] gevangelistaa @upao.ed
Un FPGA ( Field Programmable Gate Array ) es un dispositivo semiconductor que contiene bloques de lógica lógica cuy cuyaa interc intercone onexió xiónn y funcion funcionali alidad dad pue puede de ser con config figura urado do median mediante te un leguaj leguaj e de descri scr i pció ci ón especi specia aliz li zado. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una compuerta lógica o un sistema combinacional hasta los SOC (System on a Chip). Las FPGAs se utilizan en aplicaciones similares a los ASICs ( Application-Specific Integrated Circ Circuit uit ) sin embargo son más lentas, tienen un mayor consumo de potencia y no pueden abarcar sistemas tan complejos como ellos. A pesar de esto, las FPGAs tiene la ventaja de ser reprogramables (añade flexibilidad al flujo de diseño), menor costo de desarrollo y adquisición para pequeñas cantidades de dispositivos y también menor tiempo de desarrollo. Historicamente las FPGA surge como una evolución de los conceptos desarrollados en en PAL PAL y CPLD.
Cualquier circuito de aplicación específica puede ser implemento en un FPGA, siempre y cuando disponga de los recursos necesarios. necesarios. Las aplicaciones mas communes que utilizan FPGA son:
Procesamiento digital de señales Radio defino por software Sistemas aeroespaciales y de defensa Prototipos Prototipos de ASICs Sistemas de imágenes imágenes para medicina Sistemas de vision por computador Reconocimiento de voz Bioinformatica Emulación de Hardware de computadora.
Desde principios del 2007, son dos los grandes productores productores de FPGA de propósito propósito general, además de un conj conjun unto to de otros otros comp compet etid idore oress quie quiene ness se dife difere renc ncia iann por por ofrec ofrecer er disp dispos osit itiv ivos os con con características únicas:
Xilinx Altera
Cypress Semiconductor Actel QuickLogic Atmel Motorola Vantis Achronix.
Es un hardware que integra circuitos y componentes electrónicos que proporcionan diversas capacidades básicas, como alimentación de energía o comunicación.
Xilinx Xi linx Spa Spartan-3 rtan-3 F PGA PG A w/ twelve 18-bit multipliers, 216Kbits of block
RAM, and up to 500MHz internal clock speeds -200 and -1000 versions available On-board 2Mbit Platform Flash (XCF02S) 8 slide switches, 4 pushbuttons, 9 LEDs, and 4-digit seven-segment display Serial port, VGA port, and PS/2 mouse/keyboard mouse/keyboard port Three 40-pin expansion connectors Three high-current voltage regulators (3.3V, (3.3V, 2.5V, 2.5V, and 1.2V) Works with Digilent’s JTAG3, JTA JTAG USB, and JTAG USB Full Speed cables, as well as P4 & MultiPRO cables from Xilinx 1Mbyte on-board on-board 10ns SRAM (256Kb x 32).
DISPOSITIVO
PIN
PUERTO
RELOJ (50 Mhz)
GCLK0
T9
RESET
BTN3 AN0 AN1 AN2 AN3 SSG0 SSG1 SSG2 SSG3 SSG4 SSG5 SSG6 SSG7 HSYNC VSYNC RED BLUE GREEN TXD RXD
L14 D14 G14 F 14 E 13 E14 G13 N15 P1 5 R16 F 13 N16 P1 6 R9 T10 R12 R11 T 12 T 14 N 10
ÁNODOS COMÚN DE LOS DISPLAY
SEGMENTOS DE LOS DISPLAYS DE ÁNODO COMÚN
PUERTO VGA
PUERTO SERIE
DISPOSITIVO
PUSHBUTTON
SWITCHES
LEDs
PS/2
PIN
PUERTO
BTN0 BTN1 BTN2 S W0 S W1 S W2 S W3 S W4 S W5 S W6 S W7 LD0 LD1 LD2 LD3 LD4 LD5 LD6 LD7 PSD2D PSD2C
M 13 M 14 L13 F12 G 12 H 14 H 13 J 14 J 13 K 14 K 13 K 12 P14 L12 N 14 P13 N 12 P12 P11 M 15 M16
Ingresar a la página de Xilinx, revisar su hoja técnica y capacidades de entrenamiento.
Es un lenguaje lenguaje de descr descrii pció ci ón espe specia ci aliza li zad do, su acrónimo representa la combinación de VHSIC (Very High Speed Integrated (DARPA 1980) y HDL ( Hardware I ntegrated Circuit ) (DARPA Hardware Description Language). Actualmente definido por el IEEE ( Institute of Electrical and Electronics Electronics Engineers) (ANSI/IEEE) y usado por ingenieros para describir (algotirmos) (algotirmos) y diseñar (hardware) circuitos y sistemas digitales, sean estos simples o complejos, mediante la programación de dispositivos tales como GAL ( Generic Array Logic), PLD ( Programmable Programmable Logic Device), CPLD ( Complex Programmable Logic Device), similares. res. FPGA, ASIC y simila
En concreto, permite mediante programación modelar modelar hardware; y a partir de estos modelos simular (comprobar la funcionalidad deseada) y sintetizar la la creación de un circuito.
1.
Multinivel: Capacidad
para utilizar el rango más amplio posible de niveles de especificación y combinarlos dentro de una misma descripción para ser utilizados junto con las herramientas de diseño.
2.
do cumentación. Intelegible: Facilidad de lectura y comprensión para simplificar la documentación.
3.
Capacidad de descripción: Facilidad
4.
Estruc ucttur ura a sintá ntáctic tica: Los
y potencia para describir los distintos elementos que forman parte de un sistema digital. Es un lenguaje considerado excesivamente prolijo. HDL deben poseen un conjunto de elementos que definan una sintaxis independientemente del nivel. Por ejemplo, los módulos ( module) de Verilog o el conjun con junto to entida entidad-a d-arqu rquite itectu ctura ra (entity-architecture ) de VHDL. Además deben poseen instrucciones dependientes del nivel de descripción en el que se encuentra el diseño.
5.
Capacidad de diseño físico estructurado: Deberían,
asimismo, facilitar la especificación de ciertos detalles de la realización física en una fase temprana de diseño. Un ejemplo de ello es la planificación de la disposición geometrica de las máscaras, o los canales de las celdad de entrada, salida o bidireccionales.
6.
Ind ndep epeend nden enci cia a tecn tecnol ológ ógic ica: a: Un
HDL debe ser independiente de la tecnología en la que se
realice el circuito. 7.
asimismo, Universalidad: Debe, asimismo,
ser compatible compatible con el mayor número número posible posible de herramientas herramientas de automatización del diseño electrónico ( Electronic Electronic Design Automation, EDA), como por ejemplo, simuladores, generadores de patrones de prueba, etc.
8.
Capa Capaci cida dad d de sim simular ular conc concu urren rrenci cia: a: Dado que los componentes de los sistemas digitales están
activos simultáneamente, la concurrencia es un aspecto fundamental a tener en cuenta por los HDL. Ello se traduce en que las sentencias de asignación, descripciones de componentes, instanciación de los mismos, etc., han de ejecurarse de tal manera que parezcan ejecuciones simultáneas. Para ello, en VHDL se introdujo el concepto de retardo delta.
Dados los dispositivos seleccionados de la marca Xilinx, se require de un programa específico de desarrollo, ISE Design Suite; a su vez, éste con versiones definidas por el fabricante:
allows to go from from design design entry entry,, throu through gh implem implemen entat tatio ionn and The ISE Des Design Suit Suite e: Logic Logic E ditio ition n allows verification, to device programming from within the unified environment of the Project Navigator or from the command line. XST , ISim, PhanAhead , Core Generator, SmartGuide, Design Preservation, Team Design, Partial Reconfiguration, XPower Analyzer, Power Optimization, iMPACT, ChipScope.
The I SE D esign Suite: Suite: E mbedded E dition includes all the tools and capabilities of the Logic Edition with
the added capabilities of the Embedded Development Kit (EDK). This edition provides an integrated develo dev elopme pment nt envir environm onmen entt (Xilin (Xilinxx Platfo Platform rm Studio Studio)) of embed embedded ded proces processin singg tools, tools, proces processor sor cores cores (PowerPC® hard processor and MicroBlaze MicroBlaze ™ soft processor), IP, IP, software libraries, and design generators. XPS, PlatGen, BSB, SimGen, SDK, XMD, GNU, LibGen, BitInit.
The I SE Des Design Suite Suite: DSP E dition ition includes all the tools and capabilities of the Logic Edition with the
added capabilities of System Generator for DSP. This edition provides an integrated environment. The System Generator for DSP enables to define and verify complete DSP systems using industry-standard tools from Th Thee MathW MathWork orkss. When using System Generator, previous experience with Xilinx devices or RTL design methodologies is not required. Designs are captured in the DSP-friendly Simulink® modeling environment using a Xilinx-specific blockset.
The I SE Design Design Suit S uite e: Syst System Ed E dition ition includes all of the tools and capabilities of the Logic Edition,
Embedded Edition, and DSP Edition.
software includes the tools you need to design small to medium-sized FPGAs and CPLDs. It includes the PlanAhead tool, standard IP, and DSP IP as well as System Generator for DSP and the Embedded Development Kit (EDK). The I SE WebPACK
™ ™
VHDLL - Est VHD Estruc ructur tura a y Or Organ ganiza izació ción n Ing. Guillermo Evangelista Adrianzén Universidad Privada Antenor Orrego
[email protected] gevangelistaa @upao.ed
VHDL se estructura en módulos o unidades funcionales, identificados mediante palabras reservadas . En tanto, a su vez, cada módulo tiene una secuencia de instrucciones o sentencias, las cuales, en conjunto con las declaraciones de las unidades involucradas en el programa, permiten la descripción, comprensión, evaluación y solución para un sistema digital. Al interior de la estructura de un programa, las unidades E nti y Architecture forman forman la columna columna nti ty y vertebral vertebral de este lenguaje, lenguaje, mientras mientras que, los módulos restantes (Library, (Library, Package, Package, Component) Component) son utilizados para optimizar y generalizar la aplicación.
(entidad) es una palabra reservada , que constituye un bloque de diseño y que representa la E ntity ntity (entidad) caracterización de un dispositivo físico, es decir, exhibe las entradas y salidas del circuito diseñado; dicho circuito puede ser una compuerta, sumador, decodificador, etc. in
in
a
b
Entity c
----------------------------- Estructura de una entidad ---------------------------entity compuerta is in bit; bit ; port(A,B: C: out bit); compuerta ; compuerta; end
ou t
(puerto) también es una palabra reservada, pero que representa un canal de comunicación, el Port (puerto) cual consta de un nombre y una lista de propiedades (dirección del flujo de datos y valores v alores a tomar).
Son los nombres o etiquetas que se usan para hacer referencia a variables, constantes, señales, procesos, etc. Las reglas para su correcta compilación, compilación, son las siguientes: REGLA
El pri primer mer carac aractter sie siempre mpre debe ebe ser ser una letr letraa mayú mayúsc scul ulaa o minú inúscu scula. la. El segundo caracter no puede ser un guion bajo. No se permite el uso de de dos guiones seguidos. Un identificador no puede usar símbolos.
INCORRECTO
CORRECTO
4sum suma S_4bits Resta__4 Clear#8
sum suma_4 a_4 S4_bits Resta_4_ Clear_8
reservadas, las cuales no pueden Es importante destacar que VHDL cuenta con una lista de palabras reservadas utilizarse como identificadores.
Se muestra a continuación una lista de palabras reservadas en VHDL, ninguna palabra reservada se puede usar como identificador. identificador. Abs Access After Alias All And Architecture Array Assert Atribute Begin Block Body
Buffer Bus Case Component Configuration Constant Disconnect Downto Else Elsif End Entity Exit
File For Function Generate Generic Group Gu Guarded If Impure In Inertial Inout Is
Label Library Lindage Literal Loop Map Mod Nand New Next Nor Not Null
Of On Open Or Others Out Package Port Postponed Procedure Process Protected Pure
Range Record Register Reject Rem Report Return Rol Ror Select Severity Signal Shared
Sla Sll Sra Srl Subtype Then To Transport Type Unaffected Units Until Use
Variable Wait When While Witch xnor xor
Un modo permite definer la dirección hacia donde el dato es transferido. Un modo puede tener uno de cuatro valores: in (entrada), out (salida), inout (entrada/salida) y buffer (salida).
Modo odo in: in: Permite
declarar un puerto de forma que el flujo de datos ( señales) va hacia dentro de la entidad. Modo odo out: El flujo de datos en el puerto va hacia afuera de la entidad. Modo odo inout: out: Permite declarar un puerto de forma bidireccional bidireccional (entrada/salida), (entrada/salida), además hace posible la retroa retroalim liment entaci ación ón de señale señaless den dentro tro o fuera fuera de la entidad. Modo Modo bu buffe ffer: r: El puerto declarado se comporta como salida y solo permite realizar retroalimentación dentro de la entidad.
----------------------------- Estructura de un puerto ---------------------------entity circuito is bit; port( A,B: A,B: in bit; C: out bit; D: inout bit); E: buffer end circuito;
Nombre
Modo
Tipo
Los tipos son los valores (datos) que el diseñador establece para los puertos de entrada y salida dentro de una entidad, y que son asignados de acuerdo con las características de un diseño en particular. par ticular. 1. En Enum umer erad ados os
Character: Formado por los 128 caracteres ASCII
Boolean: Definido sobre los valores true, false
Bit: Formado por los caracteres 0 y 1
Severi Severity ty Level: Level: Formado por los valores note, error , failure.
2. Esca Escala larres
Inte Intege gerr / Real Real:: Con un rango que depende de cada herramienta.
3.
4.
Arrays
String: Definido como un array de caracteres ( characters)
Bit_vector: Definido como un array de bit .
Físicos
5.
Time: Definido para especificar unidades de tiempo.
Tipos ipos par para oper operac acio ione ness de entra ntrada da/s /sa alida lida sobr obre fich ficher eros os
Line: Puntero a string
Text: Fichero de strings
y left . Side: Enumerado sobre valores tipo right y
vector ores es de bits bits. La sentencia utilizada En VHDL, el conjunto de bits ordenados se considera como vect para describir esta configuración es bit_vector, además de to para un arreglo ascendente y downto para un arreglo descendente. Arreglo ascendente: A3 A2 A1 A0
S0 S1
S2 S3
A[3:0 A[3 :0]]
4
Entity B3 B2 B1 B0
4
S[0:3]
A(A0,A1,A2,A3) B(B0,B1,B2,B3)
Entity C3 C2 C1 C0
B[3:0]
4
4
C[3:0]
Arreglo descendente:
A(A3,A2,A1,A0) B(B3,B2,B1,B0)
vector ores es de bits bits. La sentencia utilizada En VHDL, el conjunto de bits ordenados se considera como vect para describir esta configuración es bit_vector, además de to para un arreglo ascendente y downto para un arreglo descendente.
A[3: A[ 3:0] 0]
4
4
Entity B[3:0]
4
4
----------------------------------- Declaración utilizando vectores S[0:3] ---------------------------------entity circuito is port(A,B: in bit_vector ( (3 downto 0); out bit_vector ( (0 to S: 3); C[3:0] C: inout bit_vector ( (3 downto 0)); end circuito;
unidades de diseño (paquetes), las Una librería (library ) es un lugar al cual se accede para emplear unidades cuales se aplican para agilizar y almacenar resultados de la compilación de un diseño dado. Por otro lado, un paquete es una unidad de diseño formada por declaraciones, programas, componentes y subprogramas. library IEEE; library IEEE use IEEE.STD_LOGIC_1164.ALL ; --------------------------------- A[3: A[ 3:0] 0] -- Declaración mediante librería ---------------------------------entity circuito is port(A,B: in std_logic_vector (3 downto 0); S: out std_logic_vector (0 3); B[3:0] to C: inout std_logic_vector (3 (3 downto 0)); end circuito;
4
4
S[0:3]
Entity 4
4
C[3:0]
David G. Maxinez, Programación de Sistemas Digitales con VHDL , Grupo Editorial PATRIA, México, 2013. Serafín A. Pérez, Enrique Soto, Santiago Fernández, Diseño de Sistemas Sistemas Digitales con VHDL, Thomson, España, 2002. IEEE, The IEEE standard VHDL Language Reference Manual , IEEE -std, -std, 1988. Miguel A. Freire, Introducción al lenguaje VHDL, Universidad Politécnica de Madrid, Departamento de Sistemas Electrónicos y de Control. Hardware Description Language and Their Aplicati ons, Speciftcation, modeling, Kloos, C. y E. Cerny, Hardware verification and synth esis of microelectronic systems, Chapman & Hall, 1997.
Peter J. Ashnden, VHDL Tutorial , Elsevier Science, USA, 2004.
VHDL VH DL - El Elem emen ento toss del del Leng Lengua uaje je Ing. Guillermo Evangelista Adrianzén Universidad Privada Antenor Orrego
[email protected] gevangelistaa @upao.ed
Son caracteres utilizados en determinadas operaciones y sentencias, estos pueden ser de dos tipos:
po r un solo caracter. Delimitadores simples: Son aquellos constituidos por &
‘
(
)
*
+
.
,
/
:
;
<
=
>
|
\
Delimitadores compuestos: Son aquellos que constituidos por dos caracteres. =>
**
:=
/=
>=
<=
<>
En las descripciones se puede introducir comentarios que ayuden a la comprensión del código y a su documentación. Cualquier comentario empieza con dos guiones seguidos y termina al final de la línea. El compilador ignora lo escrito en los comentarios, un ejemplo: ejemplo: ----------------------------------- Esto es un comentario -------------------------------------- Comienzo de la entidad <
> ------------------------------------entity ejemplo is ejemplo is --entrada A port( port ( A: in bit bit; ; B: out bit bit); ); --salida B end ejemplo;
VHDL predefine un conjunto relativamente limitado de tipos de datos, pero dispone de gran vers versat atil ilid idad ad para para que que el prop propio io usua usuario rio los los cree cree segú segúnn sus sus nece necesi sida dade des. s. Los tipo tiposs de dato datoss predefinidos predefinidos se encuentran casi en su totalidad en el paquete starndard de de la biblioteca std . La Tabla N° 1 y 2 muestran a los principales tipos de datos. Tabla N° 1: Tipos predefinidos de datos – Parte Parte I TIPO
RANGO
DESCRIPCIÓN
-MAXINT … MAXINT
Números enteros
Natural
0 … MAXINT
Números naturales
Positive
1 … MAXINT
Números positivos
Real
-MAXREAL … MAXREAL
Números reales
Boolean
TRUE RUE, FALSE ALSE
Valore loress bo bool oleeano noss
Integer
Tabla N° 2: Tipos predefinidos de datos – Parte Parte II TIPO
RANGO
DESCRIPCIÓN
Bit
0,1
Valores binarios
Bit_vector
conjunto de bits bits
Cadena de bits
Character String Time
Caracteres
Conjun Con junto to de caract caractere eress
Cadena Cadena de carac caracter teres es
-MAXINT …MAXINT
Números reales reales con unidades de tiempo
El valor de las constantes MAXINT y MAXREAL depende de la implementación del compilador de VHDL, pero al menos han de ser de 23 − 1 para el primer caso y 1.0E38 para el segundo. La resolución del tipo time es de 1 fs (unidad base), es decir, cualquier tiempo inferior es trucado a 0 unidades de tiempo. De otro lado, la representación de valores en los tipos numéricos ( integer , real , time) se puede realizer de diversas formas. En general, se emplea la base 10 y se puede utilizar el caracter <<_>> para hacer mejor la legibilidad: legibilidad:
números enteros:
37 112234 1_123_321 2E6 3E-4
números reales:
2.71 43_234.0 0.000_0012 3.27E4 6.0E-3
¡Error!
El lenguaje VHDL permite expresar un número en cualquier base, de acuerdo al siguiente formato:
base # base # entero[.entero] entero[.entero] [# [ # E exponente] Ambos enteros debe estar representados en la base indicada a la izquierda. El exponente representa una potencia de dicha base. Ejemplos: 2#0010_0001#E3 8#714# 16#D3.A2#E-1 10#35#E8
--33x2^3 --460 --211,6328125 --211,632812 5 x 16^-1 --35x10^8. Como la base es 10 no es preciso indicarla, --puesto que es la que se toma por defecto. Por lo --tanto es suficiente con la representación 35#E8, o --simplemente --simplement e 35E8
Cuando una cadena de caracteres está compuesta por un conjunto de bits se le denomina bit string (literal de cadena de bits) y admite una expresión simplificada con base numérica: literal (literal X |O| [B]
“cadena de bits”
Ejemplo: 62027 X“F24B” O“63_72” B“1111001001001011”
--se puede representar en hexadecimal: --o bien en octal: --o bien en binario:
La base binaria se toma por defecto, es decir, puede prescindirse de indicar B indicar B.. X X representa representa la base hexadecimal y O y O la la octal.
VHDL pose VHDL poseee una una gran gran vari varied edad ad para para la defi defini nici ción ón de nuev nuevos os tipo tiposs y subt subtip ipos os de dato datos. s. A continuación se muestra una clasificación de los distintos tipos que es posible po sible declarar:
Escalares Enumerados Enteros Físicos Compuestos: homogéneos (arrays), heterogéneos ( records) Acceso Fichero.
is descripción; descripción; La sintaxis de declaración de un tipo es: Type <
En la descripción se especifica la clase de tipo a declarar y su rango de valores. A continuación se muestra ejemplos de diversas declaraciones: Type SEMANA is (L,M,X,J,V,S,D);
--tipo enumerado
Type tipo_puerta is (andg, org, norg, nandg);
--tipo enumerado
Type CUENTA_ATRAS is range 9 downto 0;
--tipo entero
Type fan is range 1 to 20;
--tipo entero
Type intervalo is range -1.0 to 1.0;
--tipo real
Type ESPACIO is range 0 to 10000
--tipo físico
units mm;
--unidad base
cm=10 mm;
--múltipo
m=1000mm;
--múltipo
km=1_000_000 mm;
end units; units;
--múltipo
--ejemplos de tipo compuesto compuesto homogén homogéneo eo: :
Type MEMORIA is array (0 to 31) of bit_vector (8 (8 downto 0); Type CUBO is array (0 to 7),(0 to 7),(0 to 7) of bit; bit;
--ejemplo de tipo acceso predefinido acceso predefinido en el paquete textio de textio de la biblioteca std :
Type LINE is access string ;
--ejemplo de tipo fichero predefinido fichero predefinido también en textio: textio:
Type TEXT is file of string ;
--ejemplo de tipo compuesto compuesto heterog heterogéneo éneo: :
Type puerta_lógica is record tipo: tipo_puerta; retardo_L_H: time; time; retardo_H_L: time; time; no_entradas: positive; positive ; fun_out: fan;
end record ;
Un subtipo es un tipo de rango restringido. La declaración obecede a la sintaxis: