- Mundo dsPIC
- Arquitectura Interna
- Memorias
- Camino de Datos
- Puertas E/S
- Periféricos integrados
- Gestión del Sistema y la Energía
- Descargas
Direccionamiento modular o circular
Existen bastantes algoritmos DSP en los que se repiten ciertas operaciones sobre un conjunto de datos. Dichos conjuntos implementan buffer circulares que hay que recorrer ordenadamente. Esta situación es habitual en el cálculo de filtros FIR (Finite Impulse Response). Para optimizar el procesamiento de este tipo de cálculos se ha desarrollado un conjunto de recursos hardware que soportan el modo de direccionamiento modular o circular. De esta manera se evita el uso de software para realizar este tipo de algoritmos y, en consecuencia, la gestión hardware de los buffer o tablas de datos consigue mucha mayor fluidez.
Para recorrer los buffer circulares se utiliza un puntero que se desplaza desde el principio al final, incrementando o disminuyendo el valor, incluso de forma bidireccional.
El hardware que incluyen los DSC exime al programador de comprobar constantemente el valor del puntero para no rebasar el límite y regresar a la posición de inicio cuando ha terminado de recorrerlo. Para conseguir esta característica existen unos registros hardware que soportan la operatividad de este direccionamiento.
- XMODSRT, YMODSRT:
- Contienen la dirección modular de inicio de los buffers (AGUX y AGUY).
- XMODEND, YMODEND:
- Contienen la dirección modular final de los buffers (AGUX y AGUY).
Cualquier registro W (excepto W15) puede actuar como puntero de buffer y los 4 registros anteriormente mencionados establecen las direcciones inicial y final. En el direccionamiento ascendente el puntero se va incrementando desde la posición inicial del buffer hasta el final. Cuando el puntero se incrementa se recorre el buffer desde la posición final a la inicial.
El direccionamiento modular puede funcionar en el espacio de la memoria de programa y en el de datos, tanto en la zona X como en la Y:
- En el espacio X: El código binario del registro W que actúa como puntero del buffer se carga en los 4 bits de menos peso del registro MODCON<3:0> (XWM<3:0>).
- En el espacio Y: El código binario del registro W que actúa como puntero del buffer se carga en los 4 bits siguientes del registro MODCON<7:4> (YWM<3:0>).
El código binario del registro W que actúa como puntero del buffer debe ser un número distinto de 15 (1111 binario) y los bits XMODEN y YMODEN deben estar habilitados para poder utilizar los registros XWM e YWM (del registro MODCON) respectivamente.
![]() |
---|
bit 15 | XMODEN: Habilitación del registro de 4 bits XWM<3:0> |
1: Registro Habilitado | |
0: Registro deshabilitado | |
bit 14 | YMODEN: Habilitación del registro de 4 bits YWM<3:0> |
1: Registro Habilitado | |
0: Registro deshabilitado | |
bit 7-4 | YWM<3:0>: Guarda el nº del registro W que actúa como puntero del buffer en espacio Y. |
bit 3-0 | XWM<3:0>: Guarda el nº del registro W que actúa como puntero del buffer en espacio X. |
En la programación del direccionamiento modular se comienza cargando la dirección de inicio del buffer en XMODSRT, luego la dirección final en XMODEND, después se especifica en los 4 bits correspondientes de MODCON (XWM<3:0>) el registro W que participa como puntero y finalmente se indica el número de veces que se recorrerá el buffer circular mediante una operación DO.
Ejemplo de exploración del buffer incremental con direccionamiento modular:
![]() |
|
---|
Ejemplo de exploración del buffer decremental con direccionamiento modular:
![]() |
|
---|