<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Ayuda Electronica &#124; Circuitos Electronicos, Ingenieria Electronica &#187; Electronica Digital</title> <atom:link href="http://ayudaelectronica.com/c/electronica-digital/feed/" rel="self" type="application/rss+xml" /><link>http://ayudaelectronica.com</link> <description>En Ayuda Electronica encontraras informacion sobre circuitos electronicos ademas de teoria sobre ingenieria electronica, tutoriales sobre electronica basica y novedades relacionadas al campo</description> <lastBuildDate>Tue, 07 Sep 2010 22:21:51 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>Overview MCU ALU &#8211; DsPIC 30F</title><link>http://ayudaelectronica.com/overview-mcu-alu-dspic-30f/</link> <comments>http://ayudaelectronica.com/overview-mcu-alu-dspic-30f/#comments</comments> <pubDate>Fri, 19 Mar 2010 13:16:55 +0000</pubDate> <dc:creator>Cesar</dc:creator> <category><![CDATA[Electronica Digital]]></category> <category><![CDATA[Tecnicas Digitales III]]></category> <category><![CDATA[DSP]]></category><guid isPermaLink="false">http://ayudaelectronica.com/?p=690</guid> <description><![CDATA[ Los DsPIC es la denominación comercial de los DSP (¿Que es un DSP?) de Microchip. En este artículo voy a tratar de dar una descripción general del MCU &#8211; ALU de los DsPIC pertenecientes a la familia 30F, debido a que conociendo el hardware con el que disponemos podemos darnos ...]]></description> <content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-692  aligncenter" title="alu_dspic30F_intro" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/alu_dspic30F_intro.jpg" alt="alu dspic30F intro Overview MCU ALU   DsPIC 30F" width="475" height="182" /></p><p style="text-align: justify;"><span style="color: #000000;">Los DsPIC es la denominación comercial de los DSP (<a title="DSP" href="http://ayudaelectronica.com/que-es-un-dsp/" target="_blank"><strong>¿Que es un DSP?</strong></a>) de Microchip. En este artículo voy a tratar de dar una descripción general del <strong>MCU &#8211; ALU de los DsPIC</strong> pertenecientes a la <strong>familia 30F</strong>, debido a que conociendo el hardware con el que disponemos podemos darnos una idea muy buena sobre las posibilidades que nos brinda y lo que podríamos llegar a realizar con ellos.</span></p><h3><span style="color: #000000;"><span id="more-690"></span></span></h3><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">Introducción</span></strong></span></h2><p style="text-align: justify;"><span style="color: #000000;">El módulo dsPIC30F tiene una CPU de 16-bits (datos), arquitectura Harvard modificada con un conjunto de instrucciones mejoradas, incluyendo un soporte importante para DSP. La CPU tiene una palabra de instrucción de 24-bits, con un campo opcode de longitud variable. El contador de programa (PC) es de 24-bits de ancho y direcciona hasta 4M x 24-bits de espacio de memoria para el programa de usuario.-</span></p><p style="text-align: justify;"><span style="color: #000000;">Posee 16 registros de trabajo de 16-bits en el modelo del programador. Cada uno de los registros de trabajo puede actuar como una base de datos o de dirección. El registro de trabajo número 16 (W15) funciona como un puntero de pila de software para las interrupciones y las llamadas (de funciones).-</span></p><p style="text-align: justify;"><span style="color: #000000;">El conjunto de instrucciones del dsPIC30F tiene dos clases, MCU y DSP. Estas dos clases de instrucciones se integran a la perfección en la arquitectura y se ejecutan a partir de una única unidad de ejecución. Las instrucciones se encuentran optimizadas para una compilación en C.-</span></p><p style="text-align: justify;"><span style="color: #000000;">El espacio para datos puede direccionarse como palabras de 32K o 64 Kbytes y está dividido en dos bloques, denominados X e Y. Cada bloque de memoria tiene su propia Unidad de Generación de Dirección (AGU). La clase de instrucciones MCU opera exclusivamente a través de la memoria X AGU.-</span></p><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">MCU &#8211; ALU</span></strong></span></h2><p style="text-align: justify;"><span style="color: #000000;">Una vista de alto nivel de la Unidad Aritmética Lógica (ALU), se ilustra aquí. Podemos ver que la ALU interacciona con dos interfaces, el bus de datos X  y el array de registros de trabajo. Cualquiera de las entradas puede provenir de una memoria de datos y la otra de un registro W, o ambas entradas pueden provenir de registros W. El resultado de la  ALU se puede alma-cenar, ya sea a una dirección de memoria datos o en un registro W.</span></p><p style="text-align: justify;"><span style="color: #000000;">La ALU es de 16-bits de ancho y es capaz de sumar, restar, desplazamiento de un bit y operaciones lógicas. Salvo que se mencione lo contrario, las operaciones aritméticas son en complemento a 2. Dependiendo de la operación, la ALU puede afectar los valores de los bits Carry (C), Cero (Z), Negativo (N), Desbordamiento (OV) y Dígit Carry (DC) del registro de estado SR.</span></p><p><a href="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig1.jpg"><img class="size-full wp-image-694" title="fig1" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig1.jpg" alt="fig1 Overview MCU ALU   DsPIC 30F" width="578" height="390" /></a></p><p style="text-align: center;">Figura 1</p><p style="text-align: justify;"><span style="color: #000000;">A diferencia del motor DSP, la ALU soporta operaciones de un byte de ancho. Esta función proporcio- na compatibilidad con los dispositivos PICmicro de Microchip®, y también flexibilidad para trabajar con datos del tamaño de un byte.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando se trabaja en modo byte con el array de registros de trabajo, el byte inferior del registro de trabajo especificado es utilizado, siempre dejando el byte superior (upper) sin afectar. Además, el byte inferior del Registro de Estado, que contiene las banderas N, OV, DC, C y Z se actualizara basado en el resultado de la operación de byte.-</span></p><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Registro de Estado del CPU: SR</span></strong></span></h3><p><img class="aligncenter size-full wp-image-695" title="fig1-1" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig1-1.jpg" alt="fig1 1 Overview MCU ALU   DsPIC 30F" width="620" height="197" /></p><table border="0" cellspacing="0" cellpadding="0" width="651"><tbody><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 15</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>OA</strong>: Desbordamiento del   Acumulador A </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Se produjo un desbordamiento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: No se produjo desbordamiento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 14</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>OB</strong>: Desbordamiento del   Acumulador B </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Se produjo un desbordamiento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: No se produjo desbordamiento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 13</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>SA</strong>: Saturación del   Acumulador A</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Acumulador A se encuentra saturado o se saturo   en algún momento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: Acumulador A se encuentra saturado o se saturo   en algún momento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 12</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>SB</strong>: Saturación del   Acumulador B</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Acumulador B se encuentra saturado o se saturo   en algún momento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: Acumulador B se encuentra saturado o se saturo   en algún momento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 11</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>OAB</strong>: OA || OB   Desbordamiento Combinado<a href="#_ftn1">[1]</a></span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Acumulador A o B se desbordo</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: Ninguno de los Acumuladores A o B se desbordo</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 10</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>SAB</strong>: SA || SB Saturación   Combinado<sup>1</sup></span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Acumulador A o B se encuentra saturado o se   saturo en algún momento</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: Ninguno de los Acumuladores A o B se encuentra   saturado</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 9</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>DA</strong>: Bucle Activo</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Bucle en progreso</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: No existe bucle</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 8</span></td><td width="602" valign="bottom"><span style="color: #000000;"><strong>DC</strong>: MCU Half Carry/Borrow</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">1: Existió acarreo desde el bit 4 (dato tamaño   byte) o acarreo desde el bit 16 (dato tamaño 16-bits)</span></td></tr><tr><td width="49" valign="bottom"><span style="color: #000000;"> </span></td><td width="602" valign="bottom"><span style="color: #000000;">0: No Existió acarreo desde el bit 4 (dato tamaño   byte) o acarreo desde el bit 16 (dato tamaño 16-bits)</span></td></tr></tbody></table><p><em><span style="color: #000000;">[1] OA || OB indica OR lógica entre OA y OB</span></em></p><table border="0" cellspacing="0" cellpadding="0" width="655"><tbody><tr><td width="49" valign="bottom"><span style="color: #000000;">bit 7-5</span></td><td width="606" valign="bottom"><span style="color: #000000;"><strong>IPL &lt;2:0&gt;</strong>: Nivel de   Prioridad de Interrupciones del CPU</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">111 = Nivel de Prioridad 7 (15). Interrupciones   del usuario deshabilitadas</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">110 = Nivel de Prioridad 6 (14)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">101 = Nivel de Prioridad 5 (13)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">100 = Nivel de Prioridad 4 (12)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">011 = Nivel de Prioridad 3 (11)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">010 = Nivel de Prioridad 2 (10)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">001 = Nivel de Prioridad 1 (9)</span></td></tr><tr><td width="49" valign="bottom"></td><td width="606" valign="bottom"><span style="color: #000000;">000 = Nivel de Prioridad 0 (8)</span></td></tr></tbody></table><p><em><span style="color: #000000;">Nota: Los bits IPL&lt;2:0&gt; se encuentran concatenados con el bit IPL&lt;3&gt; (registro CORCON) .para formar el nivel de prioridad de interrupciones del CPU. El valor en paréntesis indica el caso en que IPL&lt;3&gt;=1. Las interrupciones del usuario se encuentran deshabilita-.das en ese caso.-</span></em></p><table border="0" cellspacing="0" cellpadding="0" width="655"><tbody><tr><td width="43" valign="bottom"><span style="color: #000000;">bit 4</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>RA</strong>: Activación de   Repetición de Bucle</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">1: Repetir bucle en progreso</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">0: No repetir bucle en progreso</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;">bit 3</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>N</strong>: Bit Negativo de MCU   ALU</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">1: El resultado es negativo</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">0: El resultado no es negativo (cero o positivo)</span></td></tr><tr><td width="43" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;">bit 2</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>OV</strong>: Desbordamiento de   MCU ALU</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">1: Ocurrió un desbordamiento (un desbordamiento   en la magnitud cambio el bit de signo)</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">0: No ocurrió desbordamiento</span></td></tr><tr><td width="43" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;">bit 1</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>Z</strong>: Bit Cero de MCU ALU</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">1: El resultado de la operación fue cero</span></td></tr><tr><td width="43" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: El resultado de la operación reciente no fue   cero</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;"> </span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;">bit 0</span></td><td width="612" valign="bottom"><span style="color: #000000;">C: Carry/Borrow de MCU   ALU</span></td></tr><tr><td width="43" valign="bottom"><span style="color: #000000;"> </span></td><td width="612" valign="bottom"><span style="color: #000000;">1: Ocurrió un acarreo desde el MSB</span></td></tr><tr><td width="43" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: No ocurrió un acarreo desde el MSB</span></td></tr></tbody></table><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">Motor DSP</span></strong></span></h2><p style="text-align: justify;"><span style="color: #000000;">El motor DSP es un bloque de hardware que se alimenta de datos desde el array de registros W, pero contiene sus propios registros especializados de resultado. El motor DSP está controlado desde el mismo decodificador de instrucciones que dirige al MCU ALU. Además, todas las direcciones de operandos eficaz (EAs) se generan en el array de registros W. Operaciones conjuntas con el MCU no es posible, aunque los recursos del MCU ALU y del motor DSP pueden ser compartidos por todas las instrucciones en el conjunto de instrucciones.</span></p><p><span style="color: #000000;"> El motor DSP se compone de los siguientes componentes:</span></p><p><span style="color: #000000;">• Multiplicador de alta velocidad de 17-bits x 17-bits.<br /> • Registro de Desplazamiento.<br /> • Sumador/restador de 40-bits.<br /> • Dos registros acumuladores.<br /> • Lógica de Redondeo con modos seleccionables.<br /> • Saturación Lógica con modos seleccionables.</span></p><p><span style="color: #000000;"> La siguiente figura muestra un diagrama de bloques del motor DSP</span></p><p><img class="size-full wp-image-705" title="fig2" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig2.jpg" alt="fig2 Overview MCU ALU   DsPIC 30F" width="566" height="471" /></p><p style="text-align: center;">Figura 2</p><p style="text-align: justify;"><span style="color: #000000;">Los datos de entrada del motor DSP pueden provenir desde las siguientes fuentes:</span></p><p style="text-align: justify;"><span style="color: #000000;"> • Directamente desde el array W (registros W4, W5, W6 o W7) para instrucciones de doble operandos. Los valores de datos para los registros W4, W5, W6 y W7 son <em>prefetched</em> a través de los buses de datos X e Y.</span></p><p style="text-align: justify;"><span style="color: #000000;">• Desde el bus de datos de memoria X para todas las demás instrucciones DSP.</span></p><p style="text-align: justify;"><span style="color: #000000;"> </span></p><p style="text-align: justify;"><span style="color: #000000;">La salida de datos desde el motor DSP se escribe a uno de los siguientes destinos:</span></p><p style="text-align: justify;"><span style="color: #000000;"> • El acumulador de destino, según lo definido por la instrucción DSP ejecutada.</span></p><p style="text-align: justify;"><span style="color: #000000;">• A través del bus de datos de memoria X a cualquier ubicación en el espacio de direcciones de memoria de datos.</span></p><p style="text-align: justify;"><span style="color: #000000;"><br /> El motor DSP tiene la capacidad inherente para realizar operaciones de acumulador a acumulador que no requieren datos adicionales.<br /> Las instrucciones de desplazamiento y multiplicación del MCU usan el hardware del motor DSP para obtener sus resultados. </span></p><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Registro de Control de Núcleo: CORCON</span></strong></span></h3><p><img class="aligncenter size-full wp-image-706" title="fig2-1" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig2-1.jpg" alt="fig2 1 Overview MCU ALU   DsPIC 30F" width="559" height="175" /></p><table border="0" cellspacing="0" cellpadding="0" width="669"><tbody><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 15-13</span></td><td width="608" valign="bottom"><span style="color: #000000;"> No se utilizan<br /> </span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"></td></tr><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 12</span></td><td width="608" valign="bottom"><span style="color: #000000;"><strong>US</strong>: Control de   Multiplicación DSP</span><strong> </strong></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">1: La multiplicación es sin signo</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">0: La multiplicación es signada</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"></td></tr><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 11</span></td><td width="608" valign="bottom"><span style="color: #000000;"><strong>EDT</strong>: Control de   Terminación de Bucle Prematura<strong> </strong></span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">1: Terminar la ejecución del bucle después de la   iteración actual</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">0: Sin efecto</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"></td></tr><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 10-8</span></td><td width="608" valign="bottom"><span style="color: #000000;"><strong>DL&lt;2:0&gt;</strong>: Nivel de   Anidación de Bucle</span><strong> </strong></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">111 = 7 Bucles activos</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">…</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">…</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">001 = 1 Bucle activo</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">000 = 0 Bucles activos</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"></td></tr><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 7</span></td><td width="608" valign="bottom"><span style="color: #000000;"><strong>SATA</strong>: Habilitación de   Saturación del Acc A</span><strong> </strong></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">1: Saturación habilitada</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">0: Saturación deshabilitada</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"></td></tr><tr><td width="61" valign="bottom"><span style="color: #000000;">bit 6</span></td><td width="608" valign="bottom"><span style="color: #000000;"><strong>SATB</strong>: Habilitación de   Saturación del Acc B<strong> </strong></span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">1: Saturación habilitada</span></td></tr><tr><td width="61" valign="bottom"></td><td width="608" valign="bottom"><span style="color: #000000;">0: Saturación deshabilitada</span></td></tr></tbody></table><table border="0" cellspacing="0" cellpadding="0" width="669"><tbody><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 5</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>SATDW</strong>: Habilitación Data   Space Write desde el DSP<strong> </strong></span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: Data space write habilitado</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: Data space write deshabilitado</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 4</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>ACCSAT</strong>: Selección del Modo   de Saturación de los acumuladores</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: 9.31 (súper saturación)</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: 1.31 (saturación normal)</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 3</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>IPL3</strong>: Nivel de Prioridad   de Interrupciones del CPU</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: Nivel de prioridad del CPU mayor a 7</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: Nivel de prioridad del CPU menor o igual a 7</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 2</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>PSV</strong>: Habilitación de   Visibilidad del Espacio de Programa </span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: Visible en espacio de datos</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: No visible en espacio de datos</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 1</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>RND</strong>: Selección de Modo de   Redondeo</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: Redondeo convencional habilitado</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: Redondeo convergente habilitado</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"></td></tr><tr><td width="57" valign="bottom"><span style="color: #000000;">bit 0</span></td><td width="612" valign="bottom"><span style="color: #000000;"><strong>IF</strong>: Selección del Modo   de Multiplicación</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">1: Multiplicación de enteros</span></td></tr><tr><td width="57" valign="bottom"></td><td width="612" valign="bottom"><span style="color: #000000;">0: Multiplicación de fraccionarios</span></td></tr></tbody></table><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">Multiplicador</span></strong></span></h2><p style="text-align: justify;"><span style="color: #000000;">El multiplicador del dsPIC30F es de 17-bits x 17-bits, es compartido tanto por el MCU ALU y el motor DSP. El multiplicador es capaz de realizar operaciones signadas y soportar resultados de 1,31 fraccionario (Q.31) o 32-bits enteros.</span></p><p style="text-align: justify;"><span style="color: #000000;"> El multiplicador toma una entrada de datos de 16-bits y los convierte a 17-bits. A los operan-dos signados son <em>sign-extendend</em> (agrega “1”). Las entradas sin signo son <em>zero-extendend</em> (se agrega “0”). La conversión lógica a 17 bits es transparente para el usuario y permite que el multiplicador soporte productos de entradas con signo y sin signo.</span></p><p style="text-align: justify;"><span style="color: #000000;"> El bit de control IF (CORCON&lt;0&gt;) determina operaciones enteras/fraccionarias para las instrucciones listadas en la tabla 2. Este bit no afecta las instrucciones de multiplicaciones del MCU (tabla 3), que son siempre operaciones enteras. El multiplicador escala el resultado un bit a la izquierda en las operaciones fraccionarias. El LSb del resultado es siempre borrado.</span></p><p style="text-align: justify;"><span style="color: #000000;">Por defecto al reiniciarse el PIC el modo fraccionario se encuentra seleccionado</span></p><p style="text-align: justify;"><span style="color: #000000;"> La representación de los datos en el hardware para cada uno de estos modos es:</span></p><p style="text-align: justify;"><span style="color: #000000;"> • Datos Enteros son inherentemente representados como signados en complemento a 2, donde el MSb esta definido como un bit de signo. Generalmente hablando, el rango de  N-bits en complemento a 2 (entero) es de -2<sup>N-1 </sup>a  2<sup>N-1 </sup>-1</span></p><p style="text-align: justify;"><span style="color: #000000;">• Los datos fraccionarios son representados en complemento a 2 fraccionario donde el MSb se encuentra definido como bit de signo y la coma flotante se encuentra justo después del bit de signo (formato Q.X). El rango de N-bits en complemento a 2 fraccionario con coma flotante es desde -1,0 a (1 &#8211; 2<sup>1-N</sup>)</span></p><p style="text-align: justify;"><span style="color: #000000;"> La figuras 3 y 4 ilustran como el hardware del multiplicador interpreta los datos en los modos entero y fraccionario</span></p><p style="text-align: center;"><img class="aligncenter size-full wp-image-707" title="fig3" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig3.jpg" alt="fig3 Overview MCU ALU   DsPIC 30F" width="535" height="309" />Figura 3</p><p style="text-align: center;"><img class="aligncenter size-full wp-image-708" title="fig4" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig4.jpg" alt="fig4 Overview MCU ALU   DsPIC 30F" width="556" height="323" />Figura 4</p><p><span style="color: #000000;">El rango de los datos en los modos entero y fraccionario es:</span></p><p style="text-align: left;"><span style="color: #000000;"><img class="aligncenter size-full wp-image-724" title="tabla1" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/tabla1.jpg" alt="tabla1 Overview MCU ALU   DsPIC 30F" width="566" height="185" /></span></p><p style="text-align: justify;"><h3 style="text-align: justify;"><span style="color: #000000;"><strong><span style="text-decoration: underline;">Multiplicación MCU</span></strong></span></h3><p style="text-align: justify;"><span style="color: #000000;"> Las instrucciones MCU de multiplicación proveen soporte para multiplicar enteros de 16-bits con signo, sin signo o mezclados. La extensión de la instrucción determina el tipo de multiplicación que será realizada</span></p><p style="text-align: center;"><span style="color: #000000;"><img class="aligncenter size-full wp-image-725" title="tabla2" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/tabla2.jpg" alt="tabla2 Overview MCU ALU   DsPIC 30F" width="586" height="114" /></span></p><p style="text-align: justify;"><span style="color: #000000;">Todas las multiplicaciones MUL producen resultados enteros. La instrucción MUL puede ser dirigida para usar operandos de un o dos bytes. Operandos de un byte producen un resultado de 16-bits y operandos de 2 bytes producen resultados de 32-bits, que se almacenan en los registros W0 y W1.</span></p><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Multiplicación DSP</span></strong></span></h3><p><strong><span style="text-decoration: underline;"> </span></strong></p><p style="text-align: justify;"><span style="color: #000000;">Cuando una multiplicación DSP es realizada, el resultado es almacenado en uno de los acumu- ladores (A y B) de 40-bits. El acumulador viene especificado como uno de los operandos de la instrucción.</span></p><p style="text-align: justify;"><span style="color: #000000;">Si IF=0 implica que después de terminada la multiplicación fraccionaria, el resultado es desplazado un bit a la izquierda, generando una salida con 2 bits de signo y 31 bits fraccionarios, formato llamado 2.31. Este desplazamiento es necesario para mantener la alineación apropiada de la coma flotante.</span></p><p style="text-align: center;"><span style="color: #000000;"><img class="aligncenter size-full wp-image-704" title="tabla3" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/tabla3.jpg" alt="tabla3 Overview MCU ALU   DsPIC 30F" width="575" height="208" /></span></p><p style="text-align: justify;"><span style="color: #000000;">El bit de control US (CORCON&lt;12&gt;) determina si los operandos deben ser tratados como números con signo o sin signo. Cuando los operandos son tratados como números sin signo, el bit de extensión de signo (17) del multiplicador 17&#215;17-bits se carga automáticamente con un “0”.</span></p><p><strong><span style="text-decoration: underline;">Ejemplo:</span></strong></p><p style="text-align: justify;"><span style="color: #000000;">Este ejemplo muestra como una multiplicación DSP es realizada en un dsPIC30F. En este ejemplo, el contenido de W4 es multiplicado con el contenido de W5, y el resultado es alma-cenado en el acumulador A.</span></p><p style="text-align: center;"><span style="color: #000000;"><img class="aligncenter size-full wp-image-709" title="-fig5" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig5.jpg" alt="-fig5" width="451" height="250" /></span></p><p style="text-align: justify;"><span style="color: #000000;">Como IF = 0, una multiplicación fraccional es realizada, el resultado entero es un bit desplaza-do a la izquierda, creando una salida de de 33-bits. Este resultado consiste en 2 bits de signo y 31 fraccionarios. El usuario nunca ve el resultado intermedio de 33-bits, debido a que la lógica extensora de signo lo convierte a un número de 40 bits antes de cargarlo al acumulador.</span></p><p style="text-align: justify;"><span style="color: #000000;">Aunque el resultado de la multiplicación fraccionaria tiene 31 bits, el LSb es siempre 0 debido al desplazamiento. Esto significa que la resolución de la multiplicación fraccionaria es 2<sup>-30</sup> y no 2<sup>-31</sup>.</span></p><p style="text-align: justify;"><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Lógica de Control de Cero de Relleno y de Extensión de Signo</span></strong></span></h3><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-710" title="-fig6" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig6.jpg" alt="-fig6" width="428" height="267" /></span></strong></span></p><p style="text-align: justify;"><span style="color: #000000;">La lógica de Cero de Relleno y de Extensión de Signo es utilizada como una interfaz entre el Bus de Datos X y la salida del multiplicador a los acumuladores de 40 bits, ACCA y ACCB.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cada acumulador consiste de tres registros adyacentes:</span></p><p style="text-align: justify;"><span style="color: #000000;">El Acumulador Superior, es el byte superior, bits del 39 al 32;</span></p><p style="text-align: justify;"><span style="color: #000000;">El Acumulador Alto, es la palabra del medio, bits del 31 al 16;</span></p><p style="text-align: justify;"><span style="color: #000000;">El Acumulador Bajo, es la palabra inferior, bits del 15 al 0.</span></p><p style="text-align: justify;"><span style="color: #000000;"><br /> </span></p><p style="text-align: justify;"><span style="color: #000000;">El punto radical implícito para los números fraccionarios se ubica entre los bits 31 y 30.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando un acumulador se carga utilizando el Acumulador de Carga, o LAC, la parte inferior del acumulador se pondrá a cero desde la lógica de cero de relleno, y todos los bits en la parte superior del acumulador tomarán el valor de del bit 31 del acumulador a partir de la lógica de extensión de signo.</span></p><p style="text-align: justify;"><span style="color: #000000;">Para las instrucciones de multiplicación del DSP, el resultado de 33 bits del Escalador sirve como entrada de la lógica de extensión de signo, la cual extenderá el signo a un resultado de 40 bits.</span></p><p style="text-align: center;"><img class="aligncenter size-full wp-image-711" title="-fig7" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig7.jpg" alt="-fig7" width="474" height="266" /></p><p style="text-align: justify;"><span style="color: #000000;">Estos ejemplos demuestran cómo opera la Lógica de Cero de Relleno y de Extensión de signo.</span></p><p style="text-align: justify;"><span style="color: #000000;">En el primer ejemplo, el contenido de W1 es guardado en el acumulador A. Puesto que W1 es negativo (es decir, el bit 15 = 1), la lógica de extensión de signo coloca la parte superior del acumulador A en 0xFF. La lógica de cero de relleno pone la parte inferior del acumulador A en cero para todas las instrucciones LAC.</span></p><p style="text-align: justify;"><span style="color: #000000;">En el segundo ejemplo, el contenido de W2 es almacenado en el acumulador B. Como W2 es positivo (o sea, el bit 15 = 0), la lógica de extensión de signo completa la parte superior del acumulador A con ceros. La lógica de cero de relleno coloca la parte inferior del acumulador A en cero para todas las instrucciones LAC.</span></p><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">Sumador del DSP</span></strong></span></h2><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-712" title="-fig8" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig8.jpg" alt="-fig8" width="343" height="239" /></span></strong></span></p><p style="text-align: justify;"><span style="color: #000000;">El sumador del DSP tiene una extensión de 40 bits y soporta tres tipos diferentes de entradas. Las entradas pueden ser: cero, o venir desde un acumulador o desde la lógica de extensión de signo. La selección de las entradas está basada en la instrucción ejecutada, y es transparente al usuario.</span></p><p style="text-align: justify;"><span style="color: #000000;">Todas las operaciones del sumador son signadas, y una entrada al sumador también puede ser negada. Esta característica provee el soporte para instrucciones del DSP tales como: multiplicación y negación, multiplicación y resta, negación y sustracción del acumulador.</span></p><p style="text-align: justify;"><span style="color: #000000;"> El sumador genera los bits de estado en los cuales se indican el desbordamiento y la saturación. Los diferentes modos de saturación son seleccionables por el usuario.</span></p><p style="text-align: justify;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"> </span></strong></span></p><p style="text-align: justify;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"> </span></strong></span></p><h3 style="text-align: justify;"><span style="color: #000000;"><strong><span style="text-decoration: underline;">Acumuladores </span></strong></span></h3><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-713" title="-fig9" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig9.jpg" alt="-fig9" width="370" height="209" /></span></strong></span></p><p style="text-align: left;"><p style="text-align: justify;"><span style="color: #000000;">Cada uno de los acumuladores de 40 bits, A y B, están compuestos por un byte superior y dos palabras de 16 bits ordenadas en una alta y otra baja. El acumulador superior provee 8 bits extras de guarda que pueden ser utilizados se efectúan una gran cantidad de operaciones en el acumulador.</span></p><p style="text-align: justify;"><span style="color: #000000;"> </span></p><p><span style="color: #000000;"> <strong><span style="text-decoration: underline;">Bits de Estado del Acumulador</span></strong></span></p><p><span style="color: #000000;"> Seis bits del registro de estado han sido proveídos para soportar la saturación y el desbordamiento.</span></p><p style="text-align: center;"><span style="color: #000000;"><img class="aligncenter size-full wp-image-714" title="-fig10" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig10.jpg" alt="-fig10" width="533" height="267" /></span></p><p style="text-align: justify;"><span style="color: #000000;">Los bits OA y OB son leídos y modificados cada vez que el dato pasa a través de la lógica de suma/resta del acumulador. Cuando están en uno, indican que la operación más reciente produjo un desbordamiento. Este tipo de desbordamiento no es catastrófico.</span></p><p style="text-align: justify;"><span style="color: #000000;">Los bits SA y SB pueden ser colocados a uno cada vez que el dato pasa a través de la lógica de saturación del acumulador. Una vez puestos a uno, estos bits permanecen en uno hasta que sean borrados por el usuario. Cuando están en uno, estos bits indican que el acumulador ha desbordado su rango máximo (bit 31 para el modo de saturación de 32 bits y bit 39 para el de 40 bits) y se saturará (si el modo de saturación está habilitado).</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando el modo de saturación no está habilitado, los bits SA y SB indican que ha ocurrido un desbordamiento catastrófico.</span></p><p><span style="color: #000000;"> </span><span style="color: #000000;"><strong><span style="text-decoration: underline;">Saturación del Acumulador </span></strong></span></p><p style="text-align: center;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-715" title="-fig11" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig11.jpg" alt="-fig11" width="415" height="214" /></span></strong></p><p style="text-align: justify;"><span style="color: #000000;">El dsPIC30F soporta dos modos opcionales de saturación los cuales siempre afectan la salida del sumador de 40 bits: saturación de 31 bits (referido a la Saturación Normal) y saturación de 39 bits (referido a la Súper Saturación).</span></p><p style="text-align: justify;"><span style="color: #000000;">La selección del modo de saturación está controlada por diversos bits del registro CORCON. El bit SATA habilita o deshabilita la saturación del acumulador A, y el SATB hace lo mismo para el acumulador B.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando la saturación está habilitada, el bit ACCSAT es utilizado para seleccionar el tipo de saturación –ya sea Saturación Normal o Súper Saturación. El mismo modo de saturación se aplicará a ambos acumuladores, si los dos bits SATA y SATB están en 1.</span></p><p><span style="color: #000000;"> <strong><span style="text-decoration: underline;">Saturación Normal (1.31)</span></strong></span></p><p style="text-align: center;"><strong><span style="text-decoration: underline;"><img class="size-full wp-image-716  aligncenter" title="-fig12" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig12.jpg" alt="-fig12" width="405" height="248" /></span></strong></p><p style="text-align: justify;"><span style="color: #000000;">El modo de saturación normal soporta un formato de datos 1.31. El formato de datos 1.31 usa sólo un bit de magnitud (el cual es el bit de signo) y 31 bits fraccionales para representar un valor.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando la Saturación Normal está habilitada, la salida del sumador está limitada a un rango de 32 bits, y el acumulador superior contiene la extensión de signo del valor de 32 bits almacenado en el acumulador alto y bajo. El signo del valor de 32 bits, almacenado en el bit 15 del acumulador alto, es extendido a todos los bits en el acumulador superior. Esto significa que si una operación destruye el bit de signo guardado en el bit 31 del acumulador, el sumador saturará el resultado ya sea a un número negativo o positivo más grande de 32 bits.</span></p><p><span style="color: #000000;"><strong><span style="text-decoration: underline;">Súper Saturación (9.31)</span></strong></span></p><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-717" title="-fig13" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig13.jpg" alt="-fig13" width="375" height="250" /></span></strong></span></p><p style="text-align: center;"><p style="text-align: justify;"><span style="color: #000000;">Cuando la Súper Saturación está habilitada, la salida del sumador está limitada a un rango de 40 bits, y el registro del acumulador superior contiene la información de la magnitud en sus 8 bits superiores. Este formato de dato está referido al 9.31, porque tiene 9 bits de magnitud, dentro de los cuales se incluye el bit de signo, y 31 bits fraccionales.</span></p><p style="text-align: justify;"><span style="color: #000000;">En el modo de Súper Saturación, cuando una operación de suma destruye el bit de signo guardado en el bit 39 del acumulador, el sumador saturará el resultado ya sea a un número negativo o positivo mayor que 40 bits. El máximo valor negativo del acumulador es 0&#215;8000000000 o -256.0 como un valor de punto fijo. El mayor valor positivo que admite el acumulador es 0x7FFFFFFFFF o aproximadamente +256.0.</span></p><p><strong><span style="text-decoration: underline;"> </span></strong></p><p><span style="color: #000000;"><strong><span style="text-decoration: underline;">Saturación deshabilitada</span></strong></span></p><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="size-full wp-image-718  aligncenter" title="-fig14" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig14.jpg" alt="-fig14" width="360" height="206" /></span></strong></span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando la saturación está deshabilitada, la salida del sumador nunca se modifica. En este modo, el sumador provee el mismo rango dinámico que para el modo de Súper Saturación, desde -256.0 hasta +256.0 aproximadamente, pero no ocurrirá un corte cuando el rango sea excedido.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando una operación excede el rango permitido, los 40 bits inferiores del resultado quedarán sin modificaciones, aún cuando sean incorrectos. Esta condición es llamada “Desbordamiento Catastrófico” y el usuario tiene la opción de generar una trampa de error matemático. Esta selección está controlada por el bit de habilitación de trampa de desbordamiento catastrófico, que se encuentra en el registro INTCON1.</span></p><h2><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">División </span></strong></span></h2><p style="text-align: center;"><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="aligncenter size-full wp-image-719" title="-fig15" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig15.jpg" alt="-fig15" width="383" height="187" /><br /> </span></strong></span></p><p style="text-align: justify;"><span style="color: #000000;">El bloque de control de la división provee un soporte para la división de números enteros con y sin signo, a través de las instrucciones DIV.S y DIV.U respectivamente, como así también para la división de números fraccionales por medio de la instrucción DIVF. Las instrucciones de división de números enteros también soportan divisiones extensas, donde el numerador es de un ancho 32 bits y se almacena en 2 registros de trabajo adyacentes, pero el denominador es de un ancho de 16 bits. Las instrucciones de divisiones extensas usan la notación DIV.SD y DIV.UD.</span></p><p style="text-align: justify;"><span style="color: #000000;">Diferente a todas las demás instrucciones del dsPIC30F, las instrucciones de la división  deben ser usadas en conjunto con instrucción REPEAT. Especialmente, la instrucción para la división debe ser ejecutada 18 veces en un bucle REPEAT, como se muestra en el ejemplo. En este ejemplo, W8 es dividido por W9. El cociente se almacenará en W0, y el resto en W1.</span></p><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Redondeo Lógico</span></strong></span></h3><p><span style="color: #000000;"><strong><span style="text-decoration: underline;"><img class="size-full wp-image-720 alignleft" title="-fig16" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig16.jpg" alt="-fig16" width="264" height="220" /></span></strong></span></p><p><img class="aligncenter size-full wp-image-721" title="-fig17" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig17.jpg" alt="-fig17" width="268" height="235" /></p><p style="text-align: justify;"><span style="color: #000000;">El redondeo lógico puede realizar la función de redondeo convencional o convergente durante la escritura (almacenamiento) de un acumulador. El modo de redondeo es determinado por el estado del bit RND del registro CORCON &lt;1&gt;. Por defecto, el modo de redondeo es convergente. El redondeo no afecta al acumulador. La descripción del modo de operar de cada tipo de redondeo puede observarse en la figura de arriba. Para ambos casos se evalúa tanto el redondeo hacia arriba o hacia abajo.</span></p><h3><span style="color: #000000;"><strong><span style="text-decoration: underline;">Desplazador</span></strong></span></h3><p style="text-align: center;"><img class="aligncenter size-full wp-image-722" title="-fig18" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig18.jpg" alt="-fig18" width="318" height="234" /></p><p style="text-align: justify;"><span style="color: #000000;">El desplazador de 40 bits es utilizado para el corrimiento de datos, con un rango de desplazamiento de hasta 16 bits tanto a la izquierda como a la derecha. El desplazador es compartido entre las instrucciones del MCU y el DSP.</span></p><p style="text-align: justify;"><span style="color: #000000;">Cuando se realiza un desplazamiento en MCU, la fuente y el destino deben venir del arreglo de del registro de trabajo. Cuando se efectúa un corrimiento en DSP, la fuente debe ser un acumulador, y el destino debe ser ya sea el mismo acumulador o cualquier registro W o alguna locación de memoria.</span></p><p style="text-align: justify;"><span style="color: #000000;">Para los desplazamientos en MCU, los bits de estado “N” y “Z” son actualizados, con lo cual el usuario puede determinar si el resultado es negativo o cero. Para los corrimientos en DSP, el valor resultante está sujeto a la saturación antes de su almacenamiento. Además, si el rango de desplazamiento del SFTAC excede más o menos 16, se generará una trampa de error matemático.</span></p><p style="text-align: justify;"><span style="color: #000000;">Las instrucciones que utiliza el desplazador en DSP son:</span></p><p style="text-align: center;"><img class="aligncenter size-full wp-image-723" title="-fig19" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig19.JPG" alt="-fig19" width="465" height="140" /></p><hr size="3"><p><center><a target="_blank" rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/"><img alt="Creative Commons License" style="border-width: 0pt;" src="http://i.creativecommons.org/l/by-nc-sa/2.5/ar/88x31.png" title="Overview MCU ALU   DsPIC 30F" /></a></center><br /><span><em><a target="_blank" href="http://ayudaelectronica.com"><strong>Ayuda Electronica</strong></a></em></span> se encuentra bajo una licencia <a target="_blank" rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/">Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 Argentina License</a>.<br />Los permisos más allá del alcance de esta licencia pueden estar disponibles en <a target="_blank" href="http://ayudaelectronica.com/contacto" rel="nofollow">Contacto</a></p><hr size="1"> ]]></content:encoded> <wfw:commentRss>http://ayudaelectronica.com/overview-mcu-alu-dspic-30f/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>¿Que es un DSP?</title><link>http://ayudaelectronica.com/que-es-un-dsp/</link> <comments>http://ayudaelectronica.com/que-es-un-dsp/#comments</comments> <pubDate>Mon, 25 May 2009 14:44:13 +0000</pubDate> <dc:creator>Cesar</dc:creator> <category><![CDATA[Electronica Digital]]></category> <category><![CDATA[DSP]]></category><guid isPermaLink="false">http://ayudaelectronica.com/blog/?p=70</guid> <description><![CDATA[ Un procesador de señal digital (DSP) es un tipo de microprocesador (increíblemente rápido y poderoso). Un DSP es único porque realiza el procesamiento de datos en tiempo real. Esta capacidad de operación en tiempo real hace de un DSP la opción perfecta para aplicaciones en las que no vamos a ...]]></description> <content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-71 alignnone" title="dsp" src="http://ayudaelectronica.com/wp-content/uploads/2009/05/dsp.jpg" alt="dsp ¿Que es un DSP?" width="438" height="348" /></p><p style="text-align: justify;"><span style="color: #000000;">Un <strong>procesador de señal digital</strong> (<strong>DSP</strong>) es un tipo de microprocesador (increíblemente rápido y poderoso). Un <strong>DSP</strong> es único porque realiza el procesamiento de datos en tiempo real. Esta capacidad de operación en tiempo real hace de un <strong>DSP</strong> la opción perfecta para aplicaciones en las que no vamos a tolerar retrasos.</span></p><p style="text-align: justify;"><span style="color: #000000;">Básicamente un <strong>DSP</strong> adquiere una señal digital y la procesa para mejorar la misma. La mejora puede ser un sonido más claro, imagen más nítida o datos más rápidos.</span></p><p style="text-align: center;"><span style="color: #000000;"><span id="more-70"></span></span></p><p style="text-align: justify;"><span style="color: #000000;">Aunque hay muchos procesadores <strong>DSP</strong>, la mayoría son diseñados con las mismas operaciones básicas en mente, por lo que comparten el mismo conjunto de características básicas. Estas características se dividen en tres categorías:</span></p><ul style="text-align: justify;"><li><span style="color: #000000;">Alta velocidad de cálculos aritméticos.</span></li><li><span style="color: #000000;">Transferencia de datos hacia y desde el mundo real.</span></li><li><span style="color: #000000;">Arquitecturas de memoria de múltiple acceso.</span></li></ul><p style="text-align: justify;"><span style="color: #000000;">Un <strong>DSP</strong> para operar requiere unas simples funciones típicas:</span></p><ul style="text-align: justify;"><li><span style="color: #000000;">Suma y Multiplicación.</span></li><li><span style="color: #000000;">Retrasos.</span></li><li><span style="color: #000000;">Manejo de Arreglos (vectores).</span></li></ul><p style="text-align: justify;"><span style="color: #000000;">Para realizar la aritmética simple requerida los procesadores <strong>DSP </strong>necesitan unidades aritméticas de alta velocidad. La mayoría de las operaciones requieren sumas y multiplicaciones juntas, por lo cual,  existe hardware para suma y multiplicación que pueden usarse en paralelo con una sola instrucción.</span></p><p style="text-align: justify;"><span style="color: #000000;">Los retrasos (delays) requieren que los valores intermedios sean mantenidos para su uso posterior. Esto también puede ser un requisito, por ejemplo, para un valor total que se actualiza, el total puede ser mantenido en el procesador para evitar lecturas y escrituras masivas en la memoria. Por esta razon los DSPs tienen muchos registros que pueden utilizarse para mantener los valores intermedios.</span></p><p style="text-align: justify;"><span style="color: #000000;">El manejo de arreglos requiere que los datos sean eficientemente adquiridos desde posiciones de memoria consecutivas. Esto implica la generación de la próxima direccion de memoria. Por esta razon existen registros especiales que se usan para mantener las direcciones de memoria y generar la siguiente rápidamente.</span></p><p style="text-align: justify;"><span style="color: #000000;">La capacidad de generar nuevas direcciones de manera eficiente es una característica de los <strong>procesadores DSP</strong>. Por lo general, la siguiente dirección de memoria necesitada puede ser generada durante la operación de búsqueda (fetch) o almacenamiento de un dato, poseen diversas formas de generar una nueva dirección.</span></p><p style="text-align: justify;"><span style="color: #000000;">Además de las matemáticas, en la práctica la mayoría de los DSPs  tratan con el mundo real. Aunque este aspecto es a menudo olvidado, es de gran importancia y marca algunas de las más grandes diferencias entre los procesadores <strong>DSP</strong> y los microprocesadores de propósito general.</span></p><div id="result_box" style="text-align: justify;" dir="ltr"><span style="color: #000000;">En una aplicación típica, el procesador tendrá que tratar con múltiples fuentes de datos del mundo real. En cada caso, el procesador tiene que ser capaz de recibir y transmitir datos en tiempo real, sin interrumpir sus operaciones matemáticas internas. Hay tres fuentes de datos del mundo real:</span></div><div style="text-align: center;" dir="ltr"><span style="color: #000000;"><img class="aligncenter size-full wp-image-72" title="dsp_1" src="http://ayudaelectronica.com/wp-content/uploads/2009/05/dsp_1.png" alt="dsp 1 ¿Que es un DSP?" width="289" height="295" /></span></div><ul style="text-align: justify;"><li><span style="color: #000000;">Señales de entrada y salida.</span></li><li><span style="color: #000000;">La comunicación con un controlador de sistema de un tipo diferente.</span></li><li><span style="color: #000000;">La comunicación con un procesador <strong>DSP</strong> del mismo tipo.</span></li></ul><p style="text-align: justify;"><span style="color: #000000;">Cuando aparecieron por primera vez los procesadores <strong>DSP</strong>, eran bastante rápidos: por ejemplo, el primer <strong>DSP</strong> de coma flotante &#8211; AT&amp;T DSP32 &#8211; corrió a 16 MHz en un momento en que los relojes de PC eran de 5 MHz. Una demostración de moda en ese momento era realizar un cálculo fractal (Mandelbrot) en un <strong>DSP</strong> y en una PC, uno al lado de la otra. El <strong>DSP</strong> fractal fue, por supuesto, más rápido. Hoy, sin embargo, el procesador <strong>DSP</strong> más rápido  TMS320C6201 de Texas corre a 200 MHz. Esto ya no es muy rápido en comparación con un nivel de entrada de PC. Y  hoy el mismo cálculo fractal corre más rápido en el PC que en el <strong>DSP</strong>.<br /> Sin embargo se siguen usando actualmente ¿por que? la respuesta reside parcialmente en la capacidad de ejecutar operaciones en paralelo, una respuesta más básica es que un  <strong>DSP</strong> puede manejar muchas señales, traten de alimentar una PC con 8 señales de audio de alta calidad y observen si no se ve afectado el rendimiento del procesador.</span></p><p style="text-align: center;"> ]]></content:encoded> <wfw:commentRss>http://ayudaelectronica.com/que-es-un-dsp/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching using disk
Object Caching 834/850 objects using disk

Served from: ayudaelectronica.com @ 2010-09-08 00:23:44 -->