| Anterior | Inicial | Próximo |
2.3.2.3 – Codificação
Após a etapa de embaralhamento e antes da transmissão dos bits, há uma etapa de codificação. Nesta, o Firewire utiliza um algoritmo chamado 8B/10B. Na verdade não há apenas 1 algoritmo, e sim 2, sendo um usado na codificação de bytes de dados e símbolos de solicitações e o outro usado em símbolos de controle. Há duas vantagens principais em se usar este método: há uma etapa de detecção de erro e, mais importante, o nível DC dos dados codificados é nulo.
2.3.2.3.1 – Codificação de dados e símbolos de requisição
O método 8B/10B para dados e símbolos de controle permite 256 símbolos de entrada. Uma seqüência válida de bits gerados por este método possui no máximo 5 bits iguais consecutivos. Isto é feito de forma que seja fácil para o PLL do dispositivo receptor extrair o clock do sinal.
Além desta característica, há também outra restrição importante. Cada caracter gerado (8bits) têm que conter de 4 a 6 zeros (e conseqüentemente de 4 a 6 1's). Um conceito utilizado pelo algoritmo de codificação que está relacionado a esta restrição é o de disparidade. Se um caracter possui o mesmo número de 0's e 1's, diz-se que ele possui disparidade 0. Se ele possui 4 1's e 6 0's, ele possui disparidade -2 e se ele possui 6 1's e 4 0's, ele possui disparidade +2. Desta forma, seguindo a restrição citada acima, cada caracter pode assumir um entre 3 valores de disparidade (0, -2 e +2).
Cada caracter gerado pelo algoritmo deve possuir disparidade oposta em relação ao caracter anterior ou disparidade nula. Este controle da disparidade na geração dos caracteres é feita através de um contador digital que faz a diferença entre o total de 1's e o total de 0's em uma seqüência de caracteres.
A codificação 8B/10B possui 2 estágios. No primeiro estágio, os primeiros 5 bits do byte de entrada são codificados em 6 bits de saída, cujos valores serão dependentes dos valores de entrada e do valor do contador digital. No segundo estágio, os 3 bits restantes do byte de entrada são codificados em 4 bits de saída, cujos valores serão novamente dependentes dos valores de entrada e do valor do contador digital, este já após a alteração feita na etapa de codificação do primeiro estágio.
Há 2 tabelas que são usadas para determinar os bits de saída e o próximo valor do contador digital a partir dos valores dos bits de entrada e do valor atual do contador digital. Uma das tabelas refere-se à codificação 5B/6B (primeiro estágio) e outra refere-se à codificação 3B/4B. As tabelas não estão inclusas aqui pois fogem ao escopo deste trabalho. Além destas 2 tabelas, há também 1 tabela que mapeia os caracteres de dados de saída válidos a partir dos caracteres de entrada e dos valores do contador digital.
2.3.2.3.2 – Codificação de símbolos de controle
A codificação de símbolos de controle é diferente em vários aspectos da codificação de dados e símbolos de requisição. Um dos aspectos é o de que os bits de entrada dos símbolos de controle são apenas 4, em vez dos 8 anteriores. Entretanto, na saída também são gerados 10 bits, como no caso anterior. Além disso, o mapeamento dos bits de entrada nos bits de saída agora não depende mais do valor do contador digital, havendo um único valor possível de saída para cada valor de entrada.
Outra diferença na codificação de símbolos de controle é que aqui não há mais a restrição de haver no máximo 5 bits consecutivos iguais. Pode-se ter até 10 bits consecutivos iguais numa seqüência de símbolos de controle. Entretanto, nesta codificação o número de 0's e 1's de cada caractere deve ser sempre igual. Desta forma, os símbolos de controle mantêm o balanceamento DC da seqüência de caracteres. Isto é importante para que os símbolos de controle possam ser totalmente independentes dos símbolos de dados sob o ponto de vista elétrico. Se fosse de outra forma a codificação dos símbolos de controle dependeria dos dados trafegados no instante, o que tornaria o protocolo muito mais complexo.
Outra característica importante desta forma de codificação é que ela foi feita de modo que um erro em qualquer um dos bits do caracter de saída gerado não faz com que o caracter possa passar a ser um caracter válido do método de codificação anterior (de dados e símbolos de requisição). Isto reduz bastante o impacto dos erros de bit.
| Anterior | Inicial | Próximo |