48
Universidad Politécnica de Madrid ETSI de Telecomunicación Departamento de Ingeniería Electrónica Circuitos Electrónicos (CELT) Manual de referencia de la tarjeta BASYS 2 Álvaro de Guzmán Fernández

Manual de Referencia BASYS 2

Embed Size (px)

DESCRIPTION

mkom

Citation preview

  • UniversidadPolitcnicadeMadridETSIdeTelecomunicacin

    DepartamentodeIngenieraElectrnica

    Circuitos Electrnicos (CELT)

    ManualdereferenciadelatarjetaBASYS2

    lvarodeGuzmnFernndez

  • ManualdereferenciatarjetaBASYS2

    2

    ManualdereferenciadelatarjetaBASYS2ndicegeneralIntroduccin.........................................................................................................DescripcingeneraldelatarjetaBASYS2............................................................SntesisdecircuitosmediantelatarjetaBASYS2................................................Elequipodedesarrollodellaboratorio................................................................LaestructurabsicadeundiseoVHDL..............................................................

    Ejemplo1:EncendidodeunLEDmedianteunconmutador........................Ejemplo2:UtilizacindelrelojdelaFPGA...................................................Ejemplo3:Visualizacindedoscifrasdiferentesendosdisplays.Lascifrashexadecimalesseintroducenmediantelosconmutadores................Ejemplo4:Contadorrotatorio......................................................................

    Entradasysalidasexternas..................................................................................Ejemplo5:ObservacinenelosciloscopiodesealesrpidasdelcircuitoVHDL..............................................................................................................Ejemplo6:Observacindesealesinternasdelcircuito..............................

    Empleodesealesderelojexternas(diferentesdeCLK=50MHz)....................Ejemplo7:DiseodeunflipflopJKconsuentradaderelojconectadaaunpulsador....................................................................................................Ejemplo8:Utilizacindeunaentradaexternaparaeldesarrollodeunfrecuencmetro..............................................................................................

    UtilizacindelentornoISE...................................................................................SimulacindecircuitosmedianteISIM................................................................1.Simulacindecircuitossecuenciales(sncronosconunasealdeentradadereloj)..........................................................................................2.Simulacindecircuitoscombinacionales.................................................VolcadodelbitstreamsobrelaFPGAparasintetizarelcircuito......................Bibliografa............................................................................................................

    Pg3456778913212325262628373939434748

  • ManualdereferenciatarjetaBASYS2

    3

    IntroduccinEsta gua pretende resumir los conceptos bsicos de la utilizacin de la tarjeta BASYS2 ypresentarunasdirectrices generalesparaelusode laherramienta ISE,de tal formaque elalumnopuedaempezarautilizar lasherramientasdedesarrollodel laboratorioenuncortoperiododetiempo.EnningncasosepretendequeestedocumentoseaunadescripcinexhaustivadellenguajeVHDL o del funcionamiento completo del ISE. Para ello remitimos al lector a los libros ymanualescorrespondientesquesedetallanalfinalenlabibliografaadjunta.Serecomiendaqueutilicelosejemplosqueaparecenenestaguaparapracticarenelmanejodelasherramientas.Tambinserecomiendasintetizardichosejemploseinclusoquepruebeamodificarsu funcionamientonominal.Deestamanerapodr familiarizarseconelequipodediseodel laboratorioyaumentar sueficienciaa lahoradedesarrollarelprototipoque seexigeenlaasignatura.La gua comienza con una descripcin de la tarjeta BASYS2, de sus caractersticas yparticularidadesilustradasatravsdeejemplos.Porltimosedanalgunasideassobreelusode la herramienta ISE y sobre la carga de los ficheros de configuracin de la FPGA (bitstream).

  • ManualdereferenciatarjetaBASYS2

    4

    DescripcingeneraldelatarjetaBASYS2La tarjeta BASYS 2 es una tarjeta de desarrollo fabricada por la compaa DIGILENT quecontiene una FPGA modelo Spartan 3E de XILINX. Est diseada para el aprendizaje de lasntesisdecircuitosdecomplejidadmediautilizandounentornodedesarrolloprofesional.Adems de la citada FPGA, esta tarjeta contiene una serie de recursos que pueden serutilizadosenlosdiseosdeloscircuitos.Concretamentecontiene:

    4pulsadores 8conmutadores 8LEDS 4displaysde7segmentos UnconectordetecladodePC UnasalidadevdeoVGA

    Todosestos recursosseencuentranconectadosa laspatillasde laFPGAde la formaqueseindicaenlasiguientefigura:

    AdemslaFPGAposeeunaentradaconectadaaunrelojconunafrecuenciade50MHzquesecorrespondeconlapatillaM6.

  • ManualdereferenciatarjetaBASYS2

    5

    Endichafigurasehanomitido intencionadamenteelconectordetecladoy lasalidaVGApornosernecesariasparalasaplicacionesquesepretendenrealizarenestaasignatura.Deestamanera,elvalorlgicoproporcionadoporelpulsadorBTN0,seleerenlapatillaG12delaFPGA.Delmismomodo,paraactivarelLEDLD0,esnecesarioponerunvalorlgico1enlapatillaM5.Adems de los recursos integrados en la tarjeta, existe la posibilidad de utilizar entradas ysalidasexternas,lascualestambinseencuentranconectadasalaspatillasdelaFPGAyqueseencuentrandisponiblesen los conectoresexternosdelentrenadorpresenteen cadapuestodellaboratorio(conectoresmarcadoscomoENTRADASDIGITALESySALIDASDIGITALES).EnelenunciadodecadaprcticaseindicarnlaspatillasconcretasdelaFPGAquesecorrespondenconestasentradasysalidas.

    SntesisdecircuitosmediantelatarjetaBASYS2La sntesisde circuitos se realizarmediante el lenguajededescripcinhardwareVHDL. SecompilarutilizandoelentornoISEdeXILINXqueseencontrardisponibleenelordenadordecadapuestodellaboratorio.EsteentornoescapazdecrearunarchivoparalaconfiguracindelaFPGAapartirdelcdigoVHDLqueseescriba (archivodebitstreamconextensin .bit).DichoarchivodebesercargadoenlatarjetaBASYS2.EstohacequeelhardwareinternodelaFPGAseconfigureparaseguirlasespecificacioneshardwaredescritas.ParavolcarelcontenidodelarchivoenlaFPGAyconfigurarlaesnecesarioutilizarelprogramaADEPTdeDIGILENT,elcualtambinestardisponibleenelordenadordecadapuesto.Portanto, lasecuenciadesntesisdeuncircuitodeberseguirnecesariamente lossiguientespasos:

    1. Escribir un cdigo en VHDL que describa el hardware que queremos sintetizar.RecuerdequeESTAMOSSINTETIZANDOHARDWAREyqueportantoelVHDLNOESUNLENGUAJEDEPROGRAMACIN,SINOUNLENGUAJEDEDESCRIPCINHARDWARE

    2. Simulacin del circuito para estudiar su comportamiento antes de su sntesis en laFPGA.Estoleayudaradepurarposibleserroresquepuedanexistirenelcdigo.

    3. Compilardichocdigoygenerarelarchivodebitstream.Evidentementeelarchivonosegenerarsielprogramatieneerrores.

    4. Unavezgeneradoelficherodebitstream,deberutilizarseelprogramaADEPTparavolcarloenlaFPGA.

    5. Enestemomento,laFPGAseconvierteenuncircuitoquedeberrealizarlatareaquehayasidodescritamedianteelVHDL.

  • ManualdereferenciatarjetaBASYS2

    6

    ElequipodedesarrollodellaboratorioEnellaboratoriosedisponedeunequipodedesarrolloqueconsisteenunarmaznmetlicocon tapa transparenteelcualcontieneuna tarjetaBASYS2yalgunoscircuitosdeproteccinparaevitarquepuedaserdaadaporcausademalasconexionesocortocircuitos.Losrecursosdelatarjetapuedenseraccedidosdesdeelexterior(microinterruptoresypulsadores).Elcitadoarmaznestconectadoasuvezaunatablademaderaqueposeevariosconectores,un teclado y un display. Los conectores se emplean para acceder a las entradas y salidasexternasdelatarjetaBASYS2yserndescritoscondetallemsadelanteenestedocumento.La fotografa siguiente muestra la disposicin de los elementos que integran el equipo dedesarrollo.

    El equipo de desarrollo (armazn azul) posee un interruptor en la parte posterior. Dichointerruptordeberestarencendidoparaqueelequipo funcionecorrectamente.Asegresetambin que los cables planos se encuentran conectados a los conectores ENTRADAS ySALIDASdelarmaznazul.

  • ManualdereferenciatarjetaBASYS2

    7

    LaestructurabsicadeundiseoVHDLUndiseoVHDLconsisteenlaespecificacindeunhardwareconcretoquesequieresintetizarenel interiorde laFPGA.ParaescribirelcdigoVHDLseutilizareleditordelentorno ISE,ysernnecesariosobligatoriamentelossiguientesarchivos:

    1. UnoovariosarchivosconteniendoelcdigoVHDL,(dependiendodesucomplejidadavecesesms sencillo separarel cdigoenvarios ficheros independientes).Enestosarchivossedeclararnentidades(entity)cuyasentradasysalidastendrnnombresarbitrarioselegidosporeldesarrollador.

    2. Unarchivodeasociacionesdondese ledicealcompiladorqupatillasde laFPGAsecorrespondenconcadaentradaysalidadeclaradasenlasentidadesquecomponenelcircuito. Este fichero es IMPRESCINDIBLE para generar el bit stream. La sintaxisempleadaenesteficheroesmuysencillaysedescribeenlosejemplossiguientes.

    Ejemplo1:EncendidodeunLEDmedianteunconmutador.El objetivo de este ejemplo es demostrar cmo se sintetiza un circuito que sea capaz dereflejarenunLEDelvalorlgicoproporcionadoporunconmutador.SeutilizarnlosrecursosdelatarjetaBASYS2.Serealizarcondosficheros:unodecdigoVHDLyotrodeasociaciones.FICHEROPRUEBA_LED.VHD(ficherodecdigoVHDL)library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity circuito is port ( CONMUT : in STD_LOGIC; -- Conmutador conectado a una entrada LED : out STD_LOGIC -- LED conectado a una salida ); end circuito; architecture a_circuito of circuito is begin LED

  • ManualdereferenciatarjetaBASYS2

    8

    queseasocianexactamenteconlaspatillasdondeseencuentranconectadoslosrecursosdelatarjetaBASYS2.

    Ejemplo2:UtilizacindelrelojdelaFPGA.LaFPGAposeeunaentradaconectadaaunrelojde50MHzenlapatillaM6.Esterelojpuedeserutilizadoparaeldiseodecircuitossecuencialessncronos.EnesteejemploutilizaremoselrelojparadividirsufrecuenciamedianteuncontadorvisualizandolasalidaenunLED.Utilizaremos un proceso en cuya lista de sensibilidad se coloca la seal de reloj. Con cadaflancoactivo se incrementarun contador.Queremosqueel LEDparpadee conunperiodoencendido/apagadode500mscadauno.Seutilizarnigualmentedosficheros,unoVHDLyotrodeasociaciones.FICHERODIV_RELOJ.VHD(ficherodecdigoVHDL)library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity circuito is Port ( CLK : in STD_LOGIC; -- Reloj de entrada a la FPGA SAL : out STD_LOGIC); -- salida del circuito para conectar al LED end circuito; architecture a_circuito of circuito is signal contador : STD_LOGIC_VECTOR (31 downto 0); signal flag : STD_LOGIC; begin PROC_CONT : process (CLK) begin if CLK'event and CLK='1' then contador

  • ManualdereferenciatarjetaBASYS2

    9

    Ejemplo3:Visualizacindedoscifrasdiferentesendosdisplays.Lascifrashexadecimalesseintroducenmediantelosconmutadores.

    EnestecasoqueremosvisualizardoscifrasdiferentesendosdelosdisplaysdisponiblesenlatarjetaBASYS2.Elproblemadeesteejemploresideenelhechodequelos7valoresbinariospara excitar los distintos segmentos son compartidos por los 4 displays simultneamente.Existen,noobstante,4 seales (lascorrespondientesa las salidasF12, J12,M13yK14)quecontrolan la activacin independiente de cada uno de los displays. Para visualizar cifrasdiferentesencadauno,esnecesarioactivarlossegmentoscorrespondientesalacifradeunodelosdisplaysjuntoconsusealdeactivacin,acontinuacinhacerlomismoconelsiguienteyas sucesivamente.Siesta secuencia se repitemsde25vecespor segundo,elojonoescapazdepercibirelparpadeo,pudiendorepresentarsevariascifrasdiferentes.

    Paraesteejemplonecesitaremoslossiguienteselementos(verfigura):

    Undecodificadordebinarioa7segmentos. Unmultiplexordedosentradasde4bitsparaseleccionarlacifraavisualizar Unelementodecontrolquerealiceelrefrescoperidicodelosdisplays.

    Visualizaremos todos losvaloresentre0000y1111utilizandoparaellocifrashexadecimalestalcomosemuestraen la figura.Utilizaremos los recursosde la tarjeta:8conmutadores (4paralaprimeracifray4paralasegunda),dosdisplaysyelrelojparacontrolarlavisualizacin.

    En este caso, lamanerams apropiada de describir este hardware consiste en realizar unficheroindependienteporcadaelemento,condescripcionesfuncionalesdedichoselementosyun ficheromaestro conunadescripcin estructuralde interconexin entre ellos.Ademstambinesnecesarioescribirelficherodeasociaciones.Elejemploconstaraportantode4ficherosVHDLmsunodeasociaciones.

    Vcc

    MultiplexorE1E0

    SALS

    DecodBin a7seg

    Conmutadores(P11aB4)

    Conmutadores(G3aN3)

    Control

    CLK

    F12J12

    SealesCAaCG

    s_controls_datos

    A

    B

    C

    D

    E

    F G

    Nomenclaturadesegmentos

    RecursosdeLatarjeta

    Circuitoadisear

  • ManualdereferenciatarjetaBASYS2

    10

    FICHEROdecod7s.vhd Library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity decod7s is Port ( D : in STD_LOGIC_VECTOR (3 downto 0); -- entrada de datos en binario S : out STD_LOGIC_VECTOR (0 to 6)); -- salidas para los segmentos end decod7s; architecture a_decod7s of decod7s is begin with D select S

  • ManualdereferenciatarjetaBASYS2

    11

    FICHEROcontrol.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity control is Port ( CLK : in STD_LOGIC; -- reloj de la FPGA DSP0 : out STD_LOGIC; -- seal para activar el display 0 DSP1 : out STD_LOGIC; -- seal para activar el display 1 SCONTROL : out STD_LOGIC); -- seal para controlar el mux. end control; architecture a_control of control is signal contador : STD_LOGIC_VECTOR (31 downto 0); signal salida : STD_LOGIC; begin process (CLK) begin if CLK'event and CLK='1' then -- el periodo del reloj es de 20 ns contador

  • ManualdereferenciatarjetaBASYS2

    12

    FICHEROcircuito.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity circuito is Port ( CIFRA0 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada de cifra 0 CIFRA1 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada de cifra 1 SEG7 : out STD_LOGIC_VECTOR (0 to 6); -- salidas para los displays DISP1 : out STD_LOGIC; -- salida para activar display 1 DISP2 : out STD_LOGIC; -- salida para activar display 2 CLK : in STD_LOGIC); -- reloj de la FPGA end circuito; architecture a_circuito of circuito is -- en este caso se trata de una component decod7s -- descripcin estructural Port ( D : in STD_LOGIC_VECTOR (3 downto 0); S : out STD_LOGIC_VECTOR (0 to 6)); end component; component MUX Port ( E0 : in STD_LOGIC_VECTOR (3 downto 0); E1 : in STD_LOGIC_VECTOR (3 downto 0); S : in STD_LOGIC; SAL : out STD_LOGIC_VECTOR (3 downto 0)); end component; component control Port ( CLK : in STD_LOGIC; DSP0 : out STD_LOGIC; DSP1 : out STD_LOGIC; SCONTROL : out STD_LOGIC); end component; signal s_control : STD_LOGIC; signal s_datos : STD_LOGIC_VECTOR (3 downto 0); begin U1 : control port map ( CLK => CLK, DSP0 => DISP1, DSP1 => DISP2, SCONTROL => s_control ); U2 : MUX port map ( E0 => CIFRA0, E1 => CIFRA1, S => s_control, SAL => s_datos ); U3 : decod7s port map ( D => s_datos, S => SEG7 ); end a_circuito;

    Este es el ficheromaestro que describe la interconexin entre los distintos elementos. Sedescribeuncircuitoprincipalcuyasentradasson lasdoscifrasbinariasde4bitsy lasealdereloj.Sussalidassonlassealesdeactivacindelosdisplays,ylosvaloresdelossegmentos.Cuandounaentradaosalidadeuncomponentesecableadirectamenteaunaentradaosalidadelcircuitoprincipal,seasignadirectamenteenelportmap.Sisetratade interconexiones

  • ManualdereferenciatarjetaBASYS2

    13

    entre elementos entonces deben utilizarse seales adicionales declaradas tambin en elfichero.FICHERODEASOCIACIONES:asociaciones.ucfNET "CLK" LOC = "M6"; # RELOJ DE LA FPGA NET "SEG7" LOC = "L14"; #Segmento a NET "SEG7" LOC = "H12"; #Segmento b NET "SEG7" LOC = "N14"; #Segmento c NET "SEG7" LOC = "N11"; #Segmento d NET "SEG7" LOC = "P12"; #Segmento e NET "SEG7" LOC = "L13"; #Segmento f NET "SEG7" LOC = "M12"; #Segmento g NET "CIFRA0" LOC = "P11"; # CONMUTADOR 0 NET "CIFRA0" LOC = "L3"; NET "CIFRA0" LOC = "K3"; NET "CIFRA0" LOC = "B4"; # CONMUTADOR 3 NET "CIFRA1" LOC = "G3"; # CONMUTADOR 4 NET "CIFRA1" LOC = "F3"; NET "CIFRA1" LOC = "E2"; NET "CIFRA1" LOC = "N3"; # CONMUTADOR 7 NET "DISP1" LOC = "F12"; # ACTIVACIN DISP 1 NET "DISP2" LOC = "J12"; # ACTIVACIN DISP 2 Porltimo, lasentradasysalidasdelcircuitoprincipaldebenasociarsecon losrecursosde latarjeta.Estosehacemedianteelcorrespondienteficherodeasociacionesquesemuestra.LanomenclaturaSEG7secorrespondeconelbitNde lasalidaSEG7.LomismosucedeconCIFRA0yCIFRA1.Conestecircuitoserepresentanlascifrashexadecimalescorrespondientesalosconmutadoresen losdosdisplaysde laderecha.Sinembargo losotrosdospresentan tambincifrascomoconsecuenciadenoestardesactivados.Unposibleejercicioconsisteenmodificarelarchivodedescripcin estructural (cricuito.vhd) y el fichero de asociaciones para que se mantengandesactivadoslosdosdisplaysnoutilizados.Ejemplo4:ContadorrotatorioSemuestraacontinuacineldesarrollodeuncontadorrotatorio.Setratadeuncontadorqueutiliza los 4 displays yque genera la siguiente secuencia en losmismos: 0000, 0001, 0012,0123, 1234, 2345, 3456, 4567, 5678, 6789, 7890, 8901, 9012, 0123, repitindose lasecuenciaconstantemente.Loscambiosseproducencadasegundo.Eldesarrollodeestecontadorsuponeelempleodevariosmdulosdigitales:uncontadordedcadas,unregistrodedesplazamientode4bits,unmultiplexorparalelocon4entradasde4bits,undecodificadorBCDa7segmentosyalgunoselementosadicionalesquesemuestranenlafigurasiguiente:

  • ManualdereferenciatarjetaBASYS2

    14

    TodoloqueseencuentradibujadodentrodelalneapunteadasonloscircuitosquedebemosimplementarenlaFPGA.Loqueseencuentrafueradedichalneasonlosrecursosdelatarjetaqueemplearemosenelficherodeasociaciones.Eldivisordelrelojgeneradosrelojesadicionales,unoconperiodode1msyotroconperiodode1s.Elprimeroseempleapararefrescar losdisplaysperidicamente,puestoquecomoyasehamencionadotodoselloscompartenlaslneasA..Gyporlotantoesnecesariopresentarlascifrasunaaunadeformamuyrpida.Elsegundoseutilizaparaincrementarelcontadorydesplazarlascifrashacialaizquierda.Elrefrescodelosdisplaysserealizadeunaformasimilaraladescritaenelejemplo3,aunquecon4entradasenlugarde2.Eldiseocompletodeestecontadorrotatorioestcompuestoporvariosmdulos,loscualessedescribencondetalleacontinuacin:

    REG_DESPx4

    CONTADOR

    MUXx4

    DECOD7SEG

    Vcc

    S1S0

    CONTROLAN

    0AN

    1AN

    2AN

    3

    S0 S1

    DIVISORRELOJ CL

    K_1s

    CLK_1ms

    CLKE

    Q3Q2Q1Q0

    E3E2 E1E0Y

    DIN

    AG

    Q

    DCADAS

    FPGA

    N_E0

    N_E1

    N_E2

    N_E3

    N_Y

    N_Q

    N_S

    N_C1S

    N_C1MS

  • ManualdereferenciatarjetaBASYS2

    15

    FICHEROcontador.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity contador is Port ( CLK : in STD_LOGIC; -- entrada de reloj Q : out STD_LOGIC_VECTOR (3 downto 0)); -- salida de datos end contador; architecture a_contador of contador is signal QS : STD_LOGIC_VECTOR (3 downto 0); -- seal que almacena el valor del contador begin SYNC : process (CLK) begin if (CLK'event and CLK='1') then QS

  • ManualdereferenciatarjetaBASYS2

    16

    Esteficherocontieneladescripcindeunregistrodedesplazamientoquedesplazapalabrasde4bits.Concadaflancodereloj,losdatosdelaentradaEsoncopiadosenlasalidaQ0,mientraselrestodelassalidassondesplazadashacialaizquierda.FICHEROMUX4.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux4 is Port ( E0 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada E0 E1 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada E1 E2 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada E2 E3 : in STD_LOGIC_VECTOR (3 downto 0); -- entrada E3 Y : out STD_LOGIC_VECTOR (3 downto 0); -- salida Y S : in STD_LOGIC_VECTOR (1 downto 0)); -- entradas de control end mux4; architecture a_mux4 of mux4 is begin Y

  • ManualdereferenciatarjetaBASYS2

    17

    FICHEROcontrol.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity control is Port ( CLK : in STD_LOGIC; -- entrada de reloj AN : out STD_LOGIC_VECTOR (3 downto 0); -- activacin displays S : out STD_LOGIC_VECTOR (1 downto 0)); -- seleccin en el MUX end control; architecture a_control of control is signal SS : STD_LOGIC_VECTOR (1 downto 0); begin process (CLK) begin if (CLK'event and CLK='1') then SS

  • ManualdereferenciatarjetaBASYS2

    18

    begin DIV : process (CLK) begin if (CLK'event and CLK='1') then div1

  • ManualdereferenciatarjetaBASYS2

    19

    component reg_desp4 Port ( CLK : in STD_LOGIC; E : in STD_LOGIC_VECTOR (3 downto 0); Q0 : out STD_LOGIC_VECTOR (3 downto 0); Q1 : out STD_LOGIC_VECTOR (3 downto 0); Q2 : out STD_LOGIC_VECTOR (3 downto 0); Q3 : out STD_LOGIC_VECTOR (3 downto 0)); end component; component mux4 Port ( E0 : in STD_LOGIC_VECTOR (3 downto 0); E1 : in STD_LOGIC_VECTOR (3 downto 0); E2 : in STD_LOGIC_VECTOR (3 downto 0); E3 : in STD_LOGIC_VECTOR (3 downto 0); Y : out STD_LOGIC_VECTOR (3 downto 0); S : in STD_LOGIC_VECTOR (1 downto 0)); end component; component decod7s port ( DIN : in STD_LOGIC_VECTOR (3 downto 0); S7SEG : out STD_LOGIC_VECTOR (0 to 6)); end component; component control Port ( CLK : in STD_LOGIC; AN : out STD_LOGIC_VECTOR (3 downto 0); S : out STD_LOGIC_VECTOR (1 downto 0)); end component; component div_reloj Port ( CLK : in STD_LOGIC; CLK_1S : out STD_LOGIC; CLK_1MS : out STD_LOGIC); end component; begin U1 : decod7s port map ( DIN=>N_Y, S7SEG=>SEG7 ); U2 : mux4 port map ( E0=>N_E0, E1=>N_E1, E2=>N_E2, E3=>N_E3, Y=>N_Y, S=>N_S ); U3 : reg_desp4 port map ( CLK=>N_C1S, E=>N_Q, Q0=>N_E0, Q1=>N_E1, Q2=>N_E2, Q3=>N_E3 ); U4 : contador port map ( CLK=>N_C1S, Q=>N_Q ); U5 : control port map ( CLK=>N_C1MS, AN=>AN, S=>N_S );

  • ManualdereferenciatarjetaBASYS2

    20

    U6 : div_reloj port map ( CLK=>CLK, CLK_1S=>N_C1S, CLK_1MS=>N_C1MS ); end a_circuito; Porltimo, en este cdigoVHDL se realiza ladescripcin estructuraldel circuito completo,detallando la interconexin entre los distintos componentes. Las seales declaradas alprincipiode laarquitecturasecorrespondencon losnodos internosdelcircuitoquenoestndirectamenteconectadosalasentradasosalidasdelmismo.FICHERODEASOCIACIONESasociaciones.ucf# Seal de reloj del sistema NET "CLK" LOC = "M6"; # Reloj del sistema de 50 MHz # DISPLAY DE 7 SEGMENTOS NET "SEG7" LOC = "L14"; # SEAL = CA NET "SEG7" LOC = "H12"; # SEAL = CB NET "SEG7" LOC = "N14"; # SEAL = CC NET "SEG7" LOC = "N11"; # SEAL = CD NET "SEG7" LOC = "P12"; # SEAL = CE NET "SEG7" LOC = "L13"; # SEAL = CF NET "SEG7" LOC = "M12"; # SEAL = CG # SEALES DE ACTIVACIN DE LOS DISPLAYS NET "AN" LOC = "K14"; # SEAL = AN0 NET "AN" LOC = "M13"; # SEAL = AN1 NET "AN" LOC = "J12"; # SEAL = AN2 NET "AN" LOC = "F12"; # SEAL = AN3 Este es el ficherode asociaciones correspondiente al circuito anteriordonde se asignan lasentradasy salidasa losdiferentes recursosde la tarjeta.Solamentenoshacen faltaenestecasoelrelojdelsistemaylosdisplays.

  • ManualdereferenciatarjetaBASYS2

    21

    EntradasysalidasexternasAdemsde losrecursosconectadosaalgunasde lassalidasde laFPGA,en latarjetaBASYS2existentambinentradasysalidasexternasquepuedenutilizarseparaconectarlatarjetaconcircuitosexteriores.Estasentradasysalidasseencuentrandisponibleseneltablerodemaderaconectadoalacajaazulquecontiene la tarjeta.La figura siguientemuestraelesquemadelcitado tablero.Estformadopor4conectoresde13patillasmsuntecladoyundisplay.ELTECLADOYELDISPLAYNOSERNUTILIZADOS,PORLOTANTONOTENGAENCUENTASUPRESENCIA.

    LasentradasserefierenasealesdelexteriorqueentranhacialaFPGA.LassalidassonsealesqueproporcionalaFPGAhaciaelexterior.Sedisponede8ENTRADASy8SALIDASqueseencuentranconectadasalaspatillasdelaFPGA.Porlotanto,paraemplearestasentradasysalidas,sernecesarioincluirsudefinicinenelficherodeasociaciones.Concretamente,elcableadodeestasentradasysalidas,juntoconlasasociacionesalaspatillasdelaFPGAseencuentrandetalladosenlafiguradelapginasiguiente.

    1 2 3 A

    4 5 6 B

    7 8 9 C

    * 0 # D

    ENTRADAS SALIDAS

    TECLADO

    DISPLAY

  • ManualdereferenciatarjetaBASYS2

    22

    Como puede verse en la figura, las entradas estn disponibles en el conector superiorizquierdo,siendolaspatillas1a8laslneasdesalidaylamasaestsituadaenelterminal25delconectorinferior.Lassalidasseencuentrandisponiblesenelconectorinferiorderechoenlaspatillas14a21conlamasaenelterminal25delcitadoconector.LacorrespondenciadelaslneasdesalidayentradaconlaspatillasdelaFPGAeslasiguiente:Entrada(terminalconector)

    PatillaFPGA

    Salida(terminalconector)

    PatillaFPGA

    1 B2 14 A92 A3 15 B93 J3 16 A104 B5 17 C95 C6 18 C126 B6 19 A137 C5 20 C138 B7 21 D12ATENCIN:ENLASENTRADASDEBERNSIEMPREINTRODUCIRSETENSIONESDE0V

    Y5VPARAEL0YEL1RESPECTIVAMENTE.IGUALMENTE,LASSALIDASPROPORCIONANTENSIONESENTRE0Y5V.

    BASYS2B2 A3 J3 B5 C6 B6 C5 B7 A9 B9 A10 C9 C12

    A13 C13

    D12

    1 2 3 4 5 6 7 8 14 15 16 17 18 19 20 21

    131

    2614ENTRADASDIGITALES

    (Conectores1a8)(Masaenel25)

    SALIDASDIGITALES

    (Conectores14a21)(Masaenel25)

    131

    2614

    CortocircuitadosenverticalCortocircuitadosenvertical

    CortocircuitadosenverticalCortocircuitadosenvertical

    NomenclaturapatillasFPGA

    EntradashacialaFPGA SalidasdesdelaFPGA

    GNDGND

  • ManualdereferenciatarjetaBASYS2

    23

    Cada conector individual est formado por 13 columnas de 2 terminales. Los terminalesverticales estn cortocircuitados internamente para facilitar la interconexin con circuitosexteriores.Unaposibleasignacinenelficherodeasociacionespodraserlasiguiente:# ENTRADAS # -------------- NET E1 LOC = B2; NET E2 LOC = A3; # SALIDAS # -------------- NET S9 LOC = A9; NET S10 LOC = B9;

    DondeE1,E2,S9yS10serannodosdelcircuitodefinidoenVHDL.Ejemplo5:ObservacinenelosciloscopiodesealesrpidasdelcircuitoVHDL.

    A veces puede ser necesario observar una seal interna del circuito VHDL. Para ello esnecesariovolcardicha sealhaciaunode los terminalesde salidaexteriorymedirla conelosciloscopio.Enelsiguienteejemplosedefineuncontadorbinariode4bitsconsalidaRCO(RippleCarryOut) que indica el final de cuenta (se activa cuando el contador alcanza el valor binario1111).Lasealderelojquegobiernaelcontadoresde10KHzysegeneraapartirdelrelojprincipaldelsistema(50MHz)pordivisindefrecuencia.Dado que la frecuencia del reloj es alta, en este caso no podemos volcar las salidas delcontadornilasealRCOhacianingunodelosrecursosdelatarjeta(LEDSoDISPLAYS),yaquelaalternanciaentre0y1haraqueseviesenconstantementeencendidosconunaluminosidadintermedia.Siqueremosmedirconprecisinlasfrecuenciasdelreloj,lassealesdecadaunadelassalidasdel contador y la seal RCO, es necesario volcarlas hacia las salidas externas y conectar elosciloscopioenlosterminalescorrespondientesparavisualizarlas.

  • ManualdereferenciatarjetaBASYS2

    24

    FICHEROcontador.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity contador is Port ( CLK : in STD_LOGIC; -- Entrada de reloj Q : out STD_LOGIC_VECTOR (3 downto 0); -- Salidas RCO : out STD_LOGIC); -- Salida RCO activa si Q=15 end contador; architecture a_contador of contador is signal flag : STD_LOGIC :='0'; signal divisor : STD_LOGIC_VECTOR (15 downto 0) := "0000000000000000"; signal QS : STD_LOGIC_VECTOR (3 downto 0) := "0000"; begin SYNC : process (CLK) -- proceso que divide el reloj begin if (CLK'event and CLK='1') then divisor

  • ManualdereferenciatarjetaBASYS2

    25

    Ejemplo6:Observacindesealesinternasdelcircuito.Imaginequeenelejemploanteriorquisieraobservarenelosciloscopiolaformadeondadelasealflag.Dicha seales internaalcircuitoypor lo tantonoestdefinidacomo salidaoentradaenladeclaracinentity,nipuedeportantoasignarseaningnterminalenelficherodeasociaciones.Paravisualizarestasealsernecesariomodificarelficherocontador.vhddetalmaneraquedefinaunanuevasalida(quellamaremosTP1terminaldeprueba1).Estasalidaseasignarala seal flag. Posteriormente se modificar el fichero asociaciones.ucf para volcar dichasalidahaciaunodelosterminalesexternosdelaFPGA.FICHEROcontador.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity contador is Port ( CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0); RCO : out STD_LOGIC; TP1 : out STD_LOGIC ); -- nueva salida (terminal de prueba) end contador; architecture a_contador of contador is signal flag : STD_LOGIC :='0'; signal divisor : STD_LOGIC_VECTOR (15 downto 0) := "0000000000000000"; signal QS : STD_LOGIC_VECTOR (3 downto 0) := "0000"; begin SYNC : process (CLK) -- proceso que divide el reloj begin if (CLK'event and CLK='1') then divisor

  • ManualdereferenciatarjetaBASYS2

    26

    FICHERODEASOCIACIONES:asociaciones.ucfNET "CLK" LOC = "M6"; # RELOJ DE LA FPGA NET "Q" LOC = "A9"; #Salida terminal 14 NET "Q" LOC = "B9"; #Salida terminal 15 NET "Q" LOC = "A10"; #Salida terminal 16 NET "Q" LOC = "C9"; #Salida terminal 17 NET "RCO" LOC = "C12"; #Salida terminal 18 NET "TP1" LOC = "A13"; #Salida terminal 19 Ahora, volcamos las salidas del contador (salidas Q, TP1 y RCO) hacia los terminales deltablero.Conectando la sondaentre los terminales19y25 (SALIDA)podrobservar la sealflag.Elrestodelassealespodrnmedirseenlosterminales14,15,16,17y18.

    Empleodesealesderelojexternas(diferentesdeCLK=50MHz)EnocasionespuedesernecesarioexcitaralgunosdeloscomponentessecuencialesdiseadosenlaFPGAmedianteelempleodesealesderelojdiferentesalasealprincipaldelatarjetaBASYS2(CLK=50MHz).Porejemplo,sepodradefinirunbiestabletipoJKdondelasentradasJyKestuviesen conectadasa los conmutadoresde la tarjetay la sealde relojdelbiestableestuvieseconectadaaunodelospulsadores.Enestoscasos,elcompiladorVHDLdel ISEnosdarunerrorde implementacinpuestoqueestaesunaprcticapocorecomendablequepuededar lugarafallosenelsistemasielrelojqueseutilizanoessuficientementefiable(porejemploposeeskew,rebotesoretardos).Esposible,noobstante,forzaralcompiladorparaqueadmitadichalneadereloj.Enestecasodeberaadirseunadirectivadecompilacinalficherodeasociacionesantesdeladefinicinde la lneade reloj.Supongaque la lneade relojhasidodefinidacomoCLKen los ficherosVHDL.Paraescribirsuasociacin,porejemplo,aunodelospulsadoresexternos(BTN0,patillaG12delaFPGA),deberescribirse:NET "CLK" CLOCK_DEDICATED_ROUTE = FALSE; NET "CLK" LOC = "G12"; # Pulsador BTN0 LadirectivaCLOCK_DEDICATED_ROUTE=FALSEfuerzaalcompiladoraadmitirquelalneaCLKseaasignadaalpulsador,enlugardeestarconectadaalrelojdelaFPGA.Ejemplo7:DiseodeunflipflopJKconsuentradaderelojconectadaaunpulsadorYaquesehacitadoelejemploenelprrafoanterior,acontinuacinsedetallaeldiseodeunflip flopde tipo JK cuyasentradas J yKestn conectadasadosde los conmutadoresde laplaca,mientrasquelaentradaderelojestconectadaaunpulsador.Lasdossalidas(QyQN,negada de la anterior) se visualizan a travs de dos LEDs. Sintetizando este ejemplo podrprobar el funcionamiento del flip flop produciendo flancos activos de reloj mediante elpulsador.

  • ManualdereferenciatarjetaBASYS2

    27

    FICHEROflip_flop_JK.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity flip_flop_JK is Port ( J : in STD_LOGIC; -- Entrada J del flip flop K : in STD_LOGIC; -- Entrada K del flip flop CLK : in STD_LOGIC; -- Entrada CLK del flip flop Q : out STD_LOGIC; -- Salida del flip flop QN : out STD_LOGIC); -- Salida negada end flip_flop_JK; architecture a_flip_flop_JK of flip_flop_JK is signal QS : STD_LOGIC := '0'; begin process (CLK) begin if (CLK'event and CLK='1') then if (J='0' and K='0') then -- funcionamiento del JK QS

  • ManualdereferenciatarjetaBASYS2

    28

    Ejemplo8:Utilizacindeunaentradaexternaparaeldesarrollodeunfrecuencmetro.Queremos desarrollar un frecuencmetro que sea capaz demedir frecuencias entre 1Hz y9999HzyquepresentelalecturaenlosdisplaysdelatarjetaBASYS2.LasealentrantedeberserdigitalTTL (esdecirconvaloresde0Vy5Vparael0yel1 respectivamente),de talmanera que sea compatible con la lgica de la tarjeta BASYS2. Esta seal es sencilla deobtener,puestoqueestdisponibleenelconectorTTLdelgeneradordefunciones.El funcionamiento internodeun frecuencmetro sebasaen contar los flancosactivosde lasealentranteduranteunperiodode tiempo conocidoT.Puestoqueel resultadodedichacuentasepresentaenlosdisplays,esimportantedisearadecuadamenteelvalordeltiempoTparaqueelnmerovisualizadosecorrespondarealmenteconlafrecuenciaexpresadaenHz.En nuestro caso, cuando el valor presentado sea 9999 habrn transcurrido realmente10000100 s = 1s , por lo tanto el valor del intervalo T se corresponder con esta cifra.Variando el valor de T se pueden obtener diferentes precisiones y diferentes escalas demedida.Lasiguientefigura,resumedeformasimplificadaelfuncionamientodelfrecuencmetro.

    En esencia, un autmata controla el funcionamiento del frecuencmetro. Cada segundo,debergenerarunpulsoen laspatillasLE (latchenable)paraqueelvalorde lacuentasequede retenido y a continuacin deber generar otro pulso en RST que ponga a 0 loscontadores (ver figura siguiente). La anchura de los pulsos es de 10 s separados entre stambin10s.

    DECOD7SEG

    Vcc

    CONTROL

    AN0

    AN1

    AN2

    AN3

    S0 S1

    DIVISORRELOJ N1ms

    CLK

    DIN

    AG

    MUXx4S1S0 E3E2 E1E0

    Y

    CONTADORDCADAS

    Q ENRCOCONTADORDCADAS

    Q ENRCOCONTADORDCADAS

    Q ENRCOCONTADORDCADAS

    Q ENRCO

    RST RST RST RST

    Q Q Q Q

    E E E ELATCH LATCH LATCH LATCHLE LE LE LE

    1

    Frecuenciaamedir

    AUTMATA

    NQ0NQ1NQ2NQ3

    NQL0NQL1NQL2NQL3

    NLE

    NRST

    NY

    NSS

  • ManualdereferenciatarjetaBASYS2

    29

    Por otro lado, un sistema de control actualiza la visualizacin de los displays de unmodosimilaralosejemplos3y4.Comolaentradaexternaporlaquesesuministrarlafrecuenciaamedirsevaautilizarcomosealde relojpara loscontadores,esnecesario forzaralcompiladorparaqueadmitadichalneacomosealexternadereloj(fjeseenelficherodeasociaciones).Al igualque enejemplos anteriores, loque seencuentradentrode la zonapunteadaeselcircuitoquedebemossintetizaren laFPGA,mientrasque loqueseencuentrafueradedichalneasecorrespondeconlosdiferentesrecursosdelatarjetaylaslneasexteriores.Este proyecto, al ser de gran envergadura, estar tambin dividido en varios ficheros, loscualessedescribendetalladamenteacontinuacin:FICHEROcontador_decadas.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity contador_decadas is Port ( CLK : in STD_LOGIC; -- entrada de reloj EN : in STD_LOGIC; -- entrada de ENABLE RST_L : in STD_LOGIC; -- entrada de RESET asncrona Q : out STD_LOGIC_VECTOR (3 downto 0); -- Salida RCO : out STD_LOGIC); -- Salida de fin de cuenta end contador_decadas; architecture a_contador_decadas of contador_decadas is signal QS : STD_LOGIC_VECTOR (3 downto 0) := "0000"; begin process (CLK,RST_L) -- RESET asncrono en lista de sensibilidad begin if (RST_L='0') then -- Si RST=0, el contador se pone a 0 QS

  • ManualdereferenciatarjetaBASYS2

    30

    Estecontadordedcadastieneunaentradadereloj(CLK)yunaentradadeENABLE.CuandoelENABLEestactivo(1),elcontadorseincrementaconcadaciclodereloj.Silacuentallegaa9,sevuelvea0enelsiguienteciclo.LasalidaRCOseutilizaparaencadenarcontadores,porlotanto ser1 cuando la salidaes iguala9ycuandoelENABLEestactivo.Adems tambintiene una entrada deRESET (RST) asncrona, activa a nivel bajo, que pone el contador a 0independientementedelreloj.FICHEROlatch.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity latch is Port ( E : in STD_LOGIC_VECTOR (3 downto 0); -- entrada del latch Q : out STD_LOGIC_VECTOR (3 downto 0); -- salida del latch LE : in STD_LOGIC); -- activacin del latch end latch; architecture a_latch of latch is signal QS : STD_LOGIC_VECTOR (3 downto 0); begin process (LE,E) begin if (LE='1') then QS

  • ManualdereferenciatarjetaBASYS2

    31

    Al igualqueenelejemplo4,estemultiplexorseempleapara lavisualizacinen losdisplays.Posee4entradasde4bits,unasalidade4bitsydosentradasdecontrol.FICHEROdecod7s.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity decod7s is port ( DIN : in STD_LOGIC_VECTOR (3 downto 0); -- entrada de datos S7SEG : out STD_LOGIC_VECTOR (0 to 6)); -- salidas 7seg (abcdefg) end decod7s; architecture a_decod7s of decod7s is begin with DIN select S7SEG

  • ManualdereferenciatarjetaBASYS2

    32

    Estecdigoeselmismoqueelutilizadoenelejemplo4.Esunmdulosecuencialqueutilizaunasealderelojparaincrementaruncontadorde2bitsquerepitelasecuencia00,01,10y11 indefinidamente.Conesta secuencia segenerauna sealANqueactivacadaunode losdisplays (mediante un 0). Esto se emplear para realizar el refresco de los displays. Lasecuenciadedosbits conmutar lasentradasdelmultiplexory las sealesANactivarn losdisplaysenconsonancia,deunmodosimilaraldelejemplo3perocon4displays.FICHEROdiv_reloj.vhdlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity div_reloj is Port ( CLK : in STD_LOGIC; -- entrada de reloj del sistema CLK_1MS : out STD_LOGIC); -- salida de reloj de frecuencia menor end div_reloj; architecture a_div_reloj of div_reloj is signal div : STD_LOGIC_VECTOR (15 downto 0); signal S_1MS : STD_LOGIC; begin process (CLK) begin if (CLK'event and CLK='1') then div

  • ManualdereferenciatarjetaBASYS2

    33

    architecture a_automata of automata is type STATE_TYPE is (CUENTA,LE_ON,LE_OFF,RESET_CNT); -- autmata de 4 estados signal NWS : STATE_TYPE := CUENTA ; --estado actual signal DivCLK : STD_LOGIC_VECTOR (31 downto 0) := "00000000000000000000000000000000"; --contador para dividir la frecuencia del reloj. begin process (CLK) begin if (CLK'event and CLK='1') then DivCLK if (DivCLK=50000000) then -- El estado CUENTA dura 1s NWS

  • ManualdereferenciatarjetaBASYS2

    34

    FICHEROcircuito.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity circuito is Port ( CLK : in STD_LOGIC; FREQ_INPUT : in STD_LOGIC; AN : out STD_LOGIC_VECTOR (3 downto 0); SEG7 : out STD_LOGIC_VECTOR (0 to 6)); end circuito; architecture a_circuito of circuito is component contador_decadas Port ( CLK : in STD_LOGIC; EN : in STD_LOGIC; RST_L : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0); RCO : out STD_LOGIC); end component; component latch Port ( E : in STD_LOGIC_VECTOR (3 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0); LE : in STD_LOGIC); end component; component MUX4 Port ( E0 : in STD_LOGIC_VECTOR (3 downto 0); E1 : in STD_LOGIC_VECTOR (3 downto 0); E2 : in STD_LOGIC_VECTOR (3 downto 0); E3 : in STD_LOGIC_VECTOR (3 downto 0); Y : out STD_LOGIC_VECTOR (3 downto 0); S : in STD_LOGIC_VECTOR (1 downto 0)); end component; component decod7s port ( DIN : in STD_LOGIC_VECTOR (3 downto 0); S7SEG : out STD_LOGIC_VECTOR (0 to 6)); end component; component control Port ( CLK : in STD_LOGIC; AN : out STD_LOGIC_VECTOR (3 downto 0); S : out STD_LOGIC_VECTOR (1 downto 0)); end component; component div_reloj Port ( CLK : in STD_LOGIC; CLK_1MS : out STD_LOGIC); end component; component automata port ( CLK : in STD_LOGIC; RST_L : out STD_LOGIC; LE : out STD_LOGIC); end component; signal NQ0 : STD_LOGIC_VECTOR (3 downto 0); -- nodos del circuito signal NQ1 : STD_LOGIC_VECTOR (3 downto 0); signal NQ2 : STD_LOGIC_VECTOR (3 downto 0); signal NQ3 : STD_LOGIC_VECTOR (3 downto 0); signal NQL0 : STD_LOGIC_VECTOR (3 downto 0); signal NQL1 : STD_LOGIC_VECTOR (3 downto 0); signal NQL2 : STD_LOGIC_VECTOR (3 downto 0); signal NQL3 : STD_LOGIC_VECTOR (3 downto 0); signal NY : STD_LOGIC_VECTOR (3 downto 0); signal NSS : STD_LOGIC_VECTOR (1 downto 0); signal NLE : STD_LOGIC; signal NRST : STD_LOGIC; signal N1MS : STD_LOGIC; signal NRCO0 : STD_LOGIC; signal NRCO1 : STD_LOGIC; signal NRCO2 : STD_LOGIC;

  • ManualdereferenciatarjetaBASYS2

    35

    signal NRCO3 : STD_LOGIC; begin U1 : contador_decadas -- 4 contadores port map ( CLK=>FREQ_INPUT, EN=>'1', RST_L=>NRST, Q=>NQ0, RCO=>NRCO0 ); U2 : contador_decadas port map ( CLK=>FREQ_INPUT, EN=>NRCO0, RST_L=>NRST, Q=>NQ1, RCO=>NRCO1 ); U3 : contador_decadas port map ( CLK=>FREQ_INPUT, EN=>NRCO1, RST_L=>NRST, Q=>NQ2, RCO=>NRCO2 ); U4 : contador_decadas port map ( CLK=>FREQ_INPUT, EN=>NRCO2, RST_L=>NRST, Q=>NQ3, RCO=>NRCO3 ); U5 : latch -- 4 latches port map ( E=>NQ0, Q=>NQL0, LE=>NLE ); U6 : latch port map ( E=>NQ1, Q=>NQL1, LE=>NLE ); U7 : latch port map ( E=>NQ2, Q=>NQL2, LE=>NLE ); U8 : latch port map ( E=>NQ3, Q=>NQL3, LE=>NLE ); U9 : MUX4 port map ( E0=>NQL0, E1=>NQL1, E2=>NQL2, E3=>NQL3, Y=>NY, S=>NSS );

  • ManualdereferenciatarjetaBASYS2

    36

    U10 : decod7s port map ( DIN=>NY, S7SEG=>SEG7 ); U11 : control port map ( CLK=>N1MS, AN=>AN, S=>NSS ); U12 : div_reloj port map ( CLK=>CLK, CLK_1MS=>N1MS ); U13 : automata port map ( CLK=>CLK, RST_L=>NRST, LE=>NLE ); end a_circuito; Eneste ficherose realiza la interconexinde todos loselementosmedianteunadescripcinestructuralque respondealdiagramadebloquespresentealprincipiodeesteejemplo.Lassealesdefinidassonlosnodosinternosdelcircuito.FICHERODEASOCIACIONES:asociaciones.ucf# Reloj principal del sistema NET "CLK" LOC = "M6"; # Seal de reloj del sistema # Conexiones de los DISPLAYS NET "SEG7" LOC = "L14"; # seal = CA NET "SEG7" LOC = "H12"; # Seal = CB NET "SEG7" LOC = "N14"; # Seal = CC NET "SEG7" LOC = "N11"; # Seal = CD NET "SEG7" LOC = "P12"; # Seal = CE NET "SEG7" LOC = "L13"; # Seal = CF NET "SEG7" LOC = "M12"; # Seal = CG # Seales de activacin de los displays NET "AN" LOC = "K14"; # Activacin del display 0 = AN0 NET "AN" LOC = "M13"; # Activacin del display 1 = AN1 NET "AN" LOC = "J12"; # Activacin del display 2 = AN2 NET "AN" LOC = "F12"; # Activacin del display 3 = AN3 #Entrada externa donde se conecta la seal entrante NET "FREQ_INPUT" CLOCK_DEDICATED_ROUTE = FALSE; #Forzar al compilador a admitir esta #lnea como entrada de reloj. NET "FREQ_INPUT" LOC = "B2"; #Entrada terminal 1 Finalmente,elficherodeasociacionesasignacadaunade lasentradasysalidasdelcircuitoalosrecursosfsicosdelatarjetaytambinalaentradaexternaporlaqueseintroducelasealcuyafrecuenciasedeseamedir.Porltimo,paraprobar este circuito conecte la salida TTLdel generadorde funciones a laentradaexterna(cablerojoalterminal1ycablenegro(masa)alterminal25).Ajusteelmandodefrecuenciaentre1Hzy9999Hzydichafrecuenciaaparecerenlosdisplaysdelatarjeta.

  • ManualdereferenciatarjetaBASYS2

    37

    UtilizacindelentornoISEPara realizar una sntesis mediante el entorno ISE debe crearse un proyecto. El proyectoincluirtodoslosficheroscorrespondientesaldiseoincluidoelficherodeasociaciones.Vaya almen FILE > NEW PROJECT. Aparecer una ventana donde tendr que escribir elnombredelnuevoproyecto.Elentornocrearunacarpetadentrode laubicacinLocationqueapareceendichaventana.Endichacarpetaalmacenartodalainformacindelproyecto,incluidos los ficheros VHDL, el fichero de asociaciones y el bit stream una vez obtenido.AsegresetambinqueenlacasilladeseleccinToplevelSourceTypeapareceHDL.Enlasiguientepantalladeberajustarlossiguientesvalores:Family:Spartan3EDevice:XC3S100EPackage:CP132Speed:5Synthesistool:XST(VHDL/Verilog)Simulator:ISim(VHDL/Verilog)PreferredLanguage:VHDLPorltimoslteselassiguientespantallaspulsandoenNext.EnlaltimaaparecerelbotnFinish.Unavezcreadoelproyectopuedenaadirseficherosnuevospulsandoconelbotnderechodelratnsobreel iconoxc3s100e5cp132queapareceen laparte izquierdade lapantalla.EnelmenquesedespliegaseleccioneNewSource.SielficheroquepretendeaadiryahasidocreadopreviamenteseleccioneentoncesAddSource.ElijaVHDLmoduleparacrearunnuevoarchivoVHDL.Escribaunnombreparaelarchivoypasea la siguientepantalla.Enellapuededeclarar lasentradasy las salidasdelmdulo (seccinport dentro de la declaracin entity). Si lo desea puede pasar esta pantalla y declarar lasentradas y salidas manualmente ms tarde. Tras esta pantalla aparecer un editor con elesqueleto principal del cdigo VHDL ya escrito. Puede escribir en el archivo y grabar loscambiosconeliconodeundisketteenlapartesuperiordelapantalla.ParaelarchivodeasociacioneselijaImplementationConstraintsFileyescribaunnombre.Secrear un archivo con extensin UCF. Para acceder a l, seleccinelo en la parte superiorizquierdadelapantalla,luegopulseconelratneliconoEditConstraints(Text)enlaparteinferiorizquierda(verfigura).

  • ManualdereferenciatarjetaBASYS2

    38

    Paracompilarelcdigoygenerarelbitstream,seleccioneelficheroprincipaldelproyectoyhagadobleclickenGenerateProgrammingFileen laparte inferior izquierda.Vea la figurasiguiente:

    Evidentemente tendr que depurar todos los errores existentes en el cdigo hasta que sepuedagenerarunficherobitstream.EnelmomentoenquetodoestcorrectoapareceruniconoverdealaizquierdadelaetiquetaGenerateProgrammingFile.

  • ManualdereferenciatarjetaBASYS2

    39

    SimulacindecircuitosmedianteISIMISIMesunaherramientaintegradaenelentornoISEparalasimulacindecircuitos.Conestaherramienta es posible probar el funcionamiento de losmismos antes de su sntesis en latarjetaBASYS2.Esmuyrecomendablesimularloscircuitosantesderealizarlasntesis.Aunqueun circuito que funciona bien en la simulacin no tiene por qu ser necesariamentesintetizable, la simulacinesunprocesoquepuedeahorrar tiempodedepuracin sobreelcircuitorealyqueademspuedeserrealizadofueradellaboratorio.Lasimulacinsellevaacabocreandounnuevoficherodetest("testbench")dondetendremosqueintroducirunasecuencialgicadependientedeltiempoenlasvariablesdeentrada.Comoresultado,elsimuladornosrepresentardeformagrficalosvaloresdelassalidasenfuncindelascitadasentradas.1.Simulacindecircuitossecuenciales(sncronosconunasealdeentradadereloj)Para ilustrar el funcionamiento del simulador ISIM utilizaremos el cdigo VHDLcorrespondientealflipflopJKdefinidoenelejemplo7deestedocumento.Portantodebemoscargarelcdigodelcitadoejemploenprimerlugar.Paraaadiraldiseodel flip flopel ficherode testhagaclickconelbotnderechosobreeliconoxc3s100e5cp132yelija laopcin"NewSource".Seleccioneenestecaso"VHDLtestbench"paraeltipoeintroduzcaunnombreparaelarchivo(porejemplo"test_flip_flop").

    Enlasiguienteventanaselepreguntarporelficheroalcualquiereasociareltestbench.Debeasociarse al fichero principal. En este caso es sencillo porque solamente existe un ficheroVHDL, pero en los diseos complejos donde existems de un fichero, deber asignarse alficheroprincipalque constituye la interconexinde losmdulos. La simulacin se realizarsiempretomandocomoentradasysalidaslascorrespondientesalficheroseleccionado(vealasiguientefigura).

  • ManualdereferenciatarjetaBASYS2

    40

    Despusdehacerclicken"Next"y"Finish"elficheroseaadiralproyecto,aunqueannoaparece.Paraversucontenidodeberpasardelmodo"implementation"almodo"BehavioralSimulation" seleccionando la opcin en la parte superior de la ventana que contiene losnombresdefichero:

    ElsimuladorcrearunnuevoficheroconcdigoVHDL.Abraesteficherohaciendodobleclicksobre la lneacorrespondiente. PodrobservarquesetratadeuncdigoVHDLespecialquecontiene la declaracin de una entidad y una arquitectura. En la figura siguiente se puedeobservareltestbenchcreadoporelISEparaelejemplodelflipflop.Entrelaslneas42y50sedefineuncomponentecorrespondientealcircuitosobreelquesevaarealizar lasimulacin.Tambin sedefinen seales (lneas54a60)por cadaunade lasentradasy salidasy se lesasignaunvalor iniciala lasentradas iguala '0'(sepuedecambiarpor '1'siesnecesario).Porltimo,seasignandichassealesalasentradasysalidasdelcomponente(lneas68a74).

  • ManualdereferenciatarjetaBASYS2

    41

    Los dos procesos que siguen a continuacin crean la secuencia temporal de las seales deentradaquesernempleadasporelsimuladorparagenerar lassalidas.Setrataenestecasodedosprocesos:

    CLK_process creauna secuenciade '0'y '1' conperiododeCLK_period/2 cadauno.EstasecuenciahasidocreadaporelISEtrasinterpretarquelasealCLKesunasealdereloj.Lasecuenciaserepiteindefinidamente.

    stim_proc es un proceso en el que debemos detallar la secuencia temporal quequeremosanalizarparalassealesdeentrada(ennuestrocasoJyK).

    Ennuestrocaso (en la figura siguiente),hemosescritoalgunas lneascondiferentesvaloresparalasentradas(JyK).Tengaencuentaquesetratasolamentedeunejemploreducido,nounbancodepruebacompletoparacomprobarelfuncionamientoexhaustivodelflipflop.Se iniciaelprocesoesperando10ns (unperiodode reloj).Entre las lneas95y112damosvaloresalasentradasyesperamosotros10nsparaqueseproduzcaunflancoactivodereloj.Nuevamentesecambianlosvaloresdelasentradas,yassucesivamente.Esteprocesoseejecutaenparaleloconelanterior,porloqueesposiblesincronizarlosvaloresde lasentradascon lasealdereloj.Estacaractersticaesmuy importante,porejemplo,a lahoradesimularautmatas.

  • ManualdereferenciatarjetaBASYS2

    42

    Pararealizarlasimulacin,hagaclickconelbotnderechosobrelalnea"SimulateBehavioralModel"enlaparteinferiorizquierdadelapantallayseleccione"RerunAll".

    EstorecompilarelcdigoVHDLjuntoconelficherocorrespondienteal"testbench"creandola simulacin.Al terminar se arrancarelentornode visualizacin ISIMdonde aparecerelcronogramacon lassealesdeentradaysalida.Endichoentornotienevariasopcionesparapoderrealizarzoomenelcronograma,observar losvalores lgicosde lasseales,cambiareltiempototaldesimulacin,etc.

  • ManualdereferenciatarjetaBASYS2

    43

    2.SimulacindecircuitoscombinacionalesLoscircuitoscombinacionalesnosondependientesdelasealdeunreloj.Noobstante,comoveremosacontinuacin,elsimuladorsigueaadiendo las lneascorrespondientesalprocesodesincronizacin,aunquenosdirquenoidentificalasealdereloj.Enestecasoelsimuladorharreferenciaaunasealnoexistenteenelcircuito.Cuandoestamos simulando circuitos combinacionales se trabajanicamente conelprocesostim_proc,ydebeneliminarsetodas las lneascorrespondientesalrelojsinosonnecesarias.Paracomprobarelfuncionamiento,seasignarnvaloresalasentradasyseaadirntiemposdeesperaentrevariacionesenlasmismas.Como ejemplo para ilustrar esta parte vamos a utilizar el cdigo VHDL de un circuitocombinacionalqueconviertecdigobinariode5bitsaBCD(decenasyunidades).Suentrada(BIN) ser un vector binario de 5 bits y sus salidas sern dos vectores de 4 bits para lasunidadesylasdecenasBCDrespectivamente.Porejemplo,antelaentrada11000(24decimal),elcircuitodeberobtenerensussalidaslosvalores: 0010 para las decenas y 0100 para las unidades. Ante la entrada 11111 (31decimal),deberobtener losvalores0011para lasdecenasy0001para lasunidades.Eneste ejemplo utilizaremos estos dos valores en la simulacin, aunque para comprobarexhaustivamente su funcionamiento deberamos probar todos los valores posibles de lasentradas.

  • ManualdereferenciatarjetaBASYS2

    44

    Elcdigocorrespondientealconvertidorsemuestraacontinuacin:library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity BIN2BCD is Port ( BIN : in STD_LOGIC_VECTOR (4 downto 0); -- entrada binaria DECBCD : out STD_LOGIC_VECTOR (3 downto 0); -- decenas BCD UNIBCD : out STD_LOGIC_VECTOR (3 downto 0)); -- unidades BCD end BIN2BCD; architecture a_BIN2BCD of BIN2BCD is begin with BIN select UNIBCD

  • ManualdereferenciatarjetaBASYS2

    45

    "0010" when "11001", "0010" when "11010", "0010" when "11011", "0010" when "11100", "0010" when "11101", "0011" when "11110", "0011" when "11111", "0000" when others; end a_BIN2BCD; Eltest_benchparaestecircuitosecreadelamismaformaquehicimosenelcasoanterior.Elcdigo que aparecer har referencia a una seal que no existe. Las lneas quecontenganesta sealyelprocesode sincronizacinpuedeneliminarseocomentarse (enelsiguientecdigo,correspondientealcitadotest_bench,aparecencomentadasymarcadasenrojo).LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY test_BIN2BCD IS END test_BIN2BCD; ARCHITECTURE behavior OF test_BIN2BCD IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT BIN2BCD PORT( BIN : IN std_logic_vector(4 downto 0); DECBCD : OUT std_logic_vector(3 downto 0); UNIBCD : OUT std_logic_vector(3 downto 0) ); END COMPONENT; --Inputs signal BIN : std_logic_vector(4 downto 0) := (others => '0'); --Outputs signal DECBCD : std_logic_vector(3 downto 0); signal UNIBCD : std_logic_vector(3 downto 0); -- No clocks detected in port list. Replace below with -- appropriate port name -- constant _period : time := 10 ns; COMENTAMOS ESTA LINEA (NO NECESARIA) BEGIN -- Instantiate the Unit Under Test (UUT) uut: BIN2BCD PORT MAP ( BIN => BIN, DECBCD => DECBCD, UNIBCD => UNIBCD ); -- Clock process definitions -- _process :process -- begin --

  • ManualdereferenciatarjetaBASYS2

    46

    -- hold reset state for 100 ns. wait for 10 ns; BIN

  • ManualdereferenciatarjetaBASYS2

    47

    VolcadodelbitstreamsobrelaFPGAparasintetizarelcircuitoUnavezrealizadalasntesisdelcircuito,segeneraunarchivoconextensin.bitquecontienela secuencia bitstream de configuracin interna para la FPGA. Esta secuencia deber sercargada a travs de la tarjeta BASYS2. Para ello necesita el programa ADEPT de DIGILENTdisponibleentodoslosordenadoresdellaboratorio.Arranquedichoprograma:

    MedianteelbotnBrowse situadoen la lnea superiorpuede seleccionarelarchivoquedeseacargar.Elarchivodebetenerextensin.bitAcontinuacinhagaclickenelbotnProgram.Acepte laventanaqueapareceyelficherosertransferidoalaFPGAconfigurndoladetalmaneraquesinteticeelcircuitodescritoensudiseo.Apartirdeestemomento,laFPGAcomenzaracomportarsesegneldiseodescritoenelcdigoVHDL.

  • ManualdereferenciatarjetaBASYS2

    48

    BibliografaBASYS2referencemanual(http://www.digilentinc.com/Data/Products/BASYS2/Basys2_rm.pdf)DIGILENTwebsite:http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,790&Prod=BASYS2XILINXISEWebpackdesignsoftware:http://www.xilinx.com/products/designtools/isedesignsuite/isewebpack.htmMaterialdocentedelaasignaturaElectrnicaDigital(EDIG).DigitalDesign,J.F.Wakerly,4thedition,PrenticeHall,2005.ISBN:0131863894