Projeto do transmissor
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 89 de 90.
Desafio
Nesta lição, você completará o transmissor UART adicionando o shift register (registrador de deslocamento) para enviar qualquer byte, não apenas a letra fixa 'A'.
O registrador de deslocamento carrega o quadro completo (stop bit + 8 bits de dados + start bit) e o desloca um bit por vez.
Formato do Quadro
| Stop (1) | Dados (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Por exemplo, se data_in = 8'b01000001 (letra 'A'), o registrador de deslocamento torna-se: 1 01000001 0
Sua Tarefa
Você recebeu a máquina de estados da lição anterior (que transmite um byte fixo). Você precisa modificá-la para enviar qualquer byte a partir da entrada data_in.
O que fazer:
- Adicione uma
input [7:0]chamadadata_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 é 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, // NOVO: sinal de início para começar a transmissão
output reg tx, // NOVO: linha de saída serial
output reg [3:0] cnt // Manter como saída para testes
);
initial begin
cnt = 0;
tx = 1; // NOVO: define tx como HIGH (estado ocioso)
end
always @(posedge clk) begin
// NOVO: Lógica do contador com condição de início
if (cnt == 0 && start) begin // NOVO: inicia a transmissão
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NOVO: conta enquanto transmite
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NOVO: redefine após o último bit
cnt <= 0;
end
end
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
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ão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo