Projeto do transmissor
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 89 de 90.
Desafio
Nesta lição, você concluirá o transmissor UART adicionando o registrador de deslocamento para enviar qualquer byte, não apenas a letra fixa 'A'.
O registrador de deslocamento carrega o quadro completo (bit de parada + 8 bits de dados + bit de início) e o desloca um bit por vez.
Formato do quadro
| Parada (1) | Dados (8 bits) | Início (0) |
|---|---|---|
| 1 | data_in | 0 |
Por exemplo, se data_in = 8'b01000001 (letra 'A'), o registrador de deslocamento se torna: 1 01000001 0
Sua tarefa
Você recebeu a máquina de estados da lição anterior (transmite um byte fixo). Você precisa modificá-la para enviar qualquer byte da entrada data_in.
O que fazer:
- Adicione um
input [7:0]chamadodata_inà lista de portas (dentro dos parênteses) - Adicione um
regde 10 bits chamadoshift_regfora dos parênteses (dentro do corpo do módulo, pois ele é um sinal interno) - Quando
cnt == 0estart == 1:- Carregue
shift_regcom{1'b1, data_in, 1'b0}
- Carregue
- Quando
cntestiver entre 1 e 8:- Envie
tx <= shift_reg[0] - Desloque para a direita:
shift_reg <= shift_reg >> 1
- Envie
- Quando
cnt == 9:- Envie
tx <= shift_reg[0] - Desloque para a direita:
shift_reg <= shift_reg >> 1
- Envie
Experimente você mesmo
module uart_tx (
input clk,
input start, // NEW: sinal start para iniciar a transmissão
output reg tx, // NEW: linha de saída serial
output reg [3:0] cnt // Manter como saída para testes
);
initial begin
cnt = 0;
tx = 1; // NEW: define tx como HIGH (estado ocioso)
end
always @(posedge clk) begin
// NEW: Lógica do contador com condição de start
if (cnt == 0 && start) begin // NEW: inicia a transmissão
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: conta enquanto transmite
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: reseta após o último bit
cnt <= 0;
end
end
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online