aprender

185
Esta parte del tutorial te permitirá implementar desde el primer momento los ejercicios propuesto y entender el lenguaje VHDL. Lo único que se necesita para seguir este curso es saber Electrónica Digital y tener nociones de cualquier lenguaje de programación ya sea Pascal, C, Basic,... El lenguaje de descripción hardware VHDL (Very high speed Hardware Description Logic) es un lenguaje orientado a la descripción de hardware pero con muchos elementos heredados de otros lenguajes como C o Pascal. Una vez realizado un programa en VHDL (con extensión VHD) y haberlo compilado con éxito, tendremos un fichero con el mismo nombre y extensión JED, con el cual podremos grabar una PLD (Dispositivo Lógico Programable) con la misma operatividad que el fichero VHD. Al describir cualquier dispositivo en VHDL (desde una simple puerta and hasta un sistema completo) se deben definir dos elementos principales: Entidad o entity que es la interfaz del dispositivo con el exterior. Tiene por objeto decir que señales son visibles o accesibles desde el exterior, es decir los puertos o ports del dispositivo. Es describir las patillas del circuito que serán operativas. Su estructura mas general es la siguiente, donde las palabras en negrita son propias del lenguaje, y las restantes elegidas por el ususrio: entity entidad is genericos puertos declaraciones end nombre; Pero debemos fijarnos en la estructura más habitual de las entidades que es la siguiente:

Upload: holger-chamba

Post on 17-Aug-2015

5 views

Category:

Documents


0 download

DESCRIPTION

VHDL

TRANSCRIPT

Esta parte del tutorial te permitir implementar desde el primer momento los ejercicios propuesto y entender el lenguaje VHDL. Lo nico que se necesita para seguir este curso es saber Electrnica Digital y tener nociones de cualquier lenguaje de programacin ya sea Pascal, , !asic,...El lenguaje de descripcin "ard#are VHDL $Very "ig" speed Hard#are Description Logic% es un lenguaje orientado a la descripcin de "ard#are pero con muc"os elementos "eredados de otros lenguajes comoo Pascal. &na 'e( reali(ado un programa en VHDL $con e)tensin VHD% y "aberlo compilado con *)ito, tendremos un +ic"ero con el mismo nombre y e)tensin ,ED, con el cual podremos grabar una PLD $Dispositi'o Lgico Programable% con la misma operati'idad que el +ic"ero VHD.

-l describir cualquier dispositi'o en VHDL $desde una simple puerta and "asta un sistema completo% se deben de+inir dos elementos principales. Entidad o entity que es la inter+a( del dispositi'o con el e)terior. /iene por objeto decir que se0ales son 'isibles o accesibles desde el e)terior, es decir lospuertos o ports del dispositi'o. Es describir las patillas del circuito que sern operati'as. 1u estructura mas general es la siguiente, donde las palabras en negrita son propias del lenguaje, y las restantes elegidas por el ususrio.entity entidad isgenericospuertosdeclaracionesend nombre2Pero debemos +ijarnos en la estructura ms "abitual de las entidades que es la siguiente. entity entidad ispuertosend entidad;-rquitectura o arquitecture que es la +uncionalidad que reali(a el dispositi'o, es decir, qu* trans+ormaciones se reali(arn sobre los datos que entren por los puertos de entrada para producir la salida. Dentro de este apartado es donde se dota de operati'idad al circuito. 1u estructura general es la siguiente, y debe estar incluida en el mismo +ic"ero de la entidad a la que "ace re+erencia. arquitecture nombre of nombre3entidad isdeclaracionesbeginsentenciasend nombre2Para acabar esta introduccin deberemos tener en cuenta una serie de detallesms de *ste lenguaje. VHDL no distingue las maysculas de las minsculas, por lo que deberemos tener cuidado al asignar nombres a las 'ariables, especialmente si estamos acostumbrados a trabajar con . Las 'ariables deben empe(ar por una letra, no deben contener ni espacios ni s4mbolos como 5, 6, 7, 8, 9, etc. 1u longitud no est limitada, no pueden acabar con un carcter de subrayado o tener dos subraryados seguidos. Para representar un nmero de una sola ci+ra, deberemos situarlo entre apstro+es2 as4. :;: Para representar un nmero de mas de una ci+ra, lo representaremos as4.

use ieee.stdKlo"icK66L/.all&use wor'.sumador.all&entity resta is port 'a,b% in stdKlo"icKvector'A downto 9(&sr% in stdKlo"ic&c% out stdKlo"icKvector'A downto 9((&end resta& "rquitectura 1: 2estador debits +ara sumar usaremos la librer$a std_arit#, y para restar deberemos sumar al n0mero a el complemento a ? de b. El indicador de si sumamos o restamos es la entrada sr.1 2 3 4 5 6 ! " 1011arc#itecture arc#iresta o$ resta issi%nal aux % stdKlo"icKvector'A downto 9(&be%in process 'a,b,sr,aux(be%ini$ sr4595 t#en aux74b&elsi$ sr4565 t#en aux74not'b(&end i$&end process& c74aTauxT'89998Ssr(&end arc#iresta&+ara complementar un n0mero a dos, deberemos invertirlo y sumarle uno. La sentencia i$ invierte al n0mero b si es necesario. .e le suma una unidad ms adelante.+ara restar deberemos sumar a, la seal aux y la seal de sumaOresta, para acabar de complementar a dos el n0mero b. Entidad 2: 2estador debits 0con 34M54"6'"7E1+ara crear este restadorOsumador de cuatro bits, vamos a usar la librer$a L+-K+1;U1NE. Es una librer$a de m!dulos parametri>>>#! "i lo que ha cambiado ha sido la seal clk (reloj) se siguen los mismos pasos que antes- se verifica si se pide contar a partir cierto n*mero (si load est habilitada) y si es as( el contador se iniciali&a con el valor de data! "i no lo es se le suma = a la salida .i el contador lle"a a 866668, y le sumamos uno, la salida que obten"amos ser 899998, ya que automticamente VHDL reali>>>#! "i lo que ha cambiado ha sido la seal clk (reloj) se verifica si se pide contara partir cierto n*mero (si load est habilitada) y si es as( el contador se iniciali&a con el valor de data! "i no lo es se anali&a si se le pide contar hacia arriba o hacia abajo! .ntes de sumarle uno comprueba si hemos llegado al l(mite (?) y si lo hemos hecho se pone conta a #>>>># si no es as( le suma uno! :eali&a la mismaoperacin pero comprobando si hemos llegado al otro l(mite (>) y si es as( pone conta a #=>>=#! "i no lo es se resta uno a la salida!1#ora deberemos extremar el cuidado con los i$5s que #ay, por lo que deberemos or"ani 69666?6A6/6D6L6H6I6>?9?6???A?/?D?L?H?I?>A9A6A?AAA/ADALAHAIA>/9/6library ieee&use ieee.stdKlo"icK66L/.all;use wor'.stdKarit#.all& pac'a%e uno iscomponent count port 'clF,reset%in bit&conta%bu@er stdKlo"icKvector'6 downto 9((&end component&componentdecoder port 'seleccion%in stdKlo"icKvector'6 downto 9(&enable6,enable?%in bit&salida %out stdKlo"icKvector'A downto 9((&end component&end pac'a%e&

library ieee&use ieee.stdKlo"icK66L/.all&use 3orF.stdKarit#.all&use 3orF.uno.all&entity count is port 'clF,reset%in bit&conta%bu@er stdKlo"icKvector'6 downto 9((&end count&

arc#itecture arc#icount o$ count isbe%incontador %process 'clF,reset(be%ini$ 'reset4565( t#en conta 74 'ot#ers 4: 595( &elsi$ clF5event and clF4565 t#en conta 74 conta T 6&end i$&end process contador&end arc#icount& CCdescripcion del decodifcador AOI 'H/ls6AI(library ieee&use ieee.stdKlo"icK66L/.all&use wor'.uno.all&/?/A///D/L/H/I/>D9D6D?DAD/DDDLDHDID>L9L6L?LAL/entity decoder is port 'seleccion%in stdKlo"icKvector'6 downto 9(&enable6,enable?%in bit&salida %out stdKlo"icKvector'A downto 9((&end decoder&

arc#itecture arc#idecoder o$ decoder isbe%indecodifcador%process'seleccion,enable6,enable?(be%ini$ enable?4565 t#en salida74'ot#ers4:595(&elsi$ enable?4595 and enable64595 t#en salida74'ot#ers 4: 595(&elsi$'enable64565( t#en case seleccion isw#en 8998 4: salida 74 899968&w#en 8968 4: salida 74 899698&w#en 8698 4: salida 74 896998&w#en 8668 4: salida 74 869998&w#en ot#ers 4: salida 74866668&end case&end i$&end process decodifcador&end arc#idecoder&La especifcaci!n de un pacFa"e consta de dos partes claramente di,erenciadas, la primera es la cabecera donde se declara como componente 'component(, los elementos que van a estar contenidos en dic#a librer$a. 1 continuaci!n aparece la declaraci!n de las entidades y arquitecturasde cada uno de los componentes de ,orma similar a como se declara un circuito cualquiera, la 0nica aclaraci!n a tener en cuenta sera que #abra que incluir necesariamente la sentencia use 3orF.uno.all& donde se especi,$ca el nombre de la librer$a en la que estamos. Entidad 3: -ecuencaidorEn esta practica se parte de la "rfca si"uente. Las especifcaciones del diseo nos pide que creemos un circuito que se ajuste al comportamiento de la si"uente "rfca. *ras el anlisis de los requerimientos, se disea el si"uente circuito donde se implementara, previamente, los componentes count y deco, que seran "uardados en el pacFa"e uno. El circuito total se implementara #aciendo las llamadas pertinentes a traves de sentencias estructurales port map a dic#o pacFa"e. 6 ? A/ D L H library ieee&use ieee.stdKlo"icK66L/.all&use wor'.uno.all&entity total is port'clF,reset%in bit&salida%out stdKlo"icKvector'A downto 9((&end total& "rquitectura 3: -ecuenciadorEn esta parte se unen el contador y el decodifcador antes descrito, para conse"uir el comportamiento del secuenciador previamente diseado. +ara ello se #ace uso de la seal intermedio, que nos sirvepara pasar las seales propias del count y llevarlas a la entrada del decoder(6?A/DL arc#itecture arc#itotal o$ total is si%nal intermedio%stdKlo"icKvector'6 downto 9(&be%inbloque6%count port map'clF,reset,intermedio(&bloque?%decoder port map'intermedio,clF,reset,salida(&end arc#itotal& &ecodi$icador 2ultiplicador de Grecuencias en VHD...VCDEB,&EAB PBHA EH VHDL>onitor VA- y VHDL $parteF?%7L7C-1ejor. 94C. 8=67=87184 2?)L8C4C8"( M :;:2 CG count P ma) /HEH count PM count Q ;2EL1E count PM =2 EHD CG2 CG count P "al+ /HEH clJout PM :=:2EL1E clJout PM :;:2 EHD CG2EHD PEBE112FFcontador @ bits ascendentePEBE11$clJout,reset% V-EC-!LE cuenta. CH/EAEE E-HAE = /B ;L2!EACH CG $resetM:;:% /HEH cuenta.M=2 EL1CG $clJout:EVEH/ -HD clJoutM:=:% /HEH cuenta.McuentaQ;2 EHD CG2G PM cuenta2EHD PEBE112EHD rtl27$emplo #&ADise0ar en VHDL, un contador de @ bits ascendente, con reloj de ;H(, y que muestre su salida en numero "e)adecimal en display de I segmentosSolucion:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ontador ascendente @ bit con ; H( de reloj,FF con salida "e)adecimal en display de I segmentosFF -utor. -merico -l'are( 1.FF Gec"a. ?L de mar(o de ?=;; FF Hombre de modulo. counter3@b3IsegFF Descripcion. FF &na 'e( 'isto el gran incon'eniente por el reloj queFFpresentaban los contadores al momento de implementarlos FFen la tarjeta +pga. 1e 'io la necesidad de implementarFFun contador con +M;H( de +recuencia.FFLa salida se la obser'ara en "e)adecimal en display de Iseg.FF -bstract.FFFF Vercion. 'ercion =.;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFlibrary CEEE2use CEEE.1/D3LBAC3;;[email protected] CEEE.1/D3LBAC3-EC/H.-LL2use CEEE.1/D3LBAC3&H1CAHED.-LL2EH/C/N counter3@b3Iseg isPort $clocJ3L=>"( . in1/D3LBAC2 reset. in bit2I1EA. B&/ 1/D3LBAC3VE/BE $I do#nto =%2 EHD counter3@b3Iseg2-EHC/E/&EE rtl BG counter3@b3;"( C1 1CAH-L clJout. std3logic2 BH1/-H/ ma). CH/EAEE .M L=======2 BH1/-H/ "al+. CH/EAEE .M ma)K?2 1CAH-L count. CH/EAEE E-HAE = /B ma)2 1CAH-L G. CH/EAEE E-HAE = to ;L!EACH FF generando se0al clocJ de ;H( de +recuenciaPEBE11!EACH O-C/ &H/CL clocJ3L=>"(:EVEH/ and clocJ3L=>"( M :;:2 CG count P ma) /HEH count PM count Q ;2EL1E count PM =2 EHD CG2 CG count P "al+ /HEH clJout PM :=:2EL1E clJout PM :;:2 EHD CG2EHD PEBE112FFcontador @ bits ascendentePEBE11$clJout,reset% V-EC-!LE cuenta. CH/EAEE E-HAE = /B ;L2!EACH CG $resetM:;:% /HEH cuenta.M=2 EL1CG $clJout:EVEH/ -HD clJoutM:=:% /HEH cuenta.McuentaQ;2 EHD CG2G PM cuenta2!EACHcase G is#"en = MR I1EA .M