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.
Download

No Slide Title - Universidade do Porto