State Machine
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 88 de 90.
Desafio
Uma state machine é um circuito que pode estar em um de vários estados. Para UART, temos diferentes estados para cada bit: idle, start, bits de dados 0-7 e stop. O contador de bit (cnt) nos informa em qual state estamos. Com base em cnt, decidimos qual valor enviar na linha tx.
Você tem o contador de bit da lição anterior. É necessário modificá-lo para funcionar como um transmissor UART.
Valores de bit a enviar (para a letra 'A')
| cnt | valor de tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 1 |
O que fazer
- Adicione um input chamado
start - Adicione um output reg chamado
tx - No bloco
initial, definatx = 1(idle em nível alto) - Altere a lógica do contador:
- Quando
cnt == 0estart == 1, definacnt <= 1(inicie a transmissão) - Quando
cntestiver entre 1 e 9, incremente:cnt <= cnt + 1 - Quando
cnt == 10, redefina para0
- Quando
Experimente você mesmo
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
end
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online