Transmitter Design
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 89 sur 90.
Défi
Dans cette leçon, vous allez terminer l’émetteur UART en ajoutant le registre à décalage afin d’envoyer n’importe quel octet, et pas seulement la lettre fixe 'A'.
Le registre à décalage charge la trame complète (bit d’arrêt + 8 bits de données + bit de début) et la décale bit par bit.
Format de la trame
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Par exemple, si data_in = 8'b01000001 (lettre 'A'), le registre à décalage devient : 1 01000001 0
Votre tâche
La machine à états de la leçon précédente vous est fournie (elle transmet un octet fixe). Vous devez la modifier pour envoyer n’importe quel octet depuis l’entrée data_in.
À faire :
- Ajoutez un
input [7:0]appelédata_inà la liste des ports (à l’intérieur des parenthèses) - Ajoutez un
regde 10 bits appeléshift_regà l’extérieur des parenthèses (à l’intérieur du corps du module, car il s’agit d’un signal interne) - Lorsque
cnt == 0etstart == 1:- Chargez
shift_regavec{1'b1, data_in, 1'b0}
- Chargez
- Lorsque
cntest compris entre 1 et 8 :- Envoyez
tx <= shift_reg[0] - Décalez vers la droite :
shift_reg <= shift_reg >> 1
- Envoyez
- Lorsque
cnt == 9:- Envoyez
tx <= shift_reg[0] - Décalez vers la droite :
shift_reg <= shift_reg >> 1
- Envoyez
Essayez vous-même
module uart_tx (
input clk,
input start, // NEW: signal de démarrage pour commencer la transmission
output reg tx, // NEW: ligne de sortie série
output reg [3:0] cnt // Conserver en sortie pour les tests
);
initial begin
cnt = 0;
tx = 1; // NEW: mettre tx à HIGH (état idle)
end
always @(posedge clk) begin
// NEW: Logique du compteur avec condition de démarrage
if (cnt == 0 && start) begin // NEW: commencer la transmission
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: compter pendant la transmission
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: réinitialiser après le dernier bit
cnt <= 0;
end
end
endmoduleToutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators 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 LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne