Primera Empresa del Perú Dedicada al Desarrollo Electrónico
DIGLENSY SAC
PRESENTA:
TUTORIAL VHDL http://www.diglensy.com/
DIGLENSY SAC
TUTORIAL VHDL Contenido: 1. Dispositivos Lógicos Programables CPLD’s. FPGA’s. 2. Herramientas de Síntesis y Simulación. Uso del QUARTUS II de Altera (editor texto y grafico, compilación, simulación y programación de FPGA’s). 3. Introducción al lenguaje VHDL. Características Características del lenguaje. Unidades de diseño. Elementos del lenguaje. 4. Estilo flujo de datos para el diseño de circuitos combinacionales. ACS única. ACS selectiva. ACS condicional. Implementación de circuitos combinacionales en el módulo FPGA. Ø Implementación sencilla – uso de led y botón. • •
•
• • •
• • • •
5. Estilo algorítmico para el diseño de circuitos combinacionales y secuenciales. Sentencia IF – THEN. Sentencia CASE – WHEN. Máquinas de estado. Implementación de circuitos secuenciales en el módulo FPGA. Ø Implementación de un contador universal. universal. Ø Implementación de una máquina de estado. • • • •
6. Estilo estructural para la interconexión de componentes. Ø Implementación de un diseño con estilo estructural en el módulo FPGA. 7. Implementación de un SISTEMA DIGITAL PARA ESCRIBIR ESCRIBIR EN UN MONITOR MONITOR VGA en la tarjeta de desarrollo ALTERA ALTERA DE2.
2
DIGLENSY SAC
N o t a d e l Au Au t o r : Desde hace algún tiempo ya se viene usando el lenguaje VHDL como una de las alt ern at ivas de implement ación ación en dispositivos dispositivos CPLD ’s y FP GA’ GA’s. Las herr am ienta s de síntesis han ido mejorando considerablemente. Hoy en día muchos fabricantes de circuitos integrados utilizan la tecnológica de lógica programable para implementar sistemas digitales muy complejos y poder validar sus nuevos diseños sin tener que recurrir a la fabricación del circuito integrado. Gracias a las herramientas de diseño automático existentes los diseñadores pueden aumentar la productividad, reduciendo los tiempos de desarrollo y sobre todo abaratando los costos de diseño.
El presente tutorial pretende difundir el uso de este lenguaje en el diseño de sistema s digita digita les, indic indican an do sus car car acterísticas así como como sus ventajas y desventa desventa jas. jas.
3
DIGLENSY SAC
1 . DISP OSITIV OSITIVOS OS LÓGICOS PR OGRAMA OGRAMABLES BLES
E s c a l a d e I n t e g r a c i ón ón Es una clasific lasificació aciónn por por el núm ero de tr an sistores que h an sido fabric fabricados ados dent ro de un circuito circuito integra do. Las clases son: NOMBRE SSI MSI LSI VLSI ULSI
SIGNIFICADO Pequeña escala escala de integración Media escala de integración Gran de escala escala de integración Muy gra gra nde escala escala d e integración Ultra a lta escala escala de integración
NÚMERO DE TRANSISTORES Menos de 50 50 a 500 500 a 50000 50000 a 500000 Más d e 500000
4
DIGLENSY SAC
LÓGICA P ROGR AMA MABLE BLE Es u na familia de component component es que cont cont ienen u n conjun conjun to de element os lógic lógicos os (and, or, not, latch, flip flip flop, flop, etc.) que pu eden configura configura rs e par a qu e cumplan cua lquier función lógica que el usuario desee. La tecnología de lógica programable está alcanzando niveles de integración muy altos, ahora contamos con dispositivos que integran desde cientos cientos de compuer compuer ta s a millones millones de ellas, ellas, capaces de implement implement ar los sistema s digita digita les más complejo complejoss que el diseñador pueda r equerir pa ra un a a plicació plicación. n. Los tiempos del ciclo de diseño de los sistemas digitales se vienen reduciendo ha ciendo que los los diseñadores ut ilic ilicen sofistic sofisticada ada s her ra mienta s de diseño automático automático que les per mit a a front front ar la crecient crecient e complejidad complejidad de los circuitos circuitos integr ados colo colocando cando sus diseños en el mer cado en en el m enor t iempo posible posible.. Las herramientas han ido mejorando considerablemente y han pasado a ser ut ilizados ilizados en am bientes académico académicos. Gracias Gracias a l Inter net a hora se puede acceder acceder a u n softwa softwa re especializado que ha ce algún tiem po era de un cost cost o mu y elevado elevado que lo ha cía cía prohibitivo para fines educat ivos. ivos. La fabricació fabricaciónn de dispositivos dispositivos de lógic lógicaa program able se ba sa en los siguien tes dos dos conc conceptos: eptos: Fu nciona nciona lidad Completa Completa : La cua cua l se fun fun dam enta en el hecho de que que cualquier fun ción ión lógi lógicca se puede r ealizar ealizar mediant e su ma de productos. productos. Celdas de funciones universales: Son bloques lógicos configurados para procesar cualquier función lógica, similares a su funcionamiento a una memoria. •
•
Dispositivos Dispositiv os Lógico Ló gicoss Pr ogra ma bles (P (P LD) Son Son dispositivo dispositivoss que cont cont ienen un a a rquitectur a genera l predefinida predefinida en la que el usuario puede programar el diseño final del dispositivo empleando un conjunto de herramientas desarrollo. Las arquitecturas generales pueden variar pero normalmente consisten en una o más matrices de compuertas AND y OR para implementar funciones lógicas. Muchos dispositivos también contienen FF y latch que pueden usa rse co como elemento s de alma cenaje par a la entr ada y salida de un dispositivo. ASIC, P LA, P RO M, P AL, GAL, CP LD, F P GA ASIC: A diferencia de otros dispositivos, pueden contener funciones Analógicas y Digitales, en general son programados mediante mascaras y no programables por el usuario. Esto significa que los fabricantes configuran el dispositivo según las especific especificacio aciones nes del usu ar io. io. Est os dispositivos dispositivos tienen un alt o costo costo inicial, inicial, por por lo ta nt o se usan pr incipalmente incipalmente cuando es necesaria necesaria u na gra n cantidad.
5
DIGLENSY SAC
Idea de un P LD
E s t r u c t u r a i n t e r n a d e u n P L D bá b á s ic i c o: o: A 7 1
E 8 1 R I W
B 6 1
T O N
E 6 R I W
T O N
AND2 1
Matriz And
AND2 7
Lineas de Producto
AND2 2
2 1
3 4 1 R O
Matriz Or
5 4 1 R O
4 4 1 R O
4
AND2 8 R
O
Fusible
Lineas de Entrada
o1
o2
o3
o4
Simbología Simbolog ía P LD
AND4 OR4 AND2 OR2 8 10 1 5
CARRY NOT 12 14
6
DIGLENSY SAC
PAL: Es el dispositivo mas simple, el circuito interno de una PAL consiste de una ma tr iz de co conexiones, nexiones, un a m at riz de co compuer ta s AND y un a rr eglo eglo de co compuer ta s OR. La ma tr iz de conexio conexionnes esta basada en u na red de conductores conductores distribuidos distribuidos en filas y colum colum na s con con un fusible en cada cada pun to de int int ersección, ersección, media nt e la cua cua l se selecci seleccioona n cuales entradas del dispositivo serán conectadas al arreglo AND cuyas salidas son conectadas al ar reglo OR y de esta m an era obtener un a función función lógic lógicaa en fo form a de sum a de pr oductos. ductos.
Lineas de entrada Lineas de Salida
PROM
PAL
PLA
FIJO
PROG
PROG
PROG PROG
FIJ O
PROG
N om om e n c l a t u r a d e u n a P A L
7
DIGLENSY SAC
T e c n o lo lo g ía ía d e p r o g r a m a c i ón ó n ( in in t e r r u p t o r e s ) 1.
Pr ogram able (bipolar) bipolar) Fu sible, se fun fun de por por corr corr ient e Una vez programados no se puede volver a reprogramar (OTP) 2. Reprogramable (MOS) Pr ograma ble eléc eléctr tr icamen icamen te Fu sible sible = tr an sistor MOS de puerta flota lota nt e Implementa puert a AND cableada Cons Cons um o est át ico ico por pull-up EPLD Borr Borr ado por lu z UV. Exposició Exposiciónn 20min. En capsu lado co con venta na de cua cua rzo, rzo, en caso co cont ra rio OTP EEPLD Borr Borr ado eléctrico • •
• •
•
•
Pr oblemas pa ra implement ar PLD’s PLD’s de más entr ada s y má s funci funcioones: - Efectos capacitivos. - Corr Corr ientes de fuga. -Mala efici eficiencia encia de u so del silicio silicio a nivel del á rea en el chip . CPLD
Es un a colec colecci cióón PLD individua individua les en en un s imple chip, chip, en compañía de una estructura de interconexión programable que permite que los PLD’s sean conectados entr e si. Con Con est o se lo logra implement ar sistema s ma s efic eficientes por que ut ilizan ilizan men os espacio, mejoran la confiabilidad y reduce costos. Cada PLD será ahora un bloque lógi lógico co la ar quitectura básica básica de un CPLD es la siguient siguient e:
8
DIGLENSY SAC
P IM Per mit e unir los pines de I/O I/O a las en tr ada s de los los bloques bloques lógic lógicos os (blo (bloques ques de función) función) o las las sa lidas d el bloque bloque lógico lógico a las ent ra da s del otr o bloque bloque lógic lógico. o. Int erconexió erconexiónn m edia nt e arr eglo (filas (filas y colum colum na s) Interr uptor º EECMOS EECMOS Versátil pero lento Cualquier X se puede co conectar a cua lquier LB (Fully routa ble) Alto cons cons um o ( men or desempeñ o). Int erconexió erconexiónn m ediant e mult iplexo iplexores Existe un m ux por por cada LB Cada entr ada del mux es programada programada El u so de gra gra ndes m ux Alto consu consu mo ( menor menor desempeño desempeño ). • • •
•
• • •
LB o FB Similar a u n P LD, generalmente poseen poseen u na mat riz and, or or y un a confi configuració guraciónn par a la dist ribu ción ción de los los productos en las diferent es MACROCELDAS MACROCELDAS del bloq bloque. ue. El tamaño del LB es una medida del CPLD (el tamaño de la función booleana q puede ser implementada implementada en un LB) Usua lmente dent ro de un LB ha y 4 a 20 macroceldas. macroceldas. Matr iz de puerta s AND: AND: Genera tér minos producto (TP), Es pr ogram able Mat riz de Distr ibució ibuciónn de Térm inos Producto (PTDM) (PTDM) Distribuye los los TP entre las MC, Compar Compar tir TP entr e MC MC (produc (productt -term sh aring) • Encaminar TP no utiliz utilizado adoss en un a MC a otra (PT steering) Macrocelda: Implement an una fun ción ión digital como como suma de TP - Su sa lida va h acia la P IM y hacia los los I/O (exc (excep ep to MC bur ied) 9
DIGLENSY SAC
- Realimen ta ció ción local. local. La salida de un a MC puede ser u tilizada en su LB sin pasar por por la P IM. -3 clases clases de m acroceldas acroceldas à Pr ogram able combina combina ciona iona l o registr registr ada - Cont Cont ienen 1FF por por MC - Se pued en configura configura r como: como: D, T, lat lat ch - Distintos ti pos pos de set y r eset - Flan co de CLK (en (en a lgunos casos) progra ma ble -Su Polar Polar idad de salida progra progra ma ble - Pu erta XOR -La ma crocel crocelda da Bu ried. -à su sa lida sólo sólo puede ser utilizada utilizada int erna ment e -Realiment -Realiment acio acion de la la sa lida de MC y de pin pin de salida independientes. Si la la salida de MC no se conecta conecta al pin de salida asociado, asociado, éste pu ede ser u tilizado tilizado co como entr ada IOB.
P ines I/O I/O - Cada pin I/O se pueden config configur ur ar como: como:En En tr ada / Salida/ Bidirecc Bidireccio iona na l - El buffer buffer de salida es tr iestado. El co cont rol triesta do puede ser cont rolado: rolado: • Individualmente Individualmente por por un a MC • Globalmente Globalmente (GTS) - Cont Cont rol de slew-ra te. Se pueden au men ta r los los tiempos de conm conm ut ación ación redu cir: cir: ringin g, groun d boun boun ce y ruido.
En el fabricante Xilinx, las macroceldas de los CPLD’s están agrupadas en bloques bloques funciona funciona les (FB’s), (FB’s), que pu ede cont cont ener 18 ma croce croceldas. ldas. La cantidad de bloques funcionales varía de acuerdo a la familia, así tenemos el CPLD: XC95108 significa que contiene 108 macroceldas (6 bloques funcionales). Las principales car car acteríst icas icas de este CPLD son: 10
DIGLENSY SAC • • • • • • •
Retar do de propagaci propagacióón de 7.5ns 7.5ns de pin a pin. Fr ecuen ecuen cia de reloj reloj má ximo de 125MHz. 125MHz. 108 macroceldas macroceldas equivalentes a 2400 co compuer ta s. Ha sta 108 pines pines de I/Os. Program Program able en sistema. Ha st a 10,000 cic ciclo loss de borra do/program do/program ado. Cad a bloque bloque funcional funcional equivale a u n P AL36V AL36V18, 18, co con señ ales de r eloj, eloj, reset , ha bilitació bilitaciónn de salidas. F P G A: A: F i e l P r o g r a m m a b l e G a t e A r r a y
La lógic lógicaa de u n F PGA se divid dividee en un gran núm ero de LB LB progra progra ma bles (ma (ma s pequeños que los los de u n CP LD) y se encuentr an distr ibuidos ibuidos a t r avés avés de todo el chip chip en un mar de interconexiones programables y todo el arreglo se encuentra rodeado de bloques bloques I/O program ables. Un LB de un F PGA es menos efi efici cient ent e que un P LD típico, típico, pero en un chip FPGA co cont iene mu chos mas LB que los PLD’s PLD’s que cont cont ienen ienen en en un CPLD del m ismo ta ma ño dado. LB=CLB (X (Xilinx)
Los Los CLB’s CLB’s se comun ican ican un os con con otr os median te can ales d e conexió conexiónn ver ticales y horizontales. Los FPGA’s utilizan generadores de funciones que por lo general son mem oria s donde se precalcula el result ado correcto correcto de una función función y se alma cena cena . Las ent ra da s del gener ad or (bus de direccio direcciones) nes) selecci seleccionan onan el result ad o corr corr ecto. FP GAs GAs se program program an u tilizan tilizan do inter rupt ores progra progra ma bles eléc eléctr tr icamen icamen te . Tipos: •
•
SRAM. SRAM. Celdas Celdas de mem oria RAM RAM está tica (5 tra nsistores) que cont cont rolan puert as de pas o o mu ltiplexores Ant ifus ifus ibles: Dispositivo de dos ter min ales 11
DIGLENSY SAC
• Sin programar programar presenta u na R elev elevada ada (GW) (GW). • Al aplicar aplicar tensión elevada elevada (10,12V 10,12V)) presenta R pequeñ a.
CLB d e los FP GA´ GA´ss de XILINX La t abla de verda d de una funció unción lógi lógicca de K -entr adas se almacena en una SRAM 2K´1. 2K´1. Las líneas d e direccio direcciones nes de la SRAM son las en tr ada s. • Gran funcio uncionalidad. Una LUT de K entradas puede impleme implementa nta r cualquier fun ción ción lógic lógicaa de K ent ra das . • El nú mero de celdas celdas de m emoria emoria (2K) au ment a exponencialmente exponencialmente co con K y se hace ina ina ceptable par a m ás de 5 ent ra das Xili Xilinx nx..
12
DIGLENSY SAC
Spartan 3
13
DIGLENSY SAC
2. HER RAMIENTA RAMIENTAS S DE SÍNTESIS Y SIMULA SIMULACIÓN. CIÓN. V e n t a j a s e n e l d i s e ñ o d i gi gi t a l Son muchas las ventajas que ofrecen estos dispositivos en el diseño y la implementación de sistemas digitales, desde los más simples pasando por los de mediana hasta alta complejidad de diseño y densidad de compuertas lógicas. Se puede puedenn r e sumir en t res ventajas: ventajas: Facilidad de diseño: Las herramientas de software que dan soporte al diseño con FPGA’s y CPLD’s facilitan enormemente este proceso. Las hojas de codificación que se utilizaban en 1975 han dejado paso a los ensambladores y compiladores de lenguajes de alto nivel para lógica programable. Estas nuevas herramientas permiten expresar la lógica de los circuitos utilizando formas variadas de entrada tales como; ecuaciones, tablas de verdad, procedimientos para máquinas de estados, esquemas, hasta utilizar descripciones abstractas. La simulación digital posibilita la depuración de los diseños an tes de la pr ogram ación ación d e los los dispositivos. dispositivos. Todo Todo el equipo equipo de diseño se redu ce a un softwa softwa re que en la ma yoría yoría de los casos casos es de distr ibució ibuciónn gra t uita por por INTERNET que corr corr e en un compu compu ta dor. Prestaciones: Los FPGA’s y CPLD’s que hay en el mercado tienen tiempos de conmutación tan rápidos que hacen posible que trabaje a frecuencias muy por encima de los 100MHz. Además la tecnología empleada en la fabricación de los mismos es CMOS 14
DIGLENSY SAC
provocando un consumo de potencia menor que el de muchos dispositivos discretos de función fija formando un sistema digital. Fiabilidad. Cuan to má s complej complejoo es un circuito, ircuito, más probabilidades probabilidades ha y de que a lgun lgun a de sus pa r tes falle. falle. Pu esto que los FP GA’ GA’s y CPLD’s CPLD’s r educen el nú mer o de chips chips en los los sistemas, la probabilidad de un fallo disminuye. Además, estos dispositivos salen al mercado después de haber pasado por severos test de fabricación (al igual que los microprocesadores). Los circuitos impresos con menor densidad de CI son más fáciles de co const ru ir y más fiables. iables. Las fuentes de ru ido ta mbién se reducen. Imp lemen ta ción de sistem as digita les en FP GA GA’’s o CP LD’ LD’ss La implementación de un diseño lógico en un FPGA o CPLD se realiza us ua lmen te con con un s oftwar e de desar rollo. rollo. Se ingr esa la des cripció cripciónn lógic lógicaa del circuito circuito usando un lenguaje de descripción de hardware de alto nivel, tales como VHDL o Verilog. erilog. Tam Tam bién se podría u tilizar tilizar par a el diseño un editor esquemá tico. tico. Se debe usar un software (sintetizador lógico) para transformar el HDL o circuito ircuito esquemát ico ico en en u na lista de conexio conexiones nes (netlist). Est e net list se a justa a u na descripción de varias compuertas lógicas interconectadas para realizar la descripción del d ise ño. Usar herramientas para mapear las compuertas lógicas y sus interconexiones en el FPGA. Realizando el ajuste (fitting), que es el proceso por el cual se toma la lógica producida por la síntesis y la optimización y se coloca en el dispositivo, tr an sform sform an do la lógic lógicaa pa ra obtener el mejo mejor a juste. Una vez que la fase de implementación ha sido completada, un programa extrae el estado de los switch en la matriz de ruteo y genera una cadena de bits (bitst (bitst rea m) donde donde los unos y ceros ceros corresp corresp onde a los los switch a biert os y cerra dos. Est e bitst bitst rea m es bajado en el FPGA. La electr electr ónica en el FP GA conm conm ut a los los switchs switchs abriéndolo abriéndoloss o cerrá cerrá ndolo ndolos en respuesta a los bits bits del bitst bitst ream . En este pun to ya podemos podemos aplicar aplicar seña les de entr ada s pa ra verific verificar ar la operació operación de n uest ro diseño. diseño.
15
DIGLENSY SAC
VHDL Source Code entity leddcd is port( d: in std_logic_vector(3 downto 0); s: out std_logic_vector(6 downto 0); ); end; architecture leddcd_arch of leddcd is begin s <= "1110111" when d="0000" else "0010010" when d="0001" else "1101101"; end leddcd_arch;
routing resources
Synthesize Netlist
FPGA
Map, Place & Route
look-up table
Bitstream
configurable function block
101010010101100101 010110101010110101
Generate Bitstream
010110100101101011 010101001010101010 101010101001101010 110110110101001010 110100101011001011 001011001010101001 010101101001101001 011001100010101010 101010100110010101
Download and Test XSA Board
16
DIGLENSY SAC
Los Los program program as a utilizar utilizar en este t utorial son: son: •
•
M a x +p +p l u s I I o Q u a r t u s I I d e l a e m p r e s a A lt lt e r a d o n d e h a r e m o s la la s im i m u l a c ió ió n d e n u e s t r o s d i se se ñ o s . P r o je je c t N a v i g a t o r d e la la e m p r e s a Xi Xi li li n x q u e p r o v e e n e l H D L y editores esquemáticos, sintetizadores lógicos, ajustadores, y g e n e r a d o r e s d e b it it s t r e a m . 3 . INTRODUCCIÓN AL LENGUAJ E VHDL
El lengua je VHDL VHDL se ha convertido en u no de los los lengua jes jes de pr ogram ación ación má s utilizados en el diseño de los sistemas digitales, desde que el IEEE lo adoptó como su lenguaje HDL estándar, allá por el año 1987 hasta la actualidad son muchas de las herramientas de diseño automático actuales que incorporan al VHDL como una entra da de diseño. diseño. El VHDL fue desarrollado en el año 1983 por IBM, Intermetrics y Texas Ins tr um ent s como como iniciat iniciat iva del proyecto proyecto VHSIC (Very (Very High Speed Int egrat ed Circuits) que impulsó el DoD de los EEUU, buscando estandarizar los procesos de diseño y optimizar el manejo de la información que se generaba durante todo el desarrollo. El VHDL es un lenguaje que permite abordar el diseño de sistemas digitales simples a complejo complejoss con con u na gran capacidad de a bstr acció acción, n, si bien es cierto que n ació como un lengua je orient orient ado para el modelado modelado de de fun fun cio ciones t ermin a siendo má s usa do a nivel de sínt sínt esis de circuitos circuitos para FP GAs GAs ó CPLDs. El VHDL ofrece ofrece las siguien tes ven ta jas en el diseño de circuit circuit os: Tiene una gran capa cidad descriptiva descriptiva en diferent diferent es niveles niveles de a bstra cción. ión. Los Los circuitos circuitos diseña dos dos pu eden ser reu tilizados. tilizados. In depen den cia en la m etodolog etodología ía de diseñ o. Indepen dencia del proceso proceso de fabricación. fabricación. • • • •
En tr e las pr incipales incipales cara cter ísticas ísticas podemos podemos decir: decir: Est á basa do en senten cias que se ej ejec ecut ut an de ma nera concurren concurren te : quier quier e decir decir qu e las sentencias se ejecutan cuando ocurre un evento y pueden ejecutarse una o más al mismo tiempo (aquellas senten cias que dependan de las señales que está n cambiando serán evaluadas). Aunque también permite definir dominios en los que las acciones se su ceden en ord ord en secuen cial cial (Process). (Process).
17
DIGLENSY SAC
La concurrencia se ve claramente graficado en los circuitos electrónicos donde los componentes se encuentran siempre activos, existiendo una asociación intrínseca ent re todos todos los circuitos(v circuitos(ver er figura an ter ior); ior); ello ello hace posible posible el hecho de que si se da algún cam bio en u na par te del mism o, se produce produce un a var iació iación (en algunos casos casos casi insta nt án ea) de otr otr as señ ales. Est e co comporta mient o de los los circuitos circuitos reales oblig obligaa a que VHDL soporte estructuras específicas para el modelado y diseño de este tipo de es pecific pecificacio aciones nes de t iempos y conc concur ur ren cias cias en el cam cam bio de las señ ales.
Perm ite simular el diseño diseño y generar forma s de onda : Una de las finalidades del VHDL es modelar un circuito para observar su comportamiento a lo largo del tiempo (simulación). Esto implica que el VHDL tenga construcciones asociadas para poder realizar u na simulación. simulación. Est as const const ru cciones iones perm iten genera r distint os eventos que que se sucederán a lo largo del tiempo, afectando a las sentencias que dependan de las señales que vayan cambiando y obteniendo de esta manera la respuesta del circuito evaluado.
18
DIGLENSY SAC
El comportamiento de los circuitos en VHDL, está basado en la respuesta a estímulos, el modelo responde cuando hay un estímulo y luego espera el siguiente estímulo. Soport a dist int os niveles de descripció Soport descripción: n: El VHDL soport soport a t res es tilos de descripción descripción de circuitos : Estilo Flujo de datos: datos : donde se aborda la implementación del diseño utilizando ecuaciones ecuaciones lógic lógicas as que des criben como como es el flujo flujo de las s eña les desde la la ent ra da ha sta la salida.
Se recomien recomien da u tilizar est e estilo en el diseño de circuit circuit os combina combina cionales cionales de simp le a mediana complejidad (circuitos SSI y MSI) como son circuitos diseñados en base a compu compu ert as básicas, mu ltiplexores, ltiplexores, decodif decodific icadores adores , co compa ra dores, sum adores , etc. Estilo algorítmico: algorítmico: En donde se modela el comportamiento deseado en un alto nivel de abstracción. No hay mayor detalle del circuito a implementar, especificándose su 19
DIGLENSY SAC
funcionamiento en base a un algoritmo construido con sentencias muy parecidas a los lenguajes de pr ogram ación ación de a lto nivel. nivel.
Se recomienda utilizar este estilo para abordar el diseño de circuitos combinacionales de media nos a complejo complejos, s, circuitos circuitos secuenciales y má quina s de est ado, en el diseño de unidades de control y ruta de datos de los sistemas digitales. Es recomendado para iniciarse en la programación VHDL por su alto nivel de abstracción, aunque la ma yoría yoría de las herr am ienta s de sínt sínt esis actu actu ales tienen ciert ciert as rest ricci ricciones en cua cua nt o a su uso en su real magnitud. magnitud. Estilo estructural: En donde la descripción se realiza mediante la interconexión de componentes previamente elaborados o extraídos de algunas bibliotecas que ofrecen los fabricantes de CPLDs ó FPGAs. La descripción se realiza indicando la lista de conexiones conexiones ent re los diferen diferen tes componen componen tes que confo conform rm an el circuito. circuito.
20
DIGLENSY SAC
Se recomien recomien da est e estilo cuan do el sistem a digita l complejo complejo se ha divido en diferent es bloques funcionales y se desean unir esos bloques para la implementación del sistema final. También cuando estamos frente a un circuito que tienen bloques repetitivos y par a la crea ción ción de los los vec vectores tores de pr ueba s (testben ch) en VHDL. El t ipo de estilo ut ilizado ilizado finalmen finalmen te dependerá de las ha bilidades bilidades del diseñador diseñador en el uso de lenguajes de programación, pero no se debe olvidar nunca que lo que se está describiendo finalmente se transformará a ecuaciones lógicas que podrían ser implementadas en dispositivos FPGAs (basados en CLBs) o CPLDs (basados en macroceldas). Unidades de diseño. En un progra progra ma VHDL ha y dos dos bloques bloques básicos: básicos: La entidad y la ar quitectu quitectu ra . Entidad : La entidad, nos sirve para relacionar nuestro diseño con el mundo exterior, es decir, analizamos lo que tratamos de crear como una "caja negra", de la que sólo conocemos nocemos sus ent ra das, sa lidas y la disposició disposiciónn de las m ismas. Sintaxis: entity identificador is [genéricos] [puertos] end [i [ident dent if ific icador]; ador]; Nota : lo lo que se en cuent ra ent re corchet corchet es [] se consider consider a qu e su u so es opcio opciona na l. Cada señal en una declaración de entidad está referida a un puerto (o grupo de señales), el cual es análogo a un(os) pin(es) del símbolo esquemático. Un puerto es un objeto de info inform rm ación, ación, el cual pu ede ser usa do en expresiones expresiones y a la vez se le pueden asignar valores. valores. A cada cada puer to se le debe debe asigna r u n n ombre válido. válido.
21
DIGLENSY SAC
La declar declar ación ación de u n pu ert o const const a de: - nombre: identific identificaa a un pin de la ent idad flujo de la señ al. - modo: ind ica el flujo - tipo: indica el conjunt conjunt o de valores que pued e tomar un objeto, en est e cas cas o el puerto. El modo determ ina como como las las sen ten cias de la ar quitectura pueden a cceder cceder al puer to. Tenem os 4 tipos de modos: modos: - in: es de sólo lectu lectu ra (no se pu ede escribir). - out : es de sólo sólo escritu ra (no se pu ede leer). - buffer: buffer: se co comporta como un pu ert o de sa lida (out (out ) que que se pu ede leer. - Inout : es de tipo bidireccio bidirecciona na l, quiere decir que se pu ede leer y escribir. Sólo para fines de simulación todo puerto puede tener un valor por defecto que determina el valor inicial de la señal, los puertos de entrada pueden dejarse desconecta desconecta dos si tien en u n valor por defecto. defecto. Arquitectura : En la declaración de la arquitectura es donde reside todo el Arquitectura: funcionamiento de un programa, ya que es ahí donde se indica que hacer con cada entr ada para obtener la salida. La arquitectura es el co conjunto de detalles detalles interiores de la caja caja n egra egra . Sintaxis: ar chitectur e nombre of of ent idad is - - Zo Zona na de decla ra ció ciónn begin sent enci encias as concurr concurr entes; sent enci encias as concurr concurr entes; sent enci encias as concurr concurr entes; end nombre; Para describir una arquitectura podemos utilizar tres estilos, teniendo cada uno su propio nivel de abst ra cció cción: n: - Est ilo algorít algorít mico (beha (beha viora viora l) - Es t ilo flujo de da tos (dat aflow) aflow) - Estilo estructura l (stru (stru ctur e) Cada estilo está basado en sentencias concurrentes que determinan el grado de abstracción del circuito a diseñar, así tenemos que el estilo algorítmico se caracteriza por ut ilizar ilizar las s ent encias de los lengua lengua jes de alto nivel, el estilo flujo flujo de dat os bas ado en sentencias que asignan valores a una señal y el estilo estructural que permite inter conectar componentes ya elabora elabora dos. dos. La descripción de una arquitectura se compone de un conjunto de sentencias concurrentes que se ejecutan en forma asíncrona entre sí y se comunican mediante señales. Estos procesos que se ejecutan concurrentemente deben poder comunicarse (sincronizarse) entre ellos. El elemento necesario para comunicar dos procesos es la seña l (signal). (signal). 22
DIGLENSY SAC
En cada un o de los los estilos de modelado se ut iliza iliza la sen ten cia cia de as ignación ignación de seña les: <=, <=, para esto hay que tener en cuenta que: -
Las señ ales a a mbos lados lados del opera opera dor de as ignación ignación (<=) (<=) deben ser del mism o tipo. Si ha y varias a signacio signaciones nes a la m isma señal en un mismo proceso proceso,, prevalece prevalece el valor valor de la ú ltima asigna ció ción. Las a signa signa ciones iones a señales p ueden a parecer en sent encias encias concurren concurren tes (estilo (estilo flujo de da tos) o sent encias secuenciales (estilo algorít algorít mico). mico).
En la arquitectura las sentencias concurrentes hacen referencia en todo momento a seña les, esta esta s seña les pueden ser puer tos. La seña l es un tipo tipo de obj objeto eto en en VHDL que que puede cambiar de valor valor y tiene u n m odelo de ret ar do asoc asociado. Ent re los modelo modeloss de r etar do tenemos: - Retar do de tipo inercial: inercial: es es el ret ar do asoc asociado a las compuer ta s digitales. - Retardo de tipo transporte: es el retardo asociado por las interconexiones que existen existen entr e los diferent diferent es circuitos. circuitos. Tipo: El VHDL es un lenguaje de programación donde los objetos a utilizar (señales, Tipo: variables, constantes) deben tener asignado un tipo. El tipo define el conjunto de valores valores que pu eden t oma r los objetos. objetos. Así tenem os por por ejemplo el tipo bit (declar (declar ad o en el paquet e St an dar d de la biblio biblioteca teca STD) co como: TYPE BIT I S ('0', '1') Indica que el tipo bit sólo puede tomar los valores: '0' y '1'. Este es un tipo básico y con el ya ya podemo podemoss crear pue rt os y nodos nodos int ernos par a int erconectar erconectar los los circuitos circuitos digitales. digitales. Pero ha y un inco inconveniente: este tipo no permit permit e implementa r componentes componentes cuya sa lida lida pueda tomar un valor de alta impedancia (Z), no se pueden realizar operaciones ar itm éticas (sólo (sólo lógic lógicas as ) ya que no ha y implementa das fun ciones iones pa ra ta l fin fin con con est e tipo y tampoco pueden unirse más de una señal sobre salidas de varios circuitos porque el tipo bit tampoco tiene asociado una función que permita resolver las múlt iples iples a signa signa ciones iones a un mismo obje objeto. to. Por Por est a ra zón zón es preferible preferible utilizar utilizar el tipo de dato std_logic que se encuentra en el paquete STD_LOGIC_1164 de la biblioteca IEE E. El tipo std_lo std_logic es un tipo de dato multivalua do como como se muest ra en pa rt e de la descripción del paquete:
23
DIGLENSY SAC
El tipo de da to ut ilizad ilizad o por por lo genera l st d_logic d_logic (que es u n s ub-tipo del tipo std _ulogic ulogic)) por por las vent ajas que hem os menciona menciona do en el párr afo an ter ior. ior. Pa ra poder poder ut ilizar ilizar est e tipo de dato en el programa VHDL debemos declarar previamente en que paquete se encuen tra y a que biblio biblioteca pert enece enece el paquete, par a est o utilizamos utilizamos las siguientes sentencias:
Con ello tenemos la posibilidad de utilizar todos los elementos que se encuentran declarados en los paquetes: STD_LOGIC_1164, STD_LOGIC_ARITH y STD_LOGIC_UNSIGNED. En el paquete STD_LOGIC_1164 encontramos la declar declar ación ación de tipos y subt ipos ipos de da tos, fun fun ciones ciones de convers convers ión ión de un tipo a otr o. En el paquete STD_LOGIC_ARITH encontramos funciones aritméticas, lógicas y de relación que se puede utilizar entre los objetos declarados con tipos de datos STD_LOGIC ó STD_LOGIC_VECTOR. El paquete STD_LOGIC_UNSIGNED complement a a l paquet e STD_LOGIC_ STD_LOGIC_ARIT ARITH H con con operaciones operaciones a rit mét icas icas s in t ener en cuen ta los los bits de signo. signo.
24
DIGLENSY SAC
4 . ESTILO FLUJ O DE DA DATOS TOS PARA EL DISEÑO DI SEÑO DE CIRCUITOS COMBINACIONALES Este estilo se caracteriza por utilizar las asignaciones concurrentes a señales (ACS). (ACS). Tenem os 3 tipos de ACS: - ACS ún ica ica - ACS cond condicio iciona na l - ACS selectiva Esta s sentencias sentencias t erminan asignan asignan do un valor valor a una señal después de evaluar evaluar t oda una expresión, esta evaluación se realiza cuando ocurre un evento en una de las señales que se encuentr an a la derecha del símbolo símbolo de asigna ción ión a señal (<=) (<=). ACS ú nica : se basa en expresiones muy parecidas a las ecuaciones booleanas, en la ma yoría yoría de los los casos se expresan expresan en su ma de tér minos producto. producto. Sintaxis: seña l <= expresión; expresión; en la expresión pueden aparecer valores, señales, operadores lógicos o aritméticos. Veamos algun os ejemplos: enable <= ‘1’ ; z <= a a nd b or c ; f <= p1 + p2; temp <= var var 1 & var var 2; y <= “10101” “10101 ”; ACS condicional : se basa en expresiones que deben evaluar una condición y dependiendo de la respuesta terminan asignando el resultado de la expresión a la señal. Sintaxis: señ al <= expresión1 wh en co condició ndición1 n1 els e expresión2; En la declaración anterior, si la condición1 es verdadera entonces la señal toma el resultado de la expresión1, caso contrario (si condición1 es falsa) entonces la señal toma el r esulta do de la la expresión2. La sin ta xis de la ACS co condicio ndiciona l en su form a gener al es: señal <= expresión1 when condición1 else expresión2 when condición2 else expresión3 when condición3 else ........ expres ió iónN nN wh en cond cond ic ició iónN nN e lse expres ió iónM nM ; En la declara declara ción ión a nter ior ior s e nota que hay u na prioridad prioridad en la a signa signa ción a señal, por por ejemplo para que la señal tome el resultado de la expresión3 debe cumplirse que la condició condición1 n1 y condició condición2 n2 sea n falsa s y la condició condición3 n3 sea verdader a. La p rioridad la tiene la condición1, si esta no se cumple se pasa a evaluar la condición2, si esta no se
25
DIGLENSY SAC
cumple se pasa a evaluar la condición3 y así sucesivamente se evalúan todas las condicio ndiciones ha sta qu e cum cum pla alguna de ellas. ellas. Hay que aclarar que siempre se termina evaluando una expresión y asignando la respuesta a la seña l así n o se cumpla cumpla ningun a condici condicióón. Veamos algun os ejemplos: - compuer ta AND:
C <= < = A wh en B =’ = ’1’ els e ‘0’ ‘0’;; -
mu ltiplexor ltiplexor de 2 a 1:
-
Z <= A when SE L=’0’ L=’0’ else els e B; en el s iguiente circuito:
-
F <= A wh en Z=’1’ Z=’1’ els e B when Y =’1’ else C when X =‘1’ else ‘0’; decodific decodificad ad or de 3 a 8;
E NTRADA NTR ADA <= C & B & A; TEM POR AL <= “11111110” whe n EN TRADA = “000” “000” else 26
DIGLENSY SAC
“11111101” when ENTRADA = “000” else “11111011” when ENTRADA = “000” else “11110111” when ENTRADA = “000” else “11101111” when ENTRADA = “000” else “11011111” when ENTRADA = “000” else “10111110” when wh en EN TRADA = “000” else “01111111” ; Y <= TE MP ORAL wh en E NA =’1’ =’1’ else “11111111”; 1111 1111”; ACS selectivo : se utiliza mucho para implementar tablas de verdad de pequeños circuitos. Se evalúa una expresión (la que sigue a la palabra with) y de acuerdo al valor valor que tome se le le asigna a la seña l la la respu esta de un a expresión. expresión. Veamos Veamos su sintaxis: with expr esión select select señ al <= expres expres ió ión1 n1 when valor1, expr esió esión2 n2 when valo valor2, r2, expresión3 expresió n3 wh en valor3, ............ expresiónN expresió nN when valo valorN rN ; Esta sentencia requiere que se especifique todos los posibles valores que puede tomar la expresión expresión a evaluar, por lo que genera lmente la sen tencia encia se escribe escribe de la siguiente siguiente manera: with expr esión select select señ al <= expres expres ió ión1 n1 when valor1, expresión2 expresió n2 wh en valor2, expresión3 expresió n3 wh en valor3, ............ expresió ex presiónN nN when oth ers; Con la palabra others se está cubriendo el resto de valores que no han sido especific especificad ad os en la sent encia. Veam Veam os algunos ejemplos: -
compuer ta AND:
-
with A select C <= B when ’1’ ‘0’ when ‘0’; Asum imos q ue A sólo pu ede t oma r los valore s de d e ‘0’ ‘0’ y ‘1’ ‘1’ (tipo bit); mu ltiplexor ltiplexor de 2 a 1:
wit h SE L select Z <= A when wh en ‘0’ ‘0’,, B when oth oth ers; 27
DIGLENSY SAC
5 . ESTILO ALG ALGORITMICO ORITMICO P ARA EL DISEÑO DE CIR CUITOS COMBINACIONALES COMBINACIONA LES Y SECU ENCIALES El estilo algorítmico se basa en una sentencia concurrente que agrupa un conjunto de sentencias que se ejecuta de manera secuencial, esta sentencia es el Process. La sentencia process permite describir secuencialmente el modo en que se calcula calcula n un conjun conjun to de señales. Sintá cticamente existen existen dos dos t ipos: ipos: Procesos con lista de sensibilidad (cuyo cuerpo no puede contener sentencias wait) - Cada vez que hay un evento en cualquiera de las señales de la lista, el proceso se activa, evaluándose todas las sentencias de manera secuencial hasta el final del proceso. Si hay asignaciones a señales, estas tomaran el nu evo valor sólo en el momen to en que el pr oceso oceso se suspen de. - Se ejecuta (en tiem po de simu lación lación 0) todo el código código cont cont enido en el cuer po del pr oceso. oceso. Sintaxis: [etiqueta:] process (lista de sensibilidad) [declaraciones] begin [sentencias secuenciales;] end pr ocess [etiquet a]; •
•
•
Pr ocesos cesos sin lista de sens ibilidad ibilidad (cuyo (cuyo cuer cuer po debe debe cont cont ener sent encias wait ). - Se ejecuta (en tiempo de simulación 0) hasta que se encuentre una sentencia wait - El proceso proceso se suspende y se realizan las a signacio signaciones a seña les. - El pr oceso oceso se vuelve vuelve a a ctivar cua ndo la condic condició iónn de esper a se sa tisfaga . - Cuando la ejecución alcanza el final del cuerpo del proceso, se continúa ejecut a nd o el código código por por el in icio. icio. - Un proceso proceso sin lista de sens ibilidad ibilidad qu e no cont cont enga sent encias wait, bloq bloquea uea el simulador. Sintaxis: [etiquet a:] pr oc ocess ess [declaraciones] begin [sentencias secuenciales;] wait on lista de sens ibil ibilidad; idad; end process [etiqueta]; Los procesos con lista de sensibilidad se usan comúnmente para modelar circuitos combinacionales y secuenciales. Hay que tener en cuenta que: - con listas de sensibilidad completa se utiliza para modelar hardware combinacional. - con listas de sensibilidad parcial se utiliza para modelar hardware secuencial.
28
DIGLENSY SAC •
Ent re las se nt encias encias secuenciales secuenciales que podemo podemoss ut iliz ilizar ar tenemos: - sent encia encia de a signació signación a seña l y var var iable. - sent encia if – th en – end if. if. - sent encia encia case – when. - sent encia for for – wh ile – loop. loop. - sentencia wait. - sent encia encia n ext, exit. exit.
Asignación a señ al y asignación a va riable En VHDL encontramos tres tipos de objetos: las señales, las variables y las constante. Las señales y las variables pueden cambiar de valor, la diferencia entre ellos está en el momento en que toman sus valores respectivos. Mientras que la var iable toma el valor valor en el moment moment o en que es as igna igna do, do, co con la señal pr ograma mos el valor valor qu e va a tomar en u n futu ro cercano. cercano. Por Por ejemplo ejemplo:: Process var iable a : st d_logic d_logic;; sign al b: st d_logic; d_logic; begin a := ‘0’; 0’; -- a t oma el valor va lor de ‘0’. 0’. b <= ‘0’; 0’; -- prog pr ogra ra m am os para pa ra que b t ome el valor de ‘0’. 0’. ....... end pr ocess; ocess; Las señales como ya hemos analizado tienen asignado un modelo de retardo, que en el caso de u n proceso proceso la la seña l tomar á el valor valor progra progra ma do recién recién cuan do el proc proceso se suspenda. Analicemos el siguiente caso, supongamos que se tiene una variable cuenta cuyo últ imo valor qu e t omó fue fue “1001”(9) “1001”(9),, ent onces: Pr ocess ocess (clk) Variable cuenta: std_logic_vector(3 downto 0); begin if clk=’1’ clk=’1’ an d clk’even clk’even t t h en cuent a := cuent cuent a + 1; if cuenta = 10 t hen cuen t a := “0000” “0000”;; end if; if; end if; salida <= cuent cuent a; end pr ocess; ocess; Cuan do oc ocur ra un flanco de subida se incremen incremen ta el valor valor de cuent a y ya vale 10 por lo que cuent a regresa a 0. El valo valorr fina fina l de cuent a se asigna a la seña l salida. salida. Analicemos el segundo caso, supongamos que se tiene una señal cuenta cuyo último valor qu e t omó fue fue “1001” (9), (9), ent onces: 29
DIGLENSY SAC
Process(clk) begin if clk=’1’ clk=’1’ an d clk’even clk’even t t h en cuent a <= cuent cuent a + 1; if cuent a = 10 t hen cuen ta <= “0000” “0000”;; end if; if; end if; end pr ocess; ocess; Cuan do oc ocurr a u n flanco flanco de subida subida cuenta vale 9 y se programa programa para que tome el valor valor d e 10, cua cua ndo se pr egunt a s i cuen cuen ta llegó llegó a 10 no sat isface isface la condició condiciónn por lo que cuenta no se borr borr a pa san do a suspen derse el proceso proceso y recién recién cuent a t oma el valo valorr de 10. Cuando ocurra el siguiente flanco de subida cuenta vale 10 y se programa para que tome el valor de 11, pero la condición cuenta = 10 ya se cumple por lo que se rea liza liza otra p rogram ación ación a cuent a par a que tome el valor valor de 0. En u n proceso proceso se puede tener más de una asignación a una misma señal, si esto ocurre la última asignación asignación es la que quedará finalmen te. Las variables pueden crearse en el interior de un proceso, fuera de el no pueden ser visualizadas, visualizadas, mientras que las señales se pueden pueden ut iliz ilizar ar para interco interconectar nectar más de un proceso. Sent encia if – then – endif Se utiliza utiliza pa ra evaluar u n conjunt conjunt o de sentencias si es que se cum cum ple una deter minada condición. Sintaxis: If condició condiciónn t hen conjunt co njunt o de senten ci cia; a; [elsif condición2 condición2 th en] conjunt p de sent enci encia; a; [else] conjunt co njunt o de senten ci cia; a; end if ; Algun Algun os ejemplos de im plemen ta ción ción de circuitos combina combina cionales. cionales. - mu ltiplexor ltiplexor de 2 a 1:
Process(A,B,SEL) begin if SE L = ‘0’ ‘0’ t h en Z <= A ; 30
DIGLENSY SAC
else Z <= B; end if ; end pr ocess ocess ; -
en el s iguiente circuito:
Process(A,B,C,X,Y,Z) begin if Z =’1’ =’1’ t h en F <= A; els if Y = ‘1’ ‘1’ t h en F <= B; els if X=’1’ X=’1’ t h en F <= C; end if ; end pr ocess ocess ; -
decodific decodificad ad or de 3 a 8;
EN TRADA <= C & B & A; Process(ENTRADA,ENA) begin If E NA=’1’ NA=’1’ t h en if E NTRADA NT RADA = “000” t h en Y <= “11111110”; 11111 110”; elsif els if ENTRADA EN TRADA = “001” “001” th en Y <= “11111 “11111101”; 101”; elsif els if ENTRADA EN TRADA = “010” “010” th en Y <= “11111 “11111011”; 011”; elsif els if ENTRADA EN TRADA = “011” “011” th en Y <= “11110 “11110111”; 111”; elsif els if ENTRADA EN TRADA = “100” “100” th en Y <= “11101 “11101111”; 111”; elsif els if ENTRADA EN TRADA = “101” “101” th en Y <= “11011 “11011111”; 111”; 31
DIGLENSY SAC
elsif els if ENTRADA EN TRADA = “110” “110” th en Y <= “10111 “10111111”; 111”; else Y <= “01111111”; end if ; else Y <= “11111111”; end if ; end pr ocess ocess ; Para tener éxito en la implementación de los circuitos combinacionales se recomienda colocar todas las entradas en la lista sensible y si se utiliza la sentencia if se debe ten er implem ent ad as t odas las combinacio combinaciones nes posibles posibles incluso incluso la condic condició iónn else. Sentencia Case – wh en Perm ite esco escoger un conjunt conjunt o de sentencias a evaluar dependiendo de una determ inada expresión. Sintaxis: case expresión is when valo valor1 r1 => conjun conjun to de sent enci encias; as; when valo valor2 r2 => conjun conjun to de sent enci encias; as; ...... when oth ers => co conjun to de sent encias; end case ; Algunos ejemplos de circuitos combinacionales: -
decodific decodificad ad or de 3 a 8; E NTRADA NTR ADA <= C & B & A; Process(ENTRADA,ENA) begin If E NA=’1’ NA=’1’ t h en case ENTRADA is when wh en “000” => Y <= “11111 “11111110”; 110”; wh en “001” => Y <= “11111101”; “11111101”; when wh en “010” => Y <= “11111 “11111011”; 011”; when wh en “011” => Y <= “11110 “11110111”; 111”; when wh en “100” => Y <= “11101 “11101111”; 111”; when wh en “101” => Y <= “11011 “11011111”; 111”; when wh en “110” => Y <= “10111 “10111111”; 111”; when other s => Y <= “01111111” “01111111”;; end case; else Y <= “11111111”; end if ; end pr ocess ocess ;
-
Diseño de una ALU: Process(A,B,OP) begin case OP is wh en “000” 000 ” => F <= A + B ;-;- - ADD 32
DIGLENSY SAC
wh en “001” => F <= A – B ;- - SU B when wh en “010” “010” => F <= A + 1; - - IN C wh en “011” “011” => F <= A - 1; - - DE C wh en “100” => F <= A a n d B ; - - AND wh en “101” => F <= A or B ; - - OR wh en “110” 110 ” => F <= A xor B ; - - XOR when othe rs => F <= not A ; - - NOT end case ; end pr ocess ocess ; La sentencia CASE requiere que todos los posibles valores que pueda tomar la expresión OP sean especificados, por esta razón la última condición es la palabra OTHERS. Sen ten cia F OR – WHILE LOOP Se utiliza utiliza pa ra evaluar u n conjunt conjunt o de sentencias de man era r epetitiva, permitiendo la la const ru cció cciónn de bucles. Sint axis: [for [f or cont control rol in indice1 to/down to/downtt o ind indice2] ice2] | [while condició condición] n] loop loop conjunt co njunt o de sentencias; en d loop loop ; La presencia de los corchetes indican que su uso es opcional, por lo que se podría const ru ir un bucle bucle infinito infinito de la la siguient siguient e maner a: loop Conjunto de sentencias; end loo loop; p; Se recomienda evitar el uso de este tipo de construcciones, ya que esto implicaría que tengam os que ut ilizar ilizar en el int int erior erior del bucle bucle la sent encia encia wait . Veam Veam os algun os ejemplos ejemplos de la implement ación: -
Implementa ción ión de un cont ador de bits: implement implement am os en el módulo módulo FPGA un circuito que indique cuántos Switch se encuentran en el estado alto. La can tidad s e debe indic indicar ar en u n display de 7 segmentos.
33
DIGLENSY SAC
En el ciclo for se evalúa cada una de las entradas de DATA e incrementa la variable CUENTA cua cua ndo una de las ent ra das sea ‘1’ ‘1’.. Al Al realizar la asignación asignación a un a var iable asegura mos que dic dicha asignación asignación se rea lice lice de man era inm ediata . -
Implement ación ación de u n m u ltiplexor ltiplexor d e 8 a 1 u tilizand o el cicl cicloo for. for. Librar y ieee; ieee; us e ieee.s td _log _logic_ ic_1164.all; 1164.all; use ieee.std_log ieee.std_logic ic_arit _arit h.all; use ieee.st ieee.st d_lo d_logic_ gic_un signed.all; entity mu x8a1 is is 34
DIGLENSY SAC
port por t ( ent ra da: da : in std_logic std_logic_v _vector(7 ector(7 downt o 0); sel: in st d_logic d_logic_vec _vector tor (2 downt o 0); 0); z: ou ou t st d_logic) d_logic);; end mux8a1; ar chit ectu ectu re a lgorit lgorit mo of of mu x8a1 is begin Process(entrada,sel) begin for for i in 0 t o 7 loop loop if i = sel th en z <= entr ada (i); i); end if; if; en d loop; loop; end pr ocess; ocess; end a lgoritm lgoritm o; En est e ejemplo el bucle for for est á forma forma do por una as ignación ignación a s eña l que sólo sólo será evalua do un a sola vez, vez, con con esto as egur am os un a corr corr ecta implem ent ación ación del circuito. circuito. IMPLEMENTACION IMPLEMENTACI ON DE CIRCUITOS SECUENCIALES Los elementos de memoria se implementan con la sentencia if, aprovechando el efecto mem oria qu e tien e debido al no uso de la condició condiciónn else. Ana licemos licemos el siguient e código código VHDL: Process(A,B) begin If A=’1’ A=’1’ t h en Q <= B; else Q <= ‘0’; end if; end pr ocess; ocess; Es la implementación de una compuerta AND, se aprecia que si no se cumple la condició ndiciónn de t odas m aner as debe haber un a a signa signa ción ión a la seña l de salida. Ahora Ahora , volvamos volvamos a an alizar el siguient e código código VHDL: Process(A,B) begin if A=’1’ then Q <= B; En d if; if; En d process; process;
35
DIGLENSY SAC
Es la implementación correspondiente a un latch donde A realiza la función del habilitador y cuando se encuentre en nivel alto cualquier cambio de B hará que se refleje directamente a la salida. Ahora, que pasa si A=’0’ y B cambia de valor, el Pr ocess ocess se d ispa ra per o como como la cond cond ició iciónn n o se cumple no afecta afecta a Q, mem orizando de esta m aner a el valo valorr que tenía Q. Es importante notar que las dos entradas del circuito están presentes en la lista sensible, esto esto ha rá que cualquier cam bio en A ó B har á que t odo el proce proceso so se dispare. Ahora Ahora , an alicemos el siguien te código código VHDL: VHDL: Process(A) begin if A=’1’ then Q <= B; En d if; if; En d process; process; Es la implementación de un Flip – Flop que dispara por flanco de subida, donde la ent ra da A ha ce la la fun ción ción de la señ al de r eloj y cad cad a vez que A cam cam bie de valor valor sólo sólo en el flanco de subida hará que Q tome el valor de B, memorizando el valor de Q bajo cualquier otra condición. Note que las sentencias del proceso es igual a la implementación anterior (latch), la diferencia está en las señales que aparecen en la lista sen sible, que en el últ imo cas cas o es sen sible sólo sólo a la s eña l A. A. -
Implemen ta ció ción de un flip-f flip-flo lopp tipo D Librar y ieee; ieee; Use Us e ieee.st d_logic d_logic_1164. _1164.all; all; Use ieee.std_log ieee.std_logic ic_arit _arit h.all; Use ieee.std_logic_unsigned.all; En tit y ff_ ff_dd is P ort ( D: in std _logi _logic; c; Clk: in st d_logic d_logic;; Q: out st d_logic) d_logic);; End ff_d;
-
Architectu re algoritm o of of ff_ ff_dd is Begin Process(clk) Begin If clk=’ clk =’1’ 1’ t h en Q <= D; En d if; if; En d pr ocess; En d algoritm algoritm o; Implem ent ación ación de un d ivisor ivisor de frecuen frecuen cia cia
36
DIGLENSY SAC
En la tarjeta de desarrollo DigiLab 2SB se cuenta con oscilador de 50MHz, permitiendo trabajar con frecuencias de reloj en el sistema desde DC hasta 350MHz 350MHz (esto se logra logra usa ndo los los DLL int erno con con qu e cuenta los los F PGA Spar ta n II). El oscilador está conectado de manera permanente al pin GCK0 (pin 182). En este ejemplo se enseña a implementar como dividir la frecuencia de la señal de reloj. Analicemos Analicemos el siguient e progra progra ma :
En el lista lista do anter ior ior se est á implement an do un cont cont ador de 5000 500000 0000 001, 1, la señal de reloj conmutara cada vez que contador llegue a 50000000 ( este tiempo viene a hacer un segun do). do). La instru cción ión rising_edge rising_edge es par a asegurar nos que el cont ador será increme incrementa nta do sólo en el flan co de su bida d e clk. clk.
37
DIGLENSY SAC
-
Implemen ta ció ción de un cont cont ador binar io de 4 bits. Libra Libra ry ieee; Use Us e ieee.st d_logic d_logic_1164. _1164.all; all; Use ieee.std_log ieee.std_logic ic_arit _arit h.all; Use ieee.std_logic_unsigned.all; En tit y co cont ador is Port ( clk: in st d_logic; d_logic; q: buffer st d_logic d_logic_v _vector ector (3 downt o 0)); 0)); End contador; Architectu re of algoritm o of of conta conta dor is Begin Process(clk) begin if clk=’1’ and clk’event then q <= q + 1; end if; if; end pr ocess; ocess; end a lgoritm lgoritm o;
-
Implementación de un contador binario de 4 bits con una señal clear asíncrona y una seña l up síncrona. síncrona. Librar y ieee; ieee; Use Us e ieee.st d_logic d_logic_1164. _1164.all; all; Use ieee.std_log ieee.std_logic ic_arit _arit h.all; Use ieee.std_logic_unsigned.all; En tit y co cont ador is P ort (clk: (clk: in s t d_logic d_logic;; clear clear : in st d_logic d_logic;; up : in st d_logic d_logic;; ena en a : out st d_logic_ d_logic_vector( vector( 0 to 3); disp lay : out st d_logic_ d_logic_vector(0 vector(0 to 6)); 6)); En d co cont ador; Archit ectur e algoritm o of cont cont ad or is signa l conta conta : st d_logic d_logic_v _vector ector (0 (0 to 3); 3); Begin Process(clk,clear) varia ble cont cont a1: int eger ran ge 0 to 50000001; 50000001; Begin If clear clear = '1' then cont cont a <= "0000"; "0000"; elsif rising_ edge(clk) edge(clk) th en cont cont a1:= conta conta 1 +1; if cont cont a1 = 50000000 th en cont cont a1:= 0; if up='1' th en 38
DIGLENSY SAC
cont cont a <= conta conta + 1; else cont cont a<= cont cont a - 1; 1; end if; if; end if; end if; if; end pr ocess; ocess; ena<="0111"; with cont cont a select disp lay <= "0000001" "0000001" when "0000", "0000", "1001111" whe n "0001", "0001", "0010010" wh en "0010", "0010", "0000110" when "0011", "0011", "1001100" when "0100", "0100", "0100100" when "0101", "0101", "0100000" when "0110", "0110", "0001111" wh e n "0111", 0111", "0000000" when "1000", "1000", "0001100" when "1001", "1001", "0001000" when "1010",--a "1100000" when "1011",--b "0110001" when "1100",--c "1000010" when "1101",--d "0110000" when "1110",--e "0111000" when other s; end a lgoritm lgoritm o;
IMP LEME NTACIÓN DE MÁQUINA MÁQUINA DE E STADO En el siguiente gráfico se muestra las consideraciones a tener en cuenta para la implement implement ació ación de u na máquina de estado:
Donde: EP : estado presente. ES: estado siguient siguient e y se determ ina con con las ent ra das y el esta do present e. La sa lida lida pu ede depender depender de la entr ada y el esta do present e (MEF (MEF de Mealy) Mealy) ó sólo sólo puede depender del esta do presen te (MEF de Moore). Moore).
39
DIGLENSY SAC
La señal de RESET es import import ant e por por que de esta m aner a forzamos forzamos a que la máquina inicie en u n es ta do conoc conocido. ido. Ha y var var ias fo form as de implement implement ar u na máquina de estado, la más u tilizadas tilizadas son: MEF d e Mealy: ut ilizando ilizando dos dos proceso procesos, s, uno que dependa de la señ al de reloj y que se encargue encargue de actualizar actualizar el estado presente. Process(clk, reset) Begin If res et =’1’ =’1’ t he n EP <= S0; S0; elsif clk=’1’ clk=’1’ an d ck’event ck’event t hen EP <= ES; end if; if; end pr ocess; ocess; el segundo proc proceso se encargar encargar á de determ inar el estado siguiente siguiente con los cam cam bios bios que se produzcan en las entradas y en el estado presente, también actualizará las salidas ant e las variacio variaciones nes de la entr ada en un determinado estado. estado. Process(entradas,EP) begin ES <= EP; Case EP is When S0=> - - opera opera ciones iones a rea lizar lizar en el esta do S0. S0. - - actu actu alizar el est ado siguiente. - - actu actu alizar las salidas. When S1=> - - opera opera ciones iones a rea lizar lizar en el esta do S1. S1. - - actu alizar el estado siguient e. - - actu actu alizar las salidas. When SN=> - - opera ciones iones a rea lizar lizar en el esta do N - - actu actu alizar el est ado siguiente. - - actu actu alizar las salidas. En d case; case; En d pr ocess; MEF de Moore: Moore: ut ilizando ilizando un sólo proceso proceso que dependa exclusivam exclusivam ent e de la la señ al de reloj y que todos todos los procesos procesos se rea licen licen en la t ra ns ició iciónn de u n est ad o a otr o. Pr ocess(c ocess(clk, lk, r eset) Begin If res et =’1’ =’1’ t he n EP <= S0; S0; elsif clk=’1’ clk=’1’ an d ck’even ck’even t t hen he n case E P is when S0 => - - operaciones peraciones a realizar en el esta do S 0. - - definir definir el nu evo esta do actu actu al 40
DIGLENSY SAC
- - actua lizar lizar la salida. when S1 => - - operaciones peraciones a rea lizar lizar en el esta do S 1. - - definir definir el nu evo esta do actu actu al - - actua lizar lizar la salida. when Sn => - - opera opera cio ciones a r ealizar en el estado N. End case;
- - definir definir el nu evo esta do actu actu al - - actua lizar lizar la salida.
end if; if; end pr ocess; ocess; Aunque también podemos utilizar dos procesos para implementar una máquina de est ado de Moore, Moore, veam veam os el siguien te ejemp lo: lo: -
Implementar un circuito que detecte la presencia de la cadena de bits en una línea línea de tr an smisión: smisión: 01101 01101
Considere Considere la posible ocurren cia cia de un tr asla pe.
El diagra ma de esta do utilizando utilizando la ME de Moo Moore es:
library ieee; 41
DIGLENSY SAC
us e ieee.s td _log _logic_ ic_1164.all; 1164.all; entit y detector detector is port (Dat a clk z end det ector; ector;
: in st d_logic d_logic;; : in st d_logic; d_logic; : out st d_logic) d_logic);;
ar chitectu re moore of of det ector is type estados is (S0,S1,S2,S3,S4,S5); signal ep,es: esta dos; dos; begin reloj: process(clk) begin wait un til clk='1' clk='1';; ep<=es; end process process reloj; reloj; combi: process(ep,Data) begin es <= ep; case ep is when S0 => z <='0'; <='0'; if Dat Dat a='0' th en es <=S1; end if; if; wh en S1 => z <='0'; <='0'; if Dat a='1' th en es <=S2; end if; when S2 => z <='0'; <='0'; if Dat a='0' th en es <= S1; else es <= <= S3; end if; if; when S3 => z <='0'; <='0'; if Dat a='0' th en es <= S4; else es <= <= S0; end if; if; wh en S4 => z <='0' <='0';; if Dat a='0' th en es <= S1; else es <= <= S5; end if; if; when S5 => z <='1'; <='1'; if Dat a='0' th en es <= S1; else es <= S3; end if; if; end case; end pr ocess ocess combi; combi; end m oore; Simula ció ción del circuit o rea lizado ut ilizan ilizan do el el Max+Plus II d e Alter Alter a.
42
DIGLENSY SAC
-
Se desea diseñar un sistema para el control de una puerta electrónica, la persona debe oprimir un botom para pasar del ambiente A al B. La puerta se abre por la acció acciónn de u n m otor por por 30 segundos, si la persona vuelve a pu lsar el botom botom la cuen ta de 30 segundos comienza comienza denu evo. evo.
A
Motor
B
El diagram a de est ado utilizan utilizan do la ME de Moore Moore es: Y=0
1 Y =
s0 M=0
0 = a t n o c
s1
s2
M=1
M=1
c o n t a = c o n t a + 1
Y=0
Libra Libra ry Ieee; Use Us e ieee.st d_logic d_logic_1164.all; _1164.all; Use ieee.std_Logic_arith.all; Use ieee.std_logic ieee.std_logic_unsigned.all; _unsigned.all;
conta=30
Entity puerta Is Por t( y,clk :in st d_logic d_logic;; motor,ena: out std_logic); end puerta puerta ; Architectu rchitectu re ma quina of puert a Is Type Es ta dos is (S0,S1,S2); (S0,S1,S2); Signa Signa l ES,EP: Est ados; Signal cont cont a :integer r an ge 0 to 30; 30; begin ena<='1'; Process(Clk) varia ble cont cont a1: int eger ran ge 0 to 50000001; 50000001; begin if rising_edge(clk) then 43
DIGLENSY SAC
EP<=ES; cont cont a1:= cont cont a1 +1; if cont cont a1 = 50000000 th en cont cont a1:= 0; If EP =S2 then cont cont a<= cont cont a+1; elsif EP =S1 then conta<=0; end if; if; end If; end I f; end Pr ocess; Process(y,EP) begin ES<=EP; CASE CASE E P IS wh en S0=> m otor<='0'; tor<='0'; if y='0' y='0' th en ES<=S1; Else ES<=S0; end If; when S1=> motor<='1'; motor<='1'; ES<=S2; when S2=> motor<='1'; motor<='1'; if y='0' then ES<=S1; elsif cont cont a=29 t hen ES<=S0; Else ES<=S2; end if; if; end Case; end pr ocess; ocess; end maquina;
44
DIGLENSY SAC
6. ESTILO E STRUCTURA STRUCTURAL L El estilo estructural nos permite realizar un diseño digital utilizando componentes anteriormente elaborados (ya compilados y almacenados en la biblioteca work) ó componentes desarrollados por los fabricantes de los FPGAs ó CPLDs que se en cuen tr an en u na biblio biblioteca. teca. El diseño se realiza como como si se tra tar á de una lista de conexiones entre las entradas y salidas de los diversos componentes. Para utilizar un componente hay que declararlo previamente. La sintaxis es la siguiente: componen componen t n ombre [is] [gener [gener ic (list (list a de gener icos) icos);] ;] [port [port (lista (lista de puer tos);] tos);] end component component [nombr [nombr e]; e]; La referencia a un componente es una sentencia concurrente que se ejecuta en par alelo con la s demá s sent encias encias concurren tes cada vez que se produzca produzca u n evento en algunas señales co conectada nectada s a sus puertos de entr entr ada. La sin ta xis de referencia referencia a un component e (inst (inst an ciació ciación) n) es: et iq_ref: nombr e_componen e_componen te {gener ic map (lista de a sociación); sociación);}} {port ma p (lista_asociación);] Rest ricciones ricciones de a sociació sociación: n: - Ambos Ambos t ipos ipos (tipos de local local y real) deben ser igu ales. - Modo (in,out,inout (in,out,inout ,buffer) ,buffer) deben s er compat ibles (acept (acept ar el flujo flujo de inform inform ación ación en esa dirección). dirección). Los genéricos(Generic): - Se utiliza para definir y declarar propiedades o constantes del módulo que está n siendo declara declara dos dos en la entidad. - Pasa información desde el entorno a nuestro unidad de diseño la cual no varía en función función del t iempo. - Muy ut ilizado ilizado par a la crea ción ción de diseños diseños genera lizados. LIBRARY LIBRARY IEEE ; USE IEE E.STD_LOGIC_1 E.STD_LOGIC_1164. 164.AL ALL; L; En tit y MUX2A MUX2A11 Is Port ( A,B,SELEC:in A,B,SELEC:in STD_LOGIC; STD_LOGIC; Z:out STD_LOGIC); end MUX2A1; MUX2A1; Architect ur e flujo of of MUX2A1 MUX2A1 Is Begin with selec select Z<= A when '0', B when other other s; end flujo; 45
DIGLENSY SAC
Entity esmu x4a1 x4a1 is port (E:IN STD_LOGIC_VECTOR(3 STD_LOGIC_VECTOR(3 DOWNTO 0 ); SE LEC:IN S TD_LOGIC_VECTOR(1 TD_LOGIC_VECTOR(1 DOWNTO 0); 0); Z,ena Z,ena :OUT STD_LOGIC); END esmux4a1; ARCHITE ARCHITE CTURE ES TRUCTURAL OF esmu x4a1 IS SIGN AL N1,N2:STD_LOGIC; N1,N2:STD_LOGIC; COMPONEN T MUX2a1 MUX2a1 port( a,b,selec:in STD_LOGIC; z: out out STD_LOGIC); END COMPONENT; BEGIN ena<='1'; U0:MUX2a1 P ORT MAP( E(0),E(1),SELE E(0),E(1),SELE C(0), C(0),N1 N1 ); U1:MUX2a1 P ORT MAP( E (2),E(3), (2),E(3),SE SE LEC (0),N2 (0),N2 ); U2:MUX2a1 P ORT MAP( N1,N2,SE LEC(1),Z LEC(1),Z );); END ESTRUCTURAL; ESTRUCTURAL; 7.
Imp lemen ta ción de u n SISTEMA DIGITA DIGITAL L PARA ESCRIBIR EN UN MONITOR MONITOR VGA VGA en la ta rjeta de de sar rollo ALTERA DE2.
Fin de Tutorial
46