Laboratório: UART Transceiver
Este laboratório propõe o desenvolvimento de comunicação entre duas placas usando UART. O objetivo envolve sincronização entre placas com referência de clock diferentes, além de detecção de início e fim de transmissões de dados.
Ver histórico de mudanças
Changelog
| Versão | Data | Descrição |
|---|---|---|
| v2025.1 | 31/mar/2025 | Versão inicial |
Disciplina
Este laboratório faz parte da disciplina MC613 - Laboratório de Circuitos Digitais. Ver oferecimento mais recente.
Entrega
- A entrega deverá estar em único arquivo .ZIP contendo todos e apenas os arquivos listados abaixo.
- O nome do arquivo ZIP deve ser RA<RA>.zip, onde <RA> é o RA do componente do grupo que fará a entrega. Por exemplo, RA123456.zip é a entrega do grupo do aluno com o RA 123456.
- Os nomes dos arquivos dentro do ZIP devem ser seguidos.
- Se mais do que um arquivo for recebido para a mesma entrega, apenas o último recebido dentro do prazo será considerado.
- O cumprimento ou não dessas instruções fará parte dos critérios de avaliação.
Arquivos que fazem parte da entrega:
uart.pdf: Ilustração do formato de comunicação.uart.vhd: Descrição em VHDL da entidade do Transceiver.uart_tb.vhd: Testbench da entidade do Transceiver.uart_board.vhd: Descrição em VHDL da entidade de interface de comunicação entre o Transceiver e as conexões na placa DE1-SoC.*.vhd: Descrição em VHDL de quaisquer módulos auxiliares.
Link para entrega: https://ic.unicamp.br/~isaias/mc613/entrega.
Comunicação Serial
A comunicação serial é um método de transmissão de dados que envia os bits um a um, em sequência, através de um único canal de comunicações. Diferente da transmissão paralela, que pode enviar vários bits simultaneamente, a transmissão serial pode ser implementada com poucos fios, reduzindo a complexidade das placas, a interferência entre sinais, os custos de material e facilitando a comunicação à longa distância.
Diferentes protocolos implementam este tipo de comunicação, como o RS232, USB, Ethernet, dentre outros. Contudo, alguns padrões evoluíram para transmissão serial sobre múltiplos canais para aumentar as taxas de transferência, como é o caso das versões mais recentes do protocolo USB.
Atividades do laboratório
Parte I - Criação do controlador UART
Neste laboratório, vocês irão implementar uma comunicação serial entre duas placas e testá-la com outro grupo. Para isto, vocês precisam implementar um controlador UART como o especificado pela figura abaixo.

O padrão UART (universal asynchronous receiver-transmitter) permite comunicação serial assíncrona com tanto o formato dos dados quanto a velocidade sendo configuráveis. Os dados são enviados bit por bit do menos significativo para o mais significativo, marcados por um bit de início e um de fim. Para simplificar a comunicação, usem 8 bits de dados com um bit de paridade par, isto é, um bit que é definido para garantir que o número total de 1s é par.
Ilustrem no arquivo uart.pdf o formato dos pacotes sendo transferidos, destacando cada trecho do pacote e especifique a função que define o bit de paridade paridade sendo utilizada.
Salve a entidade da controladora UART no arquivo uart.vhd e crie um testbench, uart_tb.vhd, que ilustre o envio e recepção de pacotes corretamente.
Parte II - Integração com a DE1-SoC
Crie um arquivo uart_board.vhd integrando seu componente UART com a placa DE1-SoC. Utilize os switches SW[7..0] para definir os dados a serem enviados no pacote e o pushbutton KEY(0) para enviar os dados. Ao receberem os dados, mostrem eles nos LEDs LEDR[7..0]. Use o pushbutton KEY(1) para limpar os dados armazenados do último recebimento. Usem os pinos GPIO da placa para os sinais RX e TX, consulte o manual para localizar os pinos que serão utilizados no conector e indique como comentário no seu arquivo.
Parte III - Testando com outro grupo
Usando jumper wires fornecidos para esta atividade, conecte a sua placa com a de outro grupo conforme o diagrama abaixo. Preste atenção ao conectar os pinos entre as duas placas. Lembrem-se de conectar o RX de uma placa com o TX da outra placa e vice-versa, e não esqueçam de o pino de GND das duas placas.

Verifiquem se o formato dos pacotes entre os dois grupos está compatível, definam entre si uma taxa de bits para a comunicação (ex.: 9600 bits/s) e definam a frequência corretamente no seu design.
Apresentem a transferência de dados entre as placas para finalizar a atividade.