<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">
<!-- Generado by OboLog XML-O-Matic Script -->
<channel>
	<title><![CDATA[UNIDAD SIMD Y PROCESAMIENTO DE IMAGEN]]></title>
	<link>http://unidadsimd.obolog.com</link>
	<description>
Universidad Nacional Experimental Politécnica Antonio José de Sucre
Post-Grado: Maestría en Ingeniería Electrónica
Materia: Electrónica Integrada
Profesor: Ing. Angel Custodio Ph D
Alumno: Ing. Edgart Marchán
edgartmarchan@cantv.net 
</description>
	<language>es-es</language>
	<pubDate>Sat, 22 Nov 2008 17:25:07 +0100</pubDate>
	<lastBuildDate>Sat, 22 Nov 2008 17:25:07 +0100</lastBuildDate>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs>
	<generator>OboLog XML-O-Matic Script</generator>
	<managingEditor>webmaster@obolog.com</managingEditor>
	<webMaster>webmaster@obolog.com</webMaster>
	<image>
		<url>http://www.obolog.com/img/obolog-blog-gratis.png</url>
		<title><![CDATA[UNIDAD SIMD Y PROCESAMIENTO DE IMAGEN]]></title>
		<link>http://unidadsimd.obolog.com</link>
	</image>
	<item>
		<title>CPLD</title>
		<link>http://unidadsimd.obolog.com/cpld-83442</link>
		<description>
			<![CDATA[
			<h1>Estructura y funcionamiento de los CPLD.</h1>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Los CPLD son dispositivo l&oacute;gicos programables con una
complejidad entre los dispositivos&nbsp;PLA y FPGA.&nbsp; La caracter&iacute;stica
principal comun entre los CPLD y PAL, es la configuraci&oacute;n de memoria
no-volatil, y con respecto a los dispositivo FPGA,&nbsp; la caracter&iacute;stica
com&uacute;n de &eacute;ste &uacute;ltimo es que posee un desarrollo de compuertas&nbsp;de grande
densidades, con la diferencia que los FPGA, tienen mayor densidad que
los CPLD. A modo general un CPLD es como si se tuviera varios PLD, tipo
PAL,&nbsp;dentro de un s&oacute;lo chip. el tama&ntilde;o mas grande los CPLD
permite&nbsp;implementar &nbsp;ecuaciones l&oacute;gicas o dise&ntilde;os mas complicados.&nbsp; la
programaci&oacute;n de estos dispositivos es generalmente en lenguajes de
descripci&oacute;n de&nbsp;hardware&nbsp;, por ejemplo, VHDL o Verilog.</p>
<p>Dispositivos L&oacute;gicos Programables Complejos (CPLD)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Existen dos tipos de arquitectura de los CPLD: 1)
Arquitectura de&nbsp;Matriz de suma de productos y 2) Arquitectura, Look-up
Table (LUT), tabla de datos.</p>
<p><strong><em><span style="text-decoration: underline;">Matriz&nbsp;de Suma de Productos </span></em></strong></p>
<p>Se relacionan con un mayor n&uacute;mero de interconexi&oacute;n de secciones de
compuertas programables, tales secciones pueden ser otros PLD, es decir
el CPLD puede contener similares PLD de baja densidad, "PAL",
interconectados entre s&iacute;, en un solo chip.</p>
<p align="center"><img title="44606-40891.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40891_o.jpg" alt="44606-40891.jpg" /></p>
<p align="center">Fig. 1 Diagrama de bloque de un CPLD (Por ALTERA)</p>
<p align="center"><img title="44606-40926.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40926_o.jpg" alt="44606-40926.jpg" /></p>
<p align="center">Fig. 2 Diagrama de bloque de un CPLD del fabricante XILINX</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; La estructura principal son los bloques de&nbsp;matriz
l&oacute;gicos (LAB) o bloques de Funci&oacute;n (Funtion Block), que se comunican en
un bus interno con&nbsp;la matriz&nbsp;de Interconexi&oacute;n Programable (PIA) o
tambi&eacute;n llamado Fast CONNECT Switch Matrix. Cada bloque es un grupo de
16 macroceldas; tienen entradas y salidas similares a los PLD de baja
densidad, con capacidad de programarse. El n&uacute;mero de pines de entrada
y/o salida depender&aacute; del dispositivo, para el caso de la figura 1,
corresponde al modelo MAX7000S, basados en celdas EEPROM, del
fabricante ALTERA, de 6 a 16 pines de entrada y salida, estas &uacute;ltimas
se encuentran en el bloque de control de entrada y salida, la cual
tambi&eacute;n posee conexi&oacute;n con el PIA, y en la figura 2, el bloque de
salida y entrada I/O, poseen un bufer&nbsp;para los dispositivos de entrada
y salida.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cada bloque de funci&oacute;n, para el caso de XILINX modelo
de ejemplo "XC9500", esta compuesto de 18 macroceldas independientes.
Los bloques funcionales tambi&eacute;n reciben una se&ntilde;al (reloj)&nbsp;de
sincronismo global, una se&ntilde;al para habilitar la salida y una se&ntilde;al para
habilitar el reset/set. El bloque funcional&nbsp;genera 18 salidas que
maneja el FAST CONNECT. estas 18 salidas y su correspondiente se&ntilde;ales
de habilitaci&oacute;n son gobernadas por el bloque I/O. la l&oacute;gica dentro de
los bloques funcionales es implementada utilizando la representaci&oacute;n
de&nbsp; suma de producto</p>
<p align="center"><img title="44606-40925.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40925_o.jpg" alt="44606-40925.jpg" /></p>
<p align="center">Fig&nbsp;3&nbsp; Bloque de Funci&oacute;n</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Las macroceldas pueden ser configuradas individualmente por
una funci&oacute;n de registro.&nbsp;5&nbsp;matriz de compuertas &nbsp;AND, directos al
"product terms&nbsp;"(termino de producto), son utilizados como entrada de
datos primario (para las compuertas OR y XOR) para implementar
funciones combinacionales, o como entradas de control incluyendo el
reloj, se&ntilde;ales set/reset, y se&ntilde;al de habilitaci&oacute;n de salida. Los
registros de las macroceldas pueden ser configurados como FLIP-FLOP
tipo D o FLIP-FLOP tipo T. o este puede ser omitido por una operaci&oacute;n
combinacinoal. Cada registro soporta operaciones set y reset
asincronos. durante el encendido del dispositivo, todos los registro
son inicializados al estado predefinido por el usuario.</p>
<p align="center">&nbsp;<img title="44606-40918.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40918_o.jpg" alt="44606-40918.jpg" /></p>
<p align="center">Fig. 4 Macrocelda con bloque de funci&oacute;n</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Las se&ntilde;ales de contro global son desarrolladas
individualmente en cada macrocelda, incluyendo se&ntilde;al de reloj, se&ntilde;al de
set/reset, y la se&ntilde;ales de habilitaci&oacute;n. la macrocelda registra se&ntilde;ales
de reloj de cada uno de los tres relojes globales o del termino
producto. La se&ntilde;al GSR, es una se&ntilde;al de Reset/set, de entrada que
permite que sea definido por el usuario.</p>
<p align="center"><img title="44606-40919.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40919_o.jpg" alt="44606-40919.jpg" /></p>
<p align="center">&nbsp;Fig. 5 Reloj de Macrocelda</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El termino producto, controla&nbsp;que la matriz&nbsp;de las 5 AND
sean&nbsp;asignadas a cada macrocelda, un ejemplo pudiera ser que todas las
AND sean manejadas por una OR.&nbsp; El inconveniente de esto es que se
evidencia el retardo de un&nbsp;termino&nbsp;producto&nbsp;a otro como se observa en
la siguiente figura.</p>
<p align="center"><img title="44606-40920.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40920_o.jpg" alt="44606-40920.jpg" /></p>
<p align="center">Fig. 6 L&oacute;gica de la Macrocelda utilizando&nbsp;termino producto&nbsp;</p>
<p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img title="44606-40921.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40921_o.jpg" alt="44606-40921.jpg" /></p>
<p align="center">Fig. 7 L&oacute;gica de un&nbsp;termino producto&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El FAST CONNECT Switch Matriz conecta las se&ntilde;ales a la entrada
del bloque de funci&oacute;n; tanto las salidas del bloque I/O como las
salidas del bloque de funci&oacute;n las manejas el Fast Connect Switch
Matrix, cualquiera de estas pueden ser seleccionadas, a trav&eacute;s de la
programaci&oacute;n del usuario, para poder manejar cada bloque con un retardo
uniforme.</p>
<p align="center"><img title="44606-40922.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40922_o.jpg" alt="44606-40922.jpg" /></p>
<p align="center">Fig. 8 Fast Connect Switch Matrix</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El Bloque I/O es la interfaz entre la l&oacute;gica interna y los
pines de entrada y salida del dispositivo CPLD. Cada bloque de I/O
incluye un bufer de entrada y un manejador de salida; un multiplexor
que selecciona la salida habilitada, y tambi&eacute;n incluye una se&ntilde;al de
control de tierra para la programaci&oacute;n del usuario. El bufer de entrada
es compatible con tensi&oacute;n de 5 V CMOS, 5 V TTL, y&nbsp;se&ntilde;ales &nbsp;de voltaje
de 3.3 V. El bufer de entrada usa internamente un suministro de
potencia de 5 V ( Vccint), para asegurarse que el umbral de entrada
permanezca constante y no varie con el voltaje Vccio. la se&ntilde;al de
salida se habilita de la siguiente formas: una se&ntilde;al puede ser generada
por el&nbsp;termino producto&nbsp;de la macrocelda, cualquiera de las se&ntilde;ales
globales de OE, o por una se&ntilde;al de tercer estado GTS.</p>
<p align="center"><img title="44606-40923.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40923_o.jpg" alt="44606-40923.jpg" /></p>
<p align="center">Fig. 9 Bloque I/O</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cada salida tiene un control independiente de "Slew Rate"
(M&aacute;xima variaci&oacute;n del voltaje de salida con respecto al tiempo); este
control permite reducir o controlar&nbsp;el ruido en el sistema, con s&oacute;lo
modificar el Tslew.</p>
<p align="center"><img title="44606-40924.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40924_o.jpg" alt="44606-40924.jpg" /></p>
<p align="center">Fig. 10&nbsp;&nbsp; Slew Rate</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Estos &nbsp;CPLD poseen circuito con memoria EEPROM; que
permiten reescribirse muchas veces, dependiendo del fabricante puede
ser hasta 10.000 veces, como es el caso del fabricante XILINX, los
modelos de la serie XC9500.</p>
<p><strong><em><span style="text-decoration: underline;">Tabla&nbsp;de datos (Look-Up Table) </span></em></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esta arquitectura se basa en la implementaci&oacute;n l&oacute;gico
de bus de interconexi&oacute;n de filas y columnas, estas interconexiones
tambi&eacute;n proveen conexi&oacute;n al bloque de&nbsp;matriz l&oacute;gicos (LAB). El LAB
consiste de varios elementos l&oacute;gicos (LE); seg&uacute;n el modelo pueden ser
10 LE, por cada LAB. Los LE es una peque&ntilde;a unidad l&oacute;gica que proveen
una eficiente implementaci&oacute;n de funciones l&oacute;gicas del usuario. El
Multitrack Interconnect provee una r&aacute;pida conexi&oacute;n entre los LAB.</p>
<p align="center">&nbsp;<img title="44606-40896.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40896_o.jpg" alt="44606-40896.jpg" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fig.&nbsp;11 Diagrama de bloque de la arquitectura de&nbsp;tabla&nbsp;de datos</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Look-Up Table (LUT), Es un circuito que implementa una
funci&oacute;n de l&oacute;gica combinacional&nbsp; para almacenar una lista de valores de
salida que correspondan a todas las posibles combinaciones de entradas,
es decir un n&uacute;mero de elementos almacenados son usados; para resumir
una funci&oacute;n l&oacute;gica, almacenando cada funci&oacute;n como una tabla de la
verdad, esto se ilustra en la figura 12.</p>
<p align="center">&nbsp;</p>
<p align="center">&nbsp;</p>
<p align="center">&nbsp;<img title="44606-40897.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40897_o.jpg" alt="44606-40897.jpg" /></p>
<p align="center">Fig.&nbsp;12 Look-Up Table</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tomando como ejemplo la tabla de la verdad de la figura 12,&nbsp; como comparador A<sub>1</sub>A<sub>0</sub>=B<sub>1</sub>B<sub>2</sub> , hace que la salida l&oacute;gica AEQB = 1 l&oacute;gico. Una matriz&nbsp;de 16 flip-flops (Q<sub>0</sub> hasta Q<sub>15</sub>), contiene data de todas las posibles combinaciones A<sub>1</sub>A<sub>0</sub>B<sub>1</sub>B<sub>0</sub>,
por cada combinaci&oacute;n se necesita un flip-flop. La entrada de cada LUT
son decodificada por un decodificador de direcciones, cada salida del
decodificador activa una buffer de tres estados, que pasa por un bloque
de salida de flip-flop. Cuando se activa un buffer para pasar el
contenido del flip-flop, el resto de los buffer permanecen en estado de
alta impedancia, de esta manera se bloquea la data de los otros
flip-flops. El contenido de los flip-flop son cargados cuando el LUT es
programado, con las funciones requeridas. Continuando con el ejemplo de
la figura 12, los 16 elementos almacenados en dicha tabla, combinados ,
para &nbsp;seleccionar una salida combinacional y para interconectar con
otras partes del chip, es llamado Elemento L&oacute;gico (LE). La funci&oacute;n del
desempe&ntilde;o del elemento l&oacute;gico es similar a la de macroceldas en los PLD
de suma de producto. La estructura de un elemento l&oacute;gico se muestra en
la figura 13.</p>

<div style="text-align: center">&nbsp;<img title="44606-40898.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40898_o.jpg" alt="44606-40898.jpg" /></div>
<p align="center">Fig.&nbsp;13 Elemento L&oacute;gico</p>
<p>El circuito "Cascade Chain",&nbsp; permite al usuario programar la funci&oacute;n boleana, este circuito puede ser de compuertas AND o OR.</p>
<p align="center">&nbsp;<img title="44606-40899.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40899_o.jpg" alt="44606-40899.jpg" /></p>
<p align="center">Fig.&nbsp;14 Operaci&oacute;n&nbsp;en Cascada</p>
<p>Bloque de&nbsp;Matriz L&oacute;gico (LAB), consiste en un n&uacute;mero de elementos
l&oacute;gicos e interconectados localmente; el bloque LAB, esta conectado con
el resto del dispositivo por medio de una serie de columnas y filas
interconectadas, lo cual para este caso el fabricante ALTERA ha llamado
FastTrack Interconnect,&nbsp;tambi&eacute;n se le conoce como Multitrack
Interconnect.</p>
<p align="center">&nbsp;<img title="44606-40901.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40901_o.jpg" alt="44606-40901.jpg" /></p>
<p align="center">Fig.&nbsp;15 Bloque de&nbsp;Matriz L&oacute;gicos</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Embedded Array Block (EAB), este bloque es una
matriz&nbsp;de 2048 elemento de almacenaje que pueden ser usado
eficientemente en la implementaci&oacute;n de funciones l&oacute;gicas complejas.</p>
<p>El FLEX10K es un dispositivo del fabricante ALTERA, tiene una&nbsp;matriz de
6 filas por 24 columnas de &nbsp;bloque de&nbsp;matriz l&oacute;gico (LAB), es decir que
tendr&aacute; 144 LAB, que a su ves son 8 x 144LAB= 1152 elementos l&oacute;gicos,
estos elementos tambi&eacute;n tienen 6 EAB; 6X2048 = 12288 bits de almacenaje
de EAB, note que un EAB tiene mas capacidad de almacenaje que un LAB
combinado.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Algunos los dispositivos basados en LUT, son de
tecnolog&iacute;a de memoria de acceso aleatorio est&aacute;tica (SRAM), la ventaja
de esta configuraci&oacute;n es que este puede ser fabricado en densidades muy
altas de celdas de almacenajes y programar r&aacute;pidamente, comparado con
un dispositivo, (suma de producto, SOP), basado en EEPROM. La
desventaja es que las celdas SRAM, son vol&aacute;tiles; es decir que deben
reconfigurarse cada vez que se reinicia el sistema.</p>
<p align="center">&nbsp;<img title="44606-40902.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40902_o.jpg" alt="44606-40902.jpg" /></p>
<p align="center">Fig.&nbsp;16 Diagrama en bloque de un dispositivo de estructura de datos como es el caso del FLEX10K del fabricante ALTERA.</p>

<p>El mismo&nbsp; fabricante ALTERA, posee el modelo MAXII, "tabla de datos
LUT", tal modelo contiene un bloque de memoria "falsh", dentro del
dispositivo. La mayor&iacute;a de estos almacenajes de memorias flash, son
particionadas como un bloque de programaci&oacute;n o configuraci&oacute;n de memoria
flash (CFM);&nbsp; este provee un almacenaje no vol&aacute;til; la CFM descarga y
configura la l&oacute;gica. &nbsp;Una porci&oacute;n peque&ntilde;a de la memoria flash es
utilizado para&nbsp; la&nbsp; data de usuario, este peque&ntilde;o bloque de memoria
UFM, provee una almacenaje para el usuario de prop&oacute;sito general, en
este bloque se provee la conexi&oacute;n del puerto programable para el
arreglo l&oacute;gico de lectura y escritura.</p>
<p align="center">&nbsp;<img title="44606-40892.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40892_o.jpg" alt="44606-40892.jpg" /></p>
<p align="center">Fig. 17 Diagrama de bloque del modelo MAXII</p>
<p align="center">&nbsp;<img title="44606-40893.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40893_o.jpg" alt="44606-40893.jpg" /></p>
<p align="center">Fig. 18 Diagrama del bloque de memoria UFM</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El bloque UFM, puede ser utilizado como el EEPROM
serial, para almacenar informaci&oacute;n no vol&aacute;til, este bloque se conecta
al bloque de arreglo l&oacute;gico a trav&eacute;s del bus Multitrack interconectado,
de esta manera se permite la interface con el bloque de elemento
l&oacute;gico.</p>
<h1>FABRICANTES DE CPLD</h1>

<ul>
<li>1- Altera</li>
</ul>
<p>Ha desarrollado tres familias de la categor&iacute;a CPLD. MAX5000, MAX7000 y
MAX9000. El MAX5000 representa la tecnolog&iacute;a mas antigua que ofrecen
soluciones de costo efectivo; el MAX7000 ofrece altas capacidades
l&oacute;gicas y mayor desempe&ntilde;o en velocidad; el MAX9000 es similar al
MAX7000, excepto que el MAX9000 ofrece una mayor capacidad l&oacute;gica. El
MAX7000 contiene bloques de&nbsp;matrix l&oacute;gicos LAB,&nbsp;matrix de interconexi&oacute;n
programable PIA, esta serie fueron desarrollados en tecnolog&iacute;a EPROM y
EEPROM, la desventaja de esta serie es que se debe programar fuera del
circuito de desarrollo; desde 1996 Altera, desarrollo el modelo
MAX7000S, capaz de programarse en l&iacute;nea, es decir en el mismo circuito.
Altera FlashLogic CPLDs, anteriormente conocido como Intel`s FlEXlogic,
caracterizado por programarse dentro del sistema y provee bloques SRAM
en el dispositivo. La configuraci&oacute;n de compuertas AND-OR, son por
celdas SRAM, respaldadas por celdas EPROM o EEPROM. Al realizar un
suministro de potencia las celdas SRAM son cargadas con un copia de la
memoria EEPROM o EPROM, pero es la celda SRAM la que controla la
configuraci&oacute;n del dispositivo</p>
<ul>
<li>2- Atmel</li>
</ul>
<p>Ofrece el modelo ATF1500A, alto desempe&ntilde;o y alta densidad de
compuertas, construido con tecnolog&iacute;a FLASH, con un retardo de 7.5 ns
de pin a pin.</p>
<ul>
<li>3- AMD</li>
</ul>
<p>Ofrece una familia de CPLD con 5 sub-familias llamadas Mach 1 a Mach 5.
Cada dispositivo Macth, contiene bloques con m&uacute;ltiplos PAL; Match 1 Y 2
consiste en el modelo 22V16PALs, Match 3 y 4 consiste en el modelo
34V16PALs y el Match 5 ofrece modelos parecidos a los anteriores pero
con mayor desempe&ntilde;o en velocidad. Todos los Match est&aacute;n basados en
tecnolog&iacute;a EEPROM. El rango de capacidad l&oacute;gicas est&aacute;n cercas de 2000 a
5000 compuertas.</p>
<ul>
<li>4- Cypress Semiconductor</li>
</ul>
<p>Son similares a los dispositivos AMD y Lattice en muchas maneras; el
Cypress CPLD, llamado FLASH370, esta basado en tecnolog&iacute;a FLASH EEPROM,
y ofrece un desempe&ntilde;o en el retardo de velocidad de 8.5 a 15 ns de pin
a pin, la desventaja es que no es programable en el sistema.</p>
<ul>
<li>5- Lattice Semiconductor</li>
</ul>
<p>Lattice ofrece un completo rango de CPLD; con dos l&iacute;neas de productos
principales: Lattice pLSI que consiste en tres familias de EEPROM de
CPLD; y el ispLSI que son los mimos dispositivos pLSI, con la
diferencia de los ispLSI son programables en el sistema. Los rangos de
capacidades l&oacute;gicas est&aacute;n cercas de 1200 a 4000 compuertas y el retardo
de pin a pin es de 10 ns. El Lattice de la serie 3000 representa su
desarrollo mas grande con 5000 compuertas&nbsp; y un retardo de 10 a 15 ns.</p>
<ul>
<li>6- Xilinx</li>
</ul>
<p>Ofrecen el modelo XC7000 y el XC9500; hay dos familias principales en
el XC7000: la serie 7200 y 7300, el 7200 es un dispositivo
moderadamente peque&ntilde;o con 600 a 1500 compuertas; y con un retardo de
pin a pin de 25 ns. El 7300 ofrece 3000 compuertas y lo otro que
diferencia al 7200 es que el 7300 incluye dos compuertas OR en cada
macroceldas. Finalmente el XC9500 ofrece la programaci&oacute;n dentro del
&nbsp;circuito, con una capacidad de 6200 compuertas y un retardo de 5 ns.</p>

<h1>Construcci&oacute;n y Dise&ntilde;o</h1>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Las v&iacute;as est&aacute;n compuesta de 100 porciento metal de
aluminio diluido, aqu&iacute; se identificar&aacute; como Metal 2, los contactos son
100 porciento metal de aluminio diluido, identificado como Metal 1.
Como caracter&iacute;sticas especiales posee tecnolog&iacute;a "FLASH FAST". Las
compuertas en el canal N son del orden de 0.45 micra, y el canal P son
del orden de 0.5 micra.&nbsp;El dispositivo esta formado por una capa de
nitruro de silicio sobre otra capa de &nbsp;di&oacute;xido de silicio. Posee dos
capas de polisilicio. El PLOY 1 fue utilizada exclusivamente en
compuertas flotantes, y POLY 2 (polisilicio y silicio de tusteno) fue
utilizado para todas las compuertas est&aacute;ndar, en la matrix de lineas de
programas y de palabra. La matrix&nbsp;de celdas programables son EEPROM
(tecnolog&iacute;a FAST FLASH), el Metal 2, ser&aacute; utilizado para las l&iacute;neas de
programa y de la palabra de dato. El Metal 1 distribuye la tierra GND y
una l&iacute;nea de un bit. El diel&eacute;trico se encuentra entre las capas POLY es
de ONO "&oacute;xido-nitruro-&oacute;xido".&nbsp; el color anaranjado es Nitruro de
Silicio, el color azul es Metal 1 y 2, el color amarillo es &Oacute;xido, el
color verde es polisilicio, color rojo difusi&oacute;n del canal P y N, y el
color gris es el substrato P. Ver figura 12.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Si el dispositivo es borrable el&eacute;ctricamente EEPROM, sus
conexiones es a base de transistores &nbsp;MOS de puerta flotante, que
contiene una puerta adicional embebida en el aislante entre la puerta
normal (accesible desde el exterior) y el substrato. esta puerta extra,
sin conexi&oacute;n al exterior y completamente rodeada de material aislante,
es la puerta flotante. los transistores MOS, inicialmente no tienen
carga en la puerta flotante, de forma que act&uacute;an como transistores
normales: en cada linea vertical se realiza la operaci&oacute;n l&oacute;gica Y; es
necesario que todas las l&iacute;neas horizontales est&eacute;n bajas (a=b=c=d=L)
para que las l&iacute;neas verticales sean altas (x=y=z=H), y basta que una de
las entradas sea baja (a=L, por ejemplo) para que su l&iacute;nea
correspondiente sea alta, y por tanto los transistores cuyas puertas
est&aacute;n conectadas a esa l&iacute;nea de entada pasan a conducci&oacute;n, y entonces
las l&iacute;neas verticales se hacen L. En otras palabras, los transistores
hacen el punto de conexi&oacute;n entre las l&iacute;neas verticales y horizontales.
Para desconectar un punto de conexion (un transistor), en la fase de
programaci&oacute;n se aplica una tensi&oacute;n relativamente elevada (15 a 20)V en
la puerta del transistor a desconectar; esta tensi&oacute;n hace que, por un
proceso f&iacute;sico conocido como efecto t&uacute;nel, atraviesen electrones desde
el substrato por la fina capa de aislante y queden almacenados en la
puerta flotante. En definitiva la introducci&oacute;n de electrones en la
puerta flotante desconecta el transistor del circuito, ya que siempre
estar&aacute; cortado (estado off).</p>
<p align="center">&nbsp;<img title="44606-40894.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-40894_o.jpg" alt="44606-40894.jpg" /></p>
<p align="center">Fig. 12 Construcci&oacute;n de un CPLD</p>
<p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img title="44606-41048.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-41048_o.jpg" alt="44606-41048.jpg" /></p>
<p align="center">Fig. 13 l&iacute;nea de productos&nbsp;</p>

<p><strong><em><span style="text-decoration: underline;">CRITERIOS DE SELECCI&Oacute;N</span></em></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Es importante tomar en cuenta la densidad de compuertas que
se requiere, y para ello es necesario determinar el n&uacute;mero de
macroceldas que debe poseer el dispositivo; tambi&eacute;n es importante
determinar el n&uacute;mero de entradas y de salida, seg&uacute;n la ecuaci&oacute;n l&oacute;gica
obtenida. los retardos de propagaci&oacute;n&nbsp; entre la se&ntilde;al de entrada y de
salida se debe de tomar en cuenta cuando se esta trabajando con altas
velocidades de procesamiento. hay sistemas que trabajan con diferentes
niveles de tensi&oacute;n por lo que es importante conocerlos tomarlo en
cuenta en el dispositivo CPLD. estos niveles de tensi&oacute; pueden oscilar
entre 1.5 V a&nbsp;&nbsp; 5 V.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; En la metodolog&iacute;a modernas de dise&ntilde;os digitales, para
sistemas de relativa complejidad, en lugar de utilizar descripciones
del comportamiento del sistema en forma de tablas (tablas de la verdad,
de transici&oacute;n de estado, etc) se utilizan lenguajes espec&iacute;ficos, los <strong>lenguajes de descripci&oacute;n de hardware o HDL (Hardware Description Language)</strong>, que pueden describir tanto el comportamiento como la estructura de un sistema.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>Dise&ntilde;o de un decodificador binario de 2 a 4.</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Paso 1:</span> Se realiza la descripci&oacute;n del sistema,
de forma que el entorno de desarrollo pueda generar una representaci&oacute;n
interna del mismo. se puede optar entre una descripci&oacute;n estructural,
con ayuda de un editor gr&aacute;fica de captura de esquemas, o una
descripci&oacute;n del comportamiento con un lenguaje HDL.</p>

<p align="center"><img title="44606-41047.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-41047_o.jpg" alt="44606-41047.jpg" /></p>
<p align="center">Fig. 14 &nbsp;Descripci&oacute;n del decodificador: a) estructural; b) funcional.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Paso 2:</span> Se realiza una compilaci&oacute;n funcional,
con la que se verifican posibles errores en el dise&ntilde;o (salidas
cortocircuitadas, entradas flotantes...) y adem&aacute;s se genera una
representaci&oacute;n interna del sistema, con la que puede efectuarse una
simulaci&oacute;n funcional del mismo. en esta fase la simulaci&oacute;n es s&oacute;lo
funcional y es independiente de la tecnolog&iacute;a de implementaci&oacute;n, que es
la que depende de los retardo que se produzcan.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Paso 3:</span> En el software (compilador) se
especifica la tecnolog&iacute;a de implementaci&oacute;n. Se proyecta el dise&ntilde;o al
tipo de celdas l&oacute;gicas, celdas de entradas y salida, y recurss de
conexi&oacute;n del CPLD seleccionado. tras la compilaci&oacute;n se obtiene una
representaci&oacute;n interna del sistema implementado y se genera un fichero
informativo donde se detalla el porcentaje de ocupaci&oacute;n del
dispositivo, las asignaciones de celdas y pines de entrada y salida, y
otros..)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Paso 4:</span> Se hace una simulaci&oacute;n y an&aacute;lisis
temporal. con la informaci&oacute;n detallada de las caracter&iacute;sticas t&eacute;cnicas
de cada uno de sus componentes de la biblioteca de elementos se puede
realizar una nueva simulaci&oacute;n mas real y se puede establecer los
tiempos de retardos.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;">Paso 5:</span> Una vez compilado y simulado el
circuito; se debe configurar f&iacute;sicamente el CPLD, lo que puede
realizarse f&iacute;sicamente con un programador de PLD o en el propio sistema
(ISP). Es preferible utilizar este &uacute;ltimo para reducir los psibles
da&ntilde;os mec&aacute;nicos en los pines del dispositivo, por lo tanto suelen
configurarse los CPLD en la propia tarjeta del sistema final, con una
programaci&oacute;n ISP (In-System Programming), esta opci&oacute;n se utiliza en
circuitos borrables el&eacute;ctricamente EEPROM o configurables con celdas
SRAM. Com&uacute;nmente se utiliza el protocolo JTAG (joint Test Action
Group). que utiliza cuatro lineas para transferir bit a bit entre el
computador y la tarjeta del sistema la informaci&oacute;n de configuraci&oacute;n.</p>
<p align="center"><img title="44606-41041.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-41041_o.jpg" alt="44606-41041.jpg" /></p>
<p align="center">Fig. 15 Esquema de conexi&oacute;n utilizando el programador CPLD</p>
<p align="center">&nbsp;</p>
<p align="center"><img title="44606-41042.jpg" src="http://static.obolog.com/multimedia/fotos/45000/44606/44606-41042_o.jpg" alt="44606-41042.jpg" /></p>
<p align="center">Fig 16 Esquema de conexi&oacute;n utilizando un cable de descarga</p>

<p>Referencias</p>
<p>[1] Antonio Lloris Ruiz, Alberto Prieto Espinosa, Luis Parrilla Roure:<em> Sistemas </em>Digitales; &nbsp;Mc Graw Hill, pag. 501-535; &nbsp;2003</p>
<p>[2] <a href="http://www.xilinx.com/">http://www.xilinx.com/</a></p>
<p>[3] <a href="http://www.altera.com/">http://www.altera.com/</a></p>
<p>[4] Digital Design with CPLD applications and VHDL</p>
<p>[5]&nbsp; <strong>Altera Device Package Information Data Sheet</strong></p>
<p>[6]&nbsp; <strong>XC9500 In-System Programmable CPLD Family (XILINX)</strong></p>			<p>
			Leer <strong><a href="http://unidadsimd.obolog.com/cpld-83442" title="CPLD">CPLD</a></strong> en <a href="http://unidadsimd.obolog.com" title="Mi blog">UNIDAD SIMD Y PROCESAMIENTO DE IMAGEN</a>
			</p>
			 ]]>
		</description>
				<author>edgart</author>
				<category>dispositivos</category>
				<comments>http://unidadsimd.obolog.com/cpld-83442#formulario</comments>
		<guid>http://unidadsimd.obolog.com/cpld-83442</guid>
		<pubDate>Fri, 09 May 2008 03:59:58 +0100</pubDate>
	</item>
	<item>
		<title>DESCRIPCIÓN DE UN ARTICULO SOBRE LA UNIDAD SIMD RECONFIGURABLES PARA EL PROCESAMIENTO DE IMAGEN</title>
		<link>http://unidadsimd.obolog.com/descripcion-articulo-unidad-simd-reconfigurables-48906</link>
		<description>
			<![CDATA[
			<p>
Para el lector que no esta familiarizado con las unidades SIMD, y otros aspectos que se desarrollan en el art&iacute;culo, se recopil&oacute; una breve informaci&oacute;n con ejemplos, muy similares a la ejecuci&oacute;n del desarrollo de este art&iacute;culo, lo cual se encuentra posterior al desarrollo de la explicaci&oacute;n del art&iacute;culo en cuesti&oacute;n que sigue a continuaci&oacute;n: 
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Parte del tema de la introducci&oacute;n y motivaci&oacute;n del art&iacute;culo habla un poco de la rese&ntilde;a hist&oacute;rica y una breve descripci&oacute;n de los procesadores PowerPC, lo cual tambi&eacute;n se profundiza en este compendio, mas adelante. Para hacer la explicaci&oacute;n mas din&aacute;mica tomaremos como referencia la siguiente figura 1. 
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Virtex-4 FX PowerPC <img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44881_o.jpg" alt="48906-44881.jpg" title="48906-44881.jpg" width="716" height="495" /> 
</p>
<p align="center">
Figura 1&nbsp; &nbsp; 
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El art&iacute;culo manifiesta dise&ntilde;ar o implementar a la medida una unidad SIMD dentro de un dispositivo l&oacute;gico programable &quot;FPGA&quot;, utilizando la familia de FPGA Virtex-4 serie FX de XILINX. &iquest;C&oacute;mo lo realiza?, empezaremos primero por entender esta familia de FPGA que se propone. Esta familia de FPGA posee un controlador de la Unidad de Procesamiento Auxiliar (APU), que provee una interface con alto ancho de banda entre la l&oacute;gica configurable de la FPGA y el procesador PowerPC 405 integrado. Un Fabric co-processor modules (FCM), &quot;m&oacute;dulo coprocesador&quot;, implementado en la FPGA, esta conectado al procesador PowerPC embebido, a trav&eacute;s de la interface del controlador APU, para habilitar el acelerador hardware configurable, definido por el usuario. La funci&oacute;n de estos aceleradores hardware es operar como una extensi&oacute;n del procesador PowerPC 405, con lo que descarga de la CPU exigentes tareas computacionales. Esta &uacute;ltima oraci&oacute;n es uno de los objetivos principales de la FPGA, manejar data de alto contenido de actividad computacional a altas velocidades y tambi&eacute;n es una de las razones por la que se seleccion&oacute; para el desarrollo del experimento de este art&iacute;culo, tal experimento consiste en medir el rendimiento en dos procesadores PowerPC uno es el modelo 7400 y el otro 970FX, los cuales fueron denominados OSSIAN, mediante la ejecuci&oacute;n de una aplicaci&oacute;n de estabilizaci&oacute;n de imagen en modo &quot;batch&quot;. Obviamente procesar una imagen en tiempo real es una tarea de alto contenido de data. Mas adelante volveremos a tocar este punto. 
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp; El controlador APU permite extender el juego de instrucciones nativas PowerPC 405, que son ejecutadas en el FCM. Las instrucciones que soporta la APU son clasificadas en tres categor&iacute;as principales: 
</p>
<ul>
	<li>- Instrucciones definidas por el usuario UDI</li>
	<li>- Instrucciones de punto flotante del PowerPC.</li>
	<li>- Instrucciones de APU de carga y almacenaje (load/store).</li>
</ul>
<p>
Las instrucciones definidas por el usuario son din&aacute;micamente programadas dentro de otro controlador a trav&eacute;s del registro de control del procesador PowerPC 405. La unidad de punto flotante, &quot; floating-point unit FPU, es un ejemplo de un FCM. El juego de instrucci&oacute;n de punto flotante del PowerPC es decodificado en el controlador APU. Mientras que el c&aacute;lculo se realiza en funci&oacute;n de la FPGA. Para soportar la FPU con diferentes complejidades, el controlador APU permite seleccionar un grupo de instrucciones de punto flotante del procesador PowerPC. Estas instrucciones son ejecutadas en el FCM mientras que otro grupo de funciones son computadas a trav&eacute;s de la emulaci&oacute;n del software FPU o puede ser ignorado completamente. Esto optimiza los recursos de la FPGA mientras se acelera los c&aacute;lculo casi cr&iacute;ticos con la l&oacute;gica dedicada. Esto explica un poco mas la importancia de aplicar la FPGA en este desarrollo del art&iacute;culo, tomando como punto de referencia que se necesita realizar multiplicaciones matriciales, del tama&ntilde;o 8x8 y en tiempo real, resulta una carga computacional muy grande para un solo CPU, mientras que con esta familia de FPGA, posee como cualidad estrat&eacute;gica un controlador APU que no s&oacute;lo sirve de interface para la comunicaci&oacute;n con el PowerPC, sino que es el encargado de direccionar los diferentes subgrupos de instrucciones simult&aacute;neamente. Para entender un poco mas esto se realizar&aacute; una secuencia paso a paso; una vez que la instrucci&oacute;n alcance la etapa de decodificaci&oacute;n, &eacute;sta es simult&aacute;neamente presentada en el bloque de decodificador APU y en el CPU. Si la instrucci&oacute;n es detectada como una instrucci&oacute;n de CPU, el CPU continuar&aacute; ejecutando la instrucci&oacute;n como lo hace normalmente, de otro modo dentro de mismo ciclo, el CPU busca una respuesta en el controlador APU, si el controlador APU reconoce la instrucci&oacute;n, este proveer&aacute; informaci&oacute;n necesaria para respaldar al CPU. Si el controlador APU no responde dentro del mismo ciclo, se genera una instrucci&oacute;n inv&aacute;lida por el CPU. 
</p>
<p>
El procesador PowerPC y el FCM residen en dominios de reloj&nbsp; separados, el m&oacute;dulo de sincronizaci&oacute;n del controlador APU maneja la diferencia de frecuencia de reloj, esto permite al FCM operar a mas baja frecuencia que el procesador. En esta instancia el controlador APU recibe la data resultante del coprocesador (en este caso de la unidad SIMD) y en un buen tiempo de ejecuci&oacute;n env&iacute;a los datos de vuelta al procesador. 
</p>
<p>
La idea de expresar lo antes dicho es para poder entender como se comunica &nbsp;la FPGA con el procesador espec&iacute;ficamente en esta familia FX, que es la que posee el PowerPc 405, tambi&eacute;n para entender como se realiza la aceleraci&oacute;n hardware en la FPGA. Implementar una unidad SIMD en esta FPGA tiene una gran sentido y es que ya cuentas con el procesador y el pipeline para poder trabajar con instrucciones vectoriales, ya que para el procesamiento de imagen se requiere mucho c&aacute;lculos matriciales. Con la ayuda del compilador GCC se&nbsp; genera c&oacute;digo que utiliza el FCM, y al FCM se puede accesar realizando las instrucciones en c&oacute;digo ensamblador o c&oacute;digo C. el GCC genera el c&oacute;digo que utiliza una unidad de punto flotante &nbsp;FCM, para c&aacute;lculos de operaciones de punto flotante. 
</p>
<p>
Haciendo referencia a la multiplicaci&oacute;n de matrices de los coeficientes de la transformada de wavelet de haar (se explica mas adelante), en tiempo real fue muy bien indicado por el art&iacute;culo implementar la unidad SIMD en la FPGA, ya que este dispositivo programable adaptar&aacute; dicha t&eacute;cnica a la medida y no tan s&oacute;lo eso sino que permite implementar a futuro otras transformadas de tipo wavelet, sin necesidad de desmontar la FPGA y el resto de los dispositivo. Para este tipo de estudios donde la exigencia de velocidades y la carga computacional es alta, este dispositivo representa una alternativa poderosa y mas econ&oacute;mica que la tecnolog&iacute;a ASIC. Virtex-4 FPGA contiene tres tipos de familias LX, FX y SX, ofreciendo m&uacute;ltiples caracter&iacute;sticas de selecci&oacute;n y combinaci&oacute;n para todas las aplicaciones complejas. El art&iacute;culo utiliz&oacute; la serie FX por tener implementado no s&oacute;lo el procesador PowerPC sino por la nueva tecnolog&iacute;a de interface del controlador APU ofreciendo todas las ventajas antes nombradas y que no las ten&iacute;an las otras series. Es por eso que la serie FX es para aplicaciones de plataformas embebidas. El Virtex-4 posee 960 pines de entrada/salida, soporta memorias de interface DDR y DDR-2. En este art&iacute;culo el Virtex-4 FX, demostr&oacute; ser una plataforma embebida capaz de implementar una unidad SIMD totalmente reconfigurable a un precio mas bajo que desarrollar una unidad SIMD (ILLIAC IV)&nbsp;para un objetivo espec&iacute;fico. Para tener una cierta idea de las unidades SIMD y de otros aspectos que habla el art&iacute;culo, como lo es profundizar en la carga computacional de las transformadas de wavelet en la FPGA, se desarrollo el siguiente contenido: 
</p>
<p>
&nbsp;
</p>
<p>
La Unidad SIMD es una t&eacute;cnica empleada para el manejo en paralelo de datos. Como un procesador de vector. En una arquitectura SIMD el paralelismo se logra por m&uacute;ltiples unidades de proceso llamados elementos de procesamiento (PE), cada una es capaz de ejecutar una operaci&oacute;n especializada aut&oacute;nomamente. Esta arquitectura se caracteriza por el hecho de que la misma operaci&oacute;n es realizada en un momento dado sobre un gran conjunto de datos en todos los (PE). Las computadoras SIMD est&aacute;n especialmente dise&ntilde;adas para realizar c&oacute;mputos vectoriales sobre matrices de datos. 
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44866_o.jpg" alt="48906-44866.jpg" title="48906-44866.jpg" /> 
</p>
<p align="center">
Ejecuci&oacute;n de una SIMD 
</p>
<p>
Los procesadores SIMD pueden manejar un &uacute;nico flujo de instrucciones y m&uacute;ltiple flujos de datos. Dado que un elemento de procesamiento no constituye una unidad de procesamiento central CPU, y que no es capaz de funcionar independientemente, el sistema es en esta caso de procesamiento paralelo y no es un sistema multiprocesador. Estos procesadores pueden tener uno o dos configuraciones ligeramente diferentes, una ha sido implementada en la muy conocida computadora ILLIAC IV cuya esquematizaci&oacute;n puede verse a continuaci&oacute;n: 
</p>
<p>
<img style="width: 684px; height: 352px" src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-43885_o.jpg" alt="48906-43885.jpg" title="48906-43885.jpg" width="743" height="352" /> 
</p>
<p>
Para este caso esta computadora tiene 256 (PE) distribuidos en cuatro cuadrante de 8x8 (PE). Los PEs de un cuadrante&nbsp; son controlados por una unidad de control com&uacute;n, como resultado de esto los PES de dicho cuadrante pueden ejecutar la misma operaci&oacute;n simult&aacute;neamente. En la siguiente figura se muestra la comunicaci&oacute;n entre los Pes dentro del cuadrante. Cada PE&nbsp; se comunica con su vecino, la mayor distancia entre dos PEs no vecino es 8. 
</p>
<p>
<img style="width: 711px; height: 437px" src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44862_o.jpg" alt="48906-44862.jpg" title="48906-44862.jpg" width="601" height="437" align="left" /> 
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
Cada PE es esencialmente una unidad aritm&eacute;tico y l&oacute;gica (ALU) con registros de trabajos que le pertenecen y una memoria local (PEM) para el almacenamiento de datos distribuidos. La unidad de control (CU) cuenta con una memoria de para el almacenamiento de programas. En ella se cargan lo programas del usuario desde el almacenamiento principal. La funci&oacute;n de la CU es decodificar todas las instrucciones&nbsp; y determinar donde debe de ejecutarse las instrucciones decodificadas; las instrucciones escalares se ejecutan directamente dentro de la CU. Las instrucciones vectoriales se env&iacute;an&nbsp; a los PEs para una distribuci&oacute;n de la ejecuci&oacute;n a fin de alcanzar un paralelismo, gracias a la multiplicaci&oacute;n de unidades aritm&eacute;ticas PEs. 
</p>
<p>
Todos los elementos de procesamiento realizan la misma funci&oacute;n sincr&oacute;nicamente en forma esclava bajo el control de la CU. Los operandos vectoriales se distribuyen en la PEM antes de lanzar la ejecuci&oacute;n paralela de los PEs. 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-43886_o.jpg" alt="48906-43886.jpg" title="48906-43886.jpg" /> 
</p>
<p>
&nbsp;
</p>
<p>
En la figura anterior se muestra la estructura interna de un elemento de procesamiento. 
</p>
<p>
Di indica la direcci&oacute;n asignada a este elemento de procesamiento 
</p>
<p>
Si indica si este procesador esta o no activo para realizar ciertos c&aacute;lculos. 
</p>
<p>
Ii es un registro &iacute;ndice 
</p>
<p>
Ri es el registro que apunta&nbsp; a otros procesadores 
</p>
<p>
Formalmente una unidad SIMD se caracteriza por el siguiente conjunto de par&aacute;metros: 
</p>
<p>
C:{N,F,I,M} 
</p>
<p>
N= es el n&uacute;mero de procesadores 
</p>
<p>
F= es el conjunto de funciones de ruteo de datos previsto por la red de interconexi&oacute;n. 
</p>
<p>
I= el conjunto de instrucciones para las operaciones escalares y vectoriales, de ruteo de datos y manejo de la red. 
</p>
<p>
M= conjunto de mascara que habilitan o deshabilitan a los procesadores. 
</p>
<p>
<strong><u>Ejemplo de funcionamiento de un procesador SIMD.</u></strong> 
</p>
<p>
Para mostrar c&oacute;mo es el ruteo de datos en un procesador SIMD veremos en detalle una instrucci&oacute;n vectorial dentro de los N PEs. 
</p>
<p>
Se desea la suma de S(k) de las primeras k componentes de un vector A para k = 0,1,.......n-1. Sea A= (A0, A1, ......An-1) 
</p>
<p>
Necesitamos calcular las siguientes sumas: 
</p>
<p>
Este vector de n sumas puede calcularse recursivamente realizando las n-1 iteraciones definidas como: 
</p>
<p>
S(0) = A(0) 
</p>
<p>
S(k) = S(k-1) + A(k) para k = 1,2, ...., n-1 
</p>
<p>
Esta sumas recursivas para n = 8 se implementaron en un procesador SIMD N=8 PEs 
</p>
<p>
En la implementaci&oacute;n se utilizan tanto el ruteo de datos como el enmascaramiento de PEs. Inicialmente cada A(i) que reside en cada PEM(i) es movido al registro D(i) en cada PE(i) para i = 0,1,..., n-1 (sumiendo n=N=8). 
</p>
<p>
En el primer paso A(i) es ruteado desde R(i) a R(i+1) y sumando al A(i+1). Obteni&eacute;ndose la suma A(i) + A(i+1) en R(i+1) para i =0,1,...8. 
</p>
<p>
Las flechas de la siguiente figura muestran las operaciones de ruteo y la notaci&oacute;n abreviada &sum;Ai a Aj se utiliza indicando la suma intermedia de A(i) + A(i+1)+....+A(j). 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-43884_o.jpg" alt="48906-43884.jpg" title="48906-43884.jpg" width="671" height="420" /> 
</p>
<p>
En el paso 2, la sumas intermedias en R(i) son ruteadas a R(i+2) para i = 0,1,...5. 
</p>
<p>
En el paso final las sumas intermedias en&nbsp; R(i)&nbsp; son ruteadas en R(1+4) para i =0,1...,3 
</p>
<p>
Consiguientemente el PE(k) tiene el valor final de S(k) para k =0,1,...7. 
</p>
<p>
Cuanto m&aacute;s lejos se extienden las operaciones de ruteo cada vez menos PEs son los intervinientes. N&oacute;tese que en el paso 1 PE(7) recibe pero no transmite; en el paso 2 son los PE(6) y PE(7), en tanto que en el paso 3 son los PE(4), PE(5), PE(6) y PE(7) los que reciben solamente. 
</p>
<p>
Estos PEs que se desean que se transmitan son enmascarados durante el paso correpondiente. 
</p>
<p>
Los PEs que son enmascarados en cada paso dependen de la operaci&oacute;n (ruteo de datos o suma aritm&eacute;tica) que se realice. Aun as&iacute; los patrones de enmascaramiento var&iacute;an en los diferentes ciclos de operaci&oacute;n. 
</p>
<p>
&nbsp;Un arreglo de PEs es una unidad aritm&eacute;tica pasiva esperando ser invocada para las tareas de c&oacute;mputo paralelo. 
</p>
<p>
<strong><u>Procesamiento pipeline/paralelo</u></strong> 
</p>
<p>
El multiprocesamiento es una consecuencia natural de las actividades que est&aacute;n viajando simult&aacute;neamente en distintos elementos de procesamiento de la red. El pipeline puede pensarse como una forma de multiprocesamiento que optimiza la utilizaci&oacute;n de recursos y saca ventaja de las dependencias entre los c&aacute;lculos. 
</p>
<p>
&nbsp;
</p>
<p>
<strong><u>Filosof&iacute;a de dise&ntilde;o de los procesadores&nbsp; RISC</u></strong> 
</p>
<p>
Antes de la aparici&oacute;n de los procesadores RISC (Reduced Instruction Set Computer), la filosof&iacute;a de dise&ntilde;o de los procesadores se basaba en aumentar la potencia de proceso agregando mayor capacidad de almacenamiento en forma de registros. Este hecho condujo a un problema y es que los registros se implementan en los procesadores usando transistores en el propio dado del procesador, adem&aacute;s de que incrementan en gran medida la complejidad de las CPUs, pues todas sus unidades funcionales han de estar &quot;cableadas&quot; con todos los registros. En este sentido, la utilizaci&oacute;n de la memoria principal simplificaba el dise&ntilde;o y lo abarataba, por lo que los microprocesadores limitan el n&uacute;mero de registros que implementan en su interior. 
</p>
<p>
Para poder usar la memoria principal para almacenar la informaci&oacute;n de las unidades funcionales de la CPU, se intent&oacute; implementar las instrucciones de manera que ofrecieran varias versiones en funci&oacute;n de la posici&oacute;n de los operandos de las mismas, ya sea en registros internos o memoria principal, y simplificar la programaci&oacute;n. Este concepto se conoce como ortogonalidad. Hace que un menor n&uacute;mero de instrucciones permitan realizar las mismas operaciones, pues la misma instrucci&oacute;n puede ser configurada para diferentes modos de direccionamiento. 
</p>
<p>
<strong><u>Breve rese&ntilde;a hist&oacute;rica de la arquitectura PowerPC.</u></strong> 
</p>
<p>
La filosof&iacute;a RISC fue introducida por John Cocke en los a&ntilde;os 70. La primera implementaci&oacute;n de un procesador RISC llegar&iacute;a con el proyecto 801 de IBM, dedicado especialmente a computaci&oacute;n empotrada. Ofreci&oacute; un rendimiento bastante malo, por lo que IBM emprendi&oacute; el Proyecto Am&eacute;rica, creando el primer procesador de la arquitectura POWER [3], incluido en el RISC System/6000 a principios de los 90. 
</p>
<p>
En 1991, IBM se dio cuenta de las posibilidades de su dise&ntilde;o y se cre&oacute; la alianza AIM (Apple, IBM &amp; Motorola, actualmente Freescale), con el objetivo de terminar con el domino del t&aacute;ndem Microsoft-Intel que ofrec&iacute;a sistemas basados en 80386 y 80486 y ten&iacute;a al Pentium en desarrollo. Para Motorola supuso una salida al poco &eacute;xito que estaba teniendo su serie 88000, por lo que requiri&oacute; que la nueva soluci&oacute;n fuera compatible con el bus del 88000 a nivel de hardware. 
</p>
<p>
El resultado de estos requerimientos fue la arquitectura PowerPC (Performance Optimization With Enhanced RISC Performance Computing). 
</p>
<p>
La primera implementaci&oacute;n de un procesador PowerPC lleg&oacute; en 1993 con el PowerPC 601 de IBM. 
</p>
<p>
Ejemplos de implementaciones de sobremesa fueron los procesadores 750 (G3), 7400 (G4), 7450 (G4e) y sus m&uacute;ltiples versiones (7447, 7447a y 7448) y el 970 (G5) y sus derivaciones: 970FX, 970MP y 970GX. 
</p>
<p>
La ISA (Instruction Set Architecture) de PowerPC se describi&oacute; originalmente en tres libros [6] que contemplaban las instrucciones de nivel de usuario, el entorno virtual y el entorno operativo. 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44870_o.jpg" alt="48906-44870.jpg" title="48906-44870.jpg" /> 
</p>
<p align="center">
&nbsp;
</p>
<p>
<strong><u>Modos de direccionamiento a memoria</u></strong> 
</p>
<p>
Las CPUs PowerPC direccionan al byte y s&oacute;lo es posible el acceso a memoria mediante las instrucciones LOAD y STORE, que copiar&aacute;n a los registros del procesador los valores de la memoria principal o los transferir&aacute;n a &eacute;sta. 
</p>
<p>
Para generar las direcciones se sumar&aacute; el contenido de un registro base a un &iacute;ndice proporcionado en la propia instrucci&oacute;n o en un registro &iacute;ndice. PowerPC permite actualizar el registro base con la &uacute;ltima direcci&oacute;n generada para, por ejemplo, procesar elementos consecutivos. 
</p>
<p>
<strong><u>Conjunto de registros</u></strong> 
</p>
<p>
La arquitectura define 32 registros de prop&oacute;sito general y otros 32 registros de coma flotante de 64 bits. En funci&oacute;n del modo de operaci&oacute;n, los registros de prop&oacute;sito general tendr&aacute;n un ancho de 32 &oacute; 64 bits. 
</p>
<p>
Las implementaciones que incorporan el motor vectorial AltiVec [9] (tambi&eacute;n llamado VMX por IBM o Velocity Engine por Apple) incorporan 32 registros adicionales de 128 bits. 
</p>
<p>
<strong><u>Motor de c&aacute;lculo vectorial</u></strong> 
</p>
<p>
Adem&aacute;s de los 32 registros vectoriales, los procesadores PowerPC que implementen el motor AltiVec implementan instrucciones de control de cach&eacute; para evitar sobrecargar el uso de la memoria cach&eacute; y producir un descenso del rendimiento. 
</p>
<p>
Como ocurre con las extensiones SSEx de los procesadores x86, operan en paquetes de datos usando los registros especiales definidos a tal efecto. La diferencia radica en que PowerPC define 32 frente a 8 registros de x86 (AMD64 ampl&iacute;a esta cifra hasta 16) y que ejecuta las instrucciones vectoriales de forma independiente en un ciclo y sin requerir un cambio de modo [9], cosa que no se ha conseguido en los procesadores x86 hasta 2006 con la introducci&oacute;n de la microarquitectura Core de Intel. 
</p>
<p>
AltiVec fue desarrollado entre 1996 y 1998 y la primera implementaci&oacute;n se produjo en el MPC7400 de Motorola (G4) que Apple us&oacute; para optimizar parte del c&oacute;digo de su nuevo sistema operativo, Mac OS X. Recientemente, se ha incluido el motor VMX en los procesadores de la l&iacute;nea POWER de IBM con el futuro POWER6. 
</p>
<p>
A continuaci&oacute;n se describe solamente los procesadores que se hace referencia al articulo. 
</p>
<p>
<strong><u>PowerPC 7447</u></strong> 
</p>
<p>
Tras las implementaciones de la serie 6XX, lleg&oacute; la serie 7XX, denominada por Apple como G3, que permiti&oacute; superar el rendimiento de la serie 6XX, pero que tuvo una importante carencia: el motor vectorial, que ya ten&iacute;an sus competidores x86. El motor vectorial llegar&iacute;a con el 7400 de Motorola, que ser&iacute;a b&aacute;sicamente un 750 con el a&ntilde;adido de las extensiones AltiVec. 
</p>
<p>
En 2001 presenta el 7450, que supondr&iacute;a un redise&ntilde;o completo de la anterior versi&oacute;n. Con un pipeline un poco m&aacute;s largo (7 etapas frente a las 4 del 7400) pudo alcanzar frecuencias mayores, desde los 667 MHz en 2001 a los 2 GHz en la actualidad. La &uacute;ltima revisi&oacute;n, el MPC7448 est&aacute; fabricada en 90 nm y ofrece cotas de rendimiento por vatio de entre las mejores del mercado. 
</p>
<p>
El PowerPC 7447 es una peque&ntilde;a evoluci&oacute;n del 7450, con el cual comparte filosof&iacute;a arquitect&oacute;nica. Tambi&eacute;n tiene un pipeline de 7 etapas, est&aacute; fabricado con tecnolog&iacute;a de 130 nm e implementado con 58 millones de transistores. El 7447 implementa las extensiones AltiVec, que a&ntilde;aden 162 nuevas instrucciones a la ISA Power y tiene 4 unidades de ejecuci&oacute;n vectoriales, permutaci&oacute;n de vectores, operaciones de enteros simples, operaciones de enteros complejos y operaciones de coma flotante, adem&aacute;s de los 32 registros de 128 bits est&aacute;ndar. 
</p>
<p>
<strong><u><img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44857_o.jpg" alt="48906-44857.jpg" title="48906-44857.jpg" />&nbsp;</u></strong> 
</p>
<p>
<strong><u>PowerPC 970</u></strong> 
</p>
<p>
La filosof&iacute;a de dise&ntilde;o del PowerPC 970 vari&oacute; respecto a la del 7450, en este caso se us&oacute; un pipeline bastante&nbsp; largo, de 14 etapas en el caso de operaciones con enteros, frente a las 7 del 7450. Esto permite tener hasta 200 instrucciones al vuelo pendientes de confirmar (lo que incrementa el n&uacute;mero de registros de renombrado necesarios), adem&aacute;s de escalar mejor frecuencia. Estas caracter&iacute;sticas, combinadas con un consumo relativamente reducido (el 970 de 1,8 GHz consume 42 W frente a los 69 del Pentium 4 a 2,8 GHz y los escasos 30 W del 7450 a 1,2 GHz), hicieron que se convirtiera en un chip muy popular. 
</p>
<p>
El PowerPC 970 es un microprocesador superescalar con modos de operaci&oacute;n de 32 y 64 bits que desciende directamente del POWER4 de IBM e implementa el motor vectorial VMX (AltiVec). 
</p>
<p>
Comparado con el PowerPC 7450, el 970 tiene un rendimiento general mayor, pero el tener muchas m&aacute;s etapas de segmentaci&oacute;n hace que cuando es necesario vaciar el pipeline, la penalizaci&oacute;n de rendimiento sea tambi&eacute;n mayor. Por este motivo, el 970 tiene una cach&eacute; de instrucciones el doble de grande que la del 7450 (64 KiB frente a 32 KiB), adem&aacute;s de que ha de incorporar t&eacute;cnicas avanzadas de predicci&oacute;n de saltos para minimizar los fallos de pipeline, penalizando el rendimiento [12]. 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44856_o.jpg" alt="48906-44856.jpg" title="48906-44856.jpg" /> 
</p>
<p>
Para mantener el pipeline lleno de instrucciones en todo momento, se leen de memoria ocho instrucciones por ciclo. Estas instrucciones se decodifican y dividen en una especie de micro operaciones llamadas IOPs, que se ejecutar&aacute;n fuera de orden. 
</p>
<p>
Pero la mayor mejora de rendimiento del 970 es el bus frontal que incorpora. &Eacute;ste est&aacute; compuesto por dos canales unidireccionales de 32 bits de ancho que pueden funcionar hasta a la mitad de la frecuencia de la CPU, es decir, &eacute;sta &uacute;ltima tiene un multiplicador de 2x. Los comandos de control se multiplexan en bus junto con los datos, lo que hace que se pierda una peque&ntilde;a cantidad de ancho de banda (en torno a un 10%), aunque sigue manteniendo una tasa de transferencia bastante alta (para un FSB de 900 MHz se llega a los 6,4 GiB/s). 
</p>
<p>
Para concluir, es necesario mencionar que el 970 posee dos unidades de enteros asim&eacute;tricas, una unidad de coma flotante que permite ejecutar operaciones en doble y simple precisi&oacute;n a la misma velocidad y que tiene 80 registros disponibles (32 de la ISA PowerPC y 48 de renombrado) y una implementaci&oacute;n total de las extensiones AltiVec, con unidades de aritm&eacute;tica en coma flotante y entera, l&oacute;gica y permuta de vectores [13]. En la figura 8 de aprecian todos los bloques constitutivos del PowerPC 970. 
</p>
<p>
<strong><u>PowerPC 401</u></strong> 
</p>
<p>
El PowerPC 401 es un chip contempor&aacute;neo al PowerPC 601. Fue dise&ntilde;ado para entornos empotrados, como microcontroladores, elementos de redes (routers, switches...), etc. Para reducir el coste, consumo y tama&ntilde;o se eliminaron elementos como la unidad de gesti&oacute;n de memoria (desparece la paginaci&oacute;n) y las unidades de coma flotante, lo que permiti&oacute; un consumo de tan s&oacute;lo 0,1 W en su versi&oacute;n de 100 MHz (1996). Fue implementado usando &uacute;nicamente 85.000 transistores. S&oacute;lo puede emitir una instrucci&oacute;n por ciclo y posee un pipeline de tres etapas. 
</p>
<p>
Lo antes dicho complementa la informaci&oacute;n suministrada en la introducci&oacute;n y motivaci&oacute;n del&nbsp; art&iacute;culo en cuesti&oacute;n.&nbsp; B&aacute;sicamente la idea del art&iacute;culo es implementar los elementos de procesamientos PE dentro de la l&oacute;gica de la FPGA y a su vez tener comunicaci&oacute;n con el procesador PowerPC a trav&eacute;s de la unidad de control CU, o de la APU (unidad de procesamiento auxiliar) como lo identifica el art&iacute;culo, con la gran diferencia con respecto a la Altivec o SSE, de poder ser reconfigurable en a la medida que se desee; dado que el m&oacute;dulo se puede redefinir mediante un lenguaje de descripci&oacute;n de hardware VHDL. 
</p>
<p>
<strong><u>METODOLOG&Iacute;A&nbsp;DE TRABAJO DEL ART&Iacute;CULO</u></strong>&nbsp; 
</p>
<p>
En la metodolog&iacute;a del art&iacute;culo se explica la acci&oacute;n de reescribir el c&oacute;digo de bucles (escalar) en formato vectorial, es decir aplicar&nbsp; el proceso de vectorizaci&oacute;n.&nbsp; En el siguiente cuadro se representa una tabla de referencia para convertir de vectorial a escalar. 
</p>
<p>
&nbsp;<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44858_o.jpg" alt="48906-44858.jpg" title="48906-44858.jpg" /> 
</p>
<p>
&nbsp;Y un ejemplo de esta conversi&oacute;n de vectorial a escalar ser&iacute;a: 
</p>
<p>
&nbsp;<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44868_o.jpg" alt="48906-44868.jpg" title="48906-44868.jpg" /> 
</p>
<p>
Luego de escalar a vectorial&nbsp;se cumple conciertas reglas como: 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44861_o.jpg" alt="48906-44861.jpg" title="48906-44861.jpg" /> 
</p>
<p>
Y tomando como ejemplo la figura B del c&oacute;digo de escalar se convertir&aacute; a vectorial de la siguiente forma: 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44867_o.jpg" alt="48906-44867.jpg" title="48906-44867.jpg" /> 
</p>
<p>
El compilador GCC 4.x viene con un vectorizador que implementa ciertas aproximaciones basadas en bucle, lo que significa que no tiene en cuenta el c&oacute;digo directo. Por lo tanto el art&iacute;culo informa que aparte de la vectorizaci&oacute;n autom&aacute;tica (por el compilador GCC), se puede realizar tambi&eacute;n en forma manual tomando en cuenta como referencia los ejemplos antes nombrados. 
</p>
<p>
<strong><u>RESULTADOS PRELIMINARES</u></strong> 
</p>
<p>
En los resultados preliminares el art&iacute;culo nombr&oacute; su sistema OSSIAN, basados en procesadores &nbsp;PowerPC 7400 y la PowerPC 970, el sistema OSSIAN consiste en el dispositivo Virtex-4 modelo XC4FX12. 
</p>
<p>
La&nbsp; medici&oacute;n de rendimiento se realiz&oacute; mediante la ejecuci&oacute;n de una aplicaci&oacute;n de estabilizaci&oacute;n de imagen en modo &quot;batch&quot;, es decir en modo de procesamiento de imagen en bloque, estas se leen y se almacena su resultado en la memoria. Cuando el art&iacute;culo expresa que el algoritmo se realiza con la transformada de wavelet se trata de los siguiente: 
</p>
<p>
La Transformada Wavelet Discreta (DWT) esta siendo muy utilizada en el campo del procesado de im&aacute;genes gracias a su flexibilidad en la representaci&oacute;n de se&ntilde;ales no estacionarias y sus buenas caracter&iacute;sticas de adaptabilidad a la visi&oacute;n humana. La DWT est&aacute; relacionada con el an&aacute;lisis multiresoluci&oacute;n y la descomposici&oacute;n en subbandas, lo cual se utiliza en el procesado de im&aacute;genes. Este m&eacute;todo de transformaci&oacute;n que fue desarrollado por Mallat [7], ofrece ortogonalidad y la posibilidad de representaci&oacute;n tiempo-frecuencia. 
</p>
<p>
La transformada Wavelet discreta (DWT) descompone recurrentemente una se&ntilde;al de entrada, So(n), en dos subse&ntilde;ales de menor resoluci&oacute;n consideradas como aproximaci&oacute;n y detalle. Las se&ntilde;ales Si(n) y Wi(n) son la aproximaci&oacute;n y el detalle respectivamente de la se&ntilde;al en el nivel i. la aproximaci&oacute;n de la se&ntilde;al en el nivel i+1 se puede calcular como: 
</p>
<p align="center">
Si+1(n) = &sum;g(k)Si(2n-k) 
</p>
<p>
El detalle de la se&ntilde;al en el nivel i+1 se puede calcular como: 
</p>
<p align="center">
Wi+1(n) = &sum;h(k)Si(2n-k) 
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44885_o.jpg" alt="48906-44885.jpg" title="48906-44885.jpg" /> 
</p>
<p>
Es decir la se&ntilde;al original pasa por dos filtros un pasa bajo y pasa alto. 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44871_o.jpg" alt="48906-44871.jpg" title="48906-44871.jpg" /> 
</p>
<p>
Y se vuelve&nbsp;a mostrar la forma de obtener los coefienciente de wavelet de haar&nbsp;realiando downsampling, como se ve en el ejemplo siguiente: 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44859_o.jpg" alt="48906-44859.jpg" title="48906-44859.jpg" /> 
</p>
<p>
Estos coeficientes es&nbsp; a lo que nos referimos como los detalles de la se&ntilde;al y es lo que se necesita para formar la matriz coeficientes de wavelet de haar. Se puede formar tres matrices de coeficientes de haar dependiendo del n&uacute;mero de niveles que se tome, mientras mayor sea el nivel mayor ser&aacute; el n&uacute;mero de coeficientes de haar. 
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44877_o.jpg" alt="48906-44877.jpg" title="48906-44877.jpg" /> 
</p>
<p>
&nbsp;
</p>
<p>
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44864_o.jpg" alt="48906-44864.jpg" title="48906-44864.jpg" /> 
</p>
<p>
Down-Sampler 
</p>
<p>
&nbsp;Hacer un <em>down-sampling </em>de un factor entero <em>M&gt;1 </em>consiste en guardar uno de cada <em>M </em>valores muestreados y eliminando los <em>M-1 </em>muestreos intermedios, generando una se&ntilde;al de salida <em>xd[n] </em>de acuerdo con la siguiente relaci&oacute;n: <em>xd[n]=x[nM]</em>. Al igual que la operaci&oacute;n de <em>up-sampling</em>, el <em>downsampling </em>es lineal pero es variante en el tiempo. Disminuir la frecuencia puede tener implicaciones a la hora de cumplir el teorema del muestreo, por lo que se explica la raz&oacute;n por la que va despu&eacute;s del filtro pasobajo o pasaalto, para evitar que sea variante en el tiempo. 
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&darr;2)y=(...,y(-4),y(-2),y(0),y(2),y(4),......) 
</p>
<p>
El s&iacute;mbolo (&darr;2) indica downsampling o decimacion, para compensar la p&eacute;rdida de componentes durante el downsampling, es necesario multiplicar y(2n) por raiz de 2, este factor se incluye de una vez en el filtro, es decir el filto pasa bajo por ejemplo: Ho(w) cambia C(w) = raiz(2)Ho(w), por lo tanto los coeficientes del filtro &quot;C&quot;, en los filtros&nbsp; promedios los coeficientes se incrementan en raiz(2)/2; por lo tanto : 
</p>
<p align="center">
c(o)=c(1)= &nbsp;raiz(2)/2&nbsp;&nbsp; el cual es 1/raiz(2) 
</p>
<p>
por lo tanto la matriz de downsampling para el filtro pasa bajo ser&aacute;: 
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44887_o.jpg" alt="48906-44887.jpg" title="48906-44887.jpg" /> 
</p>
<p>
por lo tanto la matriz de downsampling para el filtro pasa alto ser&aacute;: 
</p>
<p>
&nbsp;
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-44888_o.jpg" alt="48906-44888.jpg" title="48906-44888.jpg" /> 
</p>
<p>
Luego se habla de una matriz de correlaci&oacute;n que se puede definir de la siguiente manera: 
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-45383_o.jpg" alt="48906-45383.jpg" title="48906-45383.jpg" /> 
</p>
<p>
Donde I es la funci&oacute;n de entrada y h es el operador filtro (templete). 
</p>
<p>
Se realizar&aacute; un ejemplo para entender mejor como funciona este filtro de correlaci&oacute;n: 
</p>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-45385_o.jpg" alt="48906-45385.jpg" title="48906-45385.jpg" /> 
</p>
<p>
Para calcular la correlaci&oacute;n en el pixel (2,4) de la imagen se siguen los siguientes pasos: 
</p>
<ul>
	<li>1- Se desliza el filtro de manera que su pixel central quede alineado con el pixel (2,4) de la imagen.</li>
	<li>2- Se multiplica cada peso del filtro por los elementos de la imagen que se encuentran abajo.</li>
	<li>3- Se suman los productos individuales calculados en el paso 2.</li>
</ul>
<p align="center">
<img src="http://static.obolog.com/multimedia/fotos/49000/48906/48906-45384_o.jpg" alt="48906-45384.jpg" title="48906-45384.jpg" /> 
</p>
<p>
Por lo tanto la salida del pixel (2,4) despu&eacute;s de la correlaci&oacute;n ser&aacute;: 
</p>
<p>
1x8 + 8x1 + 15x6&nbsp; + 7x3 + 14x5 +&nbsp; 16x7&nbsp; +&nbsp; 13x4&nbsp; +&nbsp; 20x9&nbsp; + 22x2 &nbsp;= 585 
</p>
<p>
En el art&iacute;culo utilizan una ventana de seguimiento de 41x41 pixeles y la m&aacute;scara o filtro de correlaci&oacute;n es de 8x8 pixeles. Los elementos de esta m&aacute;scara al solaparse con la ventana de seguimiento ser&aacute; la manera de seguir los puntos en las aproximidades, este solapamiento&nbsp; implica una multiplicaci&oacute;n matricial tal como se observ&oacute; en el ejemplo anterior, por lo tanto es una tarea destinada a la unidad SIMD, que ser&aacute; un multiplicador matricial. 
</p>
<p>
NOTA: cuando se habla de pixel es importante entender que en el mismo se toma en cuenta la profundidad, esto no es mas que la suma de la combinaci&oacute;n de la matriz de color rojo, verde y azul, donde se obtienen 8 combinaciones de colores, al definir mas elementos de la matriz de color se incrementa tambi&eacute;n en n&uacute;mero de combinaciones, para aproximarse a los colores reales. 
</p>
<p>
El proceso de realizar esta multiplicaci&oacute;n de matrices lo realiza la unidad SIMD, implementada en la FPGA virtex-4 modelo XC4FX12. Este modelo consta de 64x24 bloques l&oacute;gicos de control (CLB), 5472 silicios, 10944 LUTs, 86Kb como m&aacute;xima distribuci&oacute;n de RAM y 10944 fliflops. Cada CLB contiene 4 silicios, 8 LUTs, 8 flipflops, 8 MULT_ANDs, 2 cadenas de acarreo y aritm&eacute;tico, 64 bits para la distribuci&oacute;n de RAM, registros de 64 bits. 
</p>
<p>
El modelo XC4VFX12 contiene 16 entrada de reloj, los cuales pueden ser configurados por los pines de entrada/salida del dispositivo. 
</p>
<p>
&nbsp;<strong>REFERENCIAS</strong> 
</p>
<p>
<a href="http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf">http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf</a> 
</p>
<p>
<a href="http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf">http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf</a> 
</p>
<p>
<a href="http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf">http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf</a> 
</p>
<p>
<a href="http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf">http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf</a> 
</p>
<p>
<a href="http://catarina.udlap.mx/u_dl_a/tales/documentos/lep/hernandez_g_d/capitulo5.pdf">http://catarina.udlap.mx/u_dl_a/tales/documentos/lep/hernandez_g_d/capitulo5.pdf</a> 
</p>
<p>
<a href="http://www.iberchip.org/iberchip2007/articulos/3/a/paper/2-Arquitectura_Hibrida_FPGA.pdf">http://www.iberchip.org/iberchip2007/articulos/3/a/paper/2-Arquitectura_Hibrida_FPGA.pdf</a> 
</p>
<p>
<a href="http://www.mathworks.com/access/helpdesk/help/pdf_doc/wavelet/wavelet_ug.pdf">http://www.mathworks.com/access/helpdesk/help/pdf_doc/wavelet/wavelet_ug.pdf</a> 
</p>
<p>
<a href="http://www-2.dc.uba.ar/materias/so/datos/cap05.pdf">http://www-2.dc.uba.ar/materias/so/datos/cap05.pdf</a> 
</p>
<p>
<a href="http://en.wikipedia.org/wiki/SIMD">http://en.wikipedia.org/wiki/SIMD</a> 
</p>
<p>
<a href="http://www.tecnun.com/asignaturas/tratamiento%20digital/tema11.pdf">http://www.tecnun.com/asignaturas/tratamiento%20digital/tema11.pdf</a>&nbsp; 
</p>
<p>
<a href="http://www.xilinx.com/bvdocs/ipcenter/data_sheet/apu_fpu.pdf">http://www.xilinx.com/bvdocs/ipcenter/data_sheet/apu_fpu.pdf</a> 
</p>
<p>
<a href="http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf">http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf</a> 
</p>
<p>
<a href="http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf">http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf</a> 
</p>
<p>
<a href="http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf">http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf</a> 
</p>
<p>
<a href="http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf">http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf</a> 
</p>
<p>
<a href="http://www.xilinx.com/products/silicon_solutions/fpgas/virtex/virtex4/">http://www.xilinx.com/products/silicon_solutions/fpgas/virtex/virtex4/</a> 
</p>
<p>
<strong>[1] </strong>Alexandre E. Eichenberger, Peng Wu, Kevin O'Brien,<strong> Vectorization for SIMD Architectures with Alignment Constraints,</strong> IBM T.J. Watson Research Center Yorktown Heights, NY 
</p>
<p align="left">
<strong>[2]</strong> Ricardo Jos&eacute; Colom&dagger;, Rafael Gadea&dagger;, Angel Sebastia&dagger;, Marcos Mart&iacute;nez&dagger;, Francisco allester&dagger;, 
</p>
Vicente Herrero,<strong> Implementaci&oacute;n de la Transformada Wavelet Discreta 2-D con filtros no Separables,</strong> Universidad Polit&eacute;cnica de Valencia. Departamento de Ingenier&iacute;a Electr&oacute;nica. Camino de Vera s/n 46022 Valencia			<p>
			<a href="http://unidadsimd.obolog.com/fotos/descripcion-articulo-unidad-simd-reconfigurables-48906" title="Fotos de DESCRIPCIÓN DE UN ARTICULO SOBRE LA UNIDAD SIMD RECONFIGURABLES PARA EL PROCESAMIENTO DE IMAGEN">Ver álbum de fotos</a> |
			Leer <strong><a href="http://unidadsimd.obolog.com/descripcion-articulo-unidad-simd-reconfigurables-48906" title="DESCRIPCIÓN DE UN ARTICULO SOBRE LA UNIDAD SIMD RECONFIGURABLES PARA EL PROCESAMIENTO DE IMAGEN">DESCRIPCIÓN DE UN ARTICULO SOBRE LA UNIDAD SIMD RECONFIGURABLES PARA EL PROCESAMIENTO DE IMAGEN</a></strong> en <a href="http://unidadsimd.obolog.com" title="Mi blog">UNIDAD SIMD Y PROCESAMIENTO DE IMAGEN</a>
			</p>
			 ]]>
		</description>
				<author>edgart</author>
				<category>descripción</category>
				<comments>http://unidadsimd.obolog.com/descripcion-articulo-unidad-simd-reconfigurables-48906#formulario</comments>
		<guid>http://unidadsimd.obolog.com/descripcion-articulo-unidad-simd-reconfigurables-48906</guid>
		<pubDate>Mon, 24 Dec 2007 22:00:23 +0100</pubDate>
	</item>
</channel>
</rss>