© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 1
Sumário
• O processador de sinal TMS320C31
– descrição geral, arquitectura– componentes do CPU – sistema de interrupção
– periféricos do C31: porta série, “timers” e DMA – registos do CPU
– organização do espaço de memória – modos de endereçamento da memória
• registo • directo • indirecto • imediato • circular • “bit reversed” – o mecanismo “boot-loader”
• Antevisão do 4º trabalho de laboratório
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
TMS320C3x
➪
Que representa ?
Uma gama de processadores digitais de sinal (DSPs) de 32 bits (C30, C31 e C32) com diferente complexidade estrutural, que são produzidos pela Texas Instruments e que executam operações aritméticas em vírgula flutuante. Por exemplo, o TMS320C31 (50MHz) -o usado no DSK das aulas de laboratório- é um processador de baixo custo, tem um ciclo de instrução de 40 ns e executa 25 milhões de instruções por segundo (25 MIPS), e até 50 milhões de instruções em vírgula flutuante por segundo (50 MFLOPS).
➪
Por que são interessantes ?
Tratam-se de DSPs de alto desempenho em resultado,
nomeadamente, da grande precisão e gama dinâmica permitidas pela representação em vírgula flutuante, da quantidade de
memória RAM interna ao DSP (2K x 32 bits), do alto grau de paralelismo de instruções e da existência de um controlador de DMA. Podem, por exemplo, implementar operações de
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 3
Diagrama de Blocos do C3x
(
∴
C30, C31, C32)
7 barramentos separados P/D Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05• Constituição (hardware)
– palavras de dados e instrução de 32 bits,
– multiplicador (hardware) de vírgula fixa e flutuante + ALU de 40/32 bits,
– 12 registos de controlo,
– 8 registos de precisão extendida (acumuladores): RØ - R7, – 8 registos auxiliares particularmente dedicados a operações de
endereçamento: ARØ - AR7,
– “cache” de programa de 64 x 32 bits,
– 2 memórias internas “dual-access” de 1K x 32 bit cada, – um canal DMA suportando I/O concorrente,
– dois “timers” de 32 bits,
– dois portos série (só um no C31) suportando transferências de 8/16/24/32 bits,
– espaço de endereçamento externo de 24 bits, – duas “flags” externas de uso geral,
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 5
• Características (software)
– instruções de dois e três operandos,
– capacidade de repetir blocos de instruções (“block repeat”),
– instruções entrelaçadas (“interlocked”) para multiprocessamento, – “boot loader” flexível para carregamento automático de código.
• Vocação
A versatilidade e vocação dos processadores TMS320C3x para operarem em tempo-real, tornam-nos indicados para inúmeras aplicações que incluem:
– convolução (filtragem digital) e correlação,
– transformada rápida de Fourier (e.g. FFT e análise espectral), – filtragem adaptativa (e.g. cancelamento de eco),
– geração de sinais (e.g. síntese de música) – reconhecimento/codificação/síntese de fala – espalhamento espectral – próteses auditivas. Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
Arquitectura do TMS320C31
Von Neuman ? Harvard C31: internamente é Harvard e para o exterior é Von Neuman, i.e. possui arquitectura Harvard modificada !© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 7
Unidade de Processamento Central (CPU)
• multiplicador de hardware
– operandos inteiros de 24 bits → resultados em 32 bits
– operandos de vírgula flutuante (32 bits) → resultados em 40 bits – paraleliza com operação de ALU num único ciclo de instrução
• unidade aritmética e lógica (ALU)
– permite efectuar deslocamentos de bits (à direita e à esquerda) – permite conversão de formatos: inteiro ↔ vírgula flutuante
• unidades aritméticas auxiliares (ARAUØ e ARAU1)
– permitem geração de dois endereços num único ciclo e podem operar em paralelo com o multiplicador e a ALU
– suportam modos de endereçamento circular e “bit-reversed”, e ainda endereçamento com desvio explícito ou definido pelo conteúdo dos registos de índice (IRØ e IR1)
Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
Interrupções no C31
➪
Quantas são ?
O C31 suporta quatro interrupções externas INTØ - INT3,
algumas interrupções internas (geradas pelo controlador de DMA, pelos “timers” e pelo porto série) e uma interrupção externa não mascarável: RESET. Estas várias possibilidades podem ser usadas para interromper a actividade do DMA ou do CPU. O atendimento a uma interrupção por parte do CPU é sinalizado através da activação do pino externo IACK.
➪
E o atendimento às interrupções ?
Caso esteja autorizada, quando é declarado um pedido de
interrupção, o processador procura o endereço que aponta para código de atendimento à interrupção em causa. A tabela seguinte lista os vectores de interrupção (apontadores para as rotinas de atendimento de cada interrupção) quando o C31 está configurado no modo “Microcomputer/Boot-Loader” (o modo configurado no DSK).
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 9 em cada um destes endereços
deve haver uma instrução do tipo “branch” para o endereço da respectiva rotina de atendimento.
• Tabela dos Vectores de Interrupção do C31
ERRO ! R-buffer cheio ! Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
• Prioridade das interrupções
– na eventualidade de dois pedidos de interrupção ocorrem simultaneamente, o CPU considera prioridade no atendimento de acordo com a tabela seguinte:
→ maior prioridade !
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 11
• bits de controlo na interrupção do CPU
Há três registos no CPU que controlam a operação de interrupção: – registo ST e, em particular, o seu bit GIE (global interrupt enable)
que permite (GIE=1) ou inibe (GIE=0) atendimento aos pedidos de interrupção mascaráveis,
– registo IE (interrupt enable) que permite ou inibe, de forma selectiva, as interrupções originadas pelo CPU, DMA externo, porta série e “timers”,
– registo IF (interrupt flag) que contém os bits que assinalam (i.e. ficam activos perante) os pedidos de interrupção. Estes bits podem ser explicitamente activados ou desactivados por software:
e.g.
AND @mask, IF ; activa/desactiva pedidos
Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
Periféricos do C31
➪
Um porto série, dois “timers” e um coprocessador de
DMA, todos controlados por registos mapeados na
memória e barramentos (dados/endereços) dedicados
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 13
– TIMERS: são módulos baseados em contadores de 32 bits com dois modos de sinalização e possibilidade de serem activados com relógio interno ou externo. Cada “timer” contém um pino dedicado (TCLKØ, TCLK1)
para ligação com o exterior.
– PORTO SÉRIE: é um módulo de comunicação bidireccional de dados com o exterior, configurável para comunicação em 8, 16, 24 ou 32 bits. É
controlado por registos mapeados na memória e pode ser accionado por relógio interno ou externo. Possui “timers” próprios.
– ACESSO DIRECTO À MEMÓRIA (DMA): o controlador de DMA permite ler ou escrever em qualquer posição do mapa de memória do C31, sem interferir com a operação de CPU, por via da existência de barramentos de dados e endereços próprios, assim como de geradores de endereços, registos de endereço origem e endereço destino e contador de
transferência, próprios. Em caso de competição entre o CPU e o DMA, o primeiro tem prioridade.
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
Registos do CPU
Há no total 28 registos mais o registo Program Counter (PC)
➪
RØ - R7
Acumuladores de precisão alargada (40 bits), quando usados com inteiros, só os 32 LSBs é que são efectivamente modificados,
➪
ARØ - AR7
Registos auxiliares (32 bits) usados para gerar endereços de 24 bits, como contadores de iteração, etc. Podem ser acedidos pelo CPU e modificados pelas ARAUS,
➪
DP (apontador de página)
Dos seus 32 bits, os 8 LSBs são usados para o modo de
endereçamento directo como apontador de página. Estes bits são carregados através da instrução LDP. As páginas têm uma
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 15
➪
IRØ, IR1 (registos de índice)
Guardam os valores usados pela ARAU para compôr um endereço indexado.
➪
BK (registo de tamanho de bloco)
Guarda o tamanho do bloco de dados usado pela ARAU no endereçamento circular.
➪
SP (apontador da “stack” do sistema)
Guarda endereço do topo da stack do sistema. Aponta para o último elemento guardado na stack. É utilizado quando ocorrem interrupções, “traps”, “calls” e “returns”, ou as instruções PUSH e POP. Um PUSH origina pré-incremento de SP enquanto que um POP origina um pós-decremento de SP.
➪
ST (registo de estado)
Guarda informação diversa sobre o estado do CPU (e.g. indica se o resultado da última operação foi zero, negativo, etc. ). O seu conteúdo pode ser guardado e reposto através da stack.
Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
Formato do registo ST, significado e função dos bits relevantes
NOTA: “latched” significa que a flag em causa só pode ser desactivada por RESET ou explicitamente por software. Pergunta 1: “overflow” aplica-se à repreaplica-sentação em vírgula fixa e flutuante ?
Pergunta 2: “underflow” aplica-se à representação em vírgula fixa e flutuante ?
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 17
Formato do registo ST, significado e função dos bits relevantes (cont.)
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
➪
IE (registo de permissão de interrupção do CPU/DMA)
Assinala a permissão (“1”) ou inibição (“0”) de cada tipo de interrupção.
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 19
Formato do registo IE, significado e função dos bits relevantes (cont.)
NOTA: As flags
associadas ao porto série 1 -não existente no C31-devem ser colocadas a ZERO, e não a UM, situação que pode provocar
resultados imprevisíveis ! Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
➪
IF (registo de “flags” de interrupção do CPU)
Assinala os pedidos de interrupção.
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 21
➪
IOF (registo de “flags” de I/O)
Controla a função e dados dos pinos externos XFØ e XF1, que podem ser configurados como entradas ou saídas.
NOTA: as linhas externas do C31 a que se associam as flags XFØ e XF1, são particularmente adequadas ao multiprocessamento (ver capítulo sobre “interlocked operations” no manual do C3x).
Formato do registo IOF, função e significado dos bits relevantes
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
➪
RC (registo de controlo de repetição)
Usado para contar as iterações de um ciclo de instruções do tipo “block repeat”. Se o seu conteúdo for N-1, o ciclo de instruções é iterado N vezes. O início deste ciclo é apontado pelo registo “repeat start address register” (RS), e o seu fim é apontado pelo registo “repeat end address register” (RE).
NOTA: Os registos RS e RE não são explicitamente carregados.
Exemplo: início LDI 10, RC
RPTB fim_blc ; itera onze vezes CALL FILTRO
FIX R0, R1 ; resultado da convolucão em R0
fim_blc STI R1, *AR5
➪
PC (registo contador de programa)
Contém endereço da próxima instrução a ser invocada (“fetched”). NOTA: O registo PC não faz parte do CPU.
➪
IR (registo de instrução)
Contém o “opcode” da instrução durante a sua fase de descodificação.
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 23
Sumário dos registos
Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
Organização do espaço de memória no C31
• Espaço total de endereçamento em 24 bits:
224=16 Mwords• Blocos de memória interna do C31
– Cache de 64 x 32 bits, guarda secções de código que são repetidas frequentemente minimizando deste modo o acesso a memória externa, o que permite armazenar código em memória mais lenta e possibilita a concorrência de outras operações externas como o DMA, etc. A cache pode operar de forma automática, sem intervenção do utilizador (NOTA: a cache não é utilizada quando o programa reside em memória interna).
– Dois blocos de memória RAM de 1 Kwords cada, suportam dois acessos de CPU num único ciclo. No C31 a configuração da RAM é diversa consoante a configuração do DSP:
µprocessador (mais adequado quando o C31 funciona como escravo) ou
µcomputador (mais adequado quando o C31 funciona como mestre).
– Há uma “boot loader” ROM mapeada nos endereços 0h - 0FFFh quando o C31 se encontra configurado no modo µcomputador.
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 25
Mapa de memória do C31
modoµcomputador
modo
µprocessador o usado no DSK !
A área ROM de
boot-loader residente no C31 permite carregar programas para execução, a partir de três áreas de arranque possíveis (assinaladas por Boot1, Boot2 e Boot3), ou então a partir da porta-série. Após carregamento, a execução inicia-se no primeiro endereço do código copiado. Por precaução, deve-se evitar colocar código nas posições 809800h e 809801h já que são usadas pelo
“boot-loader” para “stack”
(ver código do
“boot-loader” no manual do C3x ou do DSK). Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
Registos de periféricos mapeados
no mapa de memória do C31 Endereços para rotinas de interrupção e “trap”mapeados no mapa de memória do C31
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 27
Modos de endereçamento da memória
Há no essencial seis modos: registo, directo, indirecto, imediato, circular e “bit reversed”.
• Registo
– O operando encontra-se num registo do CPU. exemplo:
• Directo
– O endereço do operando é formado com base nos 8 LSBs do conteúdo do registo “data page pointer” (DP), com os 16 LSBs do endereço fornecido na instrução e prefixado por @.
e.g. : Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
• Indirecto
– O endereço do operando encontra-se num registo auxiliar (cujo endereço deve ser prefixado por *), o qual pode opcionalmente ser afectado por um desvio (expresso por um inteiro de 8 bits) explícito, como sugerido na Tabela 1, ou indexado (i.e. usando os registo IRØ ou IR1), como sugerido nas Tabelas 2 e 3.
Tabela 1
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 29 Tabela 2
• Indirecto
(continuação)NOTA: o símbolo % denota endereçamento circular ! Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05 Tabela 3
• Indirecto
(conclusão)© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 31
• Imediato (curto, longo)
– O valor do operando (expresso em 16 ou 24 bits), é explicitamente indicado na instrução.
exemplo:
• Circular
– Muito útil para algoritmos como convolução (filtragem digital) e correlação. A tabela circular corresponde a uma janela
deslizante que abrange os dados mais recentes a serem processados, sendo os dados mais antigos “apagados” pela escrita de novos dados, uma vez que a posição lógica seguinte ao final da tabela é o seu início físico:
Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
– O comprimento da tabela circular deve ser guardado no registo
BK. O início da tabela deve situar-se numa fronteira de
endereços cujos K LSBs devem ser zero, sendo
2K>comprimento da tabela. Isto garante-se através do uso da
directiva .bstart.
NOTA 1: ao ser usado um desvio no deslocamento circular,
ele deverá ser <= ao comprimento da tabela.
NOTA 2: no primeiro acesso à tabela, o uso de um desvio
deverá remeter para um endereço da tabela base.
Algoritmo usado no endereçamento circular (sendo
index=posição actual e step=desvio):
exemplo para uma tabela com BK=6 : o símbolo % denota endereçamento circular !
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 33
– Exemplo de filtragem FIR com endereçamento circular. * inicializações
início LDI @end_H, AR0 ; aponta resposta impulsional
LDI @end_X, AR1 ; aponta “buffer” de dados
LDI N, BK ; comprimento tabela circular * ciclo de nova amostra, convolução, nova saída
rotina LDI IN, R1 ; carrega nova amostra
STI R1, *AR1++% ; alinha nova amostra
LDI 0, R1 ; inicializa acumulador
LDI N-1, RC ; comprimento filtro
* ciclo do filtro digital
RPTB fim_blc ; itera N vezes
MPYI3 *AR0++%, *AR1++%, R0
fim_blc ADDI3 R0, R1, R1 ; resultado em R1
* guarda amostra de saída STI R1, OUT B rotina
end_H →
← end_X
h(-k) x(k) amostra mais antiga
amostra mais recente
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05 X(0) X(1) X(N-3) X(N-2) ARØ → ← AR1
– Exemplo de filtragem FIR com endereçamento circular (cont.)
∑
=− − = 1 0 ) ( ) ( ) ( N k k n x k h n y∑
− = + + + − − = − = 0 1 ) ( ) 0 ( ) 1 ( ) 1 ( ) ( ) ( ) ( N k n x h N n x N h k n x k h n y∑
− = − + + − + − = − − = 0 1 ) 1 ( ) 0 ( ) 1 ( ) 2 ( ) 0 ( ) 1 ( ) 1 ( ) ( N k N x h x N h x N h k N x k h y definição da convolução convolução com varrimento inverso saída no instante actual, e.g. n=N-1© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 35
– Exemplo de filtragem FIR com endereçamento circular (cont.)
h(k) k 0 1 2 k x(k) 0 1 2 x(-k) k 0 -1 -2 caso ilustrativo (N=3): n=0 h(2) h(1) h(0) ARØ → 0 0 x(0) AR1 → y(0)=h(0)x(0) x(1-k) k 0 -1 1 n=1 h(2) h(1) h(0) ARØ → x(1) 0 x(0) AR1 → y(1)=h(1)x(0)+h(0)x(1) x(2-k) k 0 1 2 n=2 h(2) h(1) h(0) ARØ → x(1) x(2) x(0) AR1 → y(2)=h(2)x(0)+h(1)x(1)+h(0)x(2) Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05
• Bit Reversed
– Muito útil para endereçar a memória com correção automática de endereços em bit reversed que decorrem da implementação da FFT, presumindo-se que o seu comprimento é uma potência de dois. O endereço base da tabela a endereçar deverá situar-se numa fronteira em que os K bits LSBs são zero. Sendo N=2K
(K<16), o comprimento da FFT, isto garante-se através da conhecida directiva .bstart do assemblador.
– É necessário carregar um registo de índice, e.g. IRØ com N/2=2K-1, de modo a poder invocar o endereçamento em bit
reversed, como se ilustra no exemplo ilustrado no slide seguinte.
© AJF/FJR Processamento Digital de Sinal em Tempo Real, 4ª a u la te ór ic a FE U P , 18 de Março de 20 05 37
• Bit Reversed (
cont.)
• EXEMPLO: N=16=24, IRØ=23=8=1000b. Se o endereço base for
AR2=96=01100000b, ter-se-á no endereçamento em bit reversed:
• NOTA1: Quando os dados são complexos e as componentes real e imaginária encontram-se em posições consecutivas (Real0, Imag0, Real1, Imag1, … ) então IRØ deverá conter N=2K e o endereço
base deverá ter os (K+1) bits LSBs iguais a zero.
• NOTA2: Fisicamente, o incremento em bit-reversed é conseguido através da propagação em sentido contrário ao usual do bit de “carry” (ver manual do C3x).
Sinal em Tempo Real, 4ª a u la te ór ic a U P , 18 de Março de 20 05
O Mecanismo de “Boot-Loader”
– O “boot-loader” consiste em código (consultável no anexo B do manual do C3x) existente a partir da posição 0x45 da ROM interna do C31 e que lhe permite carregar programas a partir de memória ou via porta série; este código é invocado no arranque do C31 (após um RESET) através da configuração apropriada do pino MCBL/PP do C31
– o mecanismo “boot-loader” corresponde a um modo de funcionamento do C31 (como µcomputador) que permite, no seu arranque, a cópia para memória interna de código executável fornecido do exterior a partir de outro processador, ou a partir de memória lenta (e.g. EPROM) ‘mapeada’ numa de três regiões possíveis do mapa de memória do C31 (‘slide’ 25), ou via porta série, assim como a sua execução a partir de um endereço especificado
– o mecanismo “boot-loader” suporta a cópia de código a partir de memória com 8, 16, ou 32 bits (via porta série a transferência de código faz-se só em 32 bits), o que é detectado após a leitura do primeiro byte de código copiado
– seguidamente ao primeiro byte, segue-se informação sobre o tipo de memória que armazena o código (indica por exemplo se requer “wait states” no seu acesso), sobre o endereço para onde será copiado o código e a extensão deste, – após a cópia do primeiro bloco de código, poderá haver lugar à cópia de mais