<?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; Tecnicas Digitales III</title>
	<atom:link href="http://ayudaelectronica.com/c/tecnicas-digitales-3/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>Mon, 28 Nov 2011 23:14:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.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[ALU]]></category>
		<category><![CDATA[division]]></category>
		<category><![CDATA[DSP]]></category>
		<category><![CDATA[DsPIC]]></category>
		<category><![CDATA[familia 30F]]></category>
		<category><![CDATA[multiplicacion]]></category>
		<category><![CDATA[multiplicador]]></category>
		<category><![CDATA[normal]]></category>
		<category><![CDATA[redondedo logico]]></category>
		<category><![CDATA[saturacion]]></category>
		<category><![CDATA[sumador]]></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" width="475" height="182" /></p>
<p style="text-align: justify;"><span style="color: #000000;">Los <strong>DsPIC</strong> 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;"><br />
</span></h3>
<h2><span style="color: #0000ff;"><strong><span style="color: #000080;">Familia DsPIC30F</span><span style="text-decoration: underline;"><br />
</span></strong></span></h2>
<p style="text-align: justify;"><span style="color: #000000;">El módulo <strong>dsPIC30F</strong> tiene una CPU de 16-bits (datos), arquitectura Harvard modificada con un conjunto de instrucciones mejoradas, incluyendo un soporte importante para <strong>DSP</strong>. 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 <strong>dsPIC30F</strong> tiene dos clases, <strong>MCU</strong> y <strong>DSP</strong>. 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>
<h3><span style="color: #666699;"><strong>MCU &#8211; ALU</strong></span></h3>
<p style="text-align: justify;"><span style="color: #000000;">Una vista de alto nivel de la <strong>Unidad Aritmética Lógica</strong> (ALU), se ilustra aquí. Podemos ver que la <em>ALU</em> 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><img class="size-full wp-image-694" title="Esquema de MCU-ALU de un DsPIC30F" src="http://ayudaelectronica.com/wp-content/uploads/2010/03/fig1.jpg" alt="MCU-ALU-DsPIC30F" width="503" height="339" /></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>
<h4><span style="color: #000000;"><strong><span style="text-decoration: underline;">Registro de Estado del CPU: SR</span></strong></span></h4>
<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" width="491" height="156" /></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>
<p>.</p>
<h3><span style="color: #666699;"><strong>Motor DSP</strong></span></h3>
<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 <strong>MCU ALU</strong>. 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 M<strong>CU ALU</strong> 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" width="523" height="435" /></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>
<ul>
<li><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></li>
<li><span style="color: #000000;">Desde el bus de datos de memoria X para todas las demás instrucciones DSP.</span></li>
</ul>
<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>
<ul>
<li><span style="color: #000000;"> El acumulador de destino, según lo definido por la instrucción DSP ejecutada.</span></li>
<li><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></li>
</ul>
<p style="text-align: justify;"><span style="color: #000000;">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>
<h4><span style="color: #000000;"><strong><span style="text-decoration: underline;">Registro de Control de Núcleo: CORCON</span></strong></span></h4>
<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" 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>
<p>.</p>
<h3><span style="color: #666699;"><strong>Multiplicador</strong></span></h3>
<p style="text-align: justify;"><span style="color: #000000;">El <strong>multiplicador</strong> del <strong>dsPIC30F</strong> 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>
<ul>
<li><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></li>
<li><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></li>
</ul>
<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" 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" 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" width="566" height="185" /></span></p>
<p style="text-align: justify;">
<h4 style="text-align: justify;"><span style="color: #000000;"><strong>Multiplicación MCU</strong></span></h4>
<p style="text-align: justify;"><span style="color: #000000;"> <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></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" 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>
<h4><span style="color: #000000;"><strong>Multiplicación DSP</strong></span></h4>
<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 acumuladores (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" 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><span style="color: #000000;"><strong><span style="text-decoration: underline;">Ejemplo:</span></strong></span></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;">
<h4><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></h4>
<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>
<ul>
<li><span style="color: #000000;">El Acumulador Superior, es el byte superior, bits del 39 al 32;</span></li>
<li><span style="color: #000000;">El Acumulador Alto, es la palabra del medio, bits del 31 al 16;</span></li>
<li><span style="color: #000000;">El Acumulador Bajo, es la palabra inferior, bits del 15 al 0.</span></li>
</ul>
<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>
<h3><span style="color: #666699;"><strong>Sumador del DSP</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-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>
<h4 style="text-align: justify;"><span style="color: #000000;"><strong><span style="text-decoration: underline;">Acumuladores </span></strong></span></h4>
<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;"> <span style="color: #000000;">Seis bits del registro de estado han sido proveídos para soportar la saturación y el desbordamiento.</span></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>
<h4><span style="color: #000000;"> <strong><span style="text-decoration: underline;">Saturación Normal (1.31)</span></strong></span></h4>
<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>
<h4><span style="color: #000000;"><strong><span style="text-decoration: underline;">Súper Saturación (9.31)</span></strong></span></h4>
<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>
<h4><span style="color: #000000;"><strong><span style="text-decoration: underline;">Saturación deshabilitada</span></strong></span></h4>
<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>
<h3><span style="color: #666699;"><strong>División </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-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>
<h4><span style="color: #000000;"><strong><span style="text-decoration: underline;">Redondeo Lógico</span></strong></span></h4>
<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>
<h4><span style="color: #000000;"><strong>Desplazador</strong></span></h4>
<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>
]]></content:encoded>
			<wfw:commentRss>http://ayudaelectronica.com/overview-mcu-alu-dspic-30f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codigo Manchester</title>
		<link>http://ayudaelectronica.com/codigo-manchester/</link>
		<comments>http://ayudaelectronica.com/codigo-manchester/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 16:53:53 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Tecnicas Digitales III]]></category>
		<category><![CDATA[codificacion]]></category>
		<category><![CDATA[codificador]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[manchester]]></category>

		<guid isPermaLink="false">http://ayudaelectronica.com/blog/?p=205</guid>
		<description><![CDATA[
La codificación Manchester es una técnica de codificación sincrónica que se utiliza para codificar el clock y los datos de un flujo de bits sincrónico. En esta técnica, los datos binarios que se transmiten no se envían como una secuencia de 1 y 0 lógicos (conocida como de no retorno ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span style="color: #000000;"><img class="size-full wp-image-206 aligncenter" title="codificadores en manchester rf800" src="http://ayudaelectronica.com/wp-content/uploads/2009/07/rf800.jpg" alt="codigo manchester rf800" width="200" height="200" /></span></p>
<p style="text-align: justify;"><span style="color: #000000;">La <strong>codificación Manchester </strong>es una técnica de codificación sincrónica que se utiliza para codificar el clock y los datos de un flujo de bits sincrónico. En esta técnica, los datos binarios que se transmiten no se envían como una secuencia de 1 y 0 lógicos (conocida como de no retorno a cero, NRZ). En cambio, los bits se convierten en un formato ligeramente diferente que tiene una serie de ventajas sobre el uso directo de codificación binaria.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Existen dos convenciones empleadas para la codificación <em>Manchester</em>.</span></p>
<p style="text-align: justify;"><span style="color: #000000;"><span id="more-205"></span></span></p>
<h2><span style="color: #000080;">Codigo Manchester</span></h2>
<p style="text-align: justify;"><span style="color: #000000;">La primera de ellas fue publicada por primera vez por Thomas G.E. en 1949 y es seguido por numerosos autores (por ejemplo, Tanenbaum). Especifica que para representar un 0 lógico la señal debe cambiar del nivel Bajo a Alto (suponiendo una amplitud física de codificación de los datos), manteniendo el nivel bajo en la primera mitad del período del bit, y un nivel alto en la segunda mitad. Para un 1 lógico los niveles de la señal deberá cambiar de Alto a Bajo.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">La segunda convención es también seguida por numerosos autores (por ejemplo, Stallings), así como por las normas IEEE 802.4 (token bus) y IEEE 802.3 (Ethernet). Afirma que un 0 lógico es representado por una secuencia de señales Alto-Bajo  y un 1 lógico está representado por una secuencia de señal Bajo-Alto.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Como puede apreciarse si a una señal codificada en <strong>Manchester</strong> la invertimos, hemos pasado de una convención a la otra.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Entonces, las reglas de codificación según la primera convención son:</span></p>
<ul style="text-align: justify;">
<li><span style="color: #000000;">Si el dato original es un 0, el <em>código Manchester</em> es: 01</span></li>
</ul>
<ul style="text-align: justify;">
<li><span style="color: #000000;">Si el dato original es un 1, el <em>código Manchester</em> es: 10</span></li>
</ul>
<ul style="text-align: justify;">
<li><span style="color: #000000;">Cada bit se transmite en un tiempo fijo (el &#8220;periodo&#8221;).</span></li>
</ul>
<ul style="text-align: justify;">
<li><span style="color: #000000;">Las transiciones que significan O o 1 se producen en el punto medio de un período.</span></li>
</ul>
<p style="text-align: justify;"><span style="color: #000000;"> El proceso para realizar la <strong>codificación</strong> es muy simple y solo es necesario efectuar un X-OR entre los datos y el clock para obtener la señal codificada. La decodificación es mucho más compleja y necesita un post aparte.</span></p>
<p><span style="color: #000000;">Datos  XOR   clock      Manchester<br />
0                     0                    0<br />
0                     1                    1<br />
1                     0                    1<br />
1                     1                    0</span></p>
<p style="text-align: justify;"><span style="color: #000000;">En los siguientes ejemplos podemos ver la 2 convenciones de codificación:</span></p>
<div id="attachment_207" class="wp-caption aligncenter" style="width: 310px"><span style="color: #000000;"><a href="http://ayudaelectronica.com/wp-content/uploads/2009/07/codificacion-manchester-ieee.jpg"><img class="size-medium wp-image-207 " title="codificacion-manchester-ieee" src="http://ayudaelectronica.com/wp-content/uploads/2009/07/codificacion-manchester-ieee-300x187.jpg" alt="Codificación Manchester Norma IEEE" width="300" height="187" /></a></span><p class="wp-caption-text">Codificación Manchester Norma IEEE</p></div>
<div id="attachment_208" class="wp-caption aligncenter" style="width: 408px"><span style="color: #000000;"><a href="http://ayudaelectronica.com/wp-content/uploads/2009/07/codificacion-manchester-thomas.jpg"><img class="size-medium wp-image-208 " title="codificacion-manchester-thomas" src="http://ayudaelectronica.com/wp-content/uploads/2009/07/codificacion-manchester-thomas-300x45.jpg" alt="Codificación Manchester Norma Thomas GE. El patrón de 8-bits: &quot;0 1 1 1 1 0 0 1&quot; se codifica como &quot;01 10 10 10 10 01 01 10&quot;. Bit LSB a la izq." width="398" height="59" /></a></span><p class="wp-caption-text">Codificación Manchester Norma Thomas GE. El patrón de 8-bits: &quot;0 1 1 1 1 0 0 1&quot; se codifica como &quot;01 10 10 10 10 01 01 10&quot;. Bit LSB a la izq.</p></div>
<p style="text-align: justify;"><span style="color: #000000;">La codificación puede ser alternativamente considerada como una codificación de fase, donde cada bit es codificado por una transición de fase de 90º, o 270º grados. Por lo tanto, es común encontrar que se refiera a ella como un Código Biphase.<br />
A su vez la <strong>codificación Manchester</strong> es un caso especial de <em>binary phase-shift keying</em> (BPSK), donde los datos controlan la fase de una onda cuadrada cuya frecuencia portadora es la velocidad de transmisión de datos. Lo que significa, que es <em>self-cloking</em>, por lo tanto la señal de reloj (clock) puede ser recuperada de los datos codificados.</span></p>
<h3 style="text-align: justify;"><span style="color: #000000;">Códigos Ilegales</span></h3>
<p style="text-align: justify;"><span style="color: #000000;">Dado que un &#8217;0&#8242; codifica en 01 y un &#8217;1&#8242; codifica a 10 (o viceversa), se desprende que códigos <em>Manchester</em> 00 y 11 son secuencias ilegales. Estos códigos ilegales se utilizan para comprobar errores en los datos.<br />
También es posible tener el código ilegal de 4 bits &#8220;00 00 11 11&#8243;, el cual es un suceso poco probable. Este &#8220;código ilegal&#8221; tiene la propiedad de tener un componente de DC de cero y no tiene transiciones de 1 a 0, esa secuencia se la suele utilizar como un patrón único de inicio/fin para identificar los límites de nuestra transmisión de bits de datos codificada en <em>Manchester</em>.</span></p>
<h3 style="text-align: justify;"><span style="color: #000000;">Desventajas</span></h3>
<p style="text-align: justify;"><span style="color: #000000;">Se puede observar que hay dos bits de datos codificados en <em>Manchester</em> por cada bit de datos originales. Por lo tanto, la contra de usar una codificación <em>Manchester</em> es que los datos codificados requieren el doble de ancho de banda.</span></p>
<h3 style="text-align: justify;"><span style="color: #000000;">Ventajas</span></h3>
<p style="text-align: justify;"><span style="color: #000000;">1. Transmisión serial de bits con componente nula de DC.<br />
2. Detección de errores fácil de aplicar.</span></p>
<h3 style="text-align: justify;"><span style="color: #000000;">Usos</span></h3>
<p style="text-align: justify;"><span style="color: #000000;">El <strong>codigo Manchester</strong> es utilizado en la capa física de la comunicación LAN ETHERNET donde el ancho de banda adicional no es un impedimento para el cable coaxial. También suele utilizarse cuando se realiza una comunicación por medio de RF para evitar el ruido.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Existen unos integrados denominados <a href="http://www.rfsolutions.co.uk/acatalog/DS800-4.pdf" target="_blank">RF800</a> que son encoder/decoder para transmisiones por RF codificando los datos en <em>Manchester</em>, y agregando un chequeo de error RCR.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://ayudaelectronica.com/codigo-manchester/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching 1/12 queries in 0.018 seconds using disk: basic
Object Caching 395/410 objects using disk: basic

Served from: ayudaelectronica.com @ 2012-02-05 11:14:29 -->
