• Nenhum resultado encontrado

Módulo de Comunicação via USB

6. Interface USB

6.6. Módulo de Comunicação via USB

O ‘módulo USB’ é constituído por duas memórias FIFOs assíncronas e um controlador. Uma das FIFOs é utilizada para o envio de dados para o PC e a outra para receber os dados provenientes do PC. O controlador gere o fluxo de dados entre essas FIFOs e o microcontrolador USB. A comunicação entre esse bloco e a TGR/DCC FPGA é controlada pelo módulo DCC ROC.

A comunicação do lado da TGR/DCC é realizada à frequência do sinal de relógio da FPGA da TGR/DCC e a comunicação com o microcontrolador USB é realizada à frequência do sinal de relógio fornecido pelo microcontrolador USB, o IFCLK. Estas duas frequências são diferentes, pelo que foi necessário sincronizar as duas comunicações. Para tal, utilizaram-se FIFOs assíncronas, isto é, memórias em que as operações de leitura e escrita são realizadas com sinais de relógio distintos.

A comunicação entre o DCC ROC e o ‘módulo USB’ é realizado por meio de dois barramentos de 64 bits, um para enviar dados e outro para receber dados. A comunicação é feita directamente para as duas FIFOs do ‘módulo USB’.

Duas flags indicam o estado das FIFOs, e dois sinais são usados para activar as operações de escrita e de leitura.

Na Tabela 6-3 encontra-se a lista desses sinais e a sua descrição individual.

Sinal Tipo Descrição

ROC_DataOut[63:0] O Barramento de dados do DCC ROC para o módulo USB.

ROC_FIFO_Read I Activação da leitura na FIFO do módulo USB.

ROC_FIFO_Empty O Flag que indica que a FIFO do modulo USB está vazia.

ROC_DataIn[63:0] I Barramento de dados do módulo USB para o DCC ROC.

ROC_FIFO_Write I Activação da escrita na FIFO do módulo USB.

ROC_FIFO_Full O Flag que indica que a FIFO do modulo USB está cheia

Tabela 6-3 – Sinais da interface do DCC ROC com o módulo USB.

Na Figura 6-10 ilustra-se os diálogos entre o módulo de comunicação e o módulo DCC/ROC e o módulo de comunicação e o microcontrolador USB.

DCC ROC ROC_DataOut[63:0] Módulo Comunicação via USB ROC_FIFO_Read ROC_FIFO_Empty ROC_DataIn[63:0] ROC_FIFO_Write ROC_FIFO_Full USB_Data[15:0] USB_FIFOAdr0 USB_FIFOAdr1 USB_SLRD_L USB_SLWR_L USB_SLOE_L USB_PktEnd USB_FIFO_Full USB_FIFO_Empty Microcontrolador USB

Figura 6-10 – Interface do módulo USB

6.6.1 Memórias FIFOs do Módulo de Comunicação via USB

A comunicação com o microcontrolador USB é feita por um barramento de 16 bits à frequência de 48 MHz. A comunicação com o DCC ROC é feita por um barramento de 64 bits à frequência de 50 MHz. Para garantir o sincronismo do sistema, utilizaram-se, como foi referido FIFOs assíncronas. São FIFOs com interfaces de escrita e de leitura distintas, utilizando barramentos de dados de diferentes dimensões e sinais de relógio de diferentes frequências.

Essas FIFOs têm uma capacidade de 16 pacotes de 64 bits, ou 64 pacotes de 16 bits, dependo da interface que se está a avaliar. Os diagramas de blocos das FIFOs, com indicação dos sinais e dados envolvidos no seu funcionamento são representados na Figura 6-11.

(a) (b)

Figura 6-11 – Memórias FIFO – (a) dados para o PC; (b) dados do PC

Sinal Tipo Descrição

din I Barramento de dados para escrita.

dout O Barramento de dados para leitura.

empty O Flag que indica que a FIFO está vazia.

full O Flag que indica que a FIFO está cheia.

wr_en I Activação da escrita na FIFO.

rd_en I Activação da leitura na FIFO.

wr_clK I Sinal de relógio para operações de escrita.

rd_clk I Sinal de relógio para operações de leitura.

Tabela 6-4 – Sinais usados pelas FIFOs do módulo USB

As FIFOs foram implementas usando o Core Generator disponível na ferramenta de desenvolvimento. Esta ferramenta permite criar diversos tipos de entidades que podem ser facilmente implementadas e que estão optimizadas para as diferentes FPGAs disponibilizadas pelo fabricante.

6.6.2 Controlador do Módulo de Comunicação via USB

A função deste bloco é gerir o fluxo de dados entre as duas FIFOs e o microcontrolador USB. Para isso, as flags das FIFOs descritas na secção anterior e as flags das FIFOs do microcontrolador USB, as USB endpoints, são constantemente monitorizadas.

Os sinais usados por esse bloco podem ser visualizados na Figura 6-12 e as suas descrições na Tabela 6-5.

Modo de Funcionamento

O controlador do módulo de comunicação via USB, simplesmente designado, ‘controlador USB’, inicia a transferência de dados sentido DCC ROC  USB, quando há dados na respectiva FIFO e o microcontrolador USB está disponível para os receber.

Todos os dados provenientes da TGR/DCC têm a dimensão de 64 bits. Porém, a comunicação com o microcontrolador USB é realizada a 16 bits de cada vez. Isto obriga a que sejam necessárias 4 operações de escrita/leitura para transferir os 64 bits. Assim, é necessário enviar uma trama de 4 pacotes de 16 bits. Essa operação é realizada pelo ‘controlador USB’. O fim de envio de ma trama, é indicado ao microcontrolador, por meio do sinal PktEnd. Esse é necessário, pois só assim o microcontrolador dá indicação ao PC que tem dados disponíveis.

A operação de transferência de dados no sentido USB  DCC ROC inicia-se quando o microcontrolador indica que tem dados disponíveis e a respectiva FIFO do módulo USB tem espaço para armazená-los.

À semelhança com o que acontece com os dados provenientes da TGR/DCC, os dados enviados pelo PC têm a dimensão de 64 bits. Uma vez mais são necessárias 4 operações de escrita/leitura para transferir os dados do microcontrolador para a respectiva FIFO do ‘módulo USB’.

Os sinais e o protocolo usado na comunicação como o microcontrolador estão descritos na secção 6.4.

Sinal Tipo Descrição

FIFOtoROC_Full I Flag que indica se a FIFOtoROC está cheia

FIFOtoROC_WR O Activa a escrita dos dados na FIFOtoROC

FIFOfromROC_Empty I Flag que indica que a FIFOfromROC está vazia.

FIFOfromROC_RD O Activa a escrita dos dados na FIFOfromROC

USB_FlagA I Flag que indica se a USB Endpoint 210 está vazia.

USB_FlagC I Flag que indica se a USB Endpoint 610 está cheia. USB_FIFOAdr0

USB_FIFOAdr1 O

Selecção da FIFO do microcontrolador que se quer aceder

USB_SLRD_L O Activa a leitura dos dados do USB Endpoint 210

USB_SLWR_L O Activa a escrita dos dados do USB Endpoint 610

USB_SLOE_L O Selecciona a direcção do barramento de dados

USB_PktEnd O Indicação de fim de trama

clk I Sinal de relógio

reset I Sinal de reset

Tabela 6-5 – Descrição dos sinais usados pelo ‘controlador USB’.

10

Documentos relacionados