Bitzähler
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 87 von 90.
Aufgabe
In diesem Kapitel wirst du Schritt für Schritt einen UART-Sender erstellen. UART steht für Universal Asynchronous Receiver-Transmitter. Es handelt sich um ein einfaches Hardwareprotokoll, das zwei Geräten ermöglicht, nur mithilfe einer Leitung (zum Senden) und einer weiteren Leitung (zum Empfangen) zu kommunizieren.
Stell es dir wie zwei Menschen vor, die am Telefon miteinander sprechen: Einer spricht (sendet), der andere hört zu (empfängt). UART sendet Daten ein Bit nach dem anderen, wobei Start- und Stoppbits den Beginn und das Ende jedes Bytes markieren.
Ein UART-Sender sendet 10 Bits: Startbit (1), Datenbits (8), Stoppbit (1). Um zu verfolgen, welches Bit wir senden, benötigen wir einen Bitzähler, der von 0 bis 10 zählt.
So funktioniert der Bitzähler
- Bei 0 starten
- In jedem Taktzyklus 1 addieren
- Wenn 10 erreicht ist, auf 0 zurückgehen
- Unendlich wiederholen
In dieser Aufgabe werden wir ihn noch nicht zurücksetzen: Wir werden ihn nur erhöhen.
Aufgabe:
- Erstelle ein Modul namens
uart_txmit:- Einem Eingang:
clk - Einem Ausgang:
cnt(4 Bits, Typreg)
- Einem Eingang:
- Innerhalb des Moduls:
- Setze
cntam Anfang innerhalb eines initial-Blocks auf 0 - Füge einen
always @(posedge clk)-Block hinzu - Lass
cntbei jeder Taktflanke um 1 steigen
- Setze
Probier es selbst
// TODO: Erstelle Modul uart_tx mit Eingang clk und Ausgang cnt (4 Bits)
// TODO: Setze cnt zu Beginn in einem initial-Block auf 0
// TODO: Füge always @(posedge clk)-Block hinzu
// TODO: Inkrementiere cntAlle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler