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