Está en la página 1de 37

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14

1 / 37
Proyecto de Ingeniera de Computadores (PEC)
Objetivo del curso
El objetivo de esta asignatura es que el alumno aprenda a desarrollar un prototipo de un computador o un SoC (System on
Chip) en un chip programable sobre una placa base para crear un mini-ordenador. Se pondrn en prctica algunos de los
conocimientos adquiridos en asignaturas anteriores: diseo de la microarquitectura de un procesador! diseo e
implementaci"n de so#t$are de sistema! y diseo de sistemas digitales.
%ases principales del proyecto.
&) 'prendi(aje de las herramientas de desarrollo para los chips programables (%)*') y prctica del lenguaje de
descripci"n del hard$are +,-..
/) 0mplementar pequeos componentes o dispositivos en el chip programable de la placa base.
1) 0mplementar una primera versi"n simpli#icada del procesador en una %)*' (sin memoria e2terna! ni soporte para
el sistema operativo o dispositivos e2ternos)
3) 0mplementar una versi"n completa del procesador.
4) )rogramar un sistema de arranque (506S) para el Sistema 6perativo en el procesador.
7) Evaluar el rendimiento de varias aplicaciones sobre la plata#orma que se ha diseado.

Objetivo de la sesin
En esta sesi"n vamos a #amiliari(arnos con el entorno de desarrollo y con la placa de pruebas. )ara ellos disearemos
diversos circuitos que nos ayudarn a entender el #uncionamiento de algunos de los componentes que dispone la placa
base. 8ambi9n veremos herramientas y :tiles necesarios para ayudarnos a debugar nuestros diseos.
)ara la reali(aci"n de este curso disponemos de dos tipos de placas distintas con una %)*' de la casa Altera. )odremos
usar indistintamente cualquiera de ellas con s"lo algunos pequeos cambios en la con#iguraci"n de nuestros diseos. .as
placas disponibles son la DE1 y la DE2-115! ambas del #abricante Terasic. )ara nuestros diseos no importar que placa
usemos.

)laca de desarrollo -E/-&&4
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
2 / 37


)laca de desarrollo -E&
'mbas placas disponen de la potencia y capacidad su#icientes! simplemente la placa -E/-&&4 tiene ms capacidad
(memoria y unidades programables)! ms componentes (.C-! Ethernet! ;) y ms capacidades de e2pansi"n que no
usaremos en este curso.
.a %)*' que utili(aremos ser del modelo Cyclone de Altera y el so#t$are que usaremos para programar estas placas es
el Quartus II Web Edition software. Es gratuito y se encuentra en la $eb de 'ltera.
Funcionamiento FPGA de la placa de desarrollo
El dispositivo %)*' de la placa se recon#igura cada ve( que se enciende la placa y pierde su con#iguraci"n al
desconectarlo de la alimentaci"n. <sando el so#t$are adecuado es posible recon#igurar la %)*' tantas veces como
queramos. 8ambi9n es posible dejar una con#iguraci"n almacenada en una EE)=6> y que sea esta la que programe la
%)*' automticamente cada ve( que se encienda la placa. 'l primer m9todo de programaci"n de la placa base se le
conoce como ?8'* programming (?oint 8est 'ction *roup) y al segundo m9todo 'S programming ('ctive Serial).
-urante este curso siempre usaremos el m9todo ?8'*. Cada ve( que apaguemos la placa perderemos la con#iguraci"n de
la %)*'. )ara con#igurar la placa el modo ?8'* simplemente hay que poner el interruptor =<@A)=6* en posici"n de
=<@.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
3 / 37

.ocali(aci"n del interruptor =<@A)=6* en la -E/-&&4
Conexin de la placa al ordenador
+eamos primero como conectar la placa al ordenador:
&) )rimero comprobaremos que el interruptor =<@A)=6* est en la posici"n de =<@.
/) Enchu#amos la placa a la alimentaci"n el9ctrica.
1) Conectaremos el cable <S5 a un puerto del ordenador y al puerto USB Blaster Port de la placa de desarrollo. Es
importante enchu#ar el conector <S5 en la ranura ms pr"2ima a la alimentaci"n (como se ve en la #igura)!
puesto que los dems puertos sirven para ser con#igurados y no para grabar diseos en la %)*'.
3) Ba podemos pulsar el bot"n rojo )o$er 6@A6%% S$itch! situado al lado de la alimentaci"n.






Conectores -E/-&&4 Conectores -E&
'hora la placa reprogramar la %)*' con la con#iguraci"n que est9 almacenada en la EE)=6>. Si no se ha modi#icado
el programa original veremos que los leds y los C-segmentos se encienden.
Si es la primera ve( que conectamos la placa al ordenador! nos pedir que instalemos el driver D<S5-5laster driverE.
'ntes debemos haber instalado el Quartus II Web Edition software y en un directorio se encuentra el driver. En el
documento DMy First FPGA for Altera E!"##$ BoardE de 8erasic pod9is ver paso a paso como se instala el driver.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
4 / 37
Cmo programar una FPGA?
<na ve( instalado el so#t$are Quartus II Web Edition software y el driver D<S5-5laster driverE. Este so#t$are permite la
creaci"n de diseos para la %)*' (mediante lenguajes de descripci"n hard$are! esquemas! ...) y contiene un conjunto de
herramientas. Entre ellas hay la que se encarga de reprogramar las %)*' a trav9s del puerto <S5.
)ara programar la %)*' primero abrimos la aplicaci"n Quartus II. @os aparecer una ventana de un asistente con el
titulo DGettin% Started Wit& Quartus II SoftwareE. .a podemos cerrar. <na ve( la aplicaci"n est9 abierta! vamos
directamente a la opci"n de men: DtoolsE donde estn todas las herramientas. Seleccionamos la opci"n DEPro%ra''erE
como puede verse en la siguiente #igura.

)antalla principal del Fuartus 00

Se nos abrir un nuevo programa! el programa encargado de reprogramar las %)*'. Es el momento de comprobar que la
placa est conectada a la alimentaci"n el9ctrica y est encendida! que el cable <S5 est conectado al ordenador y al
puerto USB Blaster! y que el interruptor =<@A)=6* est en la posici"n de =<@. Si no estaba bien conectada o no estaba
encendida! el programador no la detectar.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
5 / 37

En el caso de que no haya detectado la placa! deberemos con#igurar el DHardware SetupE situado en la esquina
superior i(quierda de la ventana. En el men: desplegable etiquetado como DCurrently selected (ardware)E debemos
seleccionar USB"Blaster y pulsar el bot"n DCloseE.

' continuaci"n procederemos a seleccionar el programa a cargar. .os programas compilados para reprogramar la %)*'
tienen la e2tensi"n .so#. )ulsaremos el bot"n DAdd FileE y seleccionaremos el archivo con el que deseemos
reprogramar la %)*'. -eberGa aparecer en el recuadro in#erior de la ventana un dibujo del chip con el nombre del
procesador de nuestra placa. Si todo es correcto! podemos pulsar el bot"n DStartE para comen(ar a grabar el programa.
.as luces de la placa se apagarn durante unos segundos y en la esquina superior i(quierda de la ventana aparece una
barra de progreso. Cuando esta alcance el &HHI! la reprogramaci"n de la %)*' habr terminado con 92ito.
Si estamos utili(ando la placa de desarrollo -E/-&&4 podemos seleccionar como ejemplo el #ichero
DE!*##$*ControlPanel+sofE. Entonces veremos como aparece el nombre E)3CE&&4%/J! que es el del procesador de
nuestra placa. )ara la placa de desarrollo -E& podemos seleccionar como ejemplo el #ichero DE#*USB*API+sofE y el
nombre que aparecer es E)/C/H%3K3! que es el del procesador de nuestra placa.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
6 / 37

)antalla del Pro%ra''er con un #ichero para la placa -E/-&&4

)antalla del Pro%ra''er con un #ichero para la placa -E&
Herramienta DE2-! Control Panel"
Esta herramienta nos servir para acceder y comprobar el #uncionamiento de algunos componentes. @os permitir DjugarE
con la inter#a( de la %)*' (leds! switc&es! pulsadores! .C-! +*'! ;) y ms adelante la usaremos para cargar programas
en las memorias (sram! #lash! sdram) que lleva incorporadas la placa base. Esta herramienta nos la proporciona el
#abricante de la placa de desarrollo ($$$.terasic.com). )ara instalarla simplemente hay que copiar el contenido del
directorio DE!*##$*tools,E!*##$*control*-anelE que est en el C- (-E/-&&4 System C-) suministrado por el
#abricante en la carpeta bin que est instalado el Quartus II.
)ara poder usar esta herramienta primero hay que reprogramar la %)*' para que pueda entenderse con ella. 'sG que
abriremos la herramienta de programaci"n de la %)*' ()rogrammer) y la reprogramaremos con el #ichero
D-E/L&&4LControl)anel.so#E que est en la misma carpeta que acabamos de copiar. <na ve( se haya reprogramado con
92ito (la barra de progreso haya llegado al &HHI) todos los leds y los C-segmentos de la placa se encendern. 'hora ya
podemos ejecutar en el ordenador la aplicaci"n del )anel de control. Ejecutamos el archivo
D-E/L&&4LControl)anel.e2eE! se abrir una ventana como la de la siguiente #igura y automticamente conectar con la
placa.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
7 / 37


<tili(a la aplicaci"n para probar que todos los dispositivos de la placa #uncionan correctamente. Enciende y apaga los
leds! activa los switc&s! la pantalla .C-! el sonido;

Herramienta DE Control Panel"
Esta herramienta nos servir para acceder y comprobar el #uncionamiento de algunos componentes. @os permitir DjugarE
con la inter#a( de la %)*' (leds! switc&es! pulsadores! .C-! +*'! ;) y ms adelante la usaremos para cargar programas
en las memorias (sram! #lash! sdram) que lleva incorporadas la placa base. Esta herramienta nos la proporciona el
#abricante de la placa de desarrollo ($$$.terasic.com). Esta herramienta no hace #alta instalarla y se puede ejecutar
directamente. Esta herramienta est en el directorio DE#*control*-anelE que est en el C- suministrado por el
#abricante.
)ara poder usar esta herramienta primero hay que reprogramar la %)*' para que pueda entenderse con ella. 'sG que
abriremos la herramienta de programaci"n de la %)*' ()rogrammer) y la reprogramaremos con el #ichero
D-E&L<S5L')0.so#E que est en la misma carpeta. <na ve( se haya reprogramado con 92ito (la barra de progreso haya
llegado al &HHI) los visores ."se%'entos de la placa mostrarn el valor DHHHHE. 'hora ya podemos ejecutar en el
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
8 / 37
ordenador la aplicaci"n del )anel de control. Ejecutamos el archivo D-E&LControlL)anel.e2eE y se abrir una ventana
como la de la siguiente #igura. )ara poder controlar la placa hay ir a la opci"n D6penE del men: principal y seleccionar la
opci"n D6pen <S5 )ort HE.

<tili(a la aplicaci"n para probar que todos los dispositivos de la placa #uncionan correctamente. Enciende y apaga los
leds! activa los switc&s! cambia el valor de los visores ."se%'entos;


Introduccin
El diagrama estndar de #lujo para la implementaci"n de un circuito l"gico usando un dispositivo l"gico programable! tal
como un chip %)*' (#ield programmable gate array) sigue las siguientes etapas.

>s concretamente:
En la etapa de diseo (-esign) se especi#ica el circuito deseado! ya sea por medio de un diagrama esquemtico! o
mediante el uso de un lenguaje de descripci"n de hard$are! como +erilog o +,-.. En esta etapa es donde se crea el
circuito digital que se implementar en la %)*'.
En la etapa de compilaci"n (Compile)! primero se hace el proceso de SGntesis (Synthesis)! el circuito es sinteti(ado en un
circuito #ormado :nicamente por los elementos l"gicos (.Es) que dispone el chip %)*'. .uego se hace el proceso de
montaje (%itter). En este proceso la herramienta de compilaci"n determina la ubicaci"n de las .E de#inidas en la netlist en
el chip %)*' ()lace)! y escoge las rutas de cone2i"n para las seales y buses para hacer las cone2iones entre
determinados .E (=oute).
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
9 / 37
,abitualmente! en la etapa de compilaci"n tambi9n hay un proceso que se encarga del hacer el anlisis del tiempo
(8iming 'nalysis). Se anali(an y calculan los retardos de propagaci"n a lo largo de los diversos caminos en el circuito
implementado en la %)*' para proporcionar una indicaci"n del rendimiento esperado del circuito
.a etapa de simulaci"n (Simulate)! aunque es opcional casi siempre es imprescindible. Es la etapa en que se intenta ver
que todo #unciona correctamente antes de reprogramar la %)*'. Se puede hacer a dos niveles: Se puede hacer una
simulaci"n #uncional (%unctional Simulation) del circuito para veri#icar el correcto #uncionamiento del circuito que va a
ser implementado en la %)*' sin tener en cuenta ninguno de los posibles problemas de sincroni(aci"n! o se puede hacer
una simulaci"n de tiempos (8iming Simulation) mucho ms precisa para veri#icar que todas las seales tienen los valores
correctos y llegan en el momento adecuado.
.a etapa de programaci"n ()rogram) se encarga de implementar el circuito diseado #Gsicamente en el chip %)*'
mediante la programaci"n de los interruptores de con#iguraci"n que con#iguran los elementos l"gicos (.Es) y establecer
las cone2iones del cableado necesario.
.a :ltima etapa (,ard$are +eri#y) simplemente se veri#ica #Gsicamente! ya en el chip %)*'! que todo #unciona
correctamente.

Un ejemplo completo paso a paso
Dise#o es$uem%tico mediante &lo$ues
)ara #amiliari(arnos con todos los programas y procedimientos! primero disearemos completamente un sencillo circuito
y lo haremos paso a paso usando el so#t$are Quartus II. Este circuito deber encender un led de la placa cada ve( que se
pulsen simultneamente dos pulsadores de la placa.
El circuito que vamos a crear bsicamente contendr una puerta '@- cuyas entradas estarn conectadas a dos pulsadores
y su salida a un led.
En primer lugar conecta la placa y enci9ndela! tal y como se mostrado anteriormente. ' continuaci"n ejecuta la aplicaci"n
Quartus II y una ve( iniciada cierra la ventana emergente del asistente.
En esta ocasi"n crearemos un proyecto desde el principio! asG que en el men: de pestaas superior selecciona File New.
En la ventana que se abre seleccionar D/ew Quartus II Pro0ectE y pulsar DOE.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
10 / 37
Se abrir una ventana de tGtulo D/ew Pro0ect Wi1ardE. Si no ha sido desactivado! lo primero que muestra esta ventana es
una pequea introducci"n y en la esquina superior i(quierda se leer el tGtulo DIntroductionE! pulsaremos el bot"n DNe!tE.
En la ventana de directorio! seleccionaremos la carpeta en la que queremos ubicar el proyecto (mejor si est vacGa)! le
daremos un nombre (por ejemplo le llamaremos e'oAnd!*sc& al proyecto) y pulsaremos el bot"n DNe!tE.
.a siguiente pantalla! de nombre D'dd %ilesE la dejaremos como est y volveremos a pulsar DNe!tE. .legaremos a una
pantalla de nombre D%amily M -evice SettingsE. En esta ventana debemos seleccionar la #amilia y modelo de nuestra
%)*'. Este paso es muy importante! puesto que si nos equivocamos el circuito ser compilado para otro dispositivo y no
podremos grabarlo en la placa.
Si usamos la placa DE2-115 deberemos seleccionar el dispositivo E)3CE&&4%/JCC que es el modelo de %)*' que tiene
esta placa de desarrollo. En el desplegable etiquetado como DFa'ily)E buscaremos Cyclone I" E. Esto actuali(ar el
men: DA2aiable de2ices)E! en el que debemos buscar el modelo e2acto! EP#CE$$%F&'C(. ' continuaci"n pulsaremos el
bot"n DNe!tE.


Si usamos la placa DE1 deberemos seleccionar el dispositivo E)/C/H%3K3CC que es el modelo de %)*' que tiene esta
placa de desarrollo. En el desplegable etiquetado como DFa'ily)E buscaremos Cyclone II. Esto actuali(ar el men:
DA2aiable de2ices)E! en el que debemos buscar el modelo e2acto! EP&C&)F#*#C(. ' continuaci"n pulsaremos el bot"n
DNe!tE.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
11 / 37

Si alguna ve( olvidamos el modelo de %)*' que tiene nuestra placa de desarrollo simplemente hace #alta mirar el chip
para averiguarlo. En la parte superior de la %)*' est impresa la #amilia y el modelo e2acto.
El siguiente men: lo dejaremos tal y como est! pulsando DNe!tE otra ve(. %inalmente aparecer un pequeo resumen de
las opciones seleccionadas! comprobamos que sean correctas y ya podemos pulsar el bot"n DFinis+E.
<na ve( creado el proyecto! procederemos a crear el diagrama de bloques (Schematic) de nuestro circuito. En el men: de
pestaas seleccionaremos File New. Esta ve( seleccionaremos la opci"n DBloc3 ia%ra',Sc&e'atic FileE y pulsaremos
DOE. .a ventana principal habr cambiado para mostrar un espacio de trabajo llamado Bloc3#+bdf en el que poder
disear un circuito gr#icamente.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
12 / 37


En primer lugar insertaremos una puerta '@- de dos entradas. )ara insertar puertas debemos seleccionar el icono con
#orma de '@- situado en la parte superior del espacio de trabajo. <na ventana de tGtulo DSy'bolE se abrir. En el
recuadro D4ibrariesE aparece un men: desplegable en #orma de rbol! seleccionaremos
c:AalteraA&&.&AquartusAlibrariesAprimitiveslogicand/ y pulsaremos DOE. El cursor cambiar a una #orma de cru(
con una puerta '@- enganchada! que ubicaremos donde creamos conveniente.


PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
13 / 37
' continuaci"n debemos aadir las entradas y salidas del circuito y conectarlas a la puerta l"gica. )ara hacer esto
pulsaremos la pequea #lecha del icono (que hay justo a la derecha del icono en #orma de puerta '@-) y
seleccionaremos DIn-utE. Colocaremos dos entradas delante de la puerta '@- y una salida detrs! seleccionando
D5ut-utE en el desplegable anterior. <na ve( echo esto! procederemos a conectar las salidas y la entrada con la puerta
'@-. )ara hacer esto basta con colocar el puntero justo encima de las lGneas que representan cables hasta que el puntero
adopte la #orma de una cru(. Entonces clicamos con el bot"n i(quierdo y aparecer una lGnea! que conectaremos en el
lugar deseado. ,aciendo un Ddoble clicNE sobre el nombre de cada uno de los -in que acabamos de poner podremos
cambiarlos. =enombramos los dos -ins de entrada como Boton*# y Boton*!O y el de salida como 4ed*salida. El circuito
debe quedar parecido al mostrado a continuaci"n.

<na ve( hecho esto! ya podemos compilar el proyecto. )rimero guardaremos el proyecto con File Sa,e (Ctrl6S) y a
continuaci"n Processing Start Compilation (Ctrl64). Esto iniciar el proceso de compilaci"n que puede tardar unos
minutos. Cuando el proceso termine! veremos que hemos obtenido! a parte de una pestaa con el in#orme de la
compilaci"n! varios warnin%s. .a mayorGa de ellos carecen de importancia y los ignoraremos. .os warnin%s importantes
aparecen en la pestaa DCritical Warnin%E situada en la parte in#erior de la consola.
-e los avisos que aparecen en DCritical warnin%E! de momento! s"lo debe preocuparnos el siguiente: DCritical Warnin%
7#89:;$<) /o e=act -in location assi%n'ent7s< for > -ins of > total -insE. Este aviso nos in#orma de que no tenemos
asignadas las entradas (inputs) y salidas (outputs) del diseo a ning:n -in de la %)*'! es decir! no hemos asignado las
entradas y salidas a ning:n bot"n ni led de la placa.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
14 / 37


)ara hacer esta asignaci"n! utili(aremos la herramienta DPin -lannerE! que se encuentra en Assignments Pin Planner.
Esta herramienta permite asignar los nombres de las salidas y entradas que hemos puesto en nuestro diseo a los diversos
-ins (patillas) de la %)*'. Cada uno de los -ins de la %)*' est conectado a alg:n dispositivo de la placa de desarrollo.
@ecesitamos saber a que -innes de la %)*' estn conectados los pulsadores y los leds de la placa de desarrollo para
poder hacer esta asignaci"n. Esta in#ormaci"n nos la proporciona el manual del #abricante de la placa.
+amos a ver simplemente la parte que nos interesa para este ejemplo. +emos que ambas placas disponen de 3 pulsadores.
El manual nos indicar a que -innes de la %)*' estn conectados. 'dems nos da una in#ormaci"n adicional que nos
indica que los pulsadores estn #iltrados contra rebotes cosa que no ocurre con los interruptores (switc&) de la placa. En la
secci"n 3./ de los manuales de las placas vienen la descripci"n! el comportamiento y la asignaci"n de los -innes de los
pulsadores.
)odemos ver un esquema de como estn conectados a la placa base y lo ms importante la tabla de asignaciones.

En esta tabla! por ejemplo podemos ver que el pulsador cero (?E@A:B) est conectado al -in R22 de la %)*' de la placa
-E& (todos los -innes de la %)*' estn etiquetados).
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
15 / 37
Signal Name FPGA Pin No. Description Signal Name FPGA Pin No. Description
KEY!" P#$%&22 Pus'(utton!" KEY!" P#$%)23 Pus'(utton!"
KEY1" P#$%&21 Pus'(utton1" KEY1" P#$%)21 Pus'(utton1"
KEY2" P#$%*22 Pus'(utton2" KEY2" P#$%$21 Pus'(utton2"
KEY3" P#$%*21 Pus'(utton3" KEY3" P#$%&24 Pus'(utton3"

8abla asignaciones placa -E& 8abla asignaciones placa -E/-&&4

En la siguiente tabla podemos ver como estn conectados algunos de los leds de la placa base
Signal Name FPGA Pin No. Description Signal Name FPGA Pin No. Description
+E,-!" P#$%.22 +E, -reen!" +E,-!" P#$%E21 +E, -reen!"
+E,-1" P#$%.21 +E, -reen1" +E,-1" P#$%E22 +E, -reen1"
+E,-2" P#$%/22 +E, -reen2" +E,-2" P#$%E20 +E, -reen2"
+E,-3" P#$%/21 +E, -reen3" +E,-3" P#$%E24 +E, -reen3"
+E,-1" P#$%222 +E, -reen1" +E,-1" P#$%222 +E, -reen1"

8abla asignaciones placa -E& 8abla asignaciones placa -E/-&&4

)ara asignar las entradas del ejemplo escogeremos dos pulsadores (por ejemplo ?E@A:B y ?E@A#B) y un led verde para la
salida (por ejemplo el 4EGA!B)
En el caso de la placa -E& sern los -innes =//! =/& y +//! y en el caso de la placa -E/-&&4 sern los -innes >/1! >/&
y E/4.
'brimos la herramienta DPin -lannerE! que se encuentra en Assignments Pin Planner. @os aparecer una ventana
como la siguiente que nos permitir hacer la asignaci"n.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
16 / 37
'sG pues! si usamos la placa -E&! en una de las #ilas de DIn-utE! escribiremos en la columna D4ocationE =// y
pulsaremos intro (n"tese que el nombre se completar automticamente como )0@L=//)! y en la otra #ila de D0nputE
pondremos =/&. En la #ila de 5ut-ut elegiremos el led verde /! de nombre +//. <na ve( hecha las asignaciones deberGan
quedarnos las #ilas como en la siguiente #igura. En caso de usar la placa -E/-&&4 hay que utili(ar los pinnes >/1! >/& y
E/4 respectivamente.

<na ve( asignados los nombres correctamente seleccionaremos File Close y ya habremos hecho la asignaci"n.
'hora podemos volver a compilar del mismo modo que antes! Processing Start Compilation y veremos como esta ve(
no tenemos los warnin%s re#erentes a los pins. <na ve( compilado el circuito! ya podemos proceder a grabarlo en la placa
de la misma #orma que se detallaba en un apartado anterior de este manual.
5sicamente hay que seleccionar -ools Programmer. Comprobar que en D(ardware Setu-CE aparece <S5-5laster
como opci"n seleccionada! de no ser asG seguir los pasos e2plicados en el anterior apartado. En el recuadro central deberGa
aparecer ya el #ichero con el nombre del proyecto que hemos elegido y e2tensi"n D+sofE. En nuestro caso
e'oAnd!*sc&+sof. 'sG pues! ya podemos pulsar DStartE para comen(ar a grabar el circuito.
Cuando la grabaci"n haya terminado! veremos c"mo se enciende un led verde. Este se apagar al pulsar cualquiera de los
dos pulsadores con#igurados. 'parentemente no #unciona como esperbamos! no hace la '@- entre los dos botones. Esto
es debido a que (como claramente se indica en los manuales de la placa) un pulsador no pulsado envGa un &! mientras que
un pulsador pulsado envGa un H! por lo que la lu( se apagar al pulsar cualquiera de los dos pulsadores! y permanecer
encendida s"lo si ninguno de ellos est pulsado. )ara arreglarlo y que haga lo que nos habGamos propuesto! simplemente
hay que aadir una puerta l"gica @68 entre cada una de las entradas del circuito y su correspondiente entrada de la puerta
l"gica '@-. 8al y como muestra la siguiente #igura.

'hora simplemente volvemos a compilar el proyecto y a grabarlo en la %)*'. Ba podemos comprobar que #unciona
correctamente.
Dise#o mediante el lengua'e de descripcin (ard)are *HD+
-urante este curso raramente vamos a disear alg:n circuito a nivel de puertas. <tili(aremos el lenguaje +,-. para la
descripci"n del hard$are.
En este apartado crearemos de nuevo el mismo circuito que en el anterior! pero esta ve( utili(ando +,-.. 8ambi9n
veremos c"mo ahorrarnos el engorroso proceso de asignaci"n de -innes utili(ando nombres estndar Altera! los que
#iguran en los manuales! y como visuali(ar un esquema de bloques utili(ando la herramienta DDT4 EiewerE.
Con el proyecto ya creado (al proyecto le llamaremos e'oAnd!*2&dl)! selecciona File New en el men: de pestaas
superior. En la ventana emergente selecciona .esign Files "/.0 1ile. En el #ichero que se abre crearemos el diseo de
una '@- utili(ando el lenguaje de de#inici"n de hard$are +,-..

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
17 / 37
' continuaci"n se muestra el c"digo:
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY DemoAnd2_vhdl IS
PORT( KEY : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
LEDG : OUT STD_LOGIC_VECTOR(2 DOWNTO 2));
END DemoAnd2_vhdl;

ARCHITECTURE Structure OF DemoAnd2_vhdl IS
BEGIN
LEDG(2) <= not(KEY(0)) and not(KEY(1));
END Structure;

Es importante observar como los nombres utili(ados para de#inir los puertos de entrada (?E@) y salida (4EG) coinciden
con los nombres estndar de los puertos correspondientes a los botones y al led verde que utili(amos en el apartado
anterior. <tili(ando estos nombres y reali(ando una importaci"n podremos ahorrarnos la asignaci"n manual de los -innes.
'ntes de terminar con el c"digo! es muy importante que #ijarnos que el nombre de la E/TIT@ coindice con el nombre del
proyecto (en nuestro ejemplo e'oAnd!*2&dl). Esto se debe a que esta entidad ser identi#icada como to-"le2el y esta
debe coincidir con el nombre del proyecto para poder ser compilada. -eber9is tener esto en cuenta en vuestros #uturos
diseos.
'hora ya pod9is salvar el #ichero y guardarlo con el nombre del proyecto. )ara evitar la asignaci"n de los -innes manual
aparte de usar nombres estndar debemos importar un archivo de asignaci"n. Seleccionad Assignments Import
Assignments y busca el #ichero DE#*-in*assi%n'ents+cs2E si estis utili(ando la placa -E& o el #ichero
DE!*##$*-in*assi%n'ents+FsfE si estis utili(ando la placa -E/-&&4.
)or :ltimo! antes de compilar es necesario seleccionar la entidad to-"le2el. En el recuadro DPro0ect /a2i%atorE! situado en
la parte superior i(quierda de la pantalla! seleccionad la pestaa DFilesE. En esta ventana deberGa aparecer un archivo .vhd
con el nombre que le hab9is asignado al proyecto. )ulsad con el bot"n derecho del rat"n sobre 9l y seleccionad DSet as
To-"4e2el EntityE. 'hora ya pod9is compilar! grabar y comprobar que el diseo #unciona en la placa.
Quartus II tambi9n proporciona una herramienta llamada DDT4 EiewerE muy :til para ver el diseo implementado
mediante un esquema de bloques. Seleccionar -ools Netlist "iewers 2-0 "iewer. Se abrir una ventana en la que
podr9is observar la '@- y las @68 que hab9is diseado conectadas a los botones y al led verde.


PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
18 / 37
Tareas a realizar
'hora vais a disear e implementar en la placa un conjunto de circuitos que os permitirn recordar los conceptos de
+,-. y aprender a usar algunos de los componentes y herramientas que sern muy :tiles a la hora de implementar un
procesador.

,area
Cread un proyecto en +,-. en el que asign9is los switc&es a los leds rojos! de tal manera que el s$itchPiQ encienda y
apague el .E-=PiQ y comprobad que #unciona. Cuando el s$itchPiQ est9 a & su led asociado deber estar encendido y
cuando est9 a H el led deber estar apagado.
=ecuerda al crear el proyecto que debes seleccionar el chip Cyclone 00 EP&C&)F#*#C( como destino si ests usando la
placa .E$ o el chip Cyclone 0+ E EP#CE$$%F&'C( si estas usando la placa .E&3$$%.
Si necesitis ayuda con la sinta2is de +,-.! pod9is recurrir a la opci"n DInsert Te'-lateE de Quartus II. <na ve( est9is
editando un #ichero! esta opci"n os aparecer como un icono en la barra de iconos de la ventana.
' continuaci"n se muestra el c"digo que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY Tarea1 IS
PORT( SW : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
LEDR : OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END Tarea1;

ARCHITECTURE Structure OF Tarea1 IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;

,area 2
Cread otro proyecto en +,-. en el que implementaremos un multiple2or 3-& de un bit. <tili(aremos dos switc& como
seales de control del multiple2or y los 3 pulsadores como seales de entrada. %inalmente conectaremos la salida del
multiple2or a un led (a vuestra elecci"n).
-e modo que con los dos switc& podremos controlar que pulsador seleccionamos. Este ser el pulsador que activar el
led. S"lo cuando pulsemos el bot"n el led deber encenderse.

,ay diversas #ormas de implementar este circuito en vhld. =ecordad que si usis una estructura #ormada por las
sentencias 0%! 8,E@! E.S0% y E@-0%! estas sentencias son secuenciales. En cambio! si usis las sentencias
R,E@AE.SE y R08,ASE.EC8 para implementar el multiple2or (opci"n recomendada)! estas sentencias son
concurrentes.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
19 / 37
' continuaci"n se muestra el c"digo que deb9is completar. Este c"digo usa el led rojo H y los switc& H y &.
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY Tarea2 IS
PORT( SW : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
KEY : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDR : OUT STD_LOGIC_VECTOR(0 DOWNTO 0));
END Tarea2;

ARCHITECTURE Structure OF Tarea2 IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;

,area -
' medida que la complejidad de los diseos se incrementa puede ser muy :til comprobar y veri#icar el #uncionamiento de
partes sueltas para detectar errores de #uncionamiento. )ara ello disponemos de dos simuladores de circuitos. El primero
se llama DModelSi'"Altera #:+#d Starter EditionE. Es un simulador muy completo y potente pero tambi9n di#Gcil de
manejar. El otro simulador es el Qsi' de la propia 'ltera. Este simulador es mucho ms sencillo y orientado al desarrollo
de los primeros proyectos.
Con el diseo compilado del multiple2or 3-& anterior! vamos a usar el simulador Qsi' para ver las seales y asG
comprobar que nuestro diseo #unciona correctamente.
+amos a crear un cronograma de prueba para nuestro diseo y lo aadiremos al proyecto! asG que en el men: de pestaas
superior seleccionad File New. En la ventana que se abre seleccionad DUni2ersity Pro%ra' EWFE en el apartado
DEerification,ebu%%in% FilesE y pulsar DOE. Se os abrir una nueva ventana similar a la de la #igura siguiente con el
editor DSi'ulation Wa2efor' EditorE.

+amos a proceder a seleccionar las seales que deseamos simular. Seleccionamos en el men: la opci"n
Edit Insert Insert Node or 4us5 En la ventana que nos aparece seleccionamos DNode Finder E.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
20 / 37

En la siguiente ventana pulsamos en D0istE y nos aparecern todas las seales de nuestro proyecto. >ediante los botones
D6E y D66E pasamos a la lista de la derecha aquellas seales que nos interesen en el orden que deseamos. Seleccionamos
el grupo de seales KEY y SW y la seal LEDR[0].

<na ve( seleccionadas las seales! le damos a DOE para cerrar la ventana del D/ode FinderE y le volvemos a dar otra
ve( al DOE en la ventana de DInsert /ode or BusE. -e modo que nos quedar el simulador como la siguiente #igura. )or
de#ecto todas las seales de entrada valdrn H y las salidas no tendrn valor hasta que las simulemos.

'hora ya podemos editar el wa2efor' para las seales de entrada como queramos. )ara ello podemos desplegar las
seales que estn agrupadas. Con el rat"n! mientras mantenemos pulsado el bot"n i(quierdo! seleccionamos sobre una
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
21 / 37
seal (o varias) el intervalo de tiempo al que queremos asignarle un valor. <na ve( seleccionado el intervalo con los
iconos del men:! seleccionamos el valor que deseamos que tenga. -espu9s de varias modi#icaciones podrGa quedar
similar a la siguiente #igura.

%inalmente guardamos el cronograma de prueba con la opci"n File Sa,e y quedar incorporado en nuestro proyecto
para poder usarlo tantas veces como queramos. )odemos crear tantas simulaciones distintas como queramos y
almacenarlas en nuestro proyecto.
'hora vamos a simular el comportamiento de nuestro proyecto. 'ntes de todo comprobad que ten9is seleccionado el
simulador DModelsi'E. )ara ello id a la opci"n Simulation Options. )ara ver el comportamiento de nuestro circuito
haremos una simulaci"n #uncional (sin tener en cuenta los tiempos de propagaci"n de las seales). Seleccionamos la
opci"n Simulation 2un Functional Simulation y #inalmente se nos abrir una nueva ventana! como la de la siguiente
#igura! con el resultado de la simulaci"n.

8ambi9n podemos hacer una simulaci"n que tenga en cuenta los tiempos de propagaci"n de las seales (estos tiempos
dependen de diversos #actores como del tipo de %)*' que usemos! el routin% que ha decidido el programa de
compilaci"n! etc. ). )ara ello simplemente tendremos que seleccionar la opci"n Simulation 2un -iming Simulation.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
22 / 37
Cread vosotros una simulaci"n propia para el circuito del multiple2or 3-& que hab9is diseado que no se pare(ca a la del
ejemplo.

,area .
+amos a probar el #uncionamiento de los visores (displays) ."se%'entos de la placa. +amos a seleccionar un visor ."
se%'entos y en 9l vamos a mostrar la #igura del dGgito decimal correspondiente al valor binario que tengamos en un grupo
de tres switc&.

.os visores ."se%'entos tienen de#inidos C segmentos que pueden iluminarse y apagarse de #orma independiente. Ello
nos permite #ormar las #iguras que deseemos. 'sG que si queremos #ormar una #igura que se pare(ca al n:mero
deberemos iluminar los segmentos numerados como H!&!1!3!7 y debern permanecer apagados los segmentos 4 y /. Si
miramos el manual veremos que cada segmento se ilumina cuando la seal l"gica que lo controla vale H y se apaga
cuando vale &.
Cread un proyecto en +,-. que implemente el conversor del n:mero binario que le llega a trav9s de tres bits
procedentes de unos switc& y muestre la #igura correspondiente en el visor. 'sG! si el valor binario es el HHH deber
mostrar el sGmbolo ! si es HH& deber mostrar el ! ;
' continuaci"n se muestra el c"digo que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY Tarea4 IS
PORT( SW : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
HEX0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END Tarea4;

ARCHITECTURE Structure OF Tarea4 IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;

,area !
<na ve( reali(ado este conversor vamos a reali(ar otro que en ve( de mostrar n:meros muestre los caracteres de la
palabra . )ara ello cuando reciba por la entrada el valor HHH deber mostrar el carcter D,E! cuando reciba el valor
HH& deber mostrar el carcter D6E! cuando reciba el valor H&H deber mostrar el carcter D.E y cuando reciba el valor
H&& deber mostrar el carcter D'E. Si recibe cualquier otro valor deber mostrar un guion .
'dems! para este visor! el valor que mostraremos podr proceder de varias #uentes. En nuestro caso procedern de J
switc& (agrupados de tres en tres) como seales de entrada. -e modo que necesitaremos un multiple2or de 3 entradas de
buses de 1 bits (del que s"lo usaremos 1 entradas) para seleccionar la #uente con que iluminaremos el visor.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
23 / 37
)ara implementar toda la tarea usaremos tres m"dulos (entidades) distintos: <no ser el multiple2or de buses! otro ser el
conversor del c"digo del carcter a mostrar a los bits que encienden o apagan los segmentos del visor! y por :ltimo un
m"dulo que los unir y los conectar con los switc&es! los pulsadores y el visor C segmentos. El aspecto que tendr el
sistema deber ser parecido a este.

Cread un nuevo #ichero en vhdl que contenga un m"dulo (entidad) que implemente un multiple2or similar al de la #igura.

' continuaci"n se muestra la cabecera del c"digo que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY Mux4 IS
PORT( Control : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
Bus0 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus1 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus2 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus3 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Salida : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END Mux4;

ARCHITECTURE Structure OF Mux4 IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente el multiplexor de buses
.
END Structure;

Cread un nuevo #ichero en vhdl que contenga un m"dulo (entidad) que haga la conversi"n del c"digo del carcter a
mostrar a los valores de los C segmentos del visor.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
24 / 37
' continuaci"n se muestra la cabecera del c"digo que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY driver7Segmentos IS
PORT( codigoCaracter : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
bitsCaracter : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END driver7Segmentos;

ARCHITECTURE Structure OF driver7Segmentos IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente el driver
.
END Structure;

'hora vamos a crear una entidad que una los dos m"dulos creados anteriormente. Esta entidad conectar dos pulsadores a
las seales de control del multiple2or y conectar a las tres entradas de menor peso del multiple2or los switc&es que
codi#ican el carcter a mostrar (agrupados convenientemente). 8ambi9n conectar la salida del multiple2or a la entrada
del conversor y la salida de 9ste al visor que se encarga de mostrar el carcter.
' continuaci"n se muestra el c"digo completo de esta entidad.
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY Tarea5 IS
PORT( SW : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
KEY : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
HEX0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END Tarea5;

ARCHITECTURE Structure OF Tarea5 IS
COMPONENT Mux4 IS
PORT( Control : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
Bus0 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus1 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus2 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Bus3 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Salida : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END COMPONENT;

COMPONENT driver7Segmentos IS
PORT( codigoCaracter : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
bitsCaracter : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;

SIGNAL bus_enlace : STD_LOGIC_VECTOR(2 DOWNTO 0);

BEGIN
Multiplexor : Mux4
Port Map( Control => KEY,
Bus0 => SW(2 downto 0),
Bus1 => SW(5 downto 3),
Bus2 => SW(8 downto 6),
Bus3 => "111",
Salida => bus_enlace);

Visor : driver7Segmentos
Port Map( codigoCaracter => bus_enlace,
bitsCaracter => HEX0);
END Structure;
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
25 / 37
'hora podemos comprobar si todo ha ido bien. )onemos en los interruptores diversos valores y con los pulsadores vamos
seleccionando el valor que debe mostrarse por el visor.

,area /
En esta tarea vamos a usar los cuatro visores de la placa para mostrar la palabra . .uego usaremos un pulsador para
que la palabra rote! carcter a carcter! hacia la i(quierda cada ve( que pulsemos el pulsador. )ara ello usaremos un
contador de tres bits que cada ve( que pulsemos el bot"n se incrementar en una unidad m"dulo K. El valor de este
contador nos indicar que secuencia de caracteres debern mostrarse por los visores. .a siguiente tabla nos muestra que
caracteres mostraremos por los 3 visores en #unci"n del valor de este contador
Contador VISORES
!!! H O L A
!!1 O L A -
!1! L A - -
!11 A - - -
1!! - - - -
1!1 - - H
11! - H O
111 H O L

Cread un proyecto en +,-. que implemente esta tarea. <saremos el pulsador cero (?E@A:B) como seal para indicar la
rotaci"n. 6s puede ser :til que los tres leds rojos de menor peso (4EDA!++:B) muestren en todo momento el valor que
tiene el contador.
'unque toda esta tarea se podrGa hacer #cilmente con una sola entidad debido a su simplicidad! os recomiendo que
aprovech9is para practicar m:ltiples instanciaciones de una misma entidad. 'sG pod9is usar 3 instanciaciones de la entidad
dri2er.se%'entos que hab9is hecho en la tarea anterior. Cada una se encargar de un visor.
<na ve( hecho esto! podemos hacer una variaci"n. +amos a permitir que se pueda rotar la palabra hacia ambos sentidos.
<saremos el interruptor H (SWA:B) para indicar el sentido de la rotaci"n (H hacia la i(quierda y & hacia la derecha) y el
pulsador cero (?E@A:B) para indicar cuando hay que despla(ar los caracteres una posici"n. 0mplementad tambi9n esta
variaci"n.
Si hab9is usado m:ltiples instanciaciones del dri2er.Se%'entos! el aspecto que tendr el sistema deber ser parecido a
este.

PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
26 / 37
' continuaci"n se muestra la cabecera del c"digo de la entidad principal que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY Tarea6 IS
PORT( KEY : IN std_logic_vector(0 downto 0);
SW : IN std_logic_vector(0 downto 0);
HEX0 : OUT std_logic_vector(6 downto 0);
HEX1 : OUT std_logic_vector(6 downto 0);
HEX2 : OUT std_logic_vector(6 downto 0);
HEX3 : OUT std_logic_vector(6 downto 0);
LEDR : OUT std_logic_vector(2 downto 0));
END Tarea6;

ARCHITECTURE Structure OF Tarea6 IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;

,area 0a
En esta tarea vamos a aprender a usar los relojes de la placa. )rimero vamos a disear e implementar un circuito que
muestre los valores del H al J por orden en un visor ."se%'entos. <na ve( lleguemos al dGgito J volvemos a empe(ar.
Cada digito deber ser mostrado durante un segundo apro2imadamente.
.a placa base s"lo dispone de una seal de reloj a 4H >,( (C45C?*$:) que es la que usaremos. )or lo tanto! si
queremos una seal a &,( deberGamos dividir la #recuencia del reloj de entrada por el valor que corresponda (en este caso
4H.HHH.HHH). Como tampoco deseamos un reloj muy preciso! la #orma ms #cil de implementar el divisor es haciendo un
contador de /4 bits que se incremente en una unidad a cada ciclo de reloj. -e modo que el bit de peso H del contador es
una seal peri"dica similar a la del reloj que cambia a una #recuencia de /4 >h( (se ha dividido la #recuencia de entrada
por /)! el bit de peso & del contador corresponde a una seal peri"dica de #recuencia &/!4 >h(! etc. El bit de mayor peso
del contador! el /3! es una seal peri"dica con la #recuencia de &!4 ,( apro2imadamente.
' continuaci"n se muestra la cabecera del c"digo de la entidad principal que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY Tarea7a IS
PORT( CLOCK_50 : IN std_logic;
HEX0 : OUT std_logic_vector(6 downto 0));
END Tarea7a;

ARCHITECTURE Structure OF Tarea7a IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;


PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
27 / 37
,area 0&
En esta tarea vamos a implementar la seal de reloj de & ,( de #orma mucho ms precisa. )ara ello! simplemente
deberGamos iniciali(ar un contador con el valor 4H.HHH.HHH e ir restando una unidad a cada ciclo de la seal de reloj de
entrada. Cuando este contador valga cero habr pasado un segundo e2actamente. Entonces deberemos volver a iniciali(ar
el contador a su valor original para esperar al siguiente segundo. Si deseamos generar una seal peri"dica de un segundo
de #recuencia deberemos generar una salida que vaya alternando su valor entre H y & cada medio segundo.
.a %)*' de la placa de desarrollo dispone de circuitos especG#icos capaces de generar m:ltiples seales de reloj de
diversas #recuencias (incluso superiores a la nominal)! con des#ases precisos entre ellas y muchas otras caracterGsticas.
Estos circuitos son conocidos como ).. (del ingl9s )hase-.ocNed .oop) que de momento no usaremos.
)ara implementar esta tarea! primero vamos a implementar una entidad que gestione los 3 visuali(adores C segmentos de
#orma agrupada. Esta entidad recibir un n:mero binario de &7 bits y mostrar por los visores la representaci"n
he2adecimal del n:mero binario. Esta entidad nos ser :til cuando diseemos el procesador.
.uego implementaremos la entidad que genera la seal de reloj de #recuencia apro2imada a & ,( a partir del reloj del
sistema a 4H>h(. )ara que esta entidad sea ms verstil vamos a hacer que el n:mero de bits del contador (y el valor de
iniciali(aci"n) sea parametri(able. 'sG en el momento de la instanciaci"n podremos decidir a que #recuencia queremos la
seal de salida. =ecordad que para hacer esto en vhdl hay que usar la sentencia *E@E=0C.
%inalmente implementaremos la entidad de nivel superior que se encargar de usar adecuadamente estas dos entidades
que hemos creado y de llevar la cuenta de los segundos que han pasado desde que se ha puesto en marcha el sistema. Esta
entidad deber mostrar en he2adecimal! el n:mero de segundos transcurridos desde el inicio del sistema. 'dems cada
ve( que se presione el pulsador SEBPHQ deber hacer un reset del contador poniendo el n:mero de segundos transcurridos
a cero.
)or :ltimo! para comprobar que el generador de seales de reloj parametri(able #unciona correctamente! probad el diseo
haciendo que el contador se incremente cada H!4 segundos y luego cada / segundos.
' continuaci"n se muestra la cabecera del c"digo de la entidad principal que deb9is completar:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY Tarea7b IS
PORT( CLOCK_50 : IN std_logic;
HEX0 : OUT std_logic_vector(6 downto 0);
HEX1 : OUT std_logic_vector(6 downto 0);
HEX2 : OUT std_logic_vector(6 downto 0);
HEX3 : OUT std_logic_vector(6 downto 0));
END Tarea7b;

ARCHITECTURE Structure OF Tarea7b IS
BEGIN
.
. -- Aqu debis poner vuestro cdigo que implemente la tarea
.
END Structure;


PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
28 / 37
,area 1
'hora que ya sabemos generar seales de reloj a la #recuencia que deseemos repetiremos la tarea 7! pero en ve( de rotar la
palabra cada ve( que se pulse un bot"n se har de #orma automtica. Se rotar un carcter a cada segundo en el
sentido que indique el switc&.

,area 2
En esta tarea vamos poner juntos en un solo diseo la mayorGa de componentes vistos anteriormente y alguno nuevo.
'lgunos de los primeros m9todos de comunicaci"n telegr#ica estaban basados en el c"digo >orse. Este c"digo usa
patrones cortos y largos de pulsos para representar los caracteres de un mensaje. Cada letra est representada por una
secuencia de puntos (patr"n corto) y guiones (patr"n largo). En la siguiente tabla pod9is ver la representaci"n en c"digo
>orse de las K primeras letras del al#abeto.
Carcter C. Morse
3
4
C
,
E
5
-
6

-isead e implementad un circuito que reciba como entrada una de las K primeras letras del al#abeto y muestre su
conversi"n al c"digo >orse en un led rojo de la placa. El circuito mostrar el c"digo >orse correspondiente al carcter
especi#icado mediante tres switc& (SWA!++:B) de la placa (HHH para el carcter '! HH& para el 5! H&H para el C! ;).
'dems tendr dos pulsadores (?E@A#++:B) como entradas. >ientras no se pulse ninguno de los pulsadores el sistema
estar en DreposoE con el led apagado. Cuando pulsemos el pulsador ?E@A#B el circuito deber mostrar! una :nica ve(! el
carcter especi#icado en los switc& iluminando el led rojo 4EDA:B. )ara representar los puntos iluminaremos el led
durante H.4 segundos y para representar los guiones iluminaremos el led durante &!4 segundos. Entre dos pulsos
consecutivos apagaremos el led durante H!4 segundos. Si mientras se est visuali(ando un carcter pulsamos el pulsador
?E@A:B abortaremos la secuencia y volveremos al estado de reposo (#ijaos por ejemplo que para representar el carcter C
necesitamos 4!4 segundos). >ientras se est9 visuali(ando la secuencia del >orse de un carcter supondremos que el valor
del switc& no va a cambiar.
En todo momento! el carcter que est codi#icado en los tres switc& (SWA!++:B) de la placa deber mostrarse por el visor
(EG: ( ! ! ! ! ! ! y ).
)ara implementar esta tarea primero deberemos decidir como codi#icamos el carcter que vamos a mostrar. )odemos
codi#icarlo como un vector de H y & donde cada sGmbolo representa un DpuntoE o un DguionE respectivamente como en la
tabla anterior! o como un vector de H y & donde cada bits signi#ica el estado del led (encendidoAapagado) para cada
#racci"n de H!4 segundos. En #unci"n de la codi#icaci"n y del diseo incluso puede ser necesario implementar / seales de
reloj (de H!4 segundos y de &!4 segundos).
' parte del m"dulo generador de las seales de reloj! para resolver la tarea lo podemos hacer bsicamente desde tres
en#oques distintos:
a) Crear un m"dulo que a partir del valor de los switc&s genere un vector con la codi#icaci"n del carcter y la
longitud de este vector. Crear otro m"dulo que reciba estos vectores y las seales de los pulsadores y genere la
seal que se mostrar en el led rojo de la placa.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
29 / 37
b) Crear un modulo parametri(able! con el vector a mostrar y su longitud como parmetros! que genere la seal del
led a partir del vector. Entonces crear K instancias de ese modulo (una para cada codi#icaci"n de cada carcter de
la tabla) y seleccionar mediante un multiple2or controlado por los switc&s la que se mostrar en el led rojo de la
placa.
c) Crear un gra#o de estados! que en #unci"n del valor de los switc&s y la seal de inicio del pulsador! siga un
camino del gra#o que genere la seal que controla el led rojo de la placa que visuali(a el morse del carcter
seleccionado.

,area 3
0mplementando circuitos! a veces se cometen errores que son di#Gciles de detectar. El diseo se graba per#ectamente en la
%)*' pero luego no hace lo que deseamos. @o es posible debugar paso a paso ni es #cil poner DchivatosE para ver lo que
est haciendo el circuito. )ara poder anali(ar que est haciendo el circuito disponemos de una potente herramienta similar
a un anali(ador l"gico. Esta herramienta es el Si%nalTa- II.
<n anali(ador l"gico normalmente es un dispositivo hard$are que nos permite medir las seales que pasan por los buses
de un circuito ya construido. )ara ello debemos de tener acceso #Gsico a los buses. En el caso de Si%nalTa- II se trata de
una herramienta so#t$are que nos permite hacer lo mismo pero a partir de un diseo grabado en nuestra %)*'. 'sG pues!
resulta muy :til su uso para debugar circuitos y ver c"mo #unciona e2actamente nuestro diseo.
En esta secci"n veremos con un ejemplo muy simple como utili(ar el anali(ador l"gico Si%nalTa- II! que viene integrado
en el banco de herramientas de Quartus II.
En primer lugar abriremos Quartus II y crearemos un proyecto para nuestro modelo de %)*'! tal y como hemos hecho
otras veces! e incluiremos un nuevo #ichero +,-. con el siguiente c"digo. @o os olvid9is de cambiar el nombre de la
entidad por el de vuestro proyecto.
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY test_analizador IS
PORT ( CLOCK_50 : IN STD_LOGIC;
KEY : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
SW : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
LEDR : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END test_analizador;

ARCHITECTURE Structure OF test_analizador IS
BEGIN
process (CLOCK_50) begin
if (rising_edge(CLOCK_50)) then
LEDR(1) <= SW(1);

if (SW(0) = '0') then
LEDR(0) <= not(KEY(0)) and not(KEY(1));
else
LEDR(0) <= not(KEY(0)) or not(KEY(1));
end if;
end if;
end process;
END Structure;

Como podemos ver! este diseo asigna al .E- rojo & el valor del switc& &! y al .E- rojo H la '@- o la 6= de los
botones H y &! en #unci"n de la posici"n del switc& H. .os botones son negados por claridad! ya que un bot"n pulsado
genera un H. @"tese el uso de la seal de reloj! que aunque no es necesaria para este diseo si lo es para el uso del
anali(ador l"gico.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
30 / 37
<na ve( guardado el c"digo! haremos la asignaci"n de -ins tal y como hemos hecho siempre! Assignments Import
Assignments y buscaremos el #ichero de asignaciones a -ins. %inalmente podemos compilar el proyecto y grabarlo en
la %)*' para comprobar que #unciona como se espera.
Cuando estemos seguros de que #unciona correctamente! en el Quartus II escogeremos la opci"n del men: File New !
seleccionaremos Si%nalTa- II 4o%ic Anali1er File y pulsaremos O. Entonces se abrir la siguiente ventana:

.o primero que debemos hacer es seleccionar las seales que queremos anali(ar. )ara ello haremos un doble-clicN con el
rat"n en la (ona etiquetada como Double"clic3 to add nodesE.

<na ventana de tGtulo D/ode FinderE se abrir. En esta! desplegaremos el men: etiquetado con DFilter)E y
seleccionaremos DSi%nalTa- II) -re"synt&esisE.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
31 / 37

' continuaci"n pulsaremos D0istE y aparecer una lista de todas las seales que hemos declarado y que son usadas. Es
posible que en ocasiones no apare(can seales que utili(amos en nuestro diseo! esto es debido a que son optimi(adas por
el sinteti(ador porque son redundantes o sus valores no son utili(ados. Seleccionaremos las seales ?E@! SW y 4ED y
pulsaremos el bot"n D6E. Cuando acabemos! pulsaremos O.

.as seales que hemos aadido habrn aparecido en el recuadro central. 'hora vamos a seleccionar la seal de reloj. En
el recuadro de la derecha! etiquetado como DSi%nal Confi%urationE! pulsa el bot"n DE que est a la derecha de la
etiqueta DCloc3)E.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
32 / 37

+olver a aparecer la ventana D/ode FinderE. )ulsaremos el bot"n D4istE y en esta ocasi"n agregaremos la seal
C0OC7%) y pulsaremos O.
'hora ya podemos empe(ar a de#inir las condiciones sobre las que el anali(ador l"gico empe(ar a almacenar
in#ormaci"n sobre nuestro circuito. En primer lugar desplegaremos las seales pulsando sobre el bot"n D8E a la i(quierda
de cada seal. En la #ila de la seal ?E@A:B y la columna DTri%%er ConditionsE pulsaremos el bot"n derecho del rat"n y
seleccionaremos DEit&er Ed%eE! indicando asG que el anali(ador l"gico comen(ar a registrar la actividad de las seales
cuando ?E@A:B cambie de valor.

' continuaci"n! cerraremos el Si%nalTa- II (File Close) y volveremos a Quartus II. 'parecern varias noti#icaciones
pidiendo guardar los cambios! a las cuales responderemos que sG y guardaremos el archivo generado por Si%nalTa- II en
la carpeta del proyecto. %inalmente aparecer un mensaje preguntando si queremos asignar ese archivo al proyecto actual
y pulsaremos D9esE. +olveremos a compilar el proyecto y grabaremos el circuito en la %)*' usando el Pro%ra''er!
como hemos hecho siempre.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
33 / 37
-e vuelta al Si%nalTa- II (desde Quartus II seleccionaremos la opci"n de men: -ools Signal-ap II 0ogic Analy:er)
seleccionaremos como D(ardwareE (en la esquina superior derecha de la ventana) el <S5-5laster (es muy probable que
ya est9 seleccionado). ' continuaci"n pulsaremos en la pestaa DataE situada en la esquina in#erior i(quierda del
recuadro en el que aparecen nuestras seales.

Ser en esta ventana en la que veremos la #orma que adoptan las seales en el momento en que el valor de ?E@A:B
cambie. @o aseguraremos de que la instancia auto*si%nalta-*: que aparece en el recuadro superior est seleccionada y
pulsaremos el icono DDun AnalysisE! ambos indicados en la siguiente #igura.

' partir de este momento! un cambio en la seal ?E@A:B dar lugar a la obtenci"n de la muestra. )odemos desplegar las
agrupaciones de las seales ?E@ clicando en el sGmbolo 8 para ver en concreto la seal ?E@A:B. )ulsaremos el bot"n
?E@A:B y observaremos el resultado. +eremos que la :nica seal que cambia de valor es la que representa al propio
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
34 / 37
bot"n! ya que al activar esta seal no modi#ica el valor de ninguna otra. )ara obtener una muestra ms ilustrativa!
moveremos el switc& : hacia la posici"n superior (asG se har una 6= de los dos pulsadores en ve( de una '@-)! de
manera que al activar el bot"n H se encienda tambi9n el led H. +olveremos a pulsar en el icono de DDun AnalysisE y
despu9s en el bot"n H.

En esta ocasi"n podremos ver como cambia el valor de la seal ?E@A:B y un ciclo despu9s el de la seal 4EDA:B. Si
quisi9ramos obtener seales continuamente! podrGamos pulsar el icono situado justo a la derecha de DDun AnalysisE!
DAutorun AnalysisE! que tomar automticamente una muestra cada ve( que se cumplan las condiciones sin necesidad de
pulsar DDun AnalysisE a cada muestra. .o probamos y veremos que cada ve( que pulsamos o dejamos de pulsar el bot"n H
las seales se actuali(an. )ara detener la adquisici"n de datos pulsaremos sobre el icono DSto- AnalysisE que est contiguo
al de DAutorun AnalysisE.
'hora que ya sabemos tomar muestras! vamos a aumentar la complejidad de las condiciones de activaci"n. +olveremos a
la pestaa DSetu-E del Si%nalTa- II. En el recuadro DSi%nal Confi%uratiHnE buscaremos la etiqueta DTri%%er conditionsE y
seleccionaremos el valor /.

+eremos que aparecer un recuadro en rojo en la parte superior avisando de que es necesario volver a compilar. 'dems!
habr aparecido una segunda columna de DTri%%er ConditionsE. Estas condiciones se deben activar de #orma secuencial
para que la adquisici"n de muestras tenga lugar. )or ejemplo! seleccionaremos en la columna de ?E@A:B como condici"n
& DFallin% Ed%eE y como condici"n / DDisin% Ed%eE (si no nos permite hacer cambios es que la adquisici"n de datos a:n
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
35 / 37
est en marcha). -e esta manera! la muestra s"lo ser tomada cuando la seal ?E@A:B tenga un #lanco descendente
seguido de un #lanco ascendente! en otras palabras! cuando pulsemos y soltemos el bot"n H.

+olveremos a compilar y grabar el programa en la %)*' y probaremos que realmente es asG como #unciona.
'hora introduciremos la toma de muestras segmentada. Este modo de tomas muestras ocasiona que en lugar de tomar
s"lo una muestra se tomen varias antes de cargar el valor en el ordenador. ' pesar de ello! cada muestra a tomar debe
cumplir las condiciones especi#icadas del mismo modo que si s"lo tomramos una.
'briremos el Si%nalTa- II. En el recuadro DSi%nal Confi%urationE! pulsaremos sobre el recuadro marcable DSe%'entedE y
seleccionaremos D! 8I sa'-le se%'entsE para indicar que queremos obtener / muestras de tamao 73.

@otad tambi9n el desplegable DSa'-le de-t&E que est justo encima. Este nos permite indicar el tamao de la muestra que
queremos obtener.
<na ve( seleccionada la segmentaci"n! elegiremos las condiciones de tri%%er que queramos. Compilaremos! grabaremos
la %)*' y probaremos como necesitamos que estas condiciones se cumplan / veces antes de que obtengamos los
resultados.
)or :ltimo veremos una #orma de seleccionar condiciones de activaci"n ms complejas. Seleccionaremos que s"lo
queremos & Tri%%er Condition! de manera que s"lo apare(ca una columna. En la columna de DTri%%er ConditionsE
pulsaremos sobre el desplegable DBasicE y seleccionaremos DAd2ancedE.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
36 / 37

.a pantalla cambiar para mostrar el DAd2anced Condition Tri%%er EditorE. ' la i(quierda de la pantalla veremos las
seales seleccionadas y justo debajo una librerGa de objetos. Estos son utili(ados para establecer condiciones tan
complejas como sea necesario para activar la toma de muestras.
Seleccionaremos primero y luego arrastraremos las seales ?E@A:B y ?E@A#B al centro de la pantalla. ' continuaci"n
buscaremos en la librerGa de objetos el objeto 4o%ical 5-erators4o%ical /ot y arrastraremos dos al editor. )or :ltimo
incluiremos tambi9n una 4o%ical And y las conectaremos como en la siguiente imagen.

Conectar estos objetos puede ser poco intuitivo al principio. )ara conectar dos elementos los acercaremos de manera que
apare(ca un cable uni9ndolos y los soltaremos! no os preocup9is porque queden superpuestos o mal colocados. Cuando
conectemos otro elemento y quede superpuesto! el editor se ocupar de separarlos automticamente pero si intentamos
separarlos nosotros lo ms probable es que los desconectemos.
PEC (Projecte dEnginyeria de Computadors) Curs Q2-13-14
37 / 37
<na ve( hayamos obtenido el esquema de la #igura! volveremos a compilar y a grabaremos el diseo en la %)*' y
comprobaremos que la muestra s"lo se obtiene cuando mantenemos pulsados los dos botones H y &.
+eremos ahora un ejemplo en el que puede ser muy :til el uso de un 'nali(ador ."gico. Si hubi9semos intentado
implementar un contador disparado por uno de los switc& (el contador deberGa incrementarse en una unidad cada ve( que
el switc& cambiase de H a &) habrGamos observado que los resultados obtenidos no son ni mucho menos como cabrGa
esperar. +amos a ver que pasa utili(ando una condici"n sobre el switc& #.
)rimero desactivamos la toma de muestras segmentada y dejamos una :nica condici"n de tri%%er! que seleccionaremos
como DBasicE. 'l switc& # le asignaremos la condici"n de tri%%er DDisin% Ed%eE. Compilaremos el proyecto! lo
grabaremos en la %)*' y miraremos que sucede con esa seal.
' continuaci"n se muestra como ejemplo una posible salida! pero nota que esta no tiene porqu9 coincidir con la que
nosotros obtengamos! ya que hay un importante #actor aleatorio.

Estos resultados tan incongruentes se deben a los rebotes mecnicos de los switc&s. -ebido a la #orma en que estn
construidos! la seal tarda un tiempo en estabili(arse desde que se despla(a el switc&. )or ello! al ser leGdo por un reloj de
4H >,(! podemos ver como la seal baila durante un periodo de tiempo reducido antes de adoptar un valor #ijo. @otad
que con los botones este #en"meno no sucede! ya que los botones que hay en la placa de desarrollo utili(an #iltros para
evitarlo.

También podría gustarte