Solución: ¿Cuál es el proceso específico de intercambio de datos entre el almacenamiento externo y la memoria?
Resumen: El acceso directo a la memoria (DMA) es una tecnología importante para el intercambio rápido de datos en chips DSP. Se presenta en detalle la aplicación de DMA en el chip de la serie de punto flotante ADSP2106x de AD y se dan algunos ejemplos. aplicaciones prácticas.
Palabras clave: chip de la serie de punto flotante DMA ADSP2106x
1 Descripción general de DMA
El acceso directo a la memoria (DMA) es muy importante para los sistemas informáticos. Permite que el sistema acceda a datos desde dispositivos o memorias externas mientras la CPU ejecuta instrucciones, o un dispositivo DMA dedicado puede acceder a datos sin la participación de la CPU.
Para los chips DSP de punto flotante, el papel de DMA es aún más importante. Como todos sabemos, los chips DSP están orientados principalmente al procesamiento de señales en tiempo real y sus componentes informáticos centrales tienen altas velocidades de cálculo, a menudo medidas por MFLOPS (millones de operaciones de punto flotante por segundo). El ADSP2106x es de 120 MFLOPS, pero esta velocidad se basa en el programa y los datos almacenados en la memoria interna del chip. La estructura Harvard multibus se utiliza a menudo dentro del DSP. El bus de datos y el bus de programa son independientes entre sí, es decir, el acceso de instrucciones y el acceso a datos son paralelos. dentro del ADSP2106x para mejorar la capacidad de circulación de datos. Pero fuera del chip, todos los autobuses están fusionados. Por lo tanto, para aprovechar las capacidades informáticas de alta velocidad de la unidad informática central DSP, los programas y los datos primero deben transferirse a la memoria del chip, lo que normalmente requiere operaciones DMA.
Por otro lado, el sistema DSP siempre tiene que lidiar con varias señales externas. Introduce señales digitales desde el exterior, las procesa con varios algoritmos y luego las envía a otros dispositivos. No solo eso, para los sistemas DSP de punto flotante, la entrada y salida de datos suelen ser continuas. Imagínese, si los componentes centrales de DSP se utilizan para completar la entrada y salida de datos, ¿cómo se puede utilizar su potencia informática de alta velocidad? Por lo tanto, la mayoría de los chips DSP de la serie de punto flotante integran la parte de control DMA directamente en el chip y utilizan DMA para completar la entrada y salida de datos.
Un sistema DSP eficiente suele adoptar la estructura que se muestra en la Figura 1. Se abren cuatro áreas de búfer en la memoria, dos se usan como búfer de entrada y dos como búfer de salida para realizar la conmutación ping-pong de entrada y salida. La unidad de procesamiento central obtiene directamente operaciones numéricas del búfer de entrada y luego escribe los resultados de la operación en el búfer de salida, mientras que DMA implementa completamente la entrada y salida de datos de la interfaz externa, sin la participación de la unidad de procesamiento central. Siempre que la velocidad de operación de la unidad de procesamiento central y la velocidad de datos de DMA cumplan con los requisitos, la estructura que se muestra en la Figura 1 puede completar la entrada y salida de un flujo de datos continuo. Por supuesto, desde el exterior, la entrada y salida de datos son continuas, pero dentro del chip se procesan en segmentos. Aunque el procesamiento de segmentación genera algunos errores, siempre que los datos almacenados en caché sean lo suficientemente largos, el error se puede reducir al rango permitido. Debido a que cuanto más largo es el intervalo, menor es la correlación entre los datos anteriores y posteriores, y menor es el impacto entre sí, por lo que el procesamiento segmentado es factible. Debido al procesamiento de segmentación, también tiene un impacto importante en la estructura del chip DSP, que consiste en aumentar la capacidad de su memoria interna tanto como sea posible. Para ADSP21060, su capacidad SRAM interna alcanza los 4 Mbit, lo que puede satisfacer la mayoría de las necesidades de procesamiento de segmentación.
A continuación, primero se brindará una descripción general de DMA en ADSP2106x y luego se realizará un análisis detallado de varias operaciones típicas de DMA.
2 DMA en ADSP2106x
El controlador DMA en chip en ADSP2106x puede controlar 10 canales de DMA al mismo tiempo para completar los siguientes tipos de operaciones de transferencia de datos:
·¿Memoria? ¿Memoria externa o dispositivo de mapeo de memoria externo?
·¿Memoria? Otra memoria ADSP2106x
·¿Memoria? Interfaz de host
·¿Memoria?
·¿Memoria?Puerto de enlace
·¿Memoria?Dispositivo externo
·¿Memoria externa?Dispositivo externo
El flujo de datos enriquecido puede hacer que ADSP2106x implementa interfaces para varios periféricos, debido a que la memoria de ADSP2106x es una SRAM de doble puerto, la unidad de procesamiento central aún puede leer y escribir en la memoria mientras realiza las operaciones DMA anteriores, lo que hace que las operaciones DMA y el procesamiento de operaciones internas sean altamente paralelos. sexo. Por supuesto, debes intentar evitar leer y escribir la misma dirección de memoria al mismo tiempo.
Cada canal DMA tiene uno (o dos) buffers de datos implementados con FIFO. La profundidad máxima del buffer es de 6 niveles para mejorar la velocidad de transferencia de datos DMA. Todas las transferencias de datos DMA se completan a través de estos 10 buffers de datos, que se muestran en la Tabla 1. Entre ellos, los canales 1, 3, 6 y 7 son dos buffers que utilizan un canal DMA. Todos los buffers de datos se asignan a las primeras 256 direcciones de la memoria como registros de E/S.
La programación DMA se logra configurando los registros de E/S relevantes en el chip a través de la unidad de procesamiento central interna o el host externo. Estos registros del puerto de E/S también se asignan a las primeras 256 direcciones de la memoria. . Además del búfer de datos anterior, los registros de E/S relacionados con las operaciones DMA incluyen principalmente:
·Registros de control DMA: DMAC6~9, LCTL, STCTL0~1, SRCTL0~1.
·Registro de recuento de direcciones: II0~9, IM0~9, C0~9, EI6~9, EM6~9, EC6~9.
·Registro puntero de operación de cadena: CP0~9.
·Registros de operación bidimensionales (también se pueden utilizar como registros generales DMA): GP0~9, DA0~5, DB0~5.
·Registro de estado DMA: DMASTAT.
El proceso de transferencia de configuración de DMA es generalmente el siguiente:
(1) Establezca la dirección del registro de recuento de canales correspondiente.
(2) Configure el registro de control DMA del canal correspondiente y establezca el bit de habilitación DMA en él como válido.
(3) Inicie la transferencia de datos DMA.
(4) Una vez completada la transferencia DMA, se genera la interrupción correspondiente y el programa maneja la interrupción.
3 Varias operaciones DMA de uso común
En el proceso de desarrollo de sistemas DSP basados en ADSP2106x, las siguientes operaciones DMA se usan con mayor frecuencia: memoria y memoria externa, memoria y host, Datos Intercambio entre memoria y periféricos, memoria y puerto Link.
3.1 DMA entre memoria y memoria externa
La transmisión DMA entre memoria y memoria externa puede utilizar cualquiera de los cuatro canales DMA, canales 6 al 9.
Aquí hay un ejemplo para ilustrar. Si desea transferir 1024 números en la dirección de memoria 0x26000~0x263ff a la memoria externa 0x400000~4003ff usando el canal DMA 6, puede usar la siguiente programación para lograrlo:
/* Configuración Dirección de memoria - registro de conteo*/
R0=0x26000;
DM(II6)=R0; /*Establecer la dirección de inicio de la memoria*/
R0 =1
DM(IM6)=R0;? /*Establece el valor de incremento de la dirección de memoria*/
R0=1024;?
DM (C6)= R0? /*Establecer el número de lecturas de memoria*/
/*Establecer la dirección de almacenamiento externo - registro de conteo*/
R0=0x400000;?
DM(E16 )=R0;? /*Establecer la dirección inicial de la memoria externa*/
R0=1;
DM(EM6)=R0;? Establezca el valor de incremento de la dirección de la memoria externa* /
R0=1024
DM(EC6)=R0 /*Establezca el número de escrituras de almacenamiento externo*/
<; p> R0=0x0205;? p>DM(DMAC6)=R0;;/*Establecer el registro de control DMA
DMAC6*/
/*Establecer como Master y lea desde la memoria
y habilite DMA*/
/*El canal DMA 6 habilita la operación de transferencia DMA*/
Aquí es necesario explicar dos puntos: (1) Los números inmediatos del registro de E/S no se pueden utilizar para asignar valores directamente, sino que deben asignarse a través de los registros generales R0~15 o USTAT0~1 (2) En ADSP2106x, ya que el ancho de los datos es 8, 16, 32; y 48 modos, cuando se transmite a través de DMA, el ancho en la memoria y la interfaz externa pueden ser diferentes, por lo que el número correspondiente de lecturas y escrituras puede ser diferente, por lo que el contador interno y el contador externo deben configurarse por separado.
Para dispositivos externos mapeados en memoria, la dirección de la interfaz es fija y la programación DMA entre la memoria y el periférico es más sencilla. Por ejemplo, si la dirección de un periférico está configurada en 0x400000, para transferir 1024 números en la memoria 0x26000 a 0x263ff a la interfaz del periférico usando el canal DMA 6, simplemente configure EM6 en el programa anterior en 0.
3.2 DMA entre la memoria y el host
El chip ADSP2106x contiene una interfaz de host, que le permite conectarse fácilmente a una computadora general de 16 o 32 bits en este momento. , la computadora de uso general actúa como host de ADSP2106x y puede acceder a la memoria en chip de ADSP2106x. Normalmente, para reducir la cantidad de líneas de dirección que utiliza el host para direccionar el ADSP2106x y reducir la complejidad del hardware, el host a menudo solo direcciona los registros de E/S del ADSP2106x (hay 256) y solo se necesitan 8 líneas de dirección. ?1?. La placa de desarrollo ADSP2106xEZ-LAB de BittWare adopta este método. En este caso, la mayor parte del intercambio de datos entre el host y la memoria ADSP2106x se completa a través de DMA. Lo siguiente se explica a través de un programa en lenguaje C que se ejecuta en una microcomputadora. En este momento, la placa EZ-LAB se inserta en la ranura del bus ISA de la microcomputadora que sirve como host de ADSP2106x. El microordenador puede acceder a través de la E/S del bus ISA O para visitarlo. Este programa carga datos d[1024] en la memoria ADSP2106x 0x26000~0x263ff a través del canal 6 de DMA.
El procedimiento específico es el siguiente:
#injclude "conio.h"
#include "def21060.h" /*Archivo de definición de dirección de registro de E/S ADSP*/
#include :stdio.h"
#define ADDR 0X402 /*Defina la dirección del puerto de E/S del bus ISA correspondiente a la línea de dirección ADSP
*/ p>
#define DATA 0x404 /*Defina la dirección del puerto de E/S del bus ISA correspondiente a la línea de datos ADSP
*/
main()? d[1024];?
/*Establezca la dirección del canal DMA 6 en ADSP - registro de conteo y registro de control*/
outpw(ADDR,II6); /*Direccionamiento registro de dirección inicial II6*/
outpw(DATA,0x6000); /*Establece los 16 bits bajos de II6*/
outpw(DATA,0x2); 16 bits de II6*/ p>
outpw(ADDR,IM6);? /*Registro de aumento de dirección de dirección IM6*/
outpw(DATA,1); /*Establecer el inferior 16 bits de IM6*/
p>outpw(DATA,0);? /*Establece los 16 bits altos de IM6*/
outpw(ADDR,C6); / *Registro de recuento de direcciones C6*/
outpw(DATA,1024);? /*Establece los 16 bits inferiores de C6*/
outpw(DATA,0); Establezca los 16 bits superiores de C6*/
outpw(ADDR,DMAC6);?/*Direccionamiento del registro de control DMA
DMAC6 */
outpw(DATA ,0x41);?/*Establece el mínimo de DMAC6 en 16 bits*/
outpw(DATA,0); /*Establece el máximo en 16 bits de DMAC6*/
/ *ADSP DMA canal 6 está configurado en modo 16/32 bits,
Y enciende y listo, esperando que la microcomputadora transmita datos*/
/*La microcomputadora escribe continuamente datos d[.] en el buffer de datos EPB0 del canal DMA 6*/ p>
outpw(ADDR,EPB0); /*Dirigiendo los datos del canal DAM 6
Registro de datos EPB0 */
for(n=0;n< 1024;n++)? {outpw(DATA,d[n]); /*Escribir datos d[n]*/
outpw(DATA,0);? /*Escribe 0 para los 16 bits más altos*/
} }
Hay dos puntos que deben explicarse sobre el programa anterior: (1) La línea de dirección y la línea de datos de ADSP2106x se acceden a través de las dos direcciones de puerto de E/S en el bus ISA (ADDR y DATA); (2) El bus ISA es de 16 bits y los registros de E/S y la memoria; Los datos de ADSP2106x son de 32 bits, por lo que la microcomputadora necesita usar los 16 bits altos y bajos para transmitir respectivamente y, al mismo tiempo, configurar DMA6 en modo de 16/32 bits. Los detalles sobre EZ-LAB se pueden encontrar en la literatura [1].
3.3 DMA entre memoria y periféricos
Para algunos dispositivos externos, su entrada o salida está sincronizada con un reloj externo y no tiene nada que ver con el reloj de lectura y escritura del ADSP2106x. Cuando un dispositivo de este tipo interactúa con el ADSP2106x, el enfoque habitual es agregar una FIFO o RAM de doble puerto a la interfaz para aislar la lectura y escritura del ADSP2106x del reloj de entrada o salida del periférico.
Sin embargo, el chip ADSP2106x en sí proporciona un método más flexible y eficiente, a saber, el método de protocolo de enlace DMA (Handshake) de los canales DMA 7 y 8, que puede eliminar por completo la necesidad de FIFO o RAM. Su circuito de aplicación típico se muestra en la Figura 2.
En la figura, el ancho de línea de datos de 8 bits se utiliza como ejemplo. Con el canal DMA 7 como salida, las señales de protocolo de enlace correspondientes son DMAR1 y DMAG1 con el canal DMA 8 como entrada. Las señales de protocolo de enlace correspondientes son DMAR2 y DMAG2. Todo el circuito solo utiliza los chips 74273 y 74374 más utilizados, y los relojes de lectura y escritura de los periféricos pueden alcanzar hasta 40 MHz. En este modo DMA de protocolo de enlace, el dispositivo periférico no ocupa el bus de direcciones externo de ADSP2106x. Los detalles del circuito anterior no se repetirán aquí.
A continuación se detalla el procedimiento correspondiente para configurar el protocolo de enlace DMA. Se supone aquí que se ingresarán 1024 datos desde el periférico 2 a la memoria 0x26000~0x264ff, luego el canal DMA 8 debe programarse de la siguiente manera:
/*Establezca la dirección de memoria - registro de conteo*/
R0=0x26000;?
DM(II8)=R0; /*Establece la dirección inicial de la memoria*/
R0=1;
DM (IM8)=R0; /*Establece el valor de incremento de la dirección de memoria*/
R0=1024;
DM(C8)=R0; escrituras de memoria*/
/*Establece el registro de recuento de memoria externa*/
R0=1
DM(EM8)=R0; valor de incremento de dirección de memoria externa*/
R0=1024
DM(EC8)=R0 /*Establezca el número de entradas de memoria externa*/
R0=0x401;
DM(DMAC8)=R0; /*Establecer el registro de control DMA
DMAC8*/
/*Establecer en Handshake y escribir en modo de memoria y habilitar DMA*/
/* El canal DMA 8 está activado, esperando el reloj de entrada del periférico. Cada vez que se recibe un reloj, ingréselo una vez */
<. p> Lo que hay que explicar sobre el programa anterior es: aunque no hay Se utiliza la dirección de la memoria externa, pero también se deben configurar los registros de recuento de la memoria externa EM7 y EC7.Si desea ingresar datos en el periférico 1, debe programar DMA7 de manera similar.
3.4 DMA entre la memoria y el puerto de enlace
ADSP2106x tiene fuertes capacidades de trabajo en paralelo y no necesita agregar ningún circuito de arbitraje externo. 6 ADSP2106x y un host se pueden conectar fácilmente. en paralelo. El intercambio de datos entre ellos se puede realizar a través del bus de direcciones y datos externos compartidos, o a través del puerto de enlace punto a punto. Los 6 puertos Link son interfaces de datos de alta velocidad exclusivas del chip ADSP2106x; cada puerto Link contiene 4 líneas de datos, una línea de reloj y una línea de señal de respuesta, con una velocidad máxima de transferencia de datos de 40 Mbytes/s.
Al utilizar el puerto Link para el intercambio de datos entre chips, normalmente se utiliza el método DMA, para que se puedan aprovechar al máximo sus ventajas. Cuando se utiliza el modo DMA para la comunicación del puerto de enlace, además de configurar el registro de recuento de direcciones, también es necesario configurar el registro de selección de velocidad de transmisión (LCOM) y el registro de emparejamiento de puerto de caché (LAR); finalmente, configurar el registro de control DMA LCTL; Y habilite la operación DMA.
Supongamos que hay dos piezas de ADSP2106x, que están conectadas entre sí mediante el puerto Link5. Necesitamos usar el puerto Link5 para transferir los números 1024 de la primera pieza de memoria 0x26000~0x263ff a la segunda; pieza de memoria 0x23000~0x23fff, entonces la configuración de programación DMA de los dos ADSP2106x es la siguiente:
/*Primer chip*/
r0=0X3f000;?
dm(LCOM)=r0 ; /*Configura el puerto de enlace en 2x clock*/
r0=0xfff7f;
dm(LAR)=r0 /*link port5; --> link buffer2,
Corresponde al canal DMA 4*/
r0=0X26000
dm(II4)=r0; dirección*/
r0=1024;
dm(C4)=r0; /*Establecer el número de lecturas*/
r0=1; p>
dm(IM4)=r0; /*Establecer valor de incremento de dirección*/
r0=0Xb00;?
dm(LCTL)=r0; DMA*/
/* Segunda pieza*/
r0=0X3f000;
dm(LCOM)=r0 /*Configura el puerto de enlace en reloj 2x; */
r0= 0xfff7f;
dm(LAR)=r0; /*puerto de enlace5-->búfer de enlace 2, para
debe ser el canal DMA 4*/
r0= 0x23000;
dm(II4)=r0; /*Establecer la dirección inicial*/
r0=1024;
dm(C4)=r0; / *Establecer el número de lecturas*/
r0=1;
dm(IM4)=r0; valor de incremento*/
r0=0x300;
dm(LCTL)=r0; /*habilitar entrada DMA*/
Los dos programas anteriores deben cargarse en dos ADSP2106x respectivamente. Cabe señalar que Link Buffer 2 corresponde al canal DMA 4. Si empareja otro Link Buffer con el puerto Link 5, deberá configurar el canal DMA correspondiente al Buffer.
La función de operación DMA en ADSP2106x es poderosa y diversa. Además de las partes presentadas en este artículo, también hay DMA en cadena, DMA bidimensional, etc., por lo que es difícil dominarlas todas. y aplicarlos hábilmente. Mediante la aplicación de varios DMA, los datos que entran y salen del chip se pueden hacer más fluidos y se puede maximizar la potencia informática de su unidad de procesamiento central
(Este artículo es una reproducción del mundo de la ingeniería electrónica: /designarticles/embed/ 200605/2612.html)