Hardware/Software co-design para aplicações de processamento de voz 1Faculdade de Engenharia da Universidade do Porto, 2CHIPIDEA Microelectrónica SA Orientação: 1Prof. Dr. Aníbal João Ferreira, 1Prof. Dr. João Canas Ferreira 2Eng.º António Pacheco, 2Eng.º Vasco Santos Alunos: 1Pedro Manuel Fonseca da Mota, 1Pedro Manuel Vieira dos Santos PROFILING DO CODEC AMR SUMÁRIO A sociedade moderna assenta a sua dinâmica nas telecomunicações e contacto em tempo real. Por essa razão vários sistemas capazes de realizar a codificação de voz têm sido desenvolvidos. Integrado no contexto mencionado, neste projecto pretendeu-se realizar a implementação de um codificador de voz de débito variável, usando um processador dedicado, OpenRisc 1200. Isto passa pela optimização dos algoritmos do codec e o refinamento da arquitectura do processador. • Análise ao código revelou que a escrita dos diferentes algoritmos está feita de forma eficiente. Profiling do codificador de no modo de 12.2 kbit/s. Codificação de frames de voz. • A norma inclui funcionalidades para realizar profiling às diferentes partes do codec. 24% 23% 13% • O peso computacional associado à codificação de frames de voz é o de maior valor. Síntese LP • Codificador de voz apresenta um peso computacional 6 vezes superior ao descodificador. 44% mac • Operações mac representam cerca de 43% de todas as operações. • Codificador AMR de 8 débitos diferentes desde 4.75 a 12.2 kbit/s. • Incorpora: codificador de voz de débitos múltiplos; detector de presença de voz; gerador de ruído de conforto. Codebook adap. - MF Codebook fixo Outros 39% 14% • Norma define operações básicas a serem usadas ao longo do algoritmo do codec. Os resultados destas operações são saturados e garantem a máxima precisão possível. • Norma 3GPP TS 26.071 V6.0.0 (2004-12). Codebook adap. - MA 6% Peso das diferentes operações do codec AMR • Resultados revelaram que a pesquisa no codebook fixo pode ser um factor limitativo da performance total do codec. CODIFICADOR AMR 9% 8% 8% multiplicação adição/subtracção CODIFICADOR DESCODIFICADOR 5% 9% shift CUMPRIR RESTRIÇÕES DE ESPAÇO DA FPGA XCV600 • Sintetizador de voz baseado do modelo CELP. adaptive codebook 35% Or1k Top-level 12121 slices gp Data Cache (4kb) v(n) fixed codebook + gc Inst Cache(4kb) 1 A(z) u(n) ^ s(n) post-filtering ^ s'(n) 2473 slices Debug Unit 40 slices Tick-Timer 9 slices PIC 42 slices IMMU 150 slices 2146 slices LP synthesis c(n) DMMU 198 slices Dc ram 4KB 1726 Slices DMMU TABLE 161 slices Inst Tag 282 slices IMMU TABLE Tag Cache 282 slices • Usado em sistemas de telefonia de voz de banda estreita em sistemas UMTS. Cache Ram ( 4KB) 150 slices 1726 slices Tag ram 98 slices RAM 64x14 68 slices Tag ram 98 slices • Norma define código em linguagem C para a implementação do codec em vírgula fixa. OPTIMIZAÇÃO DO ALGORITMO DO CODEC AMR RAM 64x21 114 slices QMEM (8KB) Power Management Inst Wishbone interface Data wishbone interface Store Buffer 3637slices 7 slices 90 slices 44 slices 273 slices RAM 64x14 68 slices RAM 64x24 103 slices CPU CORE 3237 slices • Alteração na pesquisa ao codebook fixo. • Efectuar um maior número de subconjuntos de pesquisas mas sendo estas por si só menos extensas que as originais. • Síntese do Or1k teve de ser feita para cumprir limitações de espaço impostas pela FPGA de interesse: 6912 slices! • Optimização realizada reflecte-se numa diminuição em 15% do peso computacional do codificador, quando este se encontra a funcionar no seu pior caso para o modo analisado. • Unidades adicionais do top-level do Or1k, removidas através do comentário de macros. • Unidade composta por Core do CPU, Cache de dados e instruções de 1KB e interface wishbone ocupa 4353 slices. • Aumento das caches de 1KB para 4KB implica a passagem de 476 para 1726 slices. • Optimização não causou degradação audível no sinal de saída. • Frequência máxima de funcionamento para a unidade básica 17.082 MHz. Aumento de 7 MHz na frequência, quando se compara o modelo usado para cumprir as restrições com o que contém todas as unidades disponíveis. ORGANIZAÇÃO DO SISTEMA A IMPLEMENTAR Wishbone Inst. Wishbone interface Cache interface ADAPTAÇÃO DO TOP-LEVEL PARA COMUNICAR COM A MEMÓRIA • Memória da plataforma de desenvolvimento sem interface Wishbone! Data Arbitrador de acessos CPU/DSP CORE Cypress Wishbon e SSRAM Memory Controller Addr • Proposta : Adicionar um Arbitrador de acessos. interface Wishbone interface Data Cache Wishbon e Control CONCLUSÕES ADAPTAÇÃO DO CODEC PARA O PROCESSADOR • Uso de macros, escritas todas elas em assembly, foi a solução adoptada para a escrita das operações básicas. Estas não retornam valores, pelo que foi necessário reescrever todas as chamadas a estas operações no código. • Durante este processo foram encontrados diversos problemas devido ao compilador e simulador, pelo que não se conseguiu completar esta tarefa na sua totalidade. • Escassez de documentação relativa ao correcto manuseamento das ferramentas que auxiliam o processador Or1k. Optimizações realizadas sobre o codec AMR. (valores acumulados) 95% 99% 76% 66% Prep. inicial • O controlador de memórias implica um aumento em 1407 slices e o arbitrador de acessos 890 slices. • A área total do sistema será de 6650 slices. Restrições de espaço cumpridas! interface • Colocação inline das operações básicas do algoritmo, é vital para uma eficiente optimização. • Solução: controlador de memórias com suporte para SSRAM com esse interface. A solução não é suficiente. Tentativas de acesso à memória por parte da cache de dados e de instruções obedece a um mecanismo de prioridades. 67% 53% mac mult. CODIFICADOR adi/sub • Optimização do algoritmo da norma do codec produziu uma redução de 15% da capacidade máxima de processamento no modo de maior débito. • O uso de macros para se optimizar as operações básicas possibilitou uma redução em 2.3 vezes nas operações necessárias. 59% 45% • Familiarização com as ferramentas e o próprio ambiente onde estão integradas foi lenta. 41% 51% shift 40% 43% Outras oper. DESCODIFICADOR • No entanto, até ao momento conseguiu-se uma redução de cerca de 60% no processamento total. Em contrapartida a memória de programa aumentou em 11%. • As macros possibilitaram a passagem de 317.4 MIPS para 137.5 MIPS no caso do codificador e de 44.66 MIPS para 20.51 MIPS, sendo estes os valores mínimos para o processamento em tempo real. •A fase de substituição das funções por macros, não foi completada devido a erros que surgiram na simulação do programa do codec. Estes erros estão fundamentalmente associados ao compilador. • O uso do compilador que é fornecido pelo processador revelou ser instável. • Para cumprir requisitos de tempo real, um conjunto de instruções dedicadas tem de ser necessariamente incorporado no processador. Destas, aquela de maior importância é a de leitura do acumulador da MAC. Como é inúmeras vezes chamada no interior de ciclos, esta tem um peso importante no processamento já que a sua codificação em assembly é extensa.