Optimización de Rendimiento en PIC 16F8X: Sistema de Buses Múltiples y Gestión de Memoria Bancaria

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,26 KB

Arquitectura de Microcontroladores PIC 16F8X

Con el objetivo de mejorar el rendimiento de la arquitectura del PIC, se implementa un **sistema de buses múltiples** en el cual cada banco de memoria (ya sea programa, dato o pila) es accedido por sus propios juegos de buses con tamaños particularmente diseñados para cada uno.

El objetivo es que la **Unidad de Búsqueda (UB)** acceda a la memoria del programa por sus correspondientes buses, mientras que la **Unidad de Ejecución (UE)** pueda resolver instrucciones utilizando todos los demás bancos y buses en forma simultánea. Esto implica que la UB ubica una instrucción y se la pasa a la UE; luego, la UE resuelve esta primera instrucción, pero a la vez, la UB ya está ubicando la segunda instrucción. La UE resuelve la segunda instrucción mientras la UB busca la tercera, y así sucesivamente. De esta manera, se logra la **ejecución continua de instrucciones** (pipelining), incrementando el rendimiento hasta que aparece una instrucción de salto.

Para que esto sea posible, cada banco tendrá un ancho y un largo particular y diferente a los otros, según sea lo necesario. Se nota que, en el caso de la memoria de programa, se pretende que en cada posición de **14 bits de ancho** queden tanto el **Código de Máquina (CDM)** como el postbyte en una sola posición, sea cual sea la instrucción, y además, pretendiendo resolver cada una de ellas en solamente un ciclo de máquina (CDM), salvo las instrucciones de salto, que se resolverán en dos.

Instrucciones de Salto y Retraso de Pipeline

Como se mencionó anteriormente, las instrucciones de salto implican dos ciclos de máquina para resolverlas, ya que la UB debe descartar la instrucción siguiente al salto (que ya había sido ubicada) para obtener la instrucción correspondiente a la posición destino del salto. Este descarte es lo que genera el retraso en el pipeline.

Bancos de Memoria Básicos del PIC 16F8X

  • Memoria de Programa (Flash): Bus de Dirección (13 bits), Bus de Datos (14 bits).
  • Memoria de Usuario (SRAM/Files): Bus de Dirección (7 bits), Bus de Datos (8 bits).
  • Memoria Pila (Stack): Bus de Dirección (3 bits), Bus de Datos (13 bits).

Detalle del Banco de Memoria de Programa (Flash)

En este esquema básico, la memoria de programa está dividida en **4 páginas**, utilizando los 13 bits necesarios para direccionar la totalidad del banco. Los 11 bits menos significativos indican el comienzo y el final de cada página, mientras que los 2 bits más significativos restantes conforman el número de página. Por lo tanto, cada página comienza con los 11 bits menos significativos en cero y finaliza con los mismos en uno.

Estructura de la Instrucción (14 bits)

La disposición anterior se debe a que se pretende que todas las instrucciones puedan caber en una sola posición de memoria de programa. Específicamente, en las instrucciones de salto deben caber en 14 bits tanto el CDM como la dirección del postbyte. Si se dejaran los 13 bits completos para la dirección, solo quedaría 1 bit para el CDM, lo cual es inviable. Se adoptó entonces utilizar **3 bits para el CDM** y **11 bits para la dirección**.

Esto implica que, al realizar un salto, la instrucción solamente indica una parte de la dirección destino (los 11 bits menos significativos), mientras que los otros dos bits se definen en el registro especial **PCLATCH**.

Banco de Memoria de Usuario (Files/SRAM)

Para ampliar la memoria de archivos (files) sin modificar el bus de dirección de 7 bits, el diseño implementa la superposición de **4 bancos**. Estos bancos comparten el mismo bus de dirección, pero solo uno de ellos se conecta al bus de datos por vez.

La selección del banco activo se realiza mediante los dos bits de selección **RP0** y **RP1**, que controlan el switch de acceso a los bancos.

Al utilizar instrucciones de acceso al archivo, se indican los 7 bits de dirección como postbyte, pero no se especifica a qué banco corresponde. Previamente, el programador debe haber apuntado al banco deseado configurando los bits correspondientes de RP0 y RP1 (a 1 o 0).

Entradas relacionadas: