Máquinas algorítmicas: una metodología para su - IEEE-RITA
Transcription
Máquinas algorítmicas: una metodología para su - IEEE-RITA
IEEE-RITA Vol. 4, Núm. 2, May. 2009 83 Máquinas algorítmicas: una metodología para su aprendizaje práctico a través de LittleProc Joaquín Saiz Alcaine, Member, IEEE, Antoni Portero Trujillo, Member, IEEE, Raúl Aragonés Ortiz, Mercè Rullán Ayza y Jordi Aguiló Llobet Title—Algorithmic Machines: Methodology through LittleProc. a Practical Learning Abstract—The learning and comprehension of algorithmic machines usually present a high degree of difficulty for computer engineering students. In order to make it more accessible, a teaching methodology of eminently practical base has been designed, centered on the development of a simple processor, which we called LittleProc. In the paper the characteristics of LittleProc are presented along with their pedagogical motivations. Also the teaching methodology devised and the form it was applied are exposed in a detailed way. The academic results obtained and the evaluation given by the students confirm the viability and suitability of the followed methodology. Index Terms—algorithmic machines, didactic processors, digital systems. I. INTRODUCCIÓN U NA máquina algorítmica consiste en un sistema digital capaz de materializar y ejecutar un determinado algoritmo [1][2][3]. La plena comprensión de las máquinas algorítmicas supone un alto nivel de dificultad para los estudiantes de Ingeniería Informática, quizá por no comprender su vertiente más práctica o real. En nuestro entorno docente, durante varios años se había observado que una parte importante de los estudiantes acababa la asignatura donde se impartía esta materia, con un conocimiento no demasiado óptimo del funcionamiento de las máquinas algorítmicas complejas (aquellas cuya unidad de control está microprogramada). Por ello y aprovechando la reestructuración de la asignatura derivada de la implantación del proceso de Bolonia [4], se tomó, entre otras, la decisión de redefinir las prácticas con el fin de facilitar el aprendizaje de dichas máquinas. En concreto, se decidió que los estudiantes implementasen de manera real una máquina algorítmica que contase con una unidad de control microprogramada, considerándose que la mejor opción era que Todos los autores pertenecen al Departamento de Microelectrónica y Sistemas Electrónicos (MiSE) de la Universidad Autónoma de Barcelona (teléfono: +34935813559, fax: +34935813033, correo electrónico: {Joaquin.Saiz, Antoni.Portero, Raul.Aragones, Mercedes.Rullan, Jordi.Aguilo}@uab.cat ). DOI (Digital Object Identifier) Pendiente realizasen un pequeño procesador, como ejemplo de máquina algorítmica de propósito general. En la literatura docente existen múltiples ejemplos de procesadores didácticos [5][6]; no obstante, por diversas razones, preferimos optar por uno que se adaptase a nuestros intereses docentes y al perfil de nuestros estudiantes. Ello nos llevó a desarrollar un procesador simple de arquitectura Von Neumann clásica, al que denominamos LittleProc, que se ajustase totalmente a los requerimientos de nuestra asignatura y que a la vez pudiera servir de complemento a los conocimientos expuestos en otras asignaturas relacionadas con este tema. LittleProc está inspirado en un procesador descrito en [7]. La metodología de enseñanza práctica, ideada y estructurada en torno a LittleProc, constituye el eje principal de este artículo. El artículo está organizado de la siguiente manera. La Sección II está dedicada a mostrar el entorno universitario en el que se imparte nuestra asignatura, haciendo especial hincapié en el perfil general de los estudiantes. En la siguiente sección se explican la planificación general de las prácticas y las herramientas didácticas de apoyo que han sido utilizadas. En la Sección IV se presenta LittleProc a nivel de bloques funcionales. En la Sección V se muestra de forma detallada la metodología docente creada en torno a LittleProc y se expone el proceso seguido por los estudiantes para el diseño y simulación del procesador. Asimismo se detalla la etapa de implementación del procesador sobre una placa de prototipado. En la Sección VI se presentan los resultados académicos obtenidos y la valoración de la metodología docente por parte de los estudiantes. Finalmente, la última sección está dedicada a exponer las conclusiones e indicar las futuras líneas de innovación docente que deseamos aplicar a la asignatura. II. MARCO UNIVERSITARIO La enseñanza de las máquinas algorítmicas se imparte en la asignatura de Diseño de Sistemas Digitales (DSD), la cual pertenece al tercer semestre de la titulación de Ingeniería Informática. DSD tiene asignados 6,5 créditos ECTS; es una asignatura de carácter presencial y la cursan unos 110 estudiantes. A raíz de la adaptación de la titulación al Espacio Europeo de Educación Superior (EEES) derivado de la declaración de ISSN 1932-8540 © IEEE 84 IEEE-RITA Vol. 4, Núm. 2, May. 2009 Bolonia, la asignatura sufrió una fuerte transformación. En [8] y [9] se halla una descripción de la evolución que experimentó DSD y de los objetivos que se persiguieron con dichos cambios. Los estudiantes afrontan DSD con el background adquirido en la asignatura de Fundamentos de Computadoras (FC), perteneciente al segundo semestre de la titulación. Para cursar la asignatura de DSD no es requisito indispensable haber aprobado FC (aproximadamente un 20% cursa DSD sin tener aprobada FC). El perfil general de los estudiantes tras haber cursado FC no es excesivamente homogéneo. En general, tienen conocimientos sobre fundamentos de lógica booleana, conocen los bloques combinacionales y secuenciales básicos, y tienen ciertas nociones sobre sistemas secuenciales. Asimismo conocen el comportamiento funcional de un procesador elemental. El grado de profundidad y asimilación de estos temas puede variar bastante de un estudiante a otro. Otro aspecto importante que contribuye a la heterogeneidad de los estudiantes es el hecho de que una parte de ellos compatibilizan sus estudios con un trabajo a tiempo parcial. Ello es tenido en cuenta a la hora de establecer los horarios de los diversos grupos, y, de manera especial, en la planificación de las sesiones relativas a las prácticas. Considerando lo mencionado hasta ahora, la asignatura se estructuró de la forma que se expone en la Fig. 1. Una primera parte, necesariamente breve, en la que se refresca conocimientos previos pertenecientes al ámbito de FC. La segunda parte está dedicada al diseño de sistemas que implementan esquemas de cálculo (algoritmos carentes de bifurcaciones). A continuación se presentan las máquinas algorítmicas, estudiando en primer lugar la unidad de proceso (tercera parte) para posteriormente analizar dos formas de realizar la unidad de control: mediante una PLA (cuarta parte) o microprogramada (quinta parte); esta última constituye el cenit de dificultad de la asignatura. Finalmente, la última parte se dedica a presentar las diversas familias de dispositivos programables. DSD está estructurada en Teoría (20% del total de horas), Seminarios de Problemas (40%) y Prácticas (40%). Las clases de teoría son clases magistrales en las que se exponen los conocimientos propios de la asignatura. Están concebidas como un método fundamentalmente unidireccional de transmisión de conocimiento del profesor al estudiante. Por su parte, los seminarios de problemas tienen como principal objetivo la profundización y ampliación de los conocimientos expuestos en las clases de teoría. Ello se hace a través de toda una serie de actividades en grupo que van desde la típica resolución de problemas hasta la discusión de casos prácticos. En los seminarios de problemas se trabaja con un número más reducido de estudiantes, lo que favorece una fuerte interacción entre el profesor y el estudiante. Los seminarios son muy efectivos cuando se abordan problemas de diseño digital no excesivamente complicados. Desafortunadamente en el caso de problemas de diseño de máquinas algorítmicas complejas 14 / 0 Semanas del 1 semestre 13 Presentación y repaso de conocimientos previos Esquemas de cálculo 3 11 Máq. Algoriítmicas: unidad de proceso Maq. algorítmicas: unidad de control con PLA Máq. algoriítmicas: unidad de control microprogramada Dispositivos programables 5 9 Dudas / Preparación exámenes 7 Fig. 1. Programa y planificación de la asignatura DSD a lo largo de 1as catorce semanas que constituyen el semestre. eso no es así. Se pudo constatar que la mera resolución sobre papel de dichos problemas no aseguraba una plena comprensión de los mismos por parte de bastantes estudiantes. Ello originó la decisión de que los estudiantes implementasen una máquina algorítmica físicamente, de manera completa. Dicha labor sería afrontada en la parte de prácticas de la asignatura. III. PRÁCTICAS: OBJETIVOS, MÉTODO GLOBAL Y HERRAMIENTAS DE APOYO Las prácticas fueron diseñadas con el objetivo prioritario de posibilitar un conocimiento más profundo de las máquinas algorítmicas complejas, aquellas cuya unidad de control está microprogramada. Teniendo en cuenta el background general de los estudiantes se consideró que la mejor opción era dedicar las prácticas al desarrollo de un procesador sencillo, ya que este constituía un ejemplo de máquina algorítmica de propósito general. Además, ello se podía considerar como una continuación lógica del aprendizaje realizado en la asignatura de FC, en la cual ya habían adquirido conocimientos de la funcionalidad de un procesador simple. Asimismo, para conseguir un mayor grado de motivación de los estudiantes, se estableció que ellos no solo diseñarían y simularían el procesador sino que además deberían llegar a implementarlo, y en consecuencia, deberían tener la posibilidad de ejecutar un pequeño programa en él. Esta decisión se tomó a raíz de nuestra experiencia docente, según la cual un estudiante se siente mucho más atraído e implicado por la creación de un sistema real y tangible que por el desarrollo de un sistema solo a nivel conceptual. En cuanto a la implementación se consideró que la opción más viable era usar un dispositivo programable. En concreto, por motivos organizativos internos, se optó por una FPGA de Altera. Además del citado objetivo prioritario existían otros que se enumeran a continuación: -la profundización de los conocimientos relativos a la lógica booleana y los bloques digitales básicos -la familiarización con alguna herramienta CAD de diseño electrónico de uso industrial -la introducción a la descripción de circuitos mediante el ISSN 1932-8540 © IEEE SAIZ ALCAINE et al.: MÁQUINAS ALGORÍTMICAS: METODOLOGÍA PARA SU APRENDIZAJE PRÁCTICO uso de un lenguaje de descripción de hardware (HDL), utilizado en el entorno profesional -la promoción del trabajo cooperativo -la mejora de la capacidad de expresión oral y escrita -la capacidad de organización del trabajo junto con su desarrollo metódico y continuado a lo largo del semestre. Como puede observarse, algunos de los objetivos citados están directamente vinculados a la asignatura mientras que otros hacen referencia a competencias de carácter transversal. El logro del conjunto de objetivos indicados y la evaluación continuada de su consecución por parte de los estudiantes requiere que las prácticas se estructuren en sesiones de diferentes tipos. Así, además de las típicas sesiones de laboratorio, debe haber sesiones de seminario para introducir conceptos e información que se usarán posteriormente, y sesiones de control donde se evalúa el progreso de los estudiantes. Teniendo en cuenta la carga de créditos de la asignatura, se decidió que las prácticas constarían de 7 sesiones de laboratorio (de 2h cada una), 3 sesiones de seminario (de 1h) y 3 sesiones de control (de 1h). En la Sección V del artículo se expone detalladamente la planificación y contenidos de dichas sesiones. Esta estructuración trimodal de las prácticas, en la que se entremezclan las sesiones de laboratorio, las de seminario y las de control, conlleva un importante esfuerzo de coordinación por parte del profesorado pero a la vez también requiere de un esfuerzo organizativo y de planificación por parte del estudiante. Para facilitar este proceso a los estudiantes, nos hemos apoyado en Moodle [10], una aplicación orientada a la gestión de contenidos de cursos a través de un sitio web. Mediante Moodle (ver Fig. 2) se le indica al estudiante, semana a semana, el tipo de sesión que se realizará esa semana y la labor que tiene que preparar. Asimismo se le proporciona la documentación que le servirá de soporte. Otro aspecto positivo de Moodle es que en él se puede integrar fácilmente una wiki [11]. Para promover el trabajo cooperativo los estudiantes son distribuidos en grupos de tres miembros. Cada grupo de trabajo tiene su wiki, incorporada en Moodle [12], y es en esa wiki donde desarrollará una serie de ejercicios escritos a lo largo del semestre. El hecho de que la wiki sea accesible por Internet permite a los miembros de un grupo desarrollar un ejercicio sin necesidad de coincidencia espacial ni temporal, es decir, no es necesario que se reúnan en un mismo momento de tiempo (tan solo requieren un poco de coordinación previa entre ellos). Esta característica es muy positiva especialmente para aquellos estudiantes que trabajan y que, por tanto, tienen una disponibilidad horaria limitada. Los ejercicios desarrollados en cada wiki son supervisados por el profesor, insertando las correcciones necesarias ya sea mediante texto, audio o tinta electrónica. Es entonces responsabilidad de los miembros del grupo la pertinente modificación de los ejercicios con arreglo a esas correcciones. Por todo ello, la wiki del grupo puede considerarse como una aproximación a un portafolio en el que queda reflejado buena parte de su proceso de aprendizaje. 85 Fig. 2. Ejemplo de página (vista parcial) del sitio Moodle habilitado para el seguimiento de las prácticas de DSD. IV. LITTLEPROC A. Características pedagógicas deseadas Para alcanzar la consecución de los objetivos citados en la sección anterior, se consideró que la mejor opción era desarrollar un sencillo procesador que se adaptase perfectamente a nuestros intereses pedagógicos. El primer paso consistió en determinar qué requerimientos debería tener. Estos son los principales: 1) Para posibilitar la profundización del estudiante en las máquinas algorítmicas complejas, la unidad de control será microprogramada. 2) Puesto que se desea que el procesador sea enteramente desarrollado, simulado e implementado por parte de cada grupo de trabajo durante las sesiones de laboratorio, es imprescindible que su arquitectura interna sea sencilla. Asimismo el número de módulos distintos debe ser reducido. 3) La unidad de proceso tendrá una arquitectura basada en el modelo de buses, lo cual posibilita al estudiante visualizar la utilización de un recurso compartido (el bus) y comprender lo que puede y no puede hacerse en un solo ciclo de reloj. 4) Es necesario iniciar la práctica antes de haber impartido la teoría correspondiente a las máquinas algorítmicas complejas. Si no se hiciera así, faltaría tiempo material para realizarla. En consecuencia, deberá ser posible desarrollar las etapas iniciales del procesador, sin necesidad de tener conocimientos sobre máquinas algorítmicas. 5) La mayor parte de los módulos del procesador deben tener una funcionalidad susceptible de ser expresada de manera independiente del procesador. Con ello se consigue ISSN 1932-8540 © IEEE 86 IEEE-RITA Vol. 4, Núm. 2, May. 2009 MemoryL1 MDRdata[11..0] MEMRW MARdata[7..0] ckn NOT ck MEMdata[11..0] data[11..0] w ren address[7..0] clock q[11..0] RAM ram inst20 UC glResetn asynResetn clock inicio control_signals_to_UP[19..0] zero negative carry opcode[3..0] ck inicio zero negativ e carry opcode[3..0] control_s[19..0] UNIDAD DE CONTROL inst control_s[19] LCELL R1load control_s[10] _R1load control_s[18] LCELL LCELL R1out control_s[9] LCELL LCELL R2load control_s[8] LCELL LCELL R2out control_s[7] LCELL LCELL IRload control_s[6] LCELL LCELL IRout control_s[5] LCELL LCELL MARload control_s[4] LCELL LCELL ACCload _ACCload MARout control_s[3..1] LCELL _MARout control_s[11] PCinit _PCinit _MARload control_s[12] PCout _PCout _IRout control_s[13] PCload _PCload _IRload control_s[14] MemRW _MemRW _R2out control_s[15] MDRmem _MDRmem _R2load control_s[16] MDRout _MDRout _R1_out control_s[17] LCELL ALUcode[2..0] _ALUcode MDRload control_s[0] LCELL _MDRload end _end UP carry glResetn glResetn ck R1load R2load IRload PCload PCinit MARload MDRload ACCload R1out R2out IRout PCout MARout MDRout ALUcode[2..0] MEM[11..0] MDRmem ck La consecución de gran parte de estas características nos llevó a desarrollar y utilizar el procesador que se presenta a continuación y al que llamaremos LittleProc. Para ello seguiremos una estrategia top-down. B. Arquitectura general En la Fig. 3 se observa el esquema global de LittleProc (incluyendo una memoria RAM). Como se puede apreciar se corresponde con el típico esquema de una arquitectura de Von Newman, conformada por una unidad de control (UC), una unidad de proceso (UP) y una memoria RAM (de tamaño parametrizable). LittleProc tan solo tiene como entradas un reset asíncrono (glResetn), el reloj (ck) y la señal que activa la ejecución del programa almacenado en RAM (inicio). Su única salida es la señal end que indica la finalización de la ejecución del programa. La memoria RAM alberga el programa que va a ejecutar el procesador, el cual se halla a partir de la posición cuya dirección es InitDir; a su vez también almacena los datos. La RAM se comunica con la UP a través de tres caminos dedicados. Es de tipo single-port y tiene un mecanismo de control muy simple, compuesto por la señal wren y la señal de reloj. La señal wren determina el tipo de operación a realizar SEÑALES DE CONTROL DE LA UP poder afrontar el diseño de dichos módulos pese a no tener conocimientos previos sobre el mismo. 6) Ciertos módulos del procesador deben ser simples, de forma que con su diseño el estudiante pueda recordar/reforzar sus conocimientos previos sobre fundamentos de lógica booleana y bloques digitales básicos. 7) Sería deseable que hubiese módulos de funcionalidad similar que pudiesen ser especificados indistintamente mediante captura de esquemas o HDL. De esa forma los estudiantes pueden percibir las ventajas derivadas del uso de HDLs. 8) El funcionamiento de las memorias vinculadas al procesador debe ser lo más sencillo posible para no dificultar la comprensión de la funcionalidad de la máquina algorítmica/procesador. 9) Puesto que se prioriza el conocimiento del funcionamiento interno de la máquina algorítmica/procesador, es preferible que el conjunto de instrucciones del procesador sea reducido. Además, las instrucciones se estructurarán solamente en dos ciclos: uno de búsqueda (común a todas) y otro de ejecución. Todo ello contribuirá a evitar que el estudiante invierta excesivo tiempo en el estudio y análisis de las instrucciones. El reducido conjunto inicial puede ser utilizado para motivar a los grupos de trabajo a que lo amplíen con otras instrucciones. 10) La ALU realizará un conjunto reducido de operaciones simples. Ello facilitará la comprensión inicial del procesador y a la vez podrá ser usado para promover la implementación de nuevas instrucciones, más complejas, a través de operaciones aritméticas simples. R1load R2load IRload PCload PCinit MARload MDRload ACCload R1out R2out IRout PCout MARout MDRout ALUcode[2..0] MEMdata[11..0] MDRmem carry zero negative IRdata[11..8] MARdata[11..0] MDRdata[11..0] zero negativ e opcode[3..0] MARdata[11..0] MDRdata[11..0] UNIDAD DE PROCESO up glResetn INPUT VCC inicio ck INPUT VCC OUTPUT INPUT VCC E/S end Fig. 3. Esquema general de LittleProc. (lectura o escritura) y el flanco de subida del reloj provoca la petición de la operación. En el esquema también se puede observar una serie de buffers virtuales a través de los cuales las señales de control llegan a la UP. Son añadidos para facilitar la monitorización de dichas señales durante la etapa de simulación. ISSN 1932-8540 © IEEE SAIZ ALCAINE et al.: MÁQUINAS ALGORÍTMICAS: METODOLOGÍA PARA SU APRENDIZAJE PRÁCTICO R1out reg glResetn TRI asy nResetn ck dataout[11..0] R1load load R1 datain[11..0] R1 glResetn TRI asy nResetn ck dataout[11..0] load R2 R2 TRI asy nResetn ck dataout[11..0] IRload load datain[11..0] IR IR TRI glResetn ck PCinit PCload PCin[11..0] PCinit PCload PC[11..0] PCdata[11..0] inst41 PC inst3 MARout reg glResetn TRI asy nResetn ck dataout[11..0] MARdata[11..0] inst42 ck 1000 1001 1010 dataout[11..0] MDRdata[11..0] inst43 ck MDRload load MDRin[11..0] MDR datain[11..0] MDR reg dataout[11..0] asy nResetn glResetn ck ck ACCload load bus1[11..0] datain[11..0] ACC carry zero negative IRdata[11..8] MARdata[11..0] MDRdata[11..0] OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT ck ck negative zero carry ALUv 0 Sel[2..0] OUTPUT B[11..0] ACC A[11..0] ALUcode[2..0] ACCdata[11..0] alu ALU carry zero Bus2[11..0] negativ e MDRmem sel inst6 MEM[11..0] data0x[11..0] data1x[11..0] result[11..0] MDRin[11..0] lpm_mux4 glResetn ck R1load R2load IRload PCload PCinit INPUT VCC INPUT VCC INPUT VCC INPUT VCC INPUT VCC INPUT VCC INPUT VCC MARload MDRload ACCload MDRmem MEM[11..0] ALUcode[2..0] INPUT VCC INPUT VCC INPUT VCC VCC INPUT VCC INPUT VCC INPUT Fig. 4. Esquema lógico de la unidad de proceso de LittleProc. ISSN 1932-8540 © IEEE R1out 0110 0111 TRI asy nResetn ck R2out 0101 glResetn IRout 0100 MDRout reg PCout 0011 MAR datain[11..0] MAR Bus1[11..0] ck MDRout 0010 PCout PC glResetn C[11..0] 0001 inst40 IRdata[11..0] ck load CONJUNTO DE INSTRUCCIONES DE LITTLEPROC Instrucción Descripción LDR1 $mem Carga el contenido de la posición de memoria $mem en el registro R1 LDR2 $mem Carga el contenido de la posición de memoria $mem en el registro R2 ADD Suma el contenido de los registros R1 y R2 y almacena el resultado en R1 STR1 $mem Almacena el contenido del registro R1 en la posición de memoria $mem CMP Compara el registro R1 con el R2, activando la señal zero si son iguales BRE $mem Salta a la posición de memoria $mem si la señal zero está activa JMP $mem Salta a la posición de memoria $mem SUB Resta el contenido del registro R2 a R1 y almacena el resultado en R1 END Finaliza el programa: activa la señal end y pone al procesador en un estado de espera NOP No hace nada; su ciclo de ejecución consume un ciclo de reloj STR2 $mem Almacena el contenido del registro R2 en la posición de memoria $mem IRout reg glResetn MARload Opcode 0000 inst39 R2data[11..0] ck R2load D. Unidad de proceso En la Fig. 4 se puede observar la unidad de proceso. Presenta una arquitectura de dos buses (que denominaremos Bus1 y Bus2) y está formada por 7 registros y una ALU. Los registros se desglosan de la siguiente manera: -dos registros de propósito general (R1 y R2) -un registro de instrucción (IR) -un registro contador de programa (PC) -un registro de dirección de memoria (MAR) -un registro de datos de memoria (MDR) -un registro acumulador (ACC) TABLA I R2out reg datain[11..0] La finalidad de dichos registros es fácilmente deducible a partir de su nombre. El registro IR tiene como objetivo almacenar la instrucción que se va a ejecutar. El registro PC indica la dirección de la siguiente instrucción a ejecutar. Posee una señal de control que permite inicializarlo al valor InitDir que por defecto es la dirección 0x01. Los registros MAR y MDR son utilizados en las operaciones de memoria. El MAR almacena la dirección de la posición a la que afecta la operación de memoria y el MDR contiene el dato inst38 R1data[11..0] ck VCC INPUT VCC INPUT VCC INPUT VCC INPUT VCC INPUT VCC INPUT C. Conjunto de instrucciones LittleProc en su versión más elemental cuenta con un pequeño conjunto de instrucciones formado por un total de 11. Cada instrucción de LittleProc se codifica a través una palabra de 12 bits. Los cuatro primeros bits contienen el opcode y los ocho restantes pueden almacenar un operando. En la Tabla I se resume el conjunto de instrucciones. Este conjunto, aunque reducido, es suficiente para la ejecución de pequeños programas. a escribir en una operación de escritura o recibe el dato leído en una operación de lectura. Ambos registros se comunican con la memoria a través de caminos dedicados, sin necesidad de usar los buses de la UP. Finalmente, el acumulador tiene como misión almacenar el primer operando en las operaciones binarias de la ALU. MARout La UP y la memoria están regidas por flancos de reloj opuestos. Por su parte, la UP y la UC reciben la misma señal de reloj, si bien una parte de la UC está controlada por el flanco opuesto como se verá más adelante. 87 88 IEEE-RITA Vol. 4, Núm. 2, May. 2009 Todas las microinstrucciones tienen un mismo formato, el cual se halla reflejado en la Fig. 6. Se puede observar que los dos bits más significativos sirven para controlar el multiplexor de condiciones, seleccionando la señal de condición que se desea testear según la siguiente codificación: 01: Zero 10: Carry 11: 2egative 00: Inicio Los dos bits siguientes indican el tipo de microinstrucción, de acuerdo a los siguientes valores: 01: GOTO 10: EXE 11: BRA2CH 00: IF El resto de la microinstrucción, excepto el último bit, puede estar formado por dos elementos: las microórdenes que NOT clock inst8 clock INPUT VCC clock INPUT VCC inicio INPUT VCC zero INPUT VCC negativ e INPUT VCC carry INPUT VCC opcode[3..0] INPUT VCC address[5..0] Microprograma q[23..0] asy nResetn inst3 control_signals[23..0] control_signals[23..22] control_signals[21..20] w3 jumpAddress[5..0] inst9 g sel[1..0] control_signals[19..0] W1 W3 W2 address[5..0] asynResetn clock w1 output_address[5..0] w3 input_address[5..0] instrucAddress[5..0] w1 T1 T0 g T[0] inst11 w2 inst1 IRdecoder sel[1..0] inst7 inst2 NOT negativ e opcode[3..0] Decodificador result inst lpm_mux1 carry opcode[3..0] initAddress[5..0] data0 data1 data2 data3 Multiplexor condiciones instrucciones AND2 NOT zero Secuenciador sequencer asy nResetn clock CtrlSeq T[1] inicio LCELL _jumpAddress LCELL Control secuenc. T[1..0] _sel _T control_signals[19..14] inst5 E. Unidad de control En la Fig. 5 se puede observar el esquema de la unidad de control. Los elementos que conforman la UC son una ROM, un multiplexor de condiciones, un secuenciador, un módulo de control del secuenciador, un decodificador de instrucciones y una serie de puertas AND que regulan el paso de las señales de control hacia el exterior (unidad de proceso). El multiplexor de condiciones tiene como finalidad seleccionar una señal de condición, entre cuatro distintas, cuyo estado será utilizado por cierto tipo de microinstrucciones (ver más adelante). La ROM contiene los microprogramas correspondientes a la inicialización del procesador, el ciclo de búsqueda (común a todas las instrucciones) y los ciclos de ejecución de las instrucciones. Un microprograma está formado por un conjunto de microinstrucciones. Cada palabra o posición de la ROM contiene una microinstrucción. Según su función, existen cuatro tipos de microinstrucciones: -EXE: genera microórdenes de control para los registros, buses y ALU, ubicados en la UP -IF: realiza un salto condicionado según el estado de una señal de condición -GOTO: realiza un salto incondicional -BRA2CH: realiza un salto al inicio de un ciclo de ejecución. El ciclo de búsqueda acaba con una microinstrucción de este tipo para posibilitar el salto al ciclo de ejecución de la instrucción actual. romv2 ROM LCELL Todos los registros pueden ser reseteados asíncronamente. La ALU, en principio, solo cuenta con cinco operaciones: paso transparente, suma, resta, máscara de los cuatro primeros bits e incremento en uno del dato procedente del Bus1 (útil para generar la dirección de la siguiente instrucción a ejecutar). Como se puede observar en la Fig. 4, en las operaciones unarias el operando proviene de Bus1 y en las operaciones binarias los operandos proceden de ACC y Bus1. El resultado siempre se vuelca sobre el Bus2. La ALU genera tres señales de condición, Zero, 2egative y Carry, indicadoras de que en una operación binaria (suma o resta) se ha producido como resultado el valor cero, un valor negativo o se ha generado un acarreo, respectivamente. ANDs OUTPUT control_signals_to_UP[19..0] Fig. 5. Esquema general de la unidad de control de LittleProc. Bits 23 22 21 Selector Mux. Condic. 20 19 Tipo μ-instruc. 14 Señales de control de la UP (μ μ-instr. EXE) / Dirección de salto (µ-instr. IF y GOTO) 1 0 end Fig. 6. Estructura de una microinstrucción controlan la UP (en las microinstrucciones EXE) o la dirección de salto (microinstrucciones IF y GOTO) en cuyo caso solo se utilizan los primeros bits. El último bit de la microinstrucción constituye la señal end con cuya activación el procesador informa que ha finalizado la ejecución de un programa. El secuenciador (Fig. 7) es un bloque formado por un registro (denominado microPC), un módulo incrementador y un multiplexor de direcciones. El registro microPC indica la dirección en la ROM de la siguiente microinstrucción que será leída/ejecutada. Dicha dirección puede ser una de las tres siguientes: -la dirección consecutiva (la cual es producida por el incrementador). -una dirección de salto proveniente del contenido de una microinstrucción de la ROM. -una dirección de salto, correspondiente al inicio del ciclo de ejecución de una instrucción. El módulo de control del secuenciador tiene una doble finalidad. Por un lado, genera las dos señales (w1 y w3) que en el secuenciador controlan la siguiente dirección a ser cargada en el microPC y por otro, produce la señal w2 que controla la apertura de las puertas AND y, por tanto, el paso de señales hacia la UP. ISSN 1932-8540 © IEEE SAIZ ALCAINE et al.: MÁQUINAS ALGORÍTMICAS: METODOLOGÍA PARA SU APRENDIZAJE PRÁCTICO ____ inicio asynResetn instrucAddress[5..0] input_address[5..0] inicio Inicialización datain[5..0] INPUT VCC INPUT VCC w1 INPUT VCC EXE (MDRmem, MDRload, EXE (R1out, ACCload) EXE (R2out, ALU-SUMA,R1load) GOTO (dirección donde empieza ciclo búsqueda) Ejecución se ha puesto a modo de ejemplo el ciclo de ejecución de la instrucción ADD. OUTPUT clock Ejecución Fig. 8. Máquina de estados simplificada de la UC microPc asy nResetn IR ≠ Instr. END BRANCH asynResetn REGISTRE ck microPc D EN Ejemplo: Instrucción ADD PCout, ALU-Incr., PCload) dataout[5..0] clock = . str In EXE (PCout, ALU-Transp., MARload) EXE (MDRout, ALU-Transp., IRload) reg6 asy nResetn IR Búsqueda lpm_mux0 data3x[5..0] data2x[5..0] result[5..0] sel[1..0] data1x[5..0] inst3 INC Multiplexor direcciones EXE (end) GOTO (dirección donde empieza periodo espera) IF ([not inicio] continuar aquí) EXE (PCload, PCInit) w3,w1 Ejecución_END Espera A_Plus[5..0] inst2 A[5..0] data0x[5..0] INCREMENTADOR Incrementador 89 w3 input_address[5..0] instrucAddress[5..0] output_address[5..0] INPUT VCC INPUT VCC INPUT VCC Fig. 7. Esquema lógico del secuenciador. Finalmente, el decodificador de instrucciones tiene como objetivo generar la dirección de la ROM donde comienza el ciclo de ejecución de la instrucción actual. Para ello, dicho módulo utiliza el código de la instrucción (opcode) que se encuentra almacenado en el registro IR. La dirección que genera será la dirección a la que se saltará cuando se ejecute una microinstrucción de tipo BRA2CH. La Fig. 8 muestra una representación simplificada de la máquina de estados de la UC. Inicialmente, tras el reset global, la UC se halla en el estado Espera. Al activarse la señal inicio pasa al estado Inicialización donde al registro PC se le asigna el valor InitDir. A continuación va al macroestado Búsqueda donde se realiza el ciclo de búsqueda de la primera instrucción. Se debe recordar que el ciclo de búsqueda es común a todas las instrucciones. Una vez concluido éste, pasa al macroestado Ejecución correspondiente al ciclo de ejecución. Las acciones realizadas en este ciclo dependen de la instrucción que se esté ejecutando (la cual se halla en el registro IR). Una vez finalizado el ciclo de ejecución se realiza de nuevo la búsqueda de otra instrucción. Este proceso se repite con todas las instrucciones excepto con la instrucción END. En este caso en su ciclo de ejecución (macroestado Ejecución_E2D) se emite la señal end y se salta al estado Espera. En la Fig. 8 se presenta también el microcódigo que implementa cada estado. En el caso del macroestado F. Bloques básicos de LittleProc Para desarrollar LittleProc se requiere un conjunto de bloques básicos sumamente pequeño, elaborados bien por captura esquemática o bien con VHDL. Estos son sus integrantes: -reg, un registro de 12 bits con reset asíncrono y señal de carga, usado para implementar los registros R1, R2, IR, MAR. MDR y ACC. -PCreg, un registro de 12 bits, con posibilidad de ser inicializado a un determinado valor de forma síncrona. Es utilizado para implementar el registro PC. -ALU, con la funcionalidad descrita en la subsección relativa a la UP. Este módulo tiene una parte combinacional y otra secuencial. -ctrlSeq, un módulo puramente combinacional que implementa tres funciones booleanas de tres variables y que constituye el modulo de control del secuenciador. -microPC, un registro de 6 bits con señal de reset asíncrono, usado en el secuenciador. Carece de señal de carga. -incrementer, módulo combinacional que realiza el incremento en uno de su valor de entrada (de 6 bits), utilizado para implementar el incrementador del secuenciador. -IRdecoder, un conversor de datos utilizado para implementar el decodificador de instrucciones. En la lista anterior se ha omitido los multiplexores y las memorias ROM y RAM. Dichos elementos se pueden generar de forma casi-automática con la ayuda de asistentes (wizards) integrados en el CAD de Altera. V. METODOLOGÍA DE APRENDIZAJE PRÁCTICO: ESTRUCTURACIÓN DE LAS SESIONES Y EVALUACIÓN En esta sección se expone la forma en cómo se ha estructurado incrementalmente el proceso de aprendizaje mediante las trece sesiones que conforman las prácticas de la asignatura y se muestra cómo se alcanzan los objetivos especificados en anteriores secciones. En el último punto se explica como se evalúan las prácticas. ISSN 1932-8540 © IEEE 90 IEEE-RITA Vol. 4, Núm. 2, May. 2009 B. Sesión 2. Diseño mediante captura de esquemas. Recordatorio de fundamentos booleanos En esta sesión de laboratorio los estudiantes continúan diseñando algunos módulos básicos de LittleProc. En concreto realizan dos módulos, microPC y PCreg (ver Fig. 10 y 11), que por su estructura simple son susceptibles de ser fácilmente implementados mediante captura de esquemas. Se proporciona a los estudiantes su comportamiento funcional sin hacer ninguna referencia a su papel dentro de LittleProc. Las características de estos módulos junto con el desarrollado en la primera sesión (ctrlSeq) los hace muy apropiados para recordar/refrescar conocimientos básicos de lógica booleana, especialmente cuando se procede a su simulación funcional/temporal. Al ser ctrlSeq combinacional y los dos restantes secuenciales, ello permite observar si los estudiantes tienen claras las diferencias entre ambos tipos de circuitos y los principales conceptos asociados (p.e., elementos básicos que los conforman). Asimismo, la implementación de los circuitos secuenciales permite comprobar si los estudiantes tienen claro su funcionamiento en relación a la señal de reloj (distinción entre latches y flip-flops) y la actuación de otras señales de control (p.e., reset asíncrono en contraposición a reset síncrono). El desarrollo de estos módulos también permite a los estudiantes familiarizarse con la conectividad por nombre y con la expresión de un grupo de instancias a través de un solo 6 7 8 9 10 11 12 13 AND2 INPUT VCC NOT _W2 inst LCELL T1 AND3 OUTPUT W2 OUTPUT W1 OUTPUT W3 inst4 inst3 OR2 LCELL INPUT VCC g inst7 NOT _W1 AND2 inst5 inst1 AND2 _W3 A. Sesión 1. Familiarización con el CAD La primera sesión se dedica básicamente a que el estudiante conozca el CAD que va a utilizar de forma continuada a lo largo del semestre. Dado que LittleProc se implementará en una FPGA de Altera se optó, como herramienta de CAD, por Quartus II Web Edition [13] del mismo fabricante. Dicho software está disponible de forma gratuita lo que posibilita que los estudiantes puedan instalarlo particularmente y experimentar con él libremente. En esta sesión de laboratorio, mediante el desarrollo de ctrlSeq, un bloque combinacional sencillo de LittleProc, el estudiante aprende a realizar capturas de esquemas, las diversas maneras de especificar formas de onda y a hacer simulaciones tanto funcionales como con retardos. Se puede observar ctrlSeq en la Fig. 9. Para facilitar la familiarización con Quartus II se le proporciona a cada grupo de trabajo un documento a modo de walkthrough. Este documento permite que cada grupo, a pesar de su inexperiencia con herramientas CAD, pueda trabajar de forma semiautónoma, requiriendo la presencia del profesor tan solo para resolver dudas puntuales. Asimismo el citado documento le sirve como pequeño manual de referencia de Quartus II en las posteriores sesiones de laboratorio. Sesión 1 2 3 4 5 TABLA II PLANIFICACIÓN DE LAS SESIONES DE PRÁCTICAS Tipo Descripción Laboratorio Introducción a Quartus II Web Edition Laboratorio Bloques básicos (I): captura de esquemas Seminario Introducción al VHDL Laboratorio Bloques básicos (II): diseño con VHDL Control Preguntas sobre VHDL y bloques básicos oral (50% estudiantes) Seminario Presentación de LittleProc Laboratorio Diseño de la UP Laboratorio Diseño de la UC Laboratorio Diseño de LittleProc Control Preguntas sobre LittleProc (50% oral estudiantes) Seminario Introducción a la placa de prototipado Laboratorio Implementación de LittleProc en la placa de prototipado Control Preguntas sobre la totalidad de la práctica oral (100% estudiantes) LCELL La Tabla II presenta un resumen de la planificación de las sesiones. Todas las sesiones se apoyan en una documentación que se proporciona a los estudiantes a través de Moodle. Asimismo, todas las sesiones de laboratorio requieren un cierto grado de preparación previa por parte de cada grupo de trabajo. T0 INPUT VCC inst2 Fig. 9. Esquema lógico del módulo ctrlSeq (versión simplificable). símbolo (ver esquemas de microPC o PCreg). En las simulaciones de estos módulos se ven involucradas un número muy pequeño de señales que permite a los estudiantes afrontarlas sin excesivas dificultades. La única dificultad reseñable en esta sesión es la inicialización de forma síncrona al valor InitDir en el módulo PCreg. La forma de resolverla permite al profesor hacerse una idea aproximada del perfil de cada grupo de trabajo. C. Sesiones 3-5. Introducción a VHDL La tercera sesión consiste en un seminario en el que a través de pequeños ejemplos se introduce el lenguaje VHDL como lenguaje de descripción de hardware. La finalidad de esta sesión es que los estudiantes conozcan las sentencias y operadores básicos de VHDL y la forma en como pueden ser utilizados para la descripción de circuitos poco complejos y su posterior síntesis. Estos conocimientos son puestos en práctica en la cuarta sesión (de laboratorio) por los diversos grupos para la realización del resto de módulos básicos (reg, ALU, incrementer e IRdecoder) de LittleProc. El lector de este artículo puede hallar el código de dichos módulos en [12]. Respecto al diseño de estos módulos, es la ALU el que presenta un mayor nivel de dificultad para los estudiantes dado que debe estructurarse en dos partes diferenciadas: una ISSN 1932-8540 © IEEE SAIZ ALCAINE et al.: MÁQUINAS ALGORÍTMICAS: METODOLOGÍA PARA SU APRENDIZAJE PRÁCTICO DFF PRN INPUT VCC INPUT VCC datain[5..0] ck D OUTPUT Q dataout[5..0] CLRN 6f f INPUT VCC asy nResetn Fig. 10. Esquema lógico del módulo microPC. PCinit NOT inst10 PCin[11..1] AND2 DFFE in[11..1] inst8 PC[11..1] PRN D ck Q PCload ENA CLRN f f 11_1 glResetn PCinit OR2 DFFE in[0] PCin[0] inst9 PC[0] PRN D ck Q PCload ENA CLRN f f _0 glResetn glResetn ck PCinit INPUT VCC INPUT VCC INPUT VCC PCload INPUT VCC INPUT VCC PCin[11..0] OUTPUT PC[11..0] Fig. 11. Esquema lógico del módulo PCreg con InitDir = 1. parte puramente combinacional y la otra de carácter secuencial, asociada a la generación de las señales de condición. Otro aspecto destacable es el hecho de que cada grupo ha tenido que desarrollar un registro tanto mediante captura de esquemas como mediante VHDL (PCreg y reg) lo cual permite comparar ambos métodos de especificación y tomar conciencia de las ventajas de usar un HDL (simplicidad, parametrizabilidad y portabilidad). Con posterioridad a la sesión 4, cada grupo, a través de su wiki, tiene que resolver de forma cooperativa un cuestionario sobre los módulos desarrollados y sobre VHDL. Finalmente en la sesión 5 se procede a realizar un cuestionario oral a un conjunto de estudiantes de la clase. Ello permite comprobar de forma individualizada el nivel de asimilación de conocimientos alcanzado y posibilita también que el estudiante desarrolle su capacidad de expresión oral. D. Sesiones 6-10. Diseño de la unidad de proceso y de la unidad de control. Creación de LittleProc. Al llegar a este punto de la asignatura, los estudiantes, a través de las clases de teoría, han adquirido unos conocimientos elementales de máquinas algorítmicas complejas y han realizado algunos problemas representativos. La sexta sesión consiste en un seminario que tiene como objetivo presentar la arquitectura de las unidades de proceso y control de LittleProc. Asimismo se explica cómo usar los módulos desarrollados hasta ahora para crear ambas unidades. Es en esta sesión donde el estudiante toma conciencia de la funcionalidad final de cada módulo dentro de LittleProc. En dicha sesión también se expone cómo crear LittleProc mediante el adecuado conexionado de la UP, la UC y una pequeña memoria RAM. Entender la UP no suele ser problemático para los estudiantes. Por el contrario, comprender el funcionamiento 91 detallado de la UC suele presentar un nivel de complejidad relativamente elevado puesto que no solo han de entender la interrelación de los módulos hardware sino también el contenido de las microinstrucciones de la ROM. Respecto a la UP, y teniendo en consideración su simplicidad, se promueve que cada grupo la desarrolle por su cuenta y la traiga ya realizada al principio de la sesión 7 (de laboratorio). De esa forma puede dedicar la totalidad de la sesión a simularla bastante exhaustivamente. Uno de los problemas que presenta su simulación es el gran número de señales que se han de gestionar. Los estudiantes se suelen quedar colapsados al observar una simulación en la que pueden aparecer una veintena de señales distintas. Por ello se les proporciona una documentación con las señales que deben ser monitorizadas y una descripción textual orientativa de la simulación a realizar. La sesión 8 (de laboratorio) se centra en el desarrollo del módulo secuenciador, la generación automática de la ROM y la creación de la UC. Para la especificación de la ROM, se facilita a los estudiantes un fichero con parte de los microprogramas que han de estar almacenados en ella. Una vez creada la unidad de control, cada grupo procede a su simulación. Idear una simulación de la UC no es conceptualmente difícil ya que el número de señales de entrada que tiene es pequeño. Lo que sí resulta más difícil para los estudiantes es observar el gran número de señales de salida, producidas por ella. Por ello se les proporciona una guía con un orden recomendado de visualización de señales, orientada a facilitarles su comprensión y su seguimiento ciclo a ciclo de reloj. En la sesión 9 (de laboratorio), cada grupo conecta la UP, la UC y una pequeña RAM generada, creando así su propia versión de LittleProc. Para la especificación de la RAM, se facilita a los estudiantes un fichero con un pequeño programa en lenguaje máquina (unas 10 instrucciones) que estará almacenado en ella y que podrá ser ejecutado por LittleProc. La mayor parte de esta sesión se dedica a simular la ejecución del citado programa realizando un seguimiento ciclo a ciclo de reloj de todos los elementos del procesador (registros de la UP, microPC, señales de control de la UC, etc.), tal como se puede observar en la Fig. 12. Para hacer esta simulación resulta imprescindible ver la evolución de las señales internas del procesador. Para conseguirlo en Quartus II, se requiere añadir ciertos elementos en los esquemas (buffers virtuales LCELL) y hacer ciertas declaraciones adicionales en el código VHDL (sentencias attribute). Tras la sesión 9 los estudiantes deben haber alcanzado un alto grado de comprensión del funcionamiento de su LittleProc y en consecuencia del modo de funcionamiento de una máquina algorítmica cuya unidad de control sea microprogramada. Llegado este momento se plantea a cada grupo un segundo cuestionario en el que, entre otras cosas, se les pide que completen la ROM de la UC y que implementen nuevas instrucciones ampliando así las posibilidades de su LittleProc. En la sesión 10 (de control) se vuelve a escoger un conjunto de estudiantes, diferente del elegido en la sesión 5, para realizarles de forma individual un cuestionario oral sobre los conocimientos adquiridos acerca de LittleProc. ISSN 1932-8540 © IEEE 92 IEEE-RITA Vol. 4, Núm. 2, May. 2009 Fig. 12: Formas de onda pertenecientes a la simulación de LittleProc ejecutando un pequeño programa. Las señales se han dispuesto de la siguiente forma: entradas (3), salida (1), registros de la UP y señales vinculadas, ALU y señales relativas a la UC (empezando por el microPC). E. Sesiones 11-13. Implementación y uso de LittleProc mediante una placa de prototipado En la recta final del semestre se aborda la parte más estimulante para los estudiantes. A través una placa de prototipado que cuenta entre otros elementos con una FPGA, se procede a implementar LittleProc para posteriormente realizar una ejecución controlada de un pequeño programa. La placa de prototipado usada es la UP3 Education Kit (Fig. 13) [14]. En la sesión 11 (de seminario) se explican las principales características de la placa UP3 y los elementos que la conforman. A su vez, se exponen las modificaciones que se deben realizar sobre el diseño de LittleProc para facilitar su implementación en la placa, que consisten básicamente en la adición de dos pequeños módulos. El primero de ellos permite que el reloj del procesador sea controlado a través de un pulsador externo. El segundo posibilita que el contenido de los registros del procesador se visualice externamente en un display integrado en la placa. Finalmente se explican los pasos a seguir para realizar la síntesis del circuito. En la sesión 12 (de laboratorio) se suministra a cada grupo una placa UP3. Asimismo se le proporciona los módulos a los que se hacía referencia en el párrafo anterior. Cada grupo genera una nueva versión de LittleProc incorporándole esos módulos y algunas modificaciones técnicas menores. Una vez realizado esto, procede a sintetizar LittleProc sobre la placa de prototipado y ejecuta un pequeño programa que se halla en la RAM. Con ayuda de un pulsador de la placa va generando el Fig. 13. Placa de prototipado UP3 Education Kit. reloj ciclo a ciclo, observando a través del display como van cambiando los registros y evaluando la coherencia de dichos cambios. Tras esta sesión cada grupo tiene que responder un tercer cuestionario centrado en el conocimiento de FPGAs, las características de la placa UP3 y el proceso de síntesis. Como complemento final de su formación, la sesión 13 (de control) se dedica a realizar de forma individual un pequeño examen oral a la totalidad de los estudiantes. ISSN 1932-8540 © IEEE SAIZ ALCAINE et al.: MÁQUINAS ALGORÍTMICAS: METODOLOGÍA PARA SU APRENDIZAJE PRÁCTICO F. Evaluación de las prácticas La evaluación de las prácticas se realiza a través de la puntuación de cada cuestionario respondido por cada grupo en su wiki y de las notas obtenidas en los cuestionarios orales individuales. Para cada grupo se computa la nota media de sus cuestionarios escritos y para cada estudiante se calcula la media de sus cuestionarios orales. Haciendo una suma ponderada de dichas medias se determina la nota final de prácticas de cada estudiante. Cabe la posibilidad de ser restrictivo estableciendo la condición de que si la media de los cuestionarios orales individuales es inferior a un valor umbral el estudiante quede suspendido. positivos de la asignatura mientras otros claramente preferirían prescindir de ella. En cuanto a la planificación global de las prácticas, la opinión es positiva si bien existe un número reseñable de estudiantes a los que las sesiones de laboratorio les parecían algo cortas. También se solicitó a los estudiantes que hicieran una valoración del nivel de interés que les suscitaban las prácticas de nuestra asignatura en relación a las de otras asignaturas. Dicha cuestión se planteó debido a que, en cierta forma, el tiempo de los estudiantes puede ser considerado como un recurso compartido por el que compiten todas las asignaturas. Las respuestas de los estudiantes indican que el interés de nuestras prácticas está claramente por encima del nivel medio. VI. RESULTADOS Y VALORACIÓN DE LOS ESTUDIANTES Tras haber puesto en práctica la metodología expuesta en las secciones anteriores, era necesario analizar los resultados derivados de su aplicación y conocer la opinión/percepción de los estudiantes. La Tabla III muestra una comparativa de las notas finales correspondientes a la primera convocatoria de dos cursos: el último curso con el contenido antiguo de prácticas y el primer curso en el que la nueva metodología de prácticas fue plenamente aplicada. Se puede observar una clara mejora que se hace patente en el incremento del porcentaje de estudiantes con nota igual o superior a notable. Asimismo es reseñable la disminución del porcentaje de estudiantes no presentados. Para estudiar la influencia de la metodología en el grado de comprensión de las máquinas algorítmicas se ha procedido a analizar la evaluación obtenida por los estudiantes en dos ejercicios del examen final relativos al desarrollo de una máquina algorítmica microprogramada. La nota media global de los dos ejercicios fue 6,38. En concreto uno de esos dos ejercicios estaba centrado en la estructura de la UC. En dicho ejercicio, la nota media fue 7,00. Todos estos resultados demuestran, a nuestro juicio, la efectividad de la metodología docente descrita. Otro punto importante era conocer la valoración que tenían los estudiantes sobre la labor realizada y la metodología seguida en las prácticas. Para ello se procedió a realizar una encuesta cuyos principales resultados se pueden observar en la Tabla IV. Existe una amplia coincidencia en que la realización de la práctica ha contribuido a la profundización de los conceptos presentados en las clases de teoría. El uso del entorno Moodle para el seguimiento de las prácticas y la documentación proporcionada para la realización de cada sesión también ha recibido una valoración bastante positiva. En relación al uso de una wiki para la realización del trabajo de grupo existe una mayor disparidad de criterios: algunos estudiantes la señalan como uno de los elementos más TABLA III COMPARATIVA NOTAS FINALES 1ª CONVOCATORIA Metod. antigua Metod. nueva No presentados 16,3 % 6,1 % Suspensos 8,4 % 16,2 % Aprobados 42,1 % 33,3 % Notables o superior 33,2 % 44,4 % 93 VII. CONCLUSIONES Se ha desarrollado una metodología de base práctica orientada a facilitar y mejorar la comprensión de las máquinas algorítmicas, concretamente aquellas cuya unidad de control es microprogramada. La aplicación de esta metodología se ha traducido en la obtención de un alto rendimiento académico de nuestros estudiantes y en un creciente interés por la asignatura, si bien ha requerido un importante esfuerzo por parte del profesorado. En la actualidad nuestro trabajo se centra en la introducción de diversas variantes en LittleProc tanto a nivel de módulos como a nivel de arquitectura (UP con 1, 2 o 3 buses) para conseguir que cada grupo realice una práctica distinta del resto, evitando el riesgo de copia y promoviendo una labor cooperativa entre grupos. Asimismo, el hecho de que se implementen diversas versiones de arquitectura puede permitir un análisis comparativo del rendimiento y características de dichas variantes. Otra posibilidad interesante sería la de promover que algún grupo de trabajo realizase la versión cableada de la UC y de esa forma tener la oportunidad de realizar una comparativa entre la versión microprogramada y la cableada. TABLA IV RESULTADOS DE LAS ENCUESTAS Nivel de dificultad de la práctica [ 1 (bajo) – 5 (alto) ] Contribución de la práctica a la mejor comprensión de los conceptos estudiados en teoría/problemas [1 (poca) – 5(mucha) ] Valoración de la documentación proporcionada para la realización de las diversas sesiones de prácticas [ 1 (baja) – 5 (alta) ] Valoración de la contribución del entorno Moodle al desarrollo de las prácticas [ 1 (baja) – 5 (alta) ] Valoración de la contribución de la wiki a la realización del trabajo cooperativo [ 1 (baja) – 5 (alta) ] Valoración de la planificación global de las prácticas [ 1 (poco adecuada) – 5 (muy adecuada) ] Valoración de la duración de las sesiones de prácticas [ 1 (poco adecuada) – 5 (muy adecuada) ] Tiempo personal requerido para la preparación del trabajo de prácticas [ 1 (poco) – 5 (mucho) ] Nivel de interés de las prácticas en relación a las prácticas de otras asignaturas [ 1 (bajo) – 5 (alto) ] Grado de consecución de las siguientes competencias [ 1 (bajo) – 5 (alto)] Trabajo en equipo Capacidad de organización y planificación Comunicación oral y escrita ISSN 1932-8540 © IEEE 3,72 4,09 3,89 3,46 3,00 3,63 3,09 3,95 3,96 3,76 3,59 3,34 94 IEEE-RITA Vol. 4, Núm. 2, May. 2009 AGRADECIMIENTOS Los autores queremos expresar nuestro agradecimiento a Borja Martínez Huerta (MiSE-UAB) por su ayuda durante la implementación de LittleProc en la placa de prototipado. Su amplia experiencia en el desarrollo de sistemas electrónicos resultó de gran importancia en esa etapa del trabajo. Asimismo queremos agradecer a los estudiantes Justo Salcedo y Pau Picas la realización de un ejercicio que contribuyó al diseño de la metodología docente expuesta. REFERENCIAS [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] J.P. Deschamps y J. M. Angulo, Diseño de Sistemas Digitales: Metodología Moderna. Ed. Paraninfo, 1989. A. Lloris y A. Prieto, Diseño Lógico. Ed. McGraw-Hill Interamericana, 1996. D. D. Gajski, Principles of Digital Design, Ed. Prentice-Hall, 1997. Declaración conjunta de los Ministros Europeos de Educación, The Bologna Declaration of 19 June 1999. R. B. Brown, R. J. Lomax, G. Carichner y A. J. Drake. “A Microprocessor Design Project in an Introductory VLSI Course”. IEEE Transactions on Education, vol. 43, no. 3, pag. 353-361. J. P. Deschamps, Síntesis de Circuitos Digitales, Cap. 12, Ed. Thomson–Paraninfo, 2002. V. P. Heuring y H. F. Jordan, Computer Systems Design and Architecture, Cap. 4 y 5, Ed. Pearson Prentice Hall, 2004. A.Portero, J. Saiz, R. Aragonés, M. Rullán, J. Aguiló y E. Valderrama, “Transforming Spanish student attitude in the face of engineering learning”, en Proc. 10th IACEE World Conference in Continuing Engineering Education, Viena, 2006. R. Aragonés, J. Saiz, A. Portero, M. Rullán y J. Aguiló. “Experiencia de Innovación Docente siguiendo las directrices del EEES en la enseñanza del diseño digital”, Revista Latinoamericana de Tecnología Educativa (RELATEC), vol. 5, no. 2, pag. 203-222. Página principal de Moodle: http://moodle.org. Abril de 2009. W. Cunningham y B. Leuf, The Wiki Way, Addison-Wesley, 2001. Moodle derivado del servidor real usado en la asignatura de DSD: http://ume015.uab.es/dsdmoodleRITA . Abril de 2009. Introduction to the Quartus II Software, Altera Corporation. UP3 Education Kit. Reference Manual, Cyclone Edition. Altera Corporation - System Level Solutions (SLS). Joaquín Saiz Alcaine (A’02-M’04) nació en Reus (España) en 1967. Obtuvo el grado de Licenciado en Ciencias (Sección Informática) por la Facultad de Ciencias de la Universidad Autónoma de Barcelona (UAB) en 1990. Dicho grado está homologado al de Ingeniero en Informática. En la actualidad es profesor colaborador en la Escuela Técnica Superior de Ingeniería de la UAB. Anteriormente había trabajado como profesor en la Escuela Universitaria Politécnica de Mataró, las Escuelas Universitarias Gimbernat y la Facultad de Ciencias de la UAB. Su labor docente se ha desarrollado en las titulaciones de Ingeniería Informática e Ingeniería Electrónica centrándose en el diseño de sistemas digitales y el diseño de ASICs. Inició su labor investigadora en el Centro Nacional de Microelectrónica participando en diversos proyectos relacionados con el desarrollo de CAD y las bibliotecas de celdas. Posteriormente, en el departamento de Informática de la UAB, centró su labor en el ámbito del codiseño y los lenguajes de especificación de sistemas. Actualmente trabaja en el departamento de Microelectrónica y Sistemas Electrónicos de la UAB en el campo de la representación de las funciones booleanas. Antoni Portero Trujillo (M’06) nació en Granollers, Barcelona, España, el 2 de febrero de 1973. Ingeniero Electrónico (97) y Máster en Microelectrónica (00) por la Universidad Autónoma de Barcelona, Barcelona, Cataluña, España. Actualmente es investigador de segunda etapa en la Universidad Autónoma de Barcelona. Anteriormente ha sido profesor asociado (97-03) y profesor ayudante (03-07) en la mencionada universidad. Ha sido promotor en CEPHIS (Centro de Prototipos y Soluciones Hardware-Software, asociada a la red de innovación tecnológica de la Generalitat de Cataluña) en el 2002 y director de proyectos desde el 2003. Ha participado como investigador en varios proyectos de investigación con subvenciones del gobierno y empresas privadas. Esta especializado en sistemas reconfigurables para video compresión. El Sr. Portero tiene más de cuarenta publicaciones de investigación y de educación en congresos nacionales e internacionales. Es miembro del “Who is who in the world”, Marquis (06); y del IACEE (The International Association for Continuing Engineering Education) (06). Raúl Aragonés Ortiz nació en Sabadell, España, el 25 de Junio de 1975. Recibió el grado de Ingeniero Técnico en Electrónica Industrial en la Escola Salesiana Universitaria de Sarrià en 1998 y el grado de Ingeniero en Electrónica en la Universitat Autònoma de Barcelona en el 2001. A su vez obtuvo el master en informática en esta misma universidad, con la especialidad Microelectrónica, en el 2004. Desde el 2001 trabaja en el departamento de Microelectrónica de la Universidad Autónoma de Barcelona participando en varios proyectos relacionados con redes de sensores y arquitecturas distribuidas de microsistemas, realizando varias publicaciones en estas áreas. Sus principales áreas de interés son los sistemas de adquisición y conversión frecuenciales. Mercè Rullán Ayza nació en Barcelona (1964); licenciada en Ciencias (Sección: Informática) en la Facultad de Ciencias de la Universidad Autónoma de Barcelona (1988) y doctora en Informática por la Facultad de Ciencias de misma universidad (1996). Actualmente es Titular de Universidad (desde 1997) de la UAB en la Escuela Técnica Superior de Ingeniería, dentro del Departamento de Microelectrónica y Sistemas Electrónicos y vinculada a las líneas de investigación de diseño y test de circuitos integrados y microsistemas. Desde 1996 está relacionada con la Coordinación de la titulación de Ingeniería Informática de la UAB y más concretamente con la adaptación de la titulación de Ingeniería Informática al EEES (título de Grado en Tecnologías (Informática)). Jordi Aguiló Llobet nació en Barcelona en 1950. Es Licenciado en Física por la Universidad de Barcelona, Barcelona, España (1972). Doctor en Ciencias por la Universidad Autónoma de Barcelona, Bellaterra, España (1976), es Catedrático de Arquitectura y Tecnología de Computadoras de esta universidad. Actualmente es Director del Departamento de Microelectrónica y Sistemas Electrónicos de la Escuela Superior de Ingenieros de la Universidad Autónoma de Barcelona. Desde 1985 es también investigador adscrito al Centro Nacional de Microelectrónica, CNM, del Consejo Superior de Investigaciones Científicas y vicedirector del mismo hasta 2002. Actualmente está coordinando el Grupo de Aplicaciones Biomédicas del CNM. Es Gestor de la Iniciativa en Tecnologías Convergentes de la UAB. Ha participado en numerosos proyectos europeos liderando entre otros MicroCard y MicroTrans del programa EU-IST, aplicaciones médicas de las microtecnologías a la cirugía cardiovascular y al trasplante de órganos respectivamente. Fue también director de la Oficina Sur del Centro de Competencia Europeo en Aplicaciones Médicas de las Microtecnologías de la DG-IST. Actualmente participa en el proyecto integrado PERSONA sobre aplicación de las TIC a la autonomía personal. El Dr. Aguiló es coordinador científico y tecnológico del Programa Iberoamericano de Ciencia y Tecnología para el Desarrollo. Ha participado como experto en la iniciativa Converging Technologies for Food: 2ano-BioInfo and Cognitive Sciences de la UE y es miembro del comité científico para aplicaciones médicas de la European Platform on Smart Systems, EPoSS. ISSN 1932-8540 © IEEE