• Nenhum resultado encontrado

Em (BENINI et al, 2000), é proposta uma arquitetura geral de codificação/decodificação que reduz a quantidade de transições nos sinais de comunicação e também usa um par decorrelator/correlator para reduzir a quantidade de bits ‘1’ transmitidos.

A Figura 3.5 ilustra esta arquitetura geral de codificação/decodificação. O codificador (E) recebe uma seqüência de palavras x(n) (n = 0, 1, 2,...) com W-bits de largura. Ele consiste de três blocos: (i) um registrador que armazena x(n-1) quando a entrada do codificador é x(n); (ii) uma função combinacional de codificação que gera a palavra codificada y(n) em função de x(n) e x(n-1); (iii) um decorrelator (STAN; BURLESON, 1997-b) que transforma transições de y(n) em bits de valor 1 nas linhas de comunicação, gerando z(n) (bits de valor 0 correspondem a valores estacionários nas linhas de comunicação).

O decodificador (D) recebe como entrada uma palavra z(n) transmitida através do canal de comunicação e computa a palavra x(n) original. Ele consiste de três blocos: (i) um correlator que executa a função inversa do decorrelator, reproduzindo y(n); (ii) uma função combinacional de decodificação que reproduz x(n) a partir de y(n) e x(n-1); (iii) um registrador que armazena x(n-1) quando a saída do decodificador é x(n).

O decorrelator executa a função out(n) = in(n) xor out(n-1), enquanto que o correlator executa a função out(n) = in(n) xor in(n-1). A vantagem de se usar um par decorrelator/correlator é que ele transforma o problema de minimizar o número de transições nas linhas de comunicação no problema de minimizar a quantidade de bits ‘1’ na entrada do decorrelator (STAN; BURLESON, 1997-b).

Figura 3.5: Arquitetura geral de codificação/decodificação.

A função de codificação E tem como objetivo minimizar a quantidade média de bits ‘1’ na sua entrada, e ao mesmo tempo garantir que a palavra codificada y(n) seja decodificada de forma não ambígua pela função D. A arquitetura apresentada na Figura

3.5 pode ter diferentes configurações, de acordo com a definição das funções de codificação e decodificação.

Em (BENINI et al, 2000), os autores apresentam um algoritmo utilizado para preencher uma tabela de codificação que é utilizada pelo codificador para gerar a palavra y(n), e pelo decodificador para reproduzir a palavra original x(n). A idéia nesta abordagem é enviar uma palavra codificada y(n) com a quantidade mínima possível de bits ‘1’, de acordo com as palavras de entrada x(n) e x(n-1). Para isto, é necessário que se conheça a distribuição probabilística de cada par possível de palavras consecutivas. Os autores chamam esta distribuição de Joint Probability Distribution (JPD). A tabela é então organizada em ordem decrescente de probabilidade, de forma que os pares com maior probabilidade ficam no topo, assim como as saídas com menor quantidade de bits ‘1’.

Entretanto, esta abordagem tem algumas limitações. Uma delas é o fato de que o conhecimento do JPD pode ser incompleto ou aproximado, pois obter uma estimativa

Pxi,xj precisa para cada par de palavras de entrada consecutivas pode tornar-se

impraticável para grandes fluxos de dados. Além disso, a implementação do codificador/decodificador pode ser inaceitável quanto à sua área e consumo de potência, devido à complexidade da tabela de codificação com 3 colunas (x(n), x(n-1) e y(n)) e 22W linhas.

No mesmo trabalho, os autores propõem um esquema de codificação probabilístico adaptativo (Adaptive Probability Encoding), o qual não requer nenhum conhecimento a- priori do tráfego, sendo capaz de adaptar-se em tempo de execução. Este esquema opera bit-a-bit, em vez de palavra-a-palavra, ignorando a correlação espacial entre bits de uma mesma palavra.

A codificação é feita com base em informações estatísticas aproximadas coletadas através da observação da seqüência de bits em uma janela de tamanho fixo S. Os autores afirmam que uma janela de tamanho S = 64 oferece o melhor compromisso entre complexidade e precisão.

Estas informações estatísticas dizem respeito às probabilidades de ocorrência dos quatro possíveis pares de valores consecutivos de um único bit (P0,0, P0,1, P1,0 e P1,1). A

fim de lidar com valores inteiros e conseqüentemente simplificar o hardware, os autores usam a freqüência das ocorrências N00, N01, N10 e N11 em vez das probabilidades. Sendo

que, as somas de todas as freqüências é conhecida (N00 + N01 + N10 + N11 = S – 1), nem

todas as quatro são realmente necessárias para o funcionamento do sistema. Considerando-se que N01 e N10 devem ser balanceadas dentro da janela de observação,

podendo diferir uma da outra de no máximo ‘1’, é suficiente considerar somente as freqüências N00 e N11, já que seu conhecimento infere os outros dois. Além disso, sendo

N01 = N10, os autores utilizam o símbolo NT para designá-las.

Este esquema utiliza quatro funções diferentes de codificação F(x(n), x(n-1)) para determinar y(n). A seleção da função a ser utilizada a cada instante é feita de acordo com as freqüências que estimam as probabilidades da janela de observação atual. A decisão é tomada da seguinte forma:

a) y(n) = x(n)quando N00 > NT > N11

b) y(n) = x(n)’quando N11 > NT > N00

d) y(n) = x(n) nxor x(n-1)quando NT > { N11, N00}

Quando o par de símbolos mais provável é “00”, a melhor decisão é manter o valor atual do bit, enviando ‘0’s na linha de comunicação. Da mesma forma, quando o par mais provável é “11”, o codificador inverte o dado de entrada, enviando ‘0’s. Por outro lado, quando o par mais provável é NT, as transições são eliminadas através de uma

função xor entre o bit atual e o anterior. Isto gera uma seqüência de bits ‘1’, que são complementados antes de serem enviados na linha de comunicação. Vale lembrar que este codificador tem como objetivo não somente diminuir a quantidade de transições no fio, mas também a quantidade de bits ‘1’ transmitidos.

A Figura 3.6 ilustra a arquitetura do codificador adaptativo de 1 bit. A entrada x(n) e seu valor anterior x(n-1) alimentam os dois contadores que armazenam a quantidade de ocorrências N00 e N11. Um contador chamado WinCnt controla o início e fim de cada

janela de observação e reinicializa os contadores N00 e N11 a cada S ciclos. O contador

WinCnt é compartilhado por todos os codificadores do canal de comunicação, de forma que este seja utilizado para reinicializar ao mesmo tempo todos os contadores de todos os codificadores de 1 bit. A área sombreada à direita na Figura 3.6 computa a função de codificação, com base no conhecimento de x(n), x(n-1), N00 e N11.

Figura 3.6: Arquitetura do codificador adaptativo.

A arquitetura do decodificador, mostrada na Figura 3.7 é similar à do codificador, sendo que as ocorrências de N00 e N11 são computadas com base na observação dos

pares de valores consecutivos de saída do decodificador (x(n), x(n-1)). Além disso, as funções de decodificação devem receber como entrada y(n) e x(n-1), executando a função inversa à do codificador. Por exemplo, se a função de codificação for y(n) = x(n) xor x(n-1), a função de decodificação deve ser x(n) = y(n) xor x(n-1).

Figura 3.7: Arquitetura do decodificador adaptativo.

Documentos relacionados