Está en la página 1de 44

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 1

Universidad Tecnolgica Nacional Facultad Regional Baha Blanca


Departamento de Ing. Electrnica

Tcnicas Digitales III.


Ao 2009.

Aspectos fundamentales de la Arquitectura del ADSP-TS201 TigerSHARC

ALUMNO:
Galasso Christian L. christian_galasso81@yahoo.com.ar

Resumen: En el presente informe se realiza un anlisis de caractersticas particulares del procesador TigerSHARC, y de algunas que difieren de la arquitectura SHARC tpica, y que le hacen tener ventajas sobre la misma, adems de presentarse ejemplos de cdigo para la implementacin de dichas caractersticas.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 2

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 3

ndice de contenido
1.Breve descripcin del DSP tigerSHARC........................................5 1.1.Arquitectura del procesador.............................................5 1.2.Caractersticas especiales del TigerSHARC...............................7 2.Arquitectura superescalar Vs VLIW...........................................8 2.1.Introduccin a las arquitecturas de procesadores........................8 2.2.Arquitectura Superescalar...............................................9 2.3.Arquitectura VLIW (Superescalar esttica)..............................10 2.4.Planificacin en una mquina Superescalar vs. una VLIW.................10 2.5.Diferencias y semejanzas...............................................11 3.Caractersticas que hacen del TigerSHARC un DSP ortogonal..................12 3.1.Instrucciones Ortogonales..............................................12 3.2.Registros ortogonales..................................................12 4.Unidad lgica orientada a las comunicaciones (CLU).........................13 4.1.Descripcin de la CLU..................................................13 4.2.Operaciones de la CLU..................................................14 4.2.1.Funcin TMAX (Trellis Maximum).....................................14 4.2.2.Funciones de celosa (Trellis Function)............................15 4.2.3.Funciones de dispersin (Despread Function)........................16 5.Registros de los bloques de clculo........................................18 6.Unidad aritmtico-lgica orientada a enteros (IALU)........................21 6.1.Descripcin de la IALU.................................................21 6.2.Direccionamiento directo e indirecto...................................22 6.3.Acceso a memoria Normal, Broadcast y Fusionado........................23 6.4.Buffer de alineacin de datos(DAB).....................................24 6.5.Direccionamiento de buffer circular....................................25 6.6.Direccionamiento Bit Reverse...........................................26 6.7.Direccionamiento en las operaciones SISD y SIMD........................28 7.Secuenciador de programa...................................................29 7.1.Introduccin al secuenciador de programa...............................29 7.2.Pipeline...............................................................30 7.2.1.Introduccin al pipeline...........................................30 7.2.2.Operacin del pipeline de instrucciones............................31 7.2.3.Efectos sobre el pipeline de las dependencias y los recursos.......32 7.3.Cach de instrucciones y buffer de destino de saltos(BTB)..............32 7.3.1.Introduccin al BTB y comparacin con la cach del SHARC...........32 7.3.2.Como se ahorra ciclos con el BTB?.................................33 7.3.3.Cuando es conveniente el uso del BTB?.............................34 7.3.4.Sobre colocar ms de un salto en una palabra cudruple.............34 7.4.Buffer de alineacin de instrucciones(IAB).............................35 7.5.Variaciones en el flujo de programa....................................36 7.6.Interrupciones.........................................................38 8.Soporte para sistemas operativos...........................................43 8.1.Cambio de contexto.....................................................43 8.2.Anidamiento de llamadas e interrupciones...............................43 8.3.Direccionamiento relativo..............................................43 9.Bibliografa y Agradecimientos.............................................44 9.1.Bibliografa...........................................................44 9Agradecimientos...........................................................44

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 4

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 5

1.Breve descripcin del DSP tigerSHARC


El TigerSHARC es un procesador de alta performance optimizado para tareas de procesamiento de gran seal y para la infraestructura de las comunicaciones. Provee capacidades de procesamiento de seales digitales, a travs de una arquitectura superescalar esttica (vase seccin 2.3), optimizada para aplicaciones de DSP de alta demanda de recursos, del tipo multiprocesador; la misma le permite ejecutar de 1 a 4 instrucciones por ciclo de reloj; pudiendo ejecutar 24 operaciones de punto fijo (16 bits) o 6 operaciones de punto flotante. Combina una memoria amplia con 2 bloques de clculo. Puede trabajar en modo SIMD (single instruction multiple data) lo cul le otorga una performance de 4,8 billones de 40-bits MACS o 1,2 billn de 80-bits MACS por segundo. Cuatro canales independientes de 128 bits de ancho c/u, conectados a los 6 bancos de memoria de 4Mbit c/u; ms la palabra cudruple de instruccin y las I/O proveen en conjunto una velocidad de transferencia de datos interna de 33,6 Gbytes/seg. Soporta transferencias DMA de baja intrusin entre memoria interna, externa, perifricos mapeados en memoria, puertos de enlace (link), procesadores anfitriones (interfase con el usuario o procesadores centrales) y otros DSPs (arquitecturas de varios procesadores). Facilita la programacin por medio de un conjunto de instrucciones DSP extremadamente flexible y amigable con los lenguajes de alto nivel. NOTA: Como las hojas de datos (datasheet) y el manual de referencia de Hardware ( Hardware reference) se encuentran al alcance del pblico, se har solo una muy breve descripcin del TigerSHARC y sus componentes principales para luego adentrarse en sus caractersticas particulares.

1.1.Arquitectura del procesador


El diagrama en bloques se presenta dividido en dos partes, la primera llamada ncleo del procesador, que es el lugar donde se lleva a cavo la ejecucin de las instrucciones:

Figura 1-1: Ncleo del procesador.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 6

La segunda llamada perifricos del procesador, que es la parte donde almacenamos los datos y tomamos o enviamos datos desde el exterior al DSP o desde el DSP al exterior:

Figura 1-2: Diagrama de perifricos del procesador.

Como se puede observar en las figuras 1-1 y 1-2 la arquitectura posee los siguientes componentes:

2 Bloques de clculo: X e Y, cada uno constituido por un multiplicador, ALU, CLU, unidad de
desplazamiento de bits (de ahora en adelante: Shifter), y 32 registros de 32-bits (tamao palabra) cada uno.

Secuenciador de programa Controla el flujo de la ejecucin y contiene el buffer de alineacin de instrucciones IAB (Instruction Alignment Buffer) y el buffer de destino de salto BTB (Branch Target Buffer). 3 canales (buses) de 128-bits que proveen una conectividad de gran ancho de banda entre la memoria interna y el resto de los elementos del procesador (bloques de clculo, IALUs, secuenciador de programa, y la interfase SOC). 1 Canal de 128-bits que provee una conectividad de gran ancho de banda entre la memoria interna y los perifricos de I/O (DMA, puertos externos y puertos de linkeo). Interfase con los puertos externos, incluyendo, interfase maestra, controlador de SDRAM, interfase con el pipeline esttico, 14 canales DMA, 4 puertos link LVDS (uno cada dos canales DMA), y soporte para multiprocesamiento. 24 Mbits de memoria interna dividida en 6 bloques de 4 Mbits, cada uno de los cules contiene 128 K-palabras de 32-bits; cada bloque se interconecta a travs de su propio buffer y de una memoria cach asociativa de 128 K-bits. Caractersticas de depuracin (Debug features). Puerto de testeo y emulacin JTAG.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 7

1.2.Caractersticas especiales del TigerSHARC


Caractersticas especiales para simplificar el desarrollo de sistemas. Las mismas las podemos dividir en tres reas:

Soporta los formatos punto fijo y flotante IEEE. Cumple con el estndar 1149.1 del IEEE. JTAG. La arquitectura soporta lenguaje de alto nivel y sistemas operativos.

Las caractersticas que hacen posible utilizar en el mismo lenguaje de alto nivel y sistemas operativos son:

Set de instrucciones ortogonales (vase seccin 3) que permite al compilador el uso eficiente de los slots multi-instrucciones. Registros de datos de propsito general y de IALU. Soporte para datos de 32-bits (IEEE estndar 754/854) y 40-bits en punto flotante y 8-, 16-, 32-, y 64-bit en punto fijo. Gran espacio de direcciones. Modificacin de campos de direcciones inmediato. Fcil reubicacin de cdigo y datos. Est optimizado para guardar y/o recuperar rpidamente, los registros del procesador, dentro de la pila de la memoria interna (o sea que, est optimizado para realizar los cambios de contexto tpicos de los sistemas operativos multitarea).

Nota: Que soporte lenguajes de alto nivel no implica que sea eficiente usarlos para programar el TigerSHARC, ya que por ser superescalar esttico, aparece un problema de dependencias entre instrucciones, y conflictos de recursos; el compilador hace su mejor esfuerzo por acomodar las instrucciones paralelizables pero la experiencia dice que el resultado del compilador deja mucho que desear, a tal punto que lo ms conveniente en la mayora de los casos, es que el mismo programador escriba el cdigo en lenguaje ensamblador haciendo uso de las tablas de dependencias provistas en la programing reference, pudiendo as obtener resultados mucho ms satisfactorios que el compilador y por ende algoritmos que se ejecutarn en un nmero menor de ciclos, que sern mucho mas rpidos y eficientes.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 8

2.Arquitectura superescalar Vs VLIW


2.1.Introduccin a las arquitecturas de procesadores
Una de las primeras arquitecturas fue la Von Neumann que utiliza una unidad de procesamiento, una memoria, un bus de datos e instrucciones (compartido) y otro de direcciones y requiere un determinado nmero de ciclos de mquina para ejecutar una instruccin completa. Esto implica que para traer una instruccin se tengan uno o varios accesos a memoria y si esta instruccin maneja datos de memoria, se debe realizar otro(s) acceso(s) para traer, operar y volver a almacenar los datos. Con lo cual el bus se congestiona con tanto acceso.

Figura 2-1: Arquitectura Von Neumann.

Luego apareci la arquitectura HARVARD la cul tiene memoria de programa y memoria de datos separadas y se accede a ellas a travs de buses separados. La instruccin se trae a la CPU en un solo acceso a la memoria de programa . Mientras tanto el bus de datos est libre y puede accederse a travs de l a los datos que se necesitan para ejecutar la instruccin de programa anterior a la que se esta trayendo de memoria de programa en ese momento.

Figura 2-2: Arquitectura Harvard.

Ventaja:

El tiempo de acceso se mejora respecto a la arquitectura von Neumann donde programa y datos se traen a la CPU usando el mismo bus.

Ahora bien, nos falta definir otra caracterstica de la arquitectura, si es escalar o vectorial. Los procesadores escalares son el tipo ms sencillo de procesadores. Cada instruccin de un procesador escalar opera sobre un dato cada vez. En contraposicin, en un procesador vectorial una sola instruccin opera simultneamente sobre un conjunto ms o menos grande de datos. La diferencia entre ambos es la misma que entre la aritmtica escalar y vectorial[3].

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 9

2.2.Arquitectura Superescalar
Superescalar (tambin conocida como vectorial) es el trmino utilizado para designar un tipo de microarquitectura de procesador capaz de ejecutar ms de una instruccin por ciclo de reloj. El trmino se emplea por oposicin a la microarquitectura escalar que slo es capaz de ejecutar una instruccin por ciclo de reloj. La microarquitectura superescalar utiliza el paralelismo de instrucciones adems del paralelismo de flujo, ste ltimo gracias a la estructura en pipeline. La estructura tpica de un procesador superescalar consta de un pipeline con las siguientes etapas:

lectura (fetch). decodificacin (decode). lanzamiento (dispatch). ejecucin (execute). escritura (writeback). finalizacin (retirement).

En un procesador superescalar, el procesador maneja ms de una instruccin en cada etapa. El nmero mximo de instrucciones en una etapa concreta del pipeline se denomina grado, as un procesador superescalar de grado 4 en lectura (fetch) es capaz de leer como mximo cuatro instrucciones por ciclo. El grado de la etapa de ejecucin depende del nmero y del tipo de las unidades funcionales. Un procesador superescalar suele tener unidades funcionales independientes de los tipos siguientes:

unidad unidad unidad unidad

aritmtico lgica (ALU) de lectura / escritura en memoria (Load/Store Unit) de coma flotante (Floating Point Unit) de salto (Branch unit)

Un procesador superescalar es capaz de ejecutar ms de una instruccin simultneamente nicamente si las instrucciones no presentan algn tipo de dependencia (hazard). Los tipos de dependencia entre instrucciones son:
dependencia estructural, esta ocurre cuando dos instrucciones requieren el mismo tipo unidad

funcional y su nmero no es suficiente.

dependencia de datos, esta ocurre cuando una instruccin necesita del resultado de otra

instruccin para ejecutarse, por ejemplo R1<=R2+R3 y R4<=R1+5.

dependencia de escritura o falsa dependencia , esta ocurre cuando dos instrucciones necesitan

escribir en la misma memoria, por ejemplo R1<=R2+R3 y R1<=R1+5.

La deteccin y resolucin de las dependencias entre instrucciones puede ser esttica (durante la compilacin), para el caso de las arquitecturas VLIW (superescalares estticas) , o dinmica, es decir, a medida que se ejecuta un programa, generalmente durante las etapas de codificacin y lanzamiento de las instrucciones. La deteccin y resolucin dinmica de las dependencias entre instrucciones suele realizarse mediante alguna variante del algoritmo de Tomasulo que permite la ejecucin de instrucciones en un orden distinto al del programa tambin llamada ejecucin en desorden . La eficacia de un procesador superescalar viene limitada por un lado por la dificultad en suministrar al procesador suficientes instrucciones que puedan ser ejecutadas en paralelo y por otro lado por las prestaciones de la jerarqua de memorias. Si las instrucciones de salto son un problema para los procesadores con pipeline en general, en el caso de los procesadores superescalares, el problema se multiplica ya que un parn en el pipeline tiene consecuencias en un nmero mayor de instrucciones. Por esta razn, los fabricantes de procesadores recurren a tcnicas de ejecucin especulativa y disean algoritmos de prediccin de saltos cada vez ms sofisticados as como sistemas de almacenamiento de instrucciones por trazas (trace caches). Ventajas:

Aumento de la velocidad de procesamiento al poder ejecutar ms de una sola instruccin por ciclo de reloj.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 10

Inconvenientes:

Las arquitecturas superescalares adolecen de una estructura compleja y de un mal aprovechamiento de sus recursos debido en parte a la dificultad en encontrar suficientes instrucciones paralelizables. Una forma de obtener un mayor nmero de instrucciones paralelizables es aumentar la ventana de instrucciones, es decir el conjunto de instrucciones que la unidad de lanzamiento considera como candidatas a ser lanzadas en un momento dado. Desafortunadamente la complejidad del procesador superescalar aumenta desproporcionadamente con respecto al tamao de dicha ventana lo que se traduce por un ralentizamiento general del circuito. Otra forma de obtener ms instrucciones paralelizables es manipulando instrucciones de ms de un programa a la vez, lo que se conoce bajo el nombre de multitarea simultnea o multithreading simultneo.

2.3.Arquitectura VLIW (Superescalar esttica)


Esta arquitectura de CPU implementa una forma de paralelismo a nivel de instruccin. Es similar a las arquitecturas superescalares, ambas usan varias unidades funcionales (por ejemplo varias ALUs, varios multiplicadores, etc.) para lograr ese paralelismo. Los procesadores con arquitecturas VLIW se caracterizan, como su nombre indica, por tener juegos de instrucciones muy simples en cuanto a nmero de instrucciones diferentes, pero muy grandes en cuanto al tamao de cada instruccin. Esto es as porque en cada instruccin se especifica el estado de todas y cada una de las unidades funcionales del sistema, con el objetivo de simplificar el diseo del hardware al dejar todo el trabajo de planificar el cdigo en manos del programador/compilador, en oposicin a un procesador superescalar, en el que es el hardware en tiempo de ejecucin el que planifica las instrucciones. Ventajas:

Simplificacin de la arquitectura hardware al no tener que planificar el cdigo Reduccin del nmero de instrucciones de los programas

Inconvenientes:

Requiere compiladores mucho ms complejos Cualquier mejora en la arquitectura hardware implica un cambio en el juego de instrucciones (compatibilidad hacia atrs nula) A da de hoy, las mquinas VLIW prcticamente han desaparecido, ya que los inconvenientes pesan bastante ms que las ventajas. La imposibilidad de tener compatibilidad hacia atrs, los excesivos cambios requeridos en los compiladores, y el hecho de que la simplificacin del hardware respecto a las mquinas superescalares convencionales no sea tampoco excesiva han hecho que se abandonen este tipo de diseos. Aunque existen conversores de cdigo binario, que traducen los programas compilados para un procesador al lenguaje binario de los modelos posteriores, sin necesidad de reescritura o recompilado mediante el nuevo compilador.

2.4.Planificacin en una mquina Superescalar vs. una VLIW


Por ejemplo, supongamos el siguiente programa para una mquina superescalar "normal": 1 Multiplicar R1 por R2 y guardarlo en R3 2 Sumar R3 con R4 y guardarlo en R5 3 Restar R1 de R4 y guardarlo en R6 En este programa, el planificador de cdigo vera que la segunda instruccin depende de la primera (hasta que no est calculado R3 no se puede ejecutar la suma), y que en cambio la tercera instruccin es independiente de las otras dos. Por tanto, probablemente iniciara simultneamente la multiplicacin y la resta en unidades diferentes y, una vez acabada la multiplicacin, ejecutara la suma. Todo este trabajo de planificacin lo llevara a cabo la circuitera interna del microprocesador.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 11

En una mquina VLIW, toda la planificacin anterior la hara el compilador (o el propio programador si programa en ensamblador), y el cdigo resultante sera algo as: 1 MULT(R1,R2,R3) 2 REST(R1,R4,R6) SUM(R3,R4,R5)

Se puede ver como en cada instruccin se especifica el estado de cada unidad funcional, de modo que en la primera instruccin se activan el multiplicador y el restador, dejando el sumador ocioso al no poder calcular an la suma, y en la siguiente instruccin se hace la suma que faltaba.

2.5.Diferencias y semejanzas
Diferencias:

El momento en el cul se hace el chequeo de las dependencias entre las instrucciones. El tipo de instrucciones.

Semejanzas:

Misma estructura bsica compuesta por mltiples unidades de procesamiento, operando en paralelo, y un nico banco de registros compartido, o uno por cada unidad de procesamiento.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 12

3.Caractersticas que hacen del TigerSHARC un DSP ortogonal


3.1.Instrucciones Ortogonales
La ortogonalidad es una propiedad de las CPU. Se dice que un conjunto de instrucciones es ortogonal cuando se puede utilizar cualquier modo de direccionamiento en cualquier instruccin. Dicho en otras palabras, deben poder combinarse, en le medida de lo posible, todas las operaciones con todos los tipos de datos y modos de direccionamiento. La bsqueda de la ortogonalidad hace que el diseo de la CPU sea ms complejo pero aporta una mayor facilidad de programacin. Cuando el juego de instrucciones est bien diseado y tiene caractersticas de ortogonalidad, el conjunto de instrucciones requerido para realizar todas las tareas es reducido y se aprende rpidamente.

3.2.Registros ortogonales
Cada uno de los bloque de procesamiento posee un registro ortogonal multipuerto de 32 palabras de 32-bits, el cul se puede utilizar para transferencias de datos entre los bloques y los canales de datos y para almacenar resultados intermedios. Todos estos registros pueden ser accedidos de 3 formas distintas:

Individualmente (word-aligned). En sets de 2 ( dual-aligned). En sets de 4 (quad-aligned).

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 13

4.Unidad lgica orientada a las comunicaciones (CLU)


4.1.Descripcin de la CLU
El ncleo del procesador TigerSHARC contiene dos unidades de clculo conocidas como unidades lgicas orientadas a las comunicaciones ( CLU del ingls: Communications Logic Unit ). Las CLUs pueden ya sea tomar sus datos de entrada como almacenar sus resultados en los registros internos de los bloques o en los registros TR/THR (registros especficos de las CLUs, no-mapeados en memoria; ver seccin 5). La mayora de las instrucciones de las CLUs operan sobre los registros Trellis Registers (TR) y Trellis History Registers (THR). Si bien estas unidades soportan mltiples usos, fueron diseadas para realizan funciones especficas de los siguientes algoritmos de comunicacin:

Decodificacin Viterbi[5]. Decodificacin de Turbo cdigos[4]. Dispersin para sistemas de Acceso mltiple por divisin de cdigo (CDMA)[3]. Correlaciones cruzadas usadas para bsqueda de camino (CDMA)[3].

El hecho de incluir las instrucciones especficas de las CLUs simplifica la programacin de dichos algoritmos, manteniendo la flexibilidad de un enfoque de software. De sta manera, es sencillo ajustar el algoritmo a los requisitos especficos del usuario. Adems, las instrucciones se pueden utilizar para una variedad de propsitos, por ejemplo la instruccin TMAX, incluida para soportar la decodificacin de turbo-cdigos, es tambin muy utilizada en la decodificacin de cdigos de paridad de baja densidad.

Figura 4-1: bloques de clculo donde se distinguen las CLUs.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 14

4.2.Operaciones de la CLU
Las instrucciones de la CLU se aplican a datos de punto fijo los cuales pueden ser reales o complejos. Las mismas estn orientadas a los siguientes usos:

Logaritmo Jacobiano para turbo cdigos (TMAX). Dispersin para CDMA (DESPREAD). Correlaciones cruzadas para CDMA (XCORRS). Reordenamiento polinomial (PERMUTE). Suma/comparacin/seleccin de celosas (Trellis).

Las instrucciones de la CLU estn referidas a tres tipos de registros:


Rm,n,s 32 (Datos) Registros de los bloque de procesamiento. TRm,n,s 32 (Trellis) Registros dedicados a las instrucciones de la CLU. THR 4 (Trellis History) Registros usados por las instrucciones ACS, DESPREAD, y XCORRS por datos desplazados. CMCTL Registros de control de comunicaciones usados por la instruccin XCORRS los cuales son una entrada opcional para el valor CUT.

Nota: Aunque se ven cuatro puntos pero los tipos de registro son 3: Datos, Trellis (celosa), Trellis History(histrico de la celosa). Las funciones de la CLU podemos clasificarlas en:

Funcin TMAX. Funcin de celosa (Trellis Function). Funciones de dispersin (Despread Function). Funciones de correlaciones cruzadas.

4.2.1.Funcin TMAX (Trellis Maximum)


Un nico cdigo de proteccin de errores no siempre proporciona la proteccin necesaria con una complejidad aceptable, la solucin es concatenar dos (o ms) cdigos, con lo que obtenemos un cdigo mucho ms potente que los tradicionales, tambin conocido como turbocdigo[4]. La concatenacin se puede hacer en serie o en paralelo. Uno de los algoritmos utilizados es el log-MAP, cuyo diagrama se puede ver en la Figura 4-2:

Figura 4-2: Algoritmo de Turbo codificacin, log-MAP.

Trabaja con aritmtica en el dominio logartmico; con lo que los productos se transforman en sumas, las sumas se pueden calcular mediante el Logaritmo Jacobiano:

ln e e = max x , y ln 1 e

y x

Dicho logaritmo se encuentra implementado como una instruccin de la CLU en el TigerSHARC:

TMAX a , b = max a , b ln 1 eba

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 15

El segundo trmino se calcula por tabla:

ln 1 eba
Ejemplos de uso la funcin TMAX (celosa mxima): Sintaxis: {X|Y|XY}{S}TRsd = TMAX(TRmd + Rmq_h, TRnd + Rmq_l) {(NF)} ; {X|Y|XY}{S}TRsd = TMAX(TRmd - Rmq_h, TRnd - Rmq_l) {(NF)} ; {X|Y|XY}{S}Rs = TMAX(TRm, TRn) {(NF)} ; Cdigo: XYTR1:0 = TMAX(TR3:2 + R3:2, TR5:4 + R1:0) ; XYTR1:0 = TMAX(TR3:2 - R7:6, TR5:4 - R5:4) ; XYR8 = TMAX(TR4, TR0) ; En la figura 4-3, podemos ver el diagrama de flujo del primer ejemplo:

Figura 4-3: STRsd = TMAX(TRmd + Rmq_h, TRnd + Rmq_l)

4.2.2.Funciones de celosa (Trellis Function)


Las funciones celosa son utilizadas en los turbocodigos[4] y en los cdigos Viterbi[5]. Una forma de la funcin celosa puede ser: STRsd = MAX(TRmd + Rmq_h, TRnd + Rmq_l); . La parte alta de Rmq se suma a TRmd, la parte baja se suma a TRnd, y la funcin MAX, elige el valor mximo entre los dos resultados. Todo este proceso se ilustra en las figuras 4-5 y 4-6, la sintaxis y el cdigo fuente se ve a continuacin. Sintaxis: {X|Y|XY}{S}TRsd = MAX(TRmd + Rmq_h, TRnd + Rmq_l) {(NF)} ; {X|Y|XY}{S}TRsd = MAX(TRmd - Rmq_h, TRnd - Rmq_l) {(NF)} ; Cdigo: XYTR1:0 = MAX(TR3:2 + R3:2, TR5:4 + R1:0) ;; XYTR1:0 = MAX(TR3:2 - R7:6, TR5:4 - R5:4) ;;

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 16

Figura 4-4: STRsd = MAX(TRmd + Rmq_h, TRnd + Rmq_l).

4.2.3.Funciones de dispersin (Despread Function)


Las funciones de dispersin se aplican al acceso mltiple por divisin de cdigo[3] o CDMA (del ingls Code Division Multiple Access) es un trmino genrico para varios mtodos de multiplexacin o control de acceso al medio basados en la tecnologa de espectro expandido. Una forma de la funcin dispersin puede ser: TRs += DESPREAD (Rmq, THRd);. El diagrama de flujo de la misma se puede apreciar en la figura 4-5:

Figura 4-5: TRs += DESPREAD (Rmq, THRd)

Sintaxis: {X|Y|XY}TRs += DESPREAD (Rmq, THRd) ; {X|Y|XY}Rs = TRs, TRs = DESPREAD (Rmq, THRd) {(NF)} ; (dual op.) {X|Y|XY}Rsd = TRsd, TRsd = DESPREAD (Rmq, THRd) {(NF)} ; (dual op.)

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 17

Cdigo: XYTR8 += DESPREAD (R7:4, THR1:0) ;; XYR8 = TR8, TR8 = DESPREAD (R7:4, THR1:0) ;; XYR1:0 = TR1:0, TR1:0 = DESPREAD (R7:4, THR1:0) ;; Estas son solo algunas de las instrucciones que sta particular unidad puede ejecutar; para un anlisis ms detallado de la misma se recomienda dirigirse al ADSP-TS201 TigerSHARC Processor Programming Reference. Es importante mencionar que no todos lo procesadores TigerSHARC poseen sta unidad dentro de sus bloques de clculo.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 18

5.Registros de los bloques de clculo


Debido a que la ejecucin de todas las instrucciones de clculo del TigerSHARC depende de los formatos de los datos de entrada y salida, y dependen de si la instruccin se ejecuta en un bloque de procesamiento en ambos, es importante entender como utilizar los registros internos de los bloques. El TigerSHARC posee en cada uno de sus bloques de clculo un conjunto de 32 registros de 32-bits (tamao palabra) de propsito general para realizar transferencias de datos entre: bloques de clculo, canales de datos y almacenamiento inmediato de los resultados. La figura 5-1 muestra la comunicacin de datos entre unidades que proveen los registros.

Figura 5-1: conjuntos de registros de los bloques de clculo X e Y.

Nota: En la figura 5-1, H se refiere a los 64-bits ms significativos (127-64) y L a los 64-bits menos significativos (63-0). En la figura 5-1 se muestra que los datos entrantes al conjunto de registros puede o no pasar por el buffer de alineacin de datos (DAB). El DAB es una FIFO formada por 2 registros de palabra cudruple (128-bits), el cul alinea los datos que se reciben en forma desordenada desde la memoria. En los bloques de clculo existen 2 tipos de registros:

Registros mapeados en memoria, XR31-0 y YR31-0. Registros No-mapeados en memoria.

Los primeros pueden ser accedidos por los dispositivos externos a travs de los canales de datos por lo que son denominados: registros universales (Ureg). Los segundos son internos del bloque y no accesibles desde el exterior del bloque al que pertenecen; nos referiremos a ellos como registros de datos (Dreg). En sistemas de multiprocesamientos es particularmente beneficioso tener los registros internos mapeados en un lugar definido de memoria y accesibles a travs del canal de datos. Para poder desarrollar ejemplos fue necesario plantear un esquema de mapeo de registros comparativo entre un DSP SHARC y un procesador TigerSHARC, el cul se presenta en la tabla 5-1, el mismo no es fijo, es solo un ejemplo de como podra hacerse:

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 19

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 20

Tabla 5-1: Esquema de mapeo de registros del DSP SHARC y procesador TigerSHARC.

Aclaracin de la tabla: 5-1: P/R: Primary Registers, S/R: Secondary Registers, N/A: Not Applicable. La comilla simple () es utilizada para denotar el set de registros secundarios o alternativos[10]. El cdigo escrito a continuacin muestra como el DSP SHARC y el procesador TigerSHARC utilizan los registros primarios y secundarios, basados en el mapeo previamente visto: // SHARC (ADSP-21xxx) //PEx (Primary Regs.) r0 = 0x1234; r1 = 0x5678; //PEx (Secondary Regs.) Bit set MODE1 SRRFL; nop; r0 = 0x1234; r1 = 0x5678; // TigerSHARC (ADSP-TSxxx) // CBx xr0 = 0x1234;; xr1 = 0x5678;; // No secondary registers // xr31-16 are used instead // No need to enable mode xr16 = 0x1234;; xr17 = 0x5678;;

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 21

6.Unidad aritmtico-lgica orientada a enteros (IALU)


6.1.Descripcin de la IALU
El TigerSHARC posee 2 unidades aritmtico-lgica que trabajan nicamente con datos enteros, estas unidades reciben el nombre de IALUs. En general las IALUs tienen la misma funcionalidad que los DAGs (Data Addres Generators) en la arquitectura SHARC, pero adems poseen otras funciones extra como operaciones lgico-matemticas (suma, resta, desplazamiento aritmtico y lgico, valor absoluto, valor mnimo o mximo, etc.). Cada IALU posee un juego de registros (32 registro de 32-bits) internos similares a los que tienen los bloques de clculo y registros dedicados a la funcin de direccionamiento de buffers circulares. Las IALUs, poseen adems, el control de los buffers de alineacin de datos (DABs) para operaciones de acceso a memoria no-alineados. Para diferenciarlas nos referiremos de aqu en adelante como J-IALU y K-IALU.

Figura 6-1: IALUs, DABs.

Las operaciones con enteros son:


Suma y resta, con y sin carry/borrow. Desplazamiento aritmtico a la derecha, desplazamiento lgico a la derecha y rotacin. Operaciones lgicas: AND, AND NOT, NOT, OR, and XOR. Funciones: Valor absoluto, mnimo, mximo y comparacin.

Asimismo las IALUs son las encargadas de realizar el direccionamiento de la memoria cuando se realiza alguna transferencia de datos entre la memoria y los registros del procesado. Las mismas trabajando en simultneo direccionan 2 accesos a memoria (escritura/lectura). Las operaciones de carga, almacenado y transferencia de datos incluyen:

Direccionamiento directo e indirecto. Direccionamiento de buffers circulares. Direccionamientos de Bit reverse.

A diferencia de los DAGs, las IALUs estn conectadas a todos los bloques de memoria interna (es decir que no hay limitaciones del tipo DM/PM) lo que les permite direccionar cualquier bloque. Los DAGs de la arquitectura SHARC tienen al igual que los elementos de procesamiento un set de registros secundarios

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 22

(a parte de los registros primarios), no as las IALUs que solo poseen un set de 32 registros de 32-bits (solo los primarios) por unidad (J y K), de los cuales 3 (y no 8 como en el caso de SHARC) cumplen las mismas funciones que los registros secundarios de los DAGs. Esto, sin embargo, no debera influir en la mayora (si no en todas) de las solicitudes, porque no todos los dems registros disponibles(J/K19-12, J/K30-28) se utilizarn al mismo tiempo. A diferencia de los dems registros de las IALUs, J31 y K31 no pueden utilizarse como registros de propsito general. Los DAGs soportan carga y almacenaje de datos usando los canales PM y DM en la misma instruccin (por ejemplo: dm(i0,m0)=r0, f8=pm(i8,m8);). Asimismo las IALUs soportan el uso de ambas en paralelo; sin embargo, debido a que en el esquema de mapeo de registros utilizado en los ejemplos del presente informe hemos dedicando los registros CBx a Pex (CBy a Pey; recordemos que CBx e y son los registros internos de los bloques de clculo), KALU y JALU, no pueden utilizarse en la misma instruccin para almacenar datos en CBx. Esto lo veremos ms claro con un ejemplo: //Parallel LOAD from memory-ALLOWED xr0 = [j4+j12]; xr1 = [k4+=k12];; //Parallel STORE [j4+=j12] = xr2; //Parallel STORE [j4+=j12] = xr2; to memory-NOT ALLOWED [k4+=k12] = xr3;; to memory-ALLOWED [k4+=k12] = yr3;;

La segunda instruccin se traduce como una violacin de recursos, ya que el nmero de puertos de salida requeridos de CBx (2 datos requieren de 2 puertos para salir al mismo tiempo), superan el mximo permitido (el conjunto de registros internos de cada bloque de procesamiento solo tiene 1 puerto de salida). En la tercera lnea de cdigo vemos el uso correcto de JALU y KALU en la misma instruccin. Esto no tiene por que ser siempre as! Nota: Para los DSPs SHARC, las instrucciones paralelas estn separadas por una coma , y el final de una lnea de instruccin se denota por un punto y coma ;. Para los procesadores TigerSHARC, un punto y coma ; separa instrucciones paralelas y un doble punto y coma ;; termina una lnea de instruccin.

6.2.Direccionamiento directo e indirecto


El direccionamiento directo utiliza el ndice en 0 y un valor inmediato para el modificador. La siguiente es una instruccin que carga un valor de la memoria (ubicado en la direccin: 0x00015F00) en el registro YR1 del bloque Y de procesamiento: YR1 = [J31 + 0x00015F00] ;; /* Nota: J31 siempre que se use como uno de los operandos debe contener el valor 0*/ El direccionamiento indirecto utiliza cualquiera de los registros de la IALU como ndice y otro registro o un valor inmediato como modificador. En la figura 6-x podemos apreciar los 2 tipos de direccionamiento indirecto, el pre-modificado y el pos-modificado.

Figura 6-2: Direccionamiento indirecto pre-modificado y pos-modificado.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 23

A modo comparativo se presenta un ejemplo de cdigo de ste direccionamiento en dos tipos de arquitectura de DSP: // SHARC (ADSP-21xxx) //Setting up registers r0 = 0x1234; r1 = 0x5678; i0 = source_buffer1; m0 = 1; i8 = source_buffer2; m8 = 1; // Post-modify DAG1 operation dm(i0, m0)= r0; // Pre-modify DAG2 operation pm(m8, i8)= r1; // Parallel DAG1 & DAG2 LOAD r0=dm(i0, m0), r1=pm(i8, m8); // Parallel DAG1 & DAG2 STORE dm(i0, m0)= r0, pm(i8, m8)= r1; // TigerSHARC (ADSP-TSxxx) // Setting up registers xr0 = 0x1234;; xr1 = 0x5678;; j4 = source_buffer1;; j12 = 1;; k4 = source_buffer2;; k12 = 1;; //Post-modify JALU operation [j4 +=j12]=xr0;; //Pre-modify KALU operation [k4 + k12]=xr1;; // Parallel JALU & KALU LOAD xr0=[j4 +=j12]; xr1=[k4 += k12];; // Parallel JALU & KALU STORE [j4 +=j12]=xr0;; [k4 +=k12]=xr1;;

6.3.Acceso a memoria Normal, Broadcast y Fusionado


La IALU utiliza el direccionamiento directo o indirecto para realizar lecturas y escrituras a memoria o a los registros. Hay 3 tipos de accesos a memoria: lectura/escritura normal, lectura/escritura fusionada y carga por broadcast. Estos 3 tipos de accesos difieren en lo siguiente:

Lectura/escritura Normal, lee o escribe datos en registro universales (Ureg). Este tipo de acceso lee o escribe 1, 2 o 4 palabras de 32-bits necesarios para la lectura/escritura del registro fuente/destino indicado en la instruccin. Dichos accesos se producen solo cuando los tamaos de los registros fuente y destino coinciden. El acceso Broadcast, lee datos de memoria y los carga en los registros de los bloques de clculo. En este modo de acceso se leen datos de 1, 2 o 4 palabras (32-bits) y se cargan en el registro destino de ambos bloques. El acceso Broadcast ocurre cuando el tamao del registro fuente coincide con el tamao del operador de acceso de la IALU y el nombre del registro destino es XY (o ningn prefijo), para indicar ambos bloques de clculo. El acceso Fusin de lectura/escritura, lee o escribe datos en los registros de datos de los bloques de clculo. Las transferencias de datos de ste tipo son de tamao de dobles (64-bits) o cudruples (128-bits) palabras. La transferencia se realiza entre la memoria y los registros de datos de ambos bloques, donde los datos son divididos entre X e Y. Si una palabra larga (64-bits) es leda de la memoria, una palabra (32-bits) es cargada en el bloque X y la otra en el Y. Si una palabra cudruple (128-bits) es leda de la memoria, 2 palabras son cargadas en el bloque X y las otras 2 en el Y. Este acceso puede trabajar en ambas direcciones (lectura o escritura) y el orden entre X e Y se puede cambiar utilizando los prefijos XY o YX. En el caso de XY la parte alta del dato transferido (palabra alta para el caso de palabra larga o las 2 palabras ms significativas para el caso de la palabra cudruple) se carga en registros X y la parte baja en registros Y, y al revs para el caso YX.

Figura 6-3: Datos contenidos en la memoria para los ejemplos de accesos normal, fusin y broadcast.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 24

Ejemplos de accesos a memoria: /*Acceso a memoria Normal, de datos de 32-bits*/ XRs = [Jm += Jn] ;; /* Jm = direccin de word 0.*/ /*word 0 es almacenada en XRs*/

/*Acceso a memoria Broadcast, de datos de 32-bits*/ XYRs = [Jm += Jn] ;; /* Jm = direccin de word 0.*/ /*word 0 es almacenada en XRs y en YRs*/

/*Acceso a memoria Fusin, de datos de 32-bits*/ XYRs = L [Jm += Jn] ;; /* Jm = address of word 0.*/ /*word 0 es almacenada en YRs y word 1 en XRs*/ YXRs = L [Jm += Jn] ;; /* Jm = address of word 0.*/ /*word 0 es almacenada en XRs y word 1 en YRs*/ Comparacin entre los cdigos de un DSP SHARC y un procesador TigerSHARC para el acceso Broadcast: //SHARC (ADSP-21xxx) //Broadcast Loading Mode Bit Set MODE1 BDCST1; nop; r2=dm(i1,m1); /*Load r2 with 0xC*/ //Load s2 with 0xC //TigerSHARC (ADSP-TSxxx) //Broadcast Load //Broadcast not a mode ->no need to enable //Specified by register names r2=[j5+=j13];; //Load xr2 with 0xC //Load yr2 with 0xC

6.4.Buffer de alineacin de datos(DAB)


Cada bloque de procesamiento tiene asociado un DAB (X-DAB y Y-DAB), para acceder a datos no alineados en la memoria. Usando estos buffers, los programas pueden realizar un acceso de lectura de memoria de una palabra cudruple (128-bits) no-alineada para cargarla en los registros de datos cudruples(RSQ). Sin no se utilizara el DAB o SDAB, las instrucciones de carga de registros dobles o cudruples requeriran una alineacin previa. Una forma de entender como operan los DABs es comparar los accesos a datos alineados con los accesos a datos no-alineados; la figura 6-4 muestra un ejemplo de ambos.

Figura 6-4: ejemplo de instruccin con los datos alineados (Izq.) y no-alineados (Der.).

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 25

Los accesos utilizando los DABs deben entenderse como repetidas series de accesos a memoria, por medio de direccionamiento para buffer circular o direccionamiento lineal. Esto requiere una primera lectura para clarear el DAB de los datos anteriores y cargar los primeros datos correctos de la serie antes de que el DAB est listo para repetidos accesos. El DAB determina automticamente la palabra cudruple ms cercana del ndice de direcciones y lee de memoria, la palabra cudruple correcta a cargar en el DAB. Como los DAB establecen automticamente un direccionamiento del tipo buffer circular es necesario establecer los valores correctos de los registro implementados por dicho direccionamiento (ndice, base, longitud y modificador) antes de comenzar el acceso a travs de los DABs. Por ello, las instrucciones del DAB solo deben utilizar los registros de la IALU que estn destinados al direccionamiento de buffers circulares.

6.5.Direccionamiento de buffer circular


Como ya se mencion las IALUs soportan direccionamiento de buffers circulares. Este direccionamiento se utiliza cuando se tiene un sector (un rango de direcciones) de memoria solicitado continuamente (Nota: La Programming Reference llama a ese rango de direcciones Modulo fashion). Las instrucciones de lectura y escritura utilizan el operador CB para seleccionar ste direccionamiento. Las instrucciones de la IALU de lectura/escritura de buffer circular difieren de las instrucciones estndar de lectura/escritura en el mtodo que utilizan para calcular el direccionamiento pos-modificado. Las instrucciones estndar simplemente suman el incremento a la direccin actual para generar la prxima direccin; en las de buffer circular el incremento es igual al rango de direcciones del sector de memoria accedido. La frmula de clculo de las direcciones es la misma para el direccionamiento de buffer circular que para el direccionamiento lineal, suponiendo que, el valor LONGITUD es igual a 0 y el valor BASE es igual a la direccin de la base del buffer. Cada buffer circular tiene asociados 4 valores: BASE, LONGITUD, INDICE, y MODIFICADOR. El siguiente pseudo-cdigo muestra el clculo de la direccin: INDEX = INDEX + MODIFY if ( INDEX >= (BASE + LENGTH) ) INDEX = INDEX - LENGTH if ( INDEX < BASE) INDEX = INDEX + LENGTH Ejemplo de direccionamiento de bfer circular en el procesador TigerSHARC: JB0 = 0x100000 ;; JL0 = 11 ;; J0 = 0x100000 ;; XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] XR0 = CB [J0 += 4] /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* Set base address */ Set length of buffer */ Set location of first address */ Loads from address 0x100000 */ Loads from address 0x100004 */ Loads from address 0x100008 */ Loads from address 0x100001 */ Loads from address 0x100005 */ Loads from address 0x100009 */ Loads from address 0x100002 */ Loads from address 0x100006 */ Loads from address 0x10000A */ Loads from address 0x100003 */ Loads from address 0x100007 */ wrap to load from 0x100000 again */

;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;;

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 26

Figura 6-5: Diagrama del ejemplo de direccionamiento de bfer circular.

Comparacin entre los cdigos de un DSP SHARC y un procesador TigerSHARC para realizar un direccionamiento de buffer circular: //SHARC (ADSP-21xxx) bit set mode1 CBUFEN; // Enable circular mode (2116x only) r1 r2 B0 I0 L0 M0 = = = = = = 0x1234; 0x5678; output; b0; 3; 1; //TigerSHARC (ADSP-TSxxx) // Enabled in TigerSHARC by // using CB xr1 = 0x1234;; xr2 = 0x5678;; jB0 = output;; j0 = jB0;; jL0 = 3;; j12 = 1;; CB[j0+=j12] CB[j0+=j12] CB[j0+=j12] CB[j0+=j12] = = = = xr1;; xr1;; xr1;; xr2;;

/*Base for buffer*/ /*initialize index*/ /*length circular*/ /*Modifier*/ /*i0=buffer(top)*/ /*i0=buffer+1*/ /*i0=buffer+2*/ /*i0=buffer(top)*/

//Base for buffer //initialize index //Length of buffer //Modifier //j0=buffer(top) //j0=buffer+1 //j0=buffer+2 //j0=buffer(top)

dm(i0,m0)=r1; dm(i0,m0)=r1; dm(i0,m0)=r1; dm(i0,m0)=r2;

6.6.Direccionamiento Bit Reverse


Las IALUs soportan el direccionamiento bit reverse a travs del operador (BR). Cuando este operador se utiliza en un, acceso indirecto pos-modificado de lectura/escritura, el bit de carry se acarrea a la derecha (en ves de a la izquierda como es en las operaciones aritmticas normales) en el clculo de la pos-modificacin.

Figura 6-6: acarreo del bit de carry en la operacin Bit Reverse (opcin BR).

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 27

La figura 6-6 es un ejemplo de la forma de acarreo en la operacin bit reverse. Para una suma normal el resultado de 0xA5A5 + 0x2121, es 0xB6B6, pero para una operacin de acarreo bit reverse el resultado es 0x9494. Al igual que con el direccionamiento de buffer circular, el bit reverse se realiza utilizando solo los registros J3J0 o K3K0; no as con los registros base y longitud, ya que stos no necesitan ser seteados para el bit reverse. En las operaciones bit reverse no hay overflow.

Figura 6-7: Direccionamiento Bit Reverse del cdigo ejemplo - Orden de las palabras del acceso.

Ejemplo de direccionamiento bit reverse, en el procesador TigerSHARC: #define N 8 /* N = 8; number of bit reverse locations; N must be a power of 2 */ .section data1; .align N; /* align the input buffers start to an address that is a multiple of N; assume * for this example that the address is 0x1000 0000 0000 0000 */ .var input[N]={0,1,2,3,4,5,6,7}; .var output[N]; .section program; _main: j0 = j31 + ADDRESS(input) ;; /* Input pointer */ j4 = j31 + ADDRESS(output) ;; /* Output pointer */ LC0 = N ;; /* Set up loop counter */ _my_loop: xr0 = BR [J0 += N/2] ;; /* Data read with bit reverse; modifier must be equal to N/2 */ if NLC0E, jump _my_loop ; [j4+=1] = xr0 ;; /* Write linear */

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 28

6.7.Direccionamiento en las operaciones SISD y SIMD


Se ver en la presente seccin en que se diferencia el DSP SHARC del procesador TigerSHARC en el direccionamiento de las operaciones SISD y SIMD. Ya sea en SISD como en SIMD el DSP SHARC coloca, a travs de los DAGs, la misma direccin en los canales. En el modo SIMD, la memoria y los elementos de procesamiento obtienen los datos de la ubicacin dada en forma explcita en la sintaxis de la funcin y ubicaciones complementarias dadas en forma implcita. Esto es diferente en los procesadores TigerSHARC, ya que en los mismos, SIMD ya no es un modo del procesador sino que la operacin SIMD es controlada a nivel instruccin; especificando x a la parte de la instruccin que ser realizada por CBx, e y la parte que ser realizada por Cby. Usando "xy" o "yx" realizamos una operacin en ambos bloques. El orden en que x e Y se especifican indica el camino que los datos seguirn cuando sean movidos entre la memoria y los bloques; por ejemplo, especificando xy ( puede ser: xyR0 ) se mueve la parte baja de los datos a o desde CBy y la parte alta a o desde CBx. Especificando yx ( puede ser: yxR0 ) se invierten el destino/fuente de las partes alta y baja. Cuando ni x ni y preceden al nombre del registro (ej.: R0) la transferencia de datos se llevar a cabo de alguna de las 2 formas siguientes: de la misma manera que cuando se especifica xy; o el mismo dato se lee/escribe desde/en ambos bloques, CBx y CBy. Esto depende del nmero de registros especificados como origen/destino, as como de la longitud de los datos que se transfieren. Mover el mismo dato desde/hacia ambos bloque de procesamiento es el equivalente al modo Broadcast de los DSPs SHARC ADSP-2116x. Comparacin entre los cdigos de un DSP SHARC y un procesador TigerSHARC: // SHARC (ADSP-2116x) I1=buffer; /*Buffer={0xA,0xB,0xC,0xD}*/ M1=2; //SISD r0=dm(i1,0); /*r0 loaded with 0xA*/ //SIMD Bit Set MODE1 PEYEN; nop; // Enable SIMD mode r1=dm(i1,m1); /*Load r1 with 0xA*/ //Load s1 with 0xB //TigerSHARC (ADSP-TSxxx) j5=buffer;; //Buffer={0xA,0xB,0xC,0xD} j13=2;; //SISD xr0=[j5+j31];; //xr0 loaded with 0xA //SIMD //SIMD not a mode ->no need to enable //Specified by register names yxr1=L[j5+=j13];; //Load xr1 with 0xA //Load yr1 with 0xB

Nota: Estos ejemplos estn basados en el esquema de mapeo de registros visto en la seccin 5 (registros de los bloques de clculo), tabla 5-1. Como puede verse en el ejemplo anterior, el cdigo r0=dm(i1,0); en SHARC es lo mismo que xr0=[j5+j31];; en TigerSHARC, donde J31 es siempre igual a 0 cuando se lo utiliza como operando. Otra cosa para notar es que el SHARC siempre realiza movimientos con datos de 64-bits ( r0 = dm (i1, m1);modo SIMD habilitado), en cambio en el TigerSHARC la longitud del dato deber ser especificada con la letra L cuando se trate de palabras de 64-bits. Esto se traduce en tener una palabra de 64-bits cargada dentro de los registros x (32-bits, parte baja) e y (32-bit, parte alta), segn lo especificado por la instruccin (yxr1 = L [j5 + J13];;). Si el prefijo L no se agrega en la instruccin, la misma palabra de 32-bits (palabra normal de 32-bits es el modo por defecto) es cargada en los registros x e y; y esto como ya es sabido es el modo Broadcast del TigerSHARC.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 29

7.Secuenciador de programa
7.1.Introduccin al secuenciador de programa
El ncleo del procesador TigerSHARC posee un secuenciador de programa el cul es el encargado de administrar la ejecucin de los programas. El mismo cuenta con un buffer de alineacin de instrucciones (IAB), un contador de programa (PC), un buffer de destino de saltos (BTB), un administrador de interrupciones, y un mecanismo de bsqueda de direcciones ( Addres Fetch). El secuenciador busca las instrucciones en la memoria, y extrae una lnea de instruccin (128-bits) por ciclo; identifica en que unidad/es debe ejecutarse cada una de las instrucciones contenidas en la lnea (recordemos que es un VLIW, con lo que tenemos varias instrucciones paralelizables en una misma lnea de cdigo), y luego las enva a su correspondiente unidad/es. El secuenciador es tambin el encargado de controlar el flujo de las instrucciones y monitorea los requerimientos de parada de los programas. Las operaciones que soporta el secuenciador incluyen:

Suministrar la direccin de la prxima palabra cudruple de instruccin para cargar el buffer de alineacin de instrucciones (IAB). Extraer la prxima lnea de instruccin a ser ejecutada del IAB. Controlar de flujo de las instrucciones, lo cul incluye:

Evaluar las condiciones. Mantener el buffer de destino de salto(BTB). Decrementar contadores de lazos.

Vaciar el pipeline cuando se requiere. Responder a las interrupciones.

Figura 7-1: Diagrama en bloques donde se identifica el secuenciador de programa y sus elementos internos.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 30

El addres fetch y el PC, son elementos tpicos y conocidos, los que se vern en ms detalle son:

Buffer de destino de saltos (BTB). Realiza una cach de las direcciones de saltos para reducir el costo de pipeline que tiene los saltos predichos. Buffer de alineacin de instrucciones (IAB). Recibe la lnea de instruccin de 128-bits (palabra cudruple), la alinea de ser necesario y enva las instrucciones que contiene a los bloques de clculo, IALUs y secuenciador de programa. Pipeline de 8 o 10 etapas dependiendo el modelo de TigerSHARC.

Figura 7-2: Diagrama en bloques detallado del secuenciador.

7.2.Pipeline
7.2.1.Introduccin al pipeline
Para realizar una ejecucin ms rpida el TigerSHARC utiliza un pipeline de instrucciones de 8 o 10 etapas (El SHARC solo tena 3 etapas). El procesador busca una palabra cudruple de memoria (que consiste en 1 a 4 instrucciones), las analiza, decodifica y ejecuta. La figura 7-3 muestra el pipeline y como ste interacta con el BTB, el IAB y el pipeline de memoria.

Figura 7-3: Pipeline de instrucciones, IAB, BTB Vs. pipeline de memoria.

Una lnea de instruccin requiere 8 o 10 ciclos para recorrer de principio a fin el pipeline. El rendimiento es de una ejecucin de una lnea de instruccin por cada ciclo de reloj (CCLK) del procesador. Como se

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 31

puede ver el pipeline de memoria trabaja paralelamente al pipeline de instrucciones, a tal punto que paradas en los ciclos de direccin o de registro ( address cycle y register cycle) provocan paradas en los correspondientes ciclos del pipeline de instrucciones (ms informacin en: Efectos sobre el pipeline de las dependencias y los recursos, seccin 7.2.2).

7.2.2.Operacin del pipeline de instrucciones


Para entender mejor el flujo de las instrucciones a travs del pipeline y el tiempo que requiere cada etapa se presenta la figura 7-4.

Figura 7-4: Temporizado del pipeline de instrucciones.

Ntese en la figura, el orden en que los resultados de una operacin estn disponibles. Puede verse que las operaciones con la IALU se ejecutan en la fase (pipe) Integer ALU, mientras que las operaciones con los bloque de procesamiento se ejecutan en la compute block, con lo que los resultados de la IALU pueden estar disponibles antes que los de los bloques de clculo, dependiendo del orden y tipo de funciones. Las primeras cuatro etapas del pipeline (F1, F2, F3 y F4) son llamadas fase fetch unit (llamaremos Fase a lo que en la figura llaman Pipe ). Los ciclos de bsqueda son los primeros del pipeline y estn vinculados a los accesos a memoria. Los progresos en esta etapa son manejados por la memoria y no por la instruccin. La unidad de bsqueda llena el IAB mientras este tenga menos de 4 palabras palabras cudruples. Dado que las unidades de ejecucin pueden leer instrucciones a una velocidad igual o inferior a la capacidad de bsqueda de 4 palabras por ciclo, es poco probable que el IAB se vace. El IAB se puede llenar con un mximo de 6 palabras cudruples. Cuando la bsqueda es en la memoria externa, el flujo es similar pero mucho ms lento. El mximo rendimiento de la bsqueda es una lnea de instruccin cada 2 ciclos SCLK y la latencia es de acuerdo con el diseo del sistema (profundidad del pipeline de memoria externa, ciclos de espera, etc.). Las siguientes 4 etapas del pipeline (predecode, decode, integer y access) se denominan fase Integer ALU. En el ciclo PreDecode, la siguiente lnea completa de instruccin es extrada de la IALU y las diferentes instrucciones son distribuidas a las unidades de ejecucin durante el ciclo Decode. Las unidades incluyen:

J-IALU or K-IALU - instrucciones con enteros, lectura/escritura y transferencias de registros. bloques de clculo X o Y o ambos - 2 instrucciones (el cambio entre bloques es realizado por el conjunto de registros. Secuenciador de programa saltos e instrucciones condicionales, y otros.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 32

El IAB tambin calcula el PC de las lneas de instruccin secuenciales y de algunas no secuenciales. El IAB no realiza ninguna decodificacin. Luego de la etapa Decode, las instrucciones entran en la etapa Integer donde son ejecutadas las instrucciones que trabajan con las IALUs las cuales incluyen, clculo de datos o direccionamientos y, opcionalmente, acceso a memoria. Si una instruccin de ste tipo incluye un acceso a memoria, es el bloque de memoria el que lo solicita en la etapa Integer, lo cual retrasa la operacin hasta que el bloque est disponible para la IALU. El resultado de clculo de direcciones se obtiene en la etapa Integer. Dado que la ejecucin en la IALU puede ser abortada (ya sea a causa de un salto condicional o predicho), el operando es retornado al registro destino solo al final de EX2. El resultado pasa a travs del pipeline en la que puede extraerse por una nueva instruccin en caso de que se requiera como fuente para un operando. La dependencia entre los clculos de la IALU, normalmente no causa ningn retraso, pero existen excepciones. Los datos que estn cargados son ledos recin en la etapa EX2. La ltima fase del pipeline se denomina fase compute block. En la etapa Decode, el bloque de procesamiento toma la instruccin y la transfiere a la unidad de ejecucin que le corresponde. En la etapa Integer, la instruccin es decodificada en la unidad de ejecucin y se chequean las dependencias. En la etapa Access, los registros fuente son seleccionados en el archivo de registros interno del bloque. En las etapas EX1 y EX2, los resultados son calculados y las banderas son actualizadas en el bloque correspondiente. La ejecucin toma siempre 2 ciclos y el resultado se escribe en el registro destino en el flanco de subida del CCLK luego de la etapa EX2. Todos los resultados se escriben en el registro destino y todas las banderas se actualizan en la etapa EX2. Esta regla tiene solo 2 excepciones:

accesos a memoria externa, donde la demora la determina el sistema. Instruccin Multiplicar-Sumar, que escribe los registros MR y las sticky flags un ciclo despus de EX2 (Esta forma de escritura es til para mantener la coherencia en caso de que se quiebre del pipeline).

7.2.3.Efectos sobre el pipeline de las dependencias y los recursos


El TigerSHARC puede ejecutar cualquier secuencia de instrucciones siempre y cuando entre las mismas no ocurran:

Dependencias. Conflictos de recursos.

Una condicin de dependencia es causada cuando una instruccin requiere del resultado de una instruccin anterior. Por lo cul ambas instrucciones deben ejecutarse en tiempos distintos. Un conflicto de recursos puede darse cuando dos instrucciones intentan usar el mismo bus interno u otro recurso (DMA, etc.), cuyo nmero es limitado, al mismo tiempo. El secuenciador de programa al encontrarse con un problema de ste tipo responde colocando ciclos de espera stall en el pipeline. En la Programming Reference del TigerSHARC se encuentra una tabla de dependencias til para el programador.

7.3.Cach de instrucciones y buffer de destino de saltos(BTB)


7.3.1.Introduccin al BTB y comparacin con la cach del SHARC
La arquitectura SHARC posee una cach de instrucciones que permite que se pueda buscar una instruccin y acceder a un dato de la memoria de programa de manera simultnea. Esto ya no es necesario en la arquitectura TigerSHARC debido a que posee el nmero suficiente de bloques de memoria y canales para poder realizar una bsqueda de instruccin y 2 accesos a datos de manera simultnea. Ahora bien, el TigerSHARC sigue poseyendo una cach pero su uso es distinto. Es sabido que el TigerSHARC puede lograr una alta velocidad de ejecucin debido a su pipeline de 8 a 10 etapas (dependiendo el modelo). Sin embargo cuando una instruccin de salto se ejecuta el mismo debe vaciarse, con lo que la nueva instruccin debe recorrer todo el pipeline antes de poder ser ejecutada. Esto provoca una espera de entre 3 y 6 ciclos. El uso del BTB puede reducir sta espera a 0. El BTB es una cach asociativa de 4-vas para instrucciones de salto; stas incluyen: retorno de interrupciones, retorno de llamadas, e instrucciones de saltos computados (computed jump instructions). Bsicamente es una FIFO de 128 entradas; cada entrada en el BTB tiene un campo para la etiqueta y uno para el

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 33

destino (TARGET). En el campo de la etiqueta se almacena la direccin cudruple (recordemos que de la memoria se traen 4 palabras de instruccin simultneamente, y una o mas de ellas puede ser un salto) de la lnea de instruccin que contiene el salto. En el campo de destino se almacena la direccin a la que el secuenciador de programa deber ir, si se realiza el salto.

Figura 7-5: Estructura del BTB.

Como puede apreciarse en la figura 7-5, el BTB tiene, a parte de los 2 campos ya vistos, otros que tambin describiremos a continuacin:

Index: El ndice determina la entrada del BTB seleccionada. El mismo se encuentra en los bits 6-2 de la direccin de la instruccin de salto. Tag: La Etiqueta determina si la instruccin recientemente buscada es un salto ya almacenado o no en el BTB. Esto es resuelto luego de una comparacin entre ambas. La entrada Tag del BTB grava los bits 20-7 y 1-0 de la direccin de la ltima instruccin de salto, de la ltima lnea de instruccin. Target: El Destino, es la direccin destino del salto. Cuando se lee una instruccin de salto y el mismo est almacenado en el BTB, el PC busca la direccin a la cul saltar en la entrada Target del BTB. Valid: El bit de Validez indica cuando una entrada es vlida (1) o invlida (0). CJMP: Indica cuando el salto es un CJMP (salto computado [2.Pg. 8-19]) (1) o no (0). RTI: Indica cuando el salto es un RTI (retorno de interrupcin) (1) o no (0). ABS: Indica cuando el salto usa direccin absoluta (1) o relativa (0). Lock: Bloquea (1) o desbloquea (0) una entrada. LRU: Campo menos utilizado; indica que campo puede sobrescribirse en caso de tener todas las entradas llenas y se necesite agregar un nueva entrada.

7.3.2.Como se ahorra ciclos con el BTB?


La primera ves que se da la condicin y el salto ocurre, el BTB no tendr ninguna entrada para el mismo, por lo tanto una nueva entrada se coloca, con el valor del PC en el campo de la etiqueta. Esto tendr un costo de 2 ciclos; sin embargo, cada vez que el mismo salto ocurra, el valor del PC va a coincidir con el de la etiqueta. Al ver la coincidencia, el secuenciador, en vez de tomar la siguiente instruccin de la secuencia que vena realizando, tomar la instruccin correspondiente a la direccin que tiene almacenada en el campo destino, comenzando a partir de all una nueva secuencia. Con lo que el pipeline comenzar a cargarse con las instrucciones correctas para continuar luego de realizado el salto, entonces la prdida de ciclos se reduce a 0.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 34

7.3.3.Cuando es conveniente el uso del BTB?


El BTB tiene la capacidad de identificar anticipadamente cuando hay un salto en el cdigo a ejecutar, lo que no puede, es saber si la condicin va a ser verdadera o no, eso se determina recin cuando la instruccin es decodificada; por lo que debemos aplicar prediccin de flujo de programa. La prediccin de flujo es un mtodo predeterminado de la instruccin de salto. Sin embargo uno puede especificar un salto que se preve que no ocurra. Esto es especialmente til para saltos condicionales en que la condicin es ms probable que sea falsa a que sea verdadera (Saltos no-predecidos, no actualizan el BTB). Ejemplos de cdigo de saltos predichos y no-predichos: /* Salto condicional basado en el resultado del bloque de procesamiento X el resultado debe ser igual a 0 */ If xaeq, jump label;; /* Salto condicional con prediccin basado en el resultado del bloque X el resultado debe ser igual a 0 */ If xaeq, jump label (P);; /* Salto condicional con no-prediccin basado en el resultado del bloque X el resultado debe ser igual a 0 */ If xaeq, jump label (NP);; En el primer ejemplo no se coloc la opcin al final de la instruccin. Por defecto ser predecido (se tomar como que la condicin es verdadera). El segundo tambin ser predecido. El ltimo se tratar como no-predicho (se toma como que la condicin para el salto es falsa por defecto). Por ejemplo si el programa entra en un lazo cuya condicin de salto es siempre verdadera, tendremos una prdida de 2 ciclos en la primer pasada del lazo y no tendremos prdida de ciclos en las restantes. Sin la implementacin del BTB tendramos 3 a 6 ciclos por pasada. Ahora si en cambio tenemos un laso cuya condicin se da que la primera vez es cierta pero las restantes es falsa, el salto ser predicho siempre, con lo que tendremos que cada ves que el salto no sea realizado (condicin falsa) tendremos una prdida de 3 a 6 ciclos por ves. Es por ello que cuando se sabe que un salto no se tomar de manera continua, se puede escribir en el cdigo como no predicho (NP) (como se ve en el tercer ejemplo de cdigo visto). Los saltos no predichos no actualizan el BTB.

7.3.4.Sobre colocar ms de un salto en una palabra cudruple


Uno de los recaudos que se deben tener en cuenta en la utilizacin del BTB, es no poner 2 instrucciones de salto en la misma palabra cudruple en memoria. El compilador emitir una advertencia: -Detected two instruction lines with predicted jumps ending within 4 words-. Si piensa que esto puede estar ocurriendo. Para entender como evitar sta situacin debemos comprender como las instrucciones pasan de la memoria interna al ncleo. En cada ciclo el DSP haciendo uso de su bus de 128-bits toma 4 instrucciones de su memoria interna. La primera de estas 4 instrucciones siempre tiene una direccin una direccin mltiplo de 4.

Figura 7-6: Memoria de programa.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 35

El TigerSHARC puede ejecutar 1 a 4 instrucciones de 1 lnea de instruccin. As mientras que 4 son las instrucciones que se cargan en el ncleo, en cada ciclo, no necesariamente, se ejecutan en la misma lnea de instruccin. Para manejar esta situacin, las instrucciones se guardan en una FIFO de 5 palabras, llamada, buffer de alineacin de instrucciones (IAB). Es all donde se alinean, en la lnea de instruccin correspondiente como est definido en el cdigo fuente. Por ejemplo, considere la estructura de cdigo que se presenta a continuacin: Instr1;; Instr2; Instr3; Instr4; Instr5;; Instr6; Instr7;; Instr8;; En el primer ciclo se obtiene de memoria las instrucciones 1, 2, 3 y 4. La primera lnea de instruccin se puede ejecutar debido a que solo contienen la instruccin 1. La segunda lnea de instruccin debe esperar la prxima carga desde memoria, ya que necesita la instruccin 5. Las instrucciones 2,3,4 y 5 estn alineadas en una lnea de instruccin en el IAB. En la carga de la instruccin 5 se cargaron tambin la 6, 7 y 8, con lo que las prximas lneas de instruccin pueden ejecutarse sin problema. Una ves entendido esto se puede ver como es que el funcionamiento del BTB se ve afectado si se colocan ms de un salto en la misma lnea de instruccin. La direccin que se almacena en el campo TAG solo pede ser de 1 lnea de instruccin (un mltiplo de 4como: 0x0, 0x4, 0x8 ...). Por lo tanto si un salto ocurre en la instruccin 1, 2, 3 o 4; en TAG se almacena el valor 0x0, y si ocurre en la instruccin 5, 6, 7 u 8; en TAG se almacena el valor 0x4. Si la instruccin 1 y la 4 son salto el BTB no tiene la capacidad de discernir entre una y otra. El campo TAG almacena la direccin de la ltima palabra cudruple (lnea de instruccin) que contiene el salto. Por ejemplo: Instr1;; Instr2; Instr3; Branch(Instr4); Instr5;; Instr6;; Aqu el salto est en la instruccin 4, la misma est ubicada en la segunda lnea de cdigo; con lo que en el TAG se almacenar 0x4, aunque la direccin de dicha lnea de instruccin sea 0x0. Esto es as, porque el secuenciador de programa debe cargar todas las instrucciones que se ejecutan en paralelo en la misma lnea de instruccin (interna del secuenciador); entonces, como en el ejemplo las instrucciones 2, 3, 4 y 5 se ejecutan en paralelo, se debe traer de memoria la lnea de instruccin 0x4 que contiene la instruccin 5, con lo que es sta ltima direccin la que se carga en el campo TAG del BTB. Se ver a continuacin otro ejemplo de conflicto con el BTB: Branch(Instr2); Instr3; Instr4; Instr5;; Instr6; Branch(Instr7); En ste caso el compilador nos dir: warning detected two instruction lines with predicted jumps within 4 words. Esto es as porque la ltima instruccin de la primera lnea tiene direccin 0x4 que es la misma direccin de la instruccin 7 (5,6,7 y 8 estn en memoria en la misma lnea). Esto se puede resolver sin agregar cdigo extra, que retrase la operacin, de la siguiente manera: Branch(Instr2); Instr3; Instr4; Instr5;; Instr6; Branch(Instr7); Instr8; Instr9;; Ahora el campo TAG tendr cargado una salto en la direccin 0x4 y otro en la direccin 0x8 (que es la direccin de la lnea de instruccin que contiene la instruccin 9).

7.4.Buffer de alineacin de instrucciones(IAB)


El IAB es una FIFO de 6 palabras cudruples. Cuando el secuenciador obtiene una lnea de instruccin desde la memoria, la misma es escrita en el IAB inmediatamente despus de la que se carg en la bsqueda anterior. Si en el IAB hay una lnea de de instruccin completa el secuenciador puede tomarla para su ejecucin.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 36

El IAB provee los siguientes servicios:

Hace las veces de buffer de entrada de la fase de bsqueda del pipeline. Mantiene la unidad de bsqueda independiente del resto del pipeline de instrucciones. Esta independencia le permite a la unidad de bsqueda continuar trabajando an cuando otras etapas del pipeline estn paradas. Alinea las entradas (palabras cudruples desalineadas) para preparar lneas completas de instruccin para su ejecucin. Esta alineacin garantiza que lneas completas de instruccin de 1 a 4 cuatro instrucciones se puedan ejecutar en paralelo. Las instrucciones son palabras de 32bits, que se almacenan en memoria sin tener en cuenta la alineacin de palabras cudruples (128-bits) o la longitud de la lnea de instruccin (1 a 4 instrucciones). Con lo que no hay desperdicio de espacio de memoria. Las instrucciones que se ejecutan en paralelo se determinan por el MSB del opcode de cada instruccin, el cul indica si termina o no, una lnea de instruccin. Distribuye las instrucciones de la lnea de instrucciones para su ejecucin en las distintas unidades IALUs, bloques de clculo, y secuenciador.

Figura 7-7: Buffer de alineacin de instrucciones.

A travs de estos servicios, el IAB asegura la ejecucin de toda una lnea de instruccin sin tener que insertar ciclos de espera o tener que almacenar en memoria las lneas de instruccin alineadas.

7.5.Variaciones en el flujo de programa


El flujo de programa tanto en los DSP SHARC, como en los procesadores TigerSHARC es casi lineal. Sin embargo cuando el flujo deja de ser lineal cuando en el programa aparecen estructuras tales como:

Saltos. Bucles. Subrutinas. Interrupciones Ciclos de espera u ociosos.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 37

Existe una clara diferencia en la manera en que una llamada es manejada por el secuenciador de programa de un SHARC y por el de un TigerSHARC; y a causa de que los TigerSHARC no poseen pila (stack). La direccin de retorno de la llamada (CALL),en cambio, se guarda en el registro CJMP. Por lo tanto, antes de realizar otra llamada (anidamiento), el registro deber guardarse en memoria para que la direccin de retorno de la llamada anterior no se pierda. Asimismo, el retorno de una llamada, se realiza usando la instruccin CJMP; dicha instruccin es para el TigerSHARC lo que la instruccin RTS para el SHARC. Una diferencia fundamental en los saltos, entre SHARC y TigerSHARC, es que el secuenciador de programa del TigerSHARC no admite los saltos demorados. Por lo tanto, para convertir un salto demorado (es decir, el CALL que tiene la etiqueta (db)), se mueven las 2 instrucciones que estn inmediatamente despus y se las coloca antes del salto. Sin embargo cuando se quiere convertir un salto condicional demorado (por ejemplo: IF EQ JUMP(PC, etiqueta) (db);), se copian las 2 instrucciones que estn inmediatamente despus del salto, y se coloca una copia de las mismas (sin borrar las mismas de su ubicacin original) al comienzo de la direccin de destino del salto. Esto puede verse claramente en el siguiente ejemplo. Ejemplo de salto demorado en SHARK y TigerSHARC: // SHARC (ADSP-21xxx) IF LT jump (PC, 0x15) (DB); r0 = dm(i1,m1); r1 = dm(i1,m1); .... r3 = r0+r1; //Jump destination // TigerSHARC (ADSP-TSxxx) IF XALT, jump 0x15 (NP);; xr0=[j5+=j13];; xr1=[j5+=j13];; .... xr0=[j5+=j13];; //Jump destination xr1=[j5+=j13];; xr3 = r0+r1;; // TigerSHARC preferred method IF XALT, jump label (NP);; xr0=[j5+=j13];; xr1=[j5+=j13];; .... label: xr0=[j5+=j13];; //Jump destination xr1=[j5+=j13];; xr3 = r0+r1;; En el ejemplo anterior puede observarse el reordenamiento de instrucciones. En este ejemplo se tom la decisin de no prever el salto. Ntese que la instruccin se reescribi de manera de seguir usando el salto relativo del PC (PC relative jump). Esto es muy probable que no funcione como se espera debido a las diferentes longitudes de lnea de instruccin que el TigerSHARC requiere. Por sta causa, se recomienda el uso de etiquetas para las direcciones relativas o absolutas en lugar del valor de PC, en toda instruccin que modifique el flujo del programa. Tanto los SHARC como los TigerSHARC soportan la ejecucin del bucle zero-overhead. El SHARC soporta el anidamiento de hasta 6 bucles usando los registros de soporte de bucle del secuenciador de programa. La configuracin de un bucle requiere un registro contador de bucles, una instruccin para disminuir el contador y una instruccin condicional para terminar el bucle en el tiempo requerido. La diferencia fundamental en la configuracin de un bucle, entre SHARC y TigerSHARC, es que los SHARC requieren el uso de una instruccin DO/UNTIL como la instruccin condicional. La instruccin que va inmediatamente despus del DO/UNTIL es la primera del bucle, y la ltima est indicada por la etiqueta. Ejemplo de bucle simple en SHARK y TigerSHARC: // SHARC (ADSP-21xxx) LCNTR=N, DO loop UNTIL LCE; F8=PASS F15, M8=I10; F9=PASS F15, F0=DM(I0,M1); loop: F12=F0*F5, F4=PM(I8,M8); xr4=[k4+=k12];; // TigerSHARC (ADSP-TSxxx) LC0=N;; loop: xfr8=PASS r15; k12=k6;; xfr9=PASS r15; xr0=[j4+=j13];; IF NLC0E,jump loop; xfr12=r0*r5;

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 38

Ejemplo de bucles anidados en SHARK y TigerSHARC: // SHARC (ADSP-21xxx) // TigerSHARC (ADSP-TSxxx) /******************************** Outerloop ***********************************/ lcntr=N, do outerloop until lce; k4 = k31 + N;; i4=r2; outerloop: j8 = xr2;; i3=r12; j7 = xr12;; r8=dm(m5,i4); xr8 = [j17+j8];; r4=dm(m5,i3); xr4 = [j17+j7];; r8=r8*r4, i4=r2; xr8 = r8*r4; j8 = xr2;; dm(m5,i1)=r8; [j17+j5] = xr8;; i3=dm(-4,i6); j7 = [j10 + -4];; /******************************** innerloop1 ***********************************/ lcntr=N, do innerloop1 until lce; LC0 = N;; r8=dm(m5,i1); innerloop1: xr8 = [j17+j5];; r4=dm(m5,i4); xr4 = [j17+j8];; r8=r8*r4, i5=i2; xr8 = r8*r4; j9 = xr2;; dm(m5,i3)=r8; [j17+j7] = xr8; /******************************** innerloop2 ***********************************/ lcntr=N, do innerloop2 until lce; LC1 = N;; r8=dm(m5,i0); innerloop2: xr8 = [j17+j4];; r4=dm(m5,i1); xr4 = [j17+j5];; r8=r8*r4; xr8 = r8*r4;; innerloop2: dm(i5,m6)=r8; if NLC1E,jump innerloop2;[j9+=j18] = xr8;; /******************************* end innerloop2 **********************************/ innerloop1: modify(i3,m6); if NLC0E, jump innerloop1; j7 = j7+j18;; /******************************* end innerloop1 **********************************/ r12=r12+1, xr12 = r12+0x1;; modify(i1,m6); j5 = j5+j18; k4 = k4-1;; outerloop: r2=r2+1; if NKEQ, jump outerloop; xr2 = r2+1;; /******************************* end outerloop **********************************/

7.6.Interrupciones
Existen diferencias significativas entre la forma en que se realizan las interrupciones en el SHARC y en el TigerSHARC. El primer punto a sealar es el lugar donde se ubica el vector de interrupciones; en el TigerSHARC no se ubica en la memoria interna o externa como en el SHARC. El TigerSHARC tiene en el controlador de interrupciones unos registros dedicados al almacenamiento del vector de direcciones de interrupcin. Este set de registros, conocido como tabla de vector de interrupciones ( IVT, del ingls), contiene 30 registros. En el SHARC sigue una secuencia de 5 pasos para procesar efectivamente una interrupcin suponiendo que las mismas estn habilitadas: 1. Salida de la direccin del vector de interrupciones. 2. Guardado del valor del PC actual en la pila de PC. 3. Dependiendo de la interrupcin que se halla producido, se guardan los registros ASTAT y MODE1 dentro de la pila de estado. 4. Seteo del bit correspondiente en IRPTL. 5. Modificacin de IMASKP para que refleje el estado de anidamiento de interrupcin actual. El TigerSHARC maneja las interrupciones de manera distinta, esto depende de que si la interrupcin es por hardware o una excepcin de software. Para las interrupciones por hardware, suponiendo que estn habilitadas: 1. 2. 3. 4. Seteo del bit correspondiente en ILATL/ILATH. Salida de la direccin de salto de la interrupcin de IVT. Guardado del PC para el retorno de interrupcin (RETI). A partir de la entrada en la rutina de servicio de interrupcin (ISR), setear los bit correspondientes de PMASKL / PMASKH y el bit 29 de PMASKH para bloquear todas las interrupciones por hardware del ADSP-TS101. Para el ADSP-TS20x en lugar del bit 29 de PMASKH, seteo del bit 21 de SQSTAT para bloquear todas las interrupciones por hardware.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 39

Para las excepciones de software, asumiendo que estn habilitadas: 1. Para el ADSP-TS101, seteo del bit correspondiente en ILATH. Para el ADSP-TS20x, seteo del bit correspondiente en SQSTAT. 2. Salida de la direccin de salto del vector de interrupciones. 3. Guardado del PC actual para retornar (RETS).

Figura 7-8: Conexionado de las interrupciones y el Bus SOC.

Otra diferencia significativa entre las 2 arquitecturas es la forma en que se manejan las interrupciones anidadas. Como el TigerSHARC no tiene pila de PC y no salva los registros (no tiene pila de estado, status stack), stas acciones necesarias para poder llevar a cabo interrupciones anidadas, se deben realizar en la misma ISR. No hay un bit de activacin de anidamiento en el registro de control; por sta causa, todas las interrupciones son desactivadas cuando se entra en la ISR, para poder as, salvar todos los registros en memoria (o en la C run-time stack ). Esto incluye guardar los registros de retorno (RETI register). El hecho de no guardar el registro de retorno (RETI register) antes de permitir la anidacin o reutilizacin de interrupciones se traducir en una prdida de la direccin de retorno. Las interrupciones en el TigerSHARC son anidadas o reutilizadas por la ejecucin de instrucciones especiales. Para interrupciones anidadas se debe guardar el registro RETIB en memoria. Esta ltima accin trae aparejado lo siguiente: 1. Se salva el contenido de RETI en memoria. El actual contenido de RETI es la direccin de retorno de la interrupcin. 2. En el ADSP-TS101, el bit 29 de PMASKH es clareado para permitir que una interrupcin de mayor prioridad sea aceptada si ocurre. En el caso del ADSP-TS20x, es el bit 21 del registro SQSTAT el que es clareado. Si la rutina de servicio de interrupcin es para una interrupcin no-anidada, los registros que se salvan en la pila al comienzo de la ISR son restaurados cuando se ejecuta la instruccin RTI, lo cul vuelve el programa a su flujo normal. Si la interrupcin es anidada, se debe, antes de restaurar los registros, desactivar nuevamente todas las interrupciones a fin de que no se corrompa ningn dato por alguna inclusin inoportuna de una interrupcin de mayor prioridad en ese instante, y por consiguiente, que no se pierda la direccin de retorno. Esto se realiza trayendo el valor del registro RETIB del lugar de

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 40

memoria donde se halla guardado. Una vez que este registro es restaurado, no pueden ocurrir futuras interrupciones; esto permite la restauracin segura de los valores de todos los registros. Para salir de la ISR se utiliza la instruccin RTI. Las interrupciones reutilizables se habilitan en el TigerSHARC, usando la instruccin conversin a subrutina RDS [2] [10] (del ingls: reduce to subroutine ). RDS no equivale a la instruccin RTS del SHARC. De manera similar a las interrupciones anidadas, se debe salvar el estado y cualquier registro que se requiera a la pila, incluyendo el registro RETI, antes de ejecutar la instruccin RDS. Para tener la seguridad de que al final de la ISR (que se ha reducido a una subrutina) se podrn restaurar todos los registros, incluyendo la direccin de retorno, todas las interrupciones deben deshabilitarse. Esto puede lograrse mediante un mtodo similar al de las interrupciones anidadas, restaurando la direccin de retorno en el registro RETIB. Los registros de estado del procesador y cualquier otro registro guardado en la pila, puede ser recuperado de manera segura, antes del retorno de la ISR. Para retornar de una ISR que se ha reducido a nivel de subrutina, se debe ejecutar la instruccin RETI. Para ms detalles se recomienda ver la referencia de programa [2]; a continuacin se presentaran algunas comparaciones de cdigo entre el SHARK y el TigerSHARC, para distintos casos de interrupciones. Ejemplo de interrupcin por timer en SHARK y TigerSHARC; para mejorar la legibilidad del mismo se ha eliminado, para el caso del SHARC, gran parte de la tabla de vectores de interrupcin. Junto con la conversin del cdigo debe tambin recalcularse el TPERIOD para el TigerSHARC: //SHARC (ADSP-21160) .... // Vector for status stack/loop // stack overflow or PC stack full: ___lib_SOVFI: NOP; NOP; RTI; RTI; // Vector for high priority timer interrupt: ___lib_TMZHI: jump timerhi_isr; NOP; RTI; RTI; // Vectors for external interrupts: ___lib_VIRPTI: NOP; NOP; RTI; RTI; #include "def21160.h" .GLOBAL .GLOBAL start; timerhi_isr; seg_pmco; #include "defTS201.h" .GLOBAL .GLOBAL start; timerhi_isr; //TigerSHARC (ADSP-TS201)

.SECTION/PM start:

.SECTION program; start: /* Set up interrupt vector table */ j0 = timerhi_isr;; IVTIMER0HP = j0;; /*set to 0x1000 SOCCLK cycles*/ xr0 = 0x1000;; xr1 = 0x0;; TMRIN0L = xr0;; TMRIN0H = xr1;;

/*set TPERIOD to 0x1000 CCLK cycles*/ TPERIOD=0x1000;

/******************** Enable high priority timer interrupt ***********************/ BIT SET IMASK 0x10; xr0 = IMASKH;; xr0 = bset r0 by INT_TIMER0H_P;; IMASKH = xr0;;

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 41

/************************* Set global interrupt enable ***************************/ BIT SET MODE1 0x1000; SQCTLST = SQCTL_GIE;; /********************************* Enable TIMER **********************************/ BIT SET MODE2 0x20; xr0 = INTCTL;; xr0 = bset r0 by INTCTL_TMR0RN_P;; INTCTL = xr0;; /********************************* Endless loop **********************************/ do_nothing: do_nothing: NOP; NOP;; NOP; NOP;; JUMP do_nothing; JUMP do_nothing;; start.END: start.END:

/**************************** Interrupt Service Routine **************************/ timerhi_isr: timerhi_isr: nop; nop;; nop; nop;; nop; nop;; nop; nop;; rti; rti(ABS)(NP);; Ejemplo de comparacin de cdigo entre SHARK y TigerSHARC; en el mismo se muestra como se reutiliza una interrupcin, el hecho de que la ISR ha sido reducida a una subrutina permite que puedan tenerse interrupciones de mayor y menor prioridad: // SHARC (ADSP-21160) .... ___lib_IRQ1I: NOP; NOP; RTI; RTI; // TigerSHARC (ADSP-TS201)

// The CI option allows for the interrupt to occur again while being serviced ___lib_IRQ0I: jump irq0_isr(CI); NOP; RTI; RTI; #include "def21160.h" #include "defTS201.h" .GLOBAL .GLOBAL start; irq0_isr; seg_pmco; .GLOBAL .GLOBAL .SECTION start: start; irq0_isr; program;

.SECTION/PM start:

/* Set up interrupt vector table */ j0 = irq0_isr;; IVIRQ0 = j0;; /************************* Set IRQ0 to edge sensitive ****************************/ BIT SET MODE2 0x1; xr0 = INTCTL;; xr0 = bclr r0 by INTCTL_IRQ0_EDGE_P;; IMASKH = xr0;; /**************************** Enable IRQ0 interrupt ******************************/ BIT SET IMASK 0x100; xr0 = IMASKH;; xr0 = bset r0 by INT_IRQ0_P;; IMASKH = xr0;; /************************* Set global interrupt enable ***************************/ BIT SET MODE1 0x1000; SQCTLST = SQCTL_GIE;; /********************************* Endless loop **********************************/

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 42

do_nothing: NOP; NOP; JUMP do_nothing; start.END:

do_nothing: NOP;; NOP;; JUMP do_nothing;; start.END:

/**************************** Interrupt Service Routine **************************/ irq0_isr: irq0_isr: // Save any registers to stack // Perform any register saves to // stack first //Save return address to stack [j27+=-4] = RETI;; // Reduce to subroutine RDS;; // Perform required operation here // Perform required operation here // Disables all further interrupts and // restore return address from stack RETIB = [j27+0x4];; j27 = j27 + 4;; // Modify stack pointer // Restore any registers from stack // Restore any other registers that // were saved to the stack here // Return from interrupt and allow for // interrupts to occur again RETI (ABS)(NP); [j27+=j31] = RETIB;;

RTS(LR)

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 43

8.Soporte para sistemas operativos


Como ya se mencion el TigerSHARC soporta sistemas operativos; las caractersticas que se mencionan a continuacin hacen esto posible.

8.1.Cambio de contexto
El ADSP-TS201 tiene la habilidad de salvar y/o recuperar de una pila en 2 bloques de memoria interna, ms de 8 registros por ciclo de reloj. Esta capacidad de guardar/recuperar rpidamente, le permite al TigerSHARC atender de manera eficiente las interrupciones y realizar rpidos cambios de contexto (capacidad que habilita al TigerSHARC para soportar sistemas operativos multitarea)

8.2.Anidamiento de llamadas e interrupciones


Las direcciones de retorno de llamadas e interrupciones anidadas (junto con otros registros que son tambin necesarios), son guardadas por instrucciones especficas en la pila ubicada en la memoria interna del chip, permitiendo una mayor generalidad cuando se usan lenguajes de alto nivel. Interrupciones y llamadas no-anidadas, no necesitan salvar sus direcciones de retorno en la memoria interna, haciendo esto ms eficiente para rutinas cortas no-anidadas.

8.3.Direccionamiento relativo
La mayora de las instrucciones del procesador TigerSHARC, soportan saltos relativos de PC con lo que el cdigo puede ser fcilmente reubicado. Adems, la mayora de las referencias de ubicacin de datos son relativas, lo que significa que cualquier programa puede acceder a un bloque de datos ubicado en una direccin relativa a un registro base.

Aspectos fundamentales, ADSP-TS201 TigerSHARC, PG 44

9.Bibliografa y Agradecimientos
9.1.Bibliografa
1. ADSP-TS201 TigerSHARC Processor Hardware Reference. Analog Devices, Inc. 2. ADSP-TS201 TigerSHARC Processor Programming Reference. Analog Devices, Inc. 3. De Wikipedia, la enciclopedia libre. 4. Codificacin de Canal. Turbocodificacin. Matilde Snchez, Javier Ramos; Universidad Carlos III de Madrid. 5. Decodicador de Viterbi. Alberto Rodrguez Garca, Oscar Maroto Hernando. 5 de abril de 2003. 6. ADSP-TS20x TigerSHARC Processor Boot Loader Kernels Operation (EE-200), Analog Devices, Inc. 7. Considerations for porting code from the ADSP-TS101S TigerSHARC processor to the ADSP-TS201S TigerSHARC processor (EE-205), Analog Devices, Inc. 8. ADSP-TS201S TigerSHARC Embedded Processor Data Sheet. Analog Devices, Inc. 9. Explaining the Branch Target Buffer on the ADSP-TS101. Analog Devices, Inc. 10. SHARC DSPs to TigerSHARC Processors Code Porting Guide (EE-241). Analog Devices, Inc.

9.2.Agradecimientos

Al Altsimo Dios, Creador del cielo y de la tierra, fuente de toda sabidura y conocimento, y mi inspiracin. A mi profe de Tcnicas Digitales III, Guillermo Friedrich, por su gran paciencia y por su colaboracin para que este informe sea algo ms que un mero traducir hojas de datos y referencias de hardware y software. A todos muchas pero muchas GRACIAS!!!

Dios les re bendiga!!!