• Nenhum resultado encontrado

4.3 GiDEL ProcWizard

5.1.1 Transceptor Módulo de geração CRC

Através do programa MegaWizard, da ALTERA, é possível criar um módulo gerador de CRC. Porém, esse módulo é proprietário, o que inviabiliza o seu uso. Dessa forma, foi desenvolvido um módulo gerador de CRC chamado CRC_GEN, com as mesmas entradas e saídas do módulo disponibilizado pela ALTERA, de modo a manter a compatibilidade entre as versões.

A geração do CRC foi implementada utilizando-se uma ferramenta disponível na web chamada CRC Tool EASICS NV CRC TOOL(Acessado em 2014). Essa ferramenta gera uma função que calcula o CRC do dado de entrada em um passo. Essa função foi adaptada para dentro de um módulo CRC_gen, com uma máquina de estado capaz de gerar o checksum de um pacote de dados, seguindo o mesmo protocolo proposto pelo módulo proprietário da ALTERA. A ferramenta disponibiliza o código de geração CRC tanto em Verilog quanto em VHDL. Ela permite que se escolha o polinômio, o tipo de CRC, a largura dos dados e a linguagem alvo. Escolheu-se o polinômio g(x) = x16+x15+x2+1 que é o polinômio padrão USB CRC-16/USB

Data, a largura dos dados de 64 bits, e a linguagem para descrição de hardware Verilog, linguagem utilizada em todo o desenvolvimento do projeto. Essas configurações foram escolhidas para manter a compatibilidade com a largura de dados interna no módulo, que é de 64 bits. Os dados

de saída da FIFO_Input seguem para serem enviados pelo barramento, mas ao mesmo tempo são encaminhados para esse módulo que se encarrega de calcular o checksum do pacote. A estrutura de sinais gerados pelo bloco CRC pode ser observada na figura 5.3.

Figura 5.3: Sinais do módulo CRC_GEN

Estes sinais são descritos em detalhes a seguir:

? data: Entrada de dados do pacote para cálculo do checksum do pacote. Por padrão os

dados de entrada tem valor igual a 64.

? data_valid: Sinal que acompanha o dado indicando que ele está valido e pode ser

utilizado para o cálculo do checksum.

? start_of_packet: Sinal que indica para o módulo o momento de início do cálculo do

CRC.

? end_of_packet: Sinal que indica para o módulo o momento de término de envio de

dados do pacote. Esse sinal informa para o módulo que não existem mais dados para serem enviados e que ele pode finalizar o cálculo do CRC.

? checksum: Dado checksum que valida o pacote calculado, ao termino do cálculo

ele é enviado para envio no barramento. O checksum tem tamanho igual a 16 bits independentemente da quantidade de dados a serem processados.

? crc_valid: Sinal que acompanha o checksum indicando que o mesmo é válido e pode

ser enviado pelo barramento.

O primeiro passo na geração do CRC é verificar se o sinal start_of_packet assumiu o nível lógico alto. Isso indica que o CRC pode ser calculado, considerando os dados sinalizados como válidos através do sinal data_valid. O cálculo do checksum ocorre de forma sequêncial enquanto houver dados válidos sendo enviados para o módulo. Enquanto o sinal de end_of_packet não assumir o sinal lógico alto, o módulo irá calcular o CRC dos dados de entrada enquanto

64 5.1. MÓDULO DE TRANSMISSÃO - TRANSCEPTOR eles forem válidos. Uma vez que o sinal end_of_packet assuma nível lógico alto, marcando assim o fim do pacote, o módulo realiza a última operação de cálculo para logo em seguida disponibilizar o código que irá validar o pacote. Por fim, o sinal crc_valid assume o nível alto e o checksum calculado é apresentado na saída do módulo para ser encaminhado pelo barramento. O fluxograma apresentado na figura 5.4 exemplifica esse processo de cálculo de CRC.

Figura 5.4: Fluxo do cálculo de CRC

Tomando como base um pacote de tamanho igual a 4 palavras, cada pacote corresponderá assim a 256 bits, os quais depois de divididos internamente tornam-se 4 dados para a cálculo de CRC (64 bits cada). Por padrão, para cada pacote é gerado um código CRC para verificação. é possível também modificar a quantidade de dados do pacote para 4, 8, 16 ou 32 palavras de acordo com as necessidades de projeto. Os diagramas de tempo apresentados nas figuras 5.5 e 5.6 exemplificam o funcionamento do módulo transceptor juntamente com o cálculo CRC e envio de dados pelo barramento em duas situações: A primeira ocorre quando há sucesso na transmissão e a segunda quando uma falha foi detectada.

Como pode ser visto, o pacote formado pelas 4 palavras é enviado para o barramento e logo em seguida seu código CRC. Outro fator a ser observado é que o código CRC leva alguns ciclos para ser calculado e só então segue para envio no barramento. A quantidade de ciclos necessários para a apresentação do código CRC após o envio do último dado do pacote é igual a 2 ciclos de relógio. Após o envio do pacote e do CRC, o transceptor irá aguardar um sinal de ack ou de nack do receptor. Em caso de recebimento de um sinal de ack o envio do pacote aconteceu com sucesso e o CRC foi validado no receptor. O Transceptor então irá fazer o envio do próximo pacote seguindo o mesmo fluxo.

Figura 5.6: Diagrama de comunicação com falha na transmissão

A segunda situação é relacionada com a falha no recebimento do pacote. Isso significa que o código CRC gerado pelo receptor não correspondeu com o código CRC enviado pelo transceptor. Dessa forma constata-se que houve alguma falha na transmissão e um sinal de nack é enviado para o transceptor solicitando que o mesmo pacote seja enviado novamente. O transceptor ativará o circuito de retransmissão e fará o envio do mesmo pacote. Esse processo irá acontecer até quando um sinal de ack seja recebido pelo transceptor ou até quando o número de retransmissões máxima determinado por MAX_RETX for atingido.

Essas duas situações relacionadas acima refletem o protocolo principal de funcionamento do barramento de comunicação proposto. Todo o fluxo de controle é realizado por um módulo gerenciador chamado Trans_Ctrl. Esse módulo será detalhado ao longo desse capítulo. Adi- cionalmente outros sinais de controle também são utilizados para controle da transmissão no barramento. Esses sinais também serão apresentados posteriormente.

Apresentado o funcionamento principal do canal de comunicação, o módulo de camada física que implementa de fato a transmissão será apresentado logo a seguir.

Documentos relacionados