Está en la página 1de 15

BENEMRITA UNIVERSIDAD AUTNOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIN

Cesar Daniel Vivanco Olivera

Introduccin
PicoBlaze es un micro controlador de 8 bits con arquitectura RISC.

Caractersticas
Registros de datos de 16 bits de ancho. Instrucciones de 1K en el chip programable, con carga automtica durante configuracin de la FPGA. Unidad aritmtico-lgica amplia (ALU) con acarreo e indicador Zero en las banderas. 64 bytes de memoria RAM interna. 256 puertos de entrada y salida para fcil expansin y mejora. 31 ubicaciones CALL/RETURN automtico en pila. Rendimiento predecible, siempre dos ciclos de reloj por instruccin, hasta 200 MHz o 100 MIPS en un Virtex-II Pro FPGA. Respuesta de interrupcin rpida, el peor de los casos 5 ciclos de reloj. Optimizado para arquitectura Xilinx Spartan3 slo 96 rebanadas y 0,5 a 1 bloque de RAM. Soporte en arquitecturas Spartan-6 y Virtex 6 FPGA.

Registros de propsito general


El micro controlador PicoBlaze incluye 16 registros de propsito general de ancho de byte, designado como registros s0 a sF. Todas las operaciones de registro son completamente intercambiables, sin registros reservados para tareas especiales o sin prioridad sobre cualquier otro registro. No hay acumulador dedicado, cada resultado se calcul en un registro especificado.

Almacenamiento de Instrucciones de programa


El micro controlador PicoBlaze ejecuta hasta 1024 instrucciones de la memoria en el FPGA, tpicamente a partir de un solo bloque de memoria RAM. Cada instruccin PicoBlaze es de 18 bits de ancho. La instruccin se recoge en el diseo de FPGA y se cargan automticamente durante el Proceso de configuracin de la FPGA.

Unidad aritmtico-lgica
La unidad aritmtico-lgica realiza todos los clculos del micro controlador incluyendo: Las operaciones aritmticas bsicas, como sumas y restas Las operaciones lgicas a nivel de bits, tales como AND, OR y XOR Aritmtica compara bit a bit y operaciones de prueba Todas las operaciones se realizan utilizando un operando proporcionada por cualquier registro especificado (SX). El resultado se devuelve al mismo registro especificado (SX). Si una instruccin requiere de un segundo operando, a continuacin, el segundo operando es o bien un segundo registro (SY) de 8 bits inmediata a la constante (kk).

Banderas
Operaciones de ALU afectan a las banderas ZERO y Acarreo. La bandera de cero indica que el resultado de la ltima operacin result en cero. El indicador de acarreo indica varias condiciones, dependiendo de la ltima instruccin ejecutada. La bandera INTERRUPT_ENABLE permite la entrada de interrupcin.

Entradas / Salidas
Los puertos de entrada / salida extienden las capacidades del micro controlador PicoBlaze y le permiten conectarse a un conjunto de perifricos de encargo o a otra lgica FPGA. El micro controlador soporta hasta 256 puertos de entrada y 256 puertos de salida o una combinacin de puertos de entrada / salida. La salida ID_de_Puerto proporciona la direccin del puerto. Durante una ENTRADA operacin, el micro controlador PicoBlaze lee datos desde el puerto IN_PORT a un registro especfico, SX. Durante una operacin de salida, el micro controlador PicoBlaze escribe el contenido de un registro SX, al puerto OUT_PORT.

Contador de Programa
El contador de programa (PC) apunta a la siguiente instruccin a ejecutar. Por defecto, el PC incrementa automticamente a la siguiente posicin de la instruccin al ejecutar una instruccin. Slo las instrucciones JUMP, CALL, RETURN, RETURNI la interrupcin y Reset de eventos modificar el comportamiento predeterminado. El PC de 10 bits compatible con un espacio mximo de 1024 instrucciones (000 a 3FF hex). Si el PC alcanza la parte superior de la memoria en hexadecimal 3FF, se da la vuelta a la ubicacin 000.

Control de Flujo del Programa


La secuencia de ejecucin por defecto del programa puede ser modificado usando condicional e instrucciones de control de flujo de programa no condicionales. La instruccin JUMP especifica una direccin absoluta en todo el 1024 instruccin de espacio del programa. Las instrucciones CALL y RETURN proporcionan subrutinas para las secciones utilizadas de Cdigo. Una instruccin CALL especifica la direccin inicial absoluta de un subprograma, mientras que la direccin de retorno se mantiene automticamente preservada CALL / RETURN de la pila. Si la entrada de interrupcin est activada, un evento de interrupcin tambin conserva la direccin de adelanto a la instruccin CALL/RETURN mientras el PC es cargado con el Vector de interrupcin, hex 3FF. Use la instruccin returni en lugar de la instruccin RETURN para volver a la rutina de servicio de interrupcin (ISR).

Pila CALL/RETURN
La CALL/RETURN almacena hasta 31 direcciones de instruccin, lo que permite secuencias anidadas permitiendo llamar hasta 31 niveles de profundidad. Dado que la pila tambin se utiliza durante para interrumpir la operacin, por lo menos uno de estos niveles debe reservarse cuando las interrupciones son habilitadas. La pila se implementa como un bfer de circulacin separada. Cuando la pila est llena, se sobrescribe el valor ms antiguo. En consecuencia, no hay instrucciones para el control de la pila o la pila puntero. No se requiere ninguna memoria de programa para la pila.

Interrupciones
El micro controlador PicoBlaze tiene una entrada de interrupcin opcional, permitiendo al micro controlador controlar los eventos externos asncronos. En este contexto, "asncrono" se refiere a las interrupciones que ocurren en cualquier momento durante un ciclo de instruccin.

Reset
El micro controlador PicoBlaze se restablece automticamente inmediatamente despus de que el proceso de configuracin de la FPGA se completa. Despus de la configuracin, la entrada RESET hace que el procesador regrese al estado inicial. El PC se reinicia a la direccin 0, las banderas se borran, las interrupciones son desactivadas y la pila de CALL / RETURN se restablece. Los registros de datos y la memoria RAM bloc de notas no se ven afectados por Reset.

Seales de la Interfaz Pico Blaze


Las seales de interfaz de alto nivel para el micro controlador PicoBlaze

Seal IN_PORT [7:0]

Direccin Input

Descripcin Puerto de datos de entrada: Presentar los datos de entrada vlidos en este puerto durante una instruccin INPUT. La informacin se captura en el flanco ascendente de CLK. Interrupcin de entrada: Si la bandera INTERRUPT_ENABLE se establece por el cdigo de la aplicacin, genera un evento de alarma al afirmar esta entrada alta durante al menos dos ciclos de reloj. Si la bandera INTERRUPT_ENABLE se borra, se ignora esta entrada. Restablecer entrada: Para reiniciar el micro controlador PicoBlaze y generar un evento de restauracin, Afirmar esta entrada de alta durante al menos un ciclo de CLK. Entrada Reloj: La frecuencia puede variar de DC a la mxima de funcionamiento de operacin reportada por el software de desarrollo de Xilinx ISE. Todos los elementos sincrnicos son sincronizados desde el borde ascendente del reloj. No hay requisitos del ciclo de reloj en la actividad ms all de los requisitos mnimos de ancho de pulso de la FPGA. Puerto de salida de datos: Los datos de salida aparece en este puerto durante dos ciclos de CLK durante una Instruccin de salida. Captura de datos de produccin dentro de la FPGA en el flanco ascendente CLK cuando WRITE_STROBE es alta. Port Address: La direccin del puerto de E/S aparece en este puerto durante dos ciclos CLK

INTERRUPT

Input

RESET

Input

CLK

Input

OUT_PORT[7:0]

Output

PORT_ID[7:0]

Output

READ_STROBE

Output

WRITE_STROBE

Output

INTERRUPT_ACK

Output

en una entrada o una instruccin de salida. Leer estroboscpica: Cuando afirmacin alta, esta seal indica que los datos de entrada en la IN_PORT [07:00] Puerto fue capturado a los datos especificados se registran durante una ENTRADA de la Instruccin. Esta seal se afirm en el segundo ciclo de CLK de la ENTRADA de dos tiempos de la instruccin. Esta seal se utiliza normalmente para reconocer las operaciones de lectura de FIFO. Escribir Strobe: Cuando afirmado alta, esta seal valida los datos de salida de la OUT_PORT puerto [07:00] durante una instruccin de salida. Esta seal se afirma en el segundo ciclo de CLK de la instruccin OUTPUT de dos tiempos. Captura de datos de salida dentro de la FPGA en el flanco ascendente CLK cuando WRITE_STROBE es alta. Reconocimiento de interrupcin: cuando afirm High, esta seal de reconocimiento de que Ocurri evento de interrupcin. Esta seal es afirmada durante el segundo ciclo de CLK del evento de interrupcin de dos tiempos. Esta seal se utiliza opcionalmente para borrar la fuente de la entrada de interrupcin.

Conjunto de instrucciones PicoBlaze


Instruccin
ADD sX, kk ADD sX, sY ADDCY sX, kk (ADDC) ADDCY sX, sY (ADDC) AND sX, kk AND sX, sY CALL aaa CALL C, aaa CALL NC, aaa CALL NZ, aaa CALL Z, aaa COMPARE sX, kk (COMP) COMPARE sX, sY (COMP) DISABLE INTERRUPT (DINT) ENABLE INTERRUPT (EINT) Interrupt Event

Descripcin
Add register sX with literal kk Add register sX with register sY Add register sX with literal kk with CARRY bit Add register sX with register sY with CARRY bit Bitwise AND register sX with literal kk Bitwise AND register sX with register sY Unconditionally call subroutine at aaa If CARRY flag set, call subroutine at aaa If CARRY flag not set, call subroutine at aaa If ZERO flag not set, call subroutine at aaa If ZERO flag set, call subroutine at aaa Compare register sX with literal kk. Set CARRY and ZERO flags as appropriate. Registers are unaffected. Compare register sX with register sY. Set CARRY and ZERO flags as appropriate. Registers are unaffected. Disable interrupt input Enable interrupt input Asynchronous interrupt input. Preserve flags and PC. Clear INTERRUPT_ENABLE flag. Jump to interrupt vector at address 3FF.

Funcin
sX sX + kk Sx sX + sY sX sX + kk + CARRY sX sX + sY + CARRY sX sX AND kk sX sX AND sY TOS PC PC aaa If CARRY=1, {TOS PC,PC aaa} If CARRY=0, {TOS PC,PC aaa} If ZERO=0, {TOS PC,PC aaa} If ZERO=1, {TOS PC,PC aaa} If sX=kk, ZERO 1 If sX<kk, CARRY 1 If sX=sY, ZERO 1 If sX<sY, CARRY 1 INTERRUPT_ENABLE 0 INTERRUPT_ENABLE 1 Preserved ZERO ZERO Preserved CARRY INTERRUPT_ENABLE 0 TOS PC PC 3FF

ZERO
? ? ? ? ? ? ?

CARRY
? ? ? ? 0 0 ?

FETCH sX, (sY) (FETCH sX, sY)


FETCH sX, ss INPUT sX, (sY) (IN sX, sY) INPUT sX, pp (IN) JUMP aaa JUMP C, aaa JUMP NC, aaa JUMP NZ, aaa JUMP Z, aaa LOAD sX, kk LOAD sX, sY OR sX, kk OR sX, sY OUTPUT sX, (sY) (OUT sX, sY) OUTPUT sX, pp (OUT sX, pp) RETURN (RET) RETURN C (RET C) RETURN NC (RET NC) RETURN NZ (RET NZ) RETURN Z (RET Z) RETURNI DISABLE (RETI DISABLE)

Read scratchpad RAM location pointed to by register sY into register sX


Read scratchpad RAM location ss into register sX Read value on input port location pointed to by register sY into register sX Read value on input port location pp into register sX Unconditionally jump to aaa If CARRY flag set, jump to aaa If CARRY flag not set, jump to aaa If ZERO flag not set, jump to aaa If ZERO flag set, jump to aaa Load register sX with literal kk Load register sX with register sY Bitwise OR register sX with literal kk Bitwise OR register sX with register sY Write register sX to output port location pointed to by register sY Write register sX to output port location pp Unconditionally return from subroutine If CARRY flag set, return from subroutine If CARRY flag not set, return from subroutine If ZERO flag not set, return from subroutine If ZERO flag set, return from subroutine Return from interrupt service routine. Interrupt remains disabled.

sX RAM[(sY)]
sX RAM[ss] PORT_ID sY sX IN_PORT PORT_ID pp sX IN_PORT PC aaa If CARRY=1, PC aaa If CARRY=0, PC aaa If ZERO=0, PC aaa If ZERO=1, PC aaa sX kk sX sY sX sX OR kk sX sX OR sY PORT_ID sY OUT_PORT sX PORT_ID pp OUT_PORT sX PC TOS+1 If CARRY=1, PC TOS+1 If CARRY=0, PC TOS+1 If ZERO=0, PC TOS+1 If ZERO=1, PC TOS+1 PC TOS ZERO Preserved ZERO CARRY Preserved CARRY INTERRUPT_ENABLE 0 PC TOS ZERO Preserved ZERO CARRY Preserved CARRY sX {sX[6:0],sX[7]} CARRY sX[7] sX {sX[0],sX[7:1]} CARRY sX[0]

? ? ?

0 0 ?

RETURNI ENABLE (RETI ENABLE)

Return from interrupt service routine. Re-enable interrupt.

RL sX RR sX

Rotate register sX left Rotate register sX right

? ?

? ?

SL0 sX SL1 sX SLA sX SLX sX SR0 sX SR1 sX SRA sX SRX sX STORE sX, (sY) (STORE sX, sY) STORE sX, ss SUB sX, kk SUB sX, sY SUBCY sX, kk (SUBC) SUBCY sX, sY (SUBC) TEST sX, kk

Shift register sX left, zero fill Shift register sX left, one fill Shift register sX left through all bits, including CARRY Shift register sX left. Bit sX[0] is unaffected. Shift register sX right, zero fill Shift register sX right, one fill Shift register sX right through all bits, including CARRY Arithmetic shift register sX right. Sign extend sX. Bit sX[7] Is unaffected. Write register sX to scratchpad RAM location pointed to by register sY Write register sX to scratchpad RAM location ss Subtract literal kk from register sX Subtract register sY from register sX Subtract literal kk from register sX with CARRY (borrow) Subtract register sY from register sX with CARRY (borrow) Test bits in register sX against literal kk. Update CARRY and ZERO flags. Registers are unaffected. Test bits in register sX against register sX. Update CARRY and ZERO flags. Registers are unaffected. Bitwise XOR register sX with literal kk Bitwise XOR register sX with register sY

sX {sX[6:0],0} CARRY sX[7] sX {sX[6:0],1} CARRY sX[7] sX {sX[6:0],CARRY} CARRY sX[7] sX {sX[6:0],sX[0]} CARRY sX[7] sX {0,sX[7:1]} CARRY sX[0] sX {1,sX[7:1]} CARRY sX[0] sX{CARRY,sX[7:1]} CARRY sX[0] sX {sX[7],sX[7:1]} CARRY sX[0] RAM[(sY)] sX RAM[ss] sX sX sX kk sX sX sY sX sX kk -CARRY sX sX sY -CARRY

? 0 ? ? ? 0 ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?

If (sX AND kk) = 0, ZERO 1 CARRY odd parity of (sX AND kk) If (sX AND sY) = 0, ZERO 1 CARRY odd parity of (sX AND kk) sX sX XOR kk sX sX XOR sY

TEST sX, sY

XOR sX, kk XOR sX, sY

? ?

0 0

Procesamiento de Datos
Todas las instrucciones de procesamiento de datos operan en cualquiera de los 16 registros de propsito general. Slo las instrucciones de procesamiento de datos modifican el CERO o CARRY banderas segn corresponda a la instruccin. Las instrucciones de procesamiento de datos se componen de los siguientes tipos: Instrucciones de Lgica Instrucciones aritmticas Pruebe y compare las instrucciones Desplazamiento y rotacin

Complementar/Invertir Registros
El micro controlador PicoBlaze no tiene una instruccin especfica para invertir los bits individuales en el registro sX. Sin embargo, el XOR sX, instruccin FF realiza la operacin equivalente.
Complement:

; XOR sX, FF invierte todos los bits en el registro sX, parecido al complemento LOAD s 0 , A A ; load register s0 = 10101010 XOR s 0 , F F ; invert contents s0 = 01010101

Invertir o Activar Bit


El micro controlador PicoBlaze no tiene una instruccin especfica para invertir o alternar un bit individual o bits dentro de un registro especfico. Sin embargo, la instruccin XOR realiza la operacin equivalente. XORing registro sX con un invierte mscara de bits o alterna bits especficos. Un '1 'en la mscara de bits invierte o cambia el bit correspondiente al registro sX. Un '0 'en la mscara de bits deja el bit correspondiente sin cambios.
toggle_bit:

; XOR sX, <bit_mask> XOR s 0 , 0 1 ; a l t e r n a r el bit menos significativo en el registro sX

Borrar Registro
El micro controlador PicoBlaze no tiene una instruccin especfica para borrar un registro especfico. Sin embargo, el XOR sX, instruccin sX realiza la operacin equivalente. XORing registro sX con ella misma borra registro sX y establece el indicador ZERO.
XOR sX, SX; limpia registro sX, pone ZERO en la bandera

Set Bit
El micro controlador PicoBlaze no tiene una instruccin especfica para establecer un bit individual o bits dentro de un registro especfico. Sin embargo, la instruccin OR realiza la operacin equivalente.
set_bit:

; OR sX, <bit_mask> OR s 0 , 0 1 ; poner bit 0 en el registro s0

Clear Bit
El micro controlador PicoBlaze no tiene una instruccin especfica para borrar un bit individual o bits dentro de un registro especfico. Sin embargo, la instruccin AND realiza la operacin equivalente.
clear_bit:

; AND sX, <bit_mask> AND s 0 , F E ; limpiar bit 0 del registro s0

Interrupciones
El procesador PicoBlaze proporciona una nica seal de entrada de interrupcin. Si la aplicacin requiere mltiples seales de interrupcin, se combinan las seales usando la lgica FPGA simples para formar una seal de entrada de alarma individual. Despus del reinicio, la entrada de interrupcin est desactivada y debe ser activada a travs de la instruccin de habilitacin de interrupcin. Para deshabilitar las interrupciones en cualquier punto del programa, basta con emitir una instruccin DISABLE INTERRUPT.

Una vez activada, la seal de entrada de interrupcin se debe aplicar por lo menos dos ciclos de reloj para garantizar que se reconoce, lo que genera un evento de alarma. Una interrupcin activa hace que el procesador PicoBlaze ejecute inmediatamente el 3FF LLAMADA a instruccin inmediatamente despus de completar la instruccin que se est ejecutando actualmente. La llamada a la Instruccin 3FF es una llamada a la subrutina a la ltima posicin de la memoria del programa. La instruccin en la ltima ubicacin define cmo el cdigo de la aplicacin debe manejar la interrupcin. Tpicamente, la instruccin en el lugar 3FF es una posicin de salto a una rutina de servicio de interrupcin (ISR). El comando especial returni asegura que el final de una rutina de servicio de interrupcin restaura el estado de los indicadores y controles al permitir que las futuras interrupciones. Cuando el returni ejecuta la instruccin, los valores de PC guardados en la pila CALL / RETURN se vuelve a cargar automticamente al registro PC. Del mismo modo, las banderas cero y entregamos no han restaurado el flujo del programa vuelve a la instruccin que sigue a la instruccin donde se realiz la interrupcin. La entrada de interrupcin no es reconocido hasta que el

La entrada de interrupcin no es reconocida hasta que la Bandera INTERRUPT_ENABLE se establece.

En las funciones de tiempo-crticos o reas en que la previsibilidad absoluta es necesario, deshabilite temporalmente el Interrumpir. Vuelva a activar la alarma de entrada cuando la funcin de tiempo crtico es completa. Siempre regresa de una sub-rutina llame al RETURN. La entrada de deshabilitado. interrupcin es automticamente

Use la instruccin RETURNI para regresar de una interrupcin.

El vector de interrupcin es siempre situado en la ubicacin ms significativa de la memoria, donde todos los bits de direccin son queridos. Salta a la interrupcin de la rutina de servicio.

1.-De forma predeterminada, la entrada de interrupcin est desactivada. La instruccin de habilitacin de interrupcin debe ejecutar antes de que se reconoce la interrupcin. 2.-En este ejemplo, las interrupciones estn habilitadas y el micro controlador se est ejecutando la entrada S1, 01 instrucciones. Simultneamente a la ejecucin de esta instruccin, la interrupcin llega a la entrada de interrupcin. El micro controlador no acta en la interrupcin hasta que se termina de ejecutar la entrada S1 de 01 instrucciones. 3.- El micro controlador reconoce la interrupcin y sustituir a la ADD s0, s1 instruccin. El PC actual, que apunta a la instruccin ADD s0 s1, se empuja en el CALL / pila RETURN. Del mismo modo, se conservan las banderas CERO y seguir. Por otra parte, la bandera INTERRUPT_ENABLE se borra desactivando cualquier otra interrumpe. Por ltimo, el PC se carga con todas las (3FF) y la PicoBlaze micro controlador realiza una llamada de rutina de servicio de interrupcin a la ltima posicin en el tienda de instrucciones. Si utiliza una RAM bloque 1Kx18 para el almacn de la instruccin, el ltimo lugar se 3FF. Si el uso del almacenamiento de instruccin ms pequeo, entonces el vector de interrupcin se encuentra todava en la ltima ubicacin de instrucciones. El micro controlador tambin afirma la Salida INTERRUPT_ACK, lo que indica que se est reconociendo la interrupcin.

4.- El vector de interrupcin siempre se encuentra en la ltima ubicacin en el almacn de instrucciones. En este ejemplo, el programa salta a la rutina de servicio de interrupcin (ISR) a travs del SALTO isr instruccin. 5.- Cuando se haya completado, salga de la rutina de servicio de interrupcin (ISR) con el returni especial instruccin. No utilice la instruccin RETURN, que se utiliza con normalidad subrutina llamada. Los returni Habilitar todos los retornos de la rutina y de servicio de interrupcin para volver a habilitar la entrada de interrupcin, que se desactiva automticamente cuando se reconoci la interrupcin. Usando returni DISABLE Tambin regresa a la interrupcin rutina de servicio, pero deja la entrada de interrupcin deshabilitado. 6.- La instruccin returni restaura las banderas CERO y seguir conservados guardan durante el paso (3). Del mismo modo, la instruccin returni aparece la parte superior de la LLAMADA / RETORNO pila en el PC, lo que hace que el micro controlador reanude la ejecucin del programa de instruccin que se adelant por la interrupcin, ADD s0, s1 en este ejemplo.

También podría gustarte