4-zu-1-Mux-Entwurf
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 65 von 90.
Aufgabe
4-zu-1-Multiplexer
Der 4-zu-1-Multiplexer hat vier Dateneingänge (in0, in1, in2, in3), zwei Auswahlbits (sel[1:0]) und einen Ausgang (out). Die beiden Auswahlbits bestimmen, welcher Eingang an den Ausgang weitergeleitet wird:
- Wenn
sel = 2'b00, ist der Ausgangin0 - Wenn
sel = 2'b01, ist der Ausgangin1 - Wenn
sel = 2'b10, ist der Ausgangin2 - Wenn
sel = 2'b11, ist der Ausgangin3
Du wirst diesen Multiplexer auf zwei Arten erstellen: zuerst mit if-else-Anweisungen und dann in der nächsten Lektion mit einer case-Anweisung. Beide Methoden funktionieren, aber case ist oft übersichtlicher, wenn du viele Auswahlmöglichkeiten hast.
Ein 4-zu-1-Multiplexer wählt einen von vier Eingängen aus und leitet ihn abhängig von einem 2-Bit-Auswahlsignal an den Ausgang weiter.
Wahrheitstabelle
| sel1 | sel0 | out |
|---|---|---|
| 0 | 0 | out = in0 |
| 0 | 1 | out = in1 |
| 1 | 0 | out = in2 |
| 1 | 1 | out = in3 |
Wenn sel 00 ist, folgt der Ausgang in0. Wenn sel 01 ist, folgt der Ausgang in1. Wenn sel 10 ist, folgt der Ausgang in2. Wenn sel 11 ist, folgt der Ausgang in3.
Was zu tun ist:
- Erstelle ein Modul mit dem Namen
mux4to1 - Füge den Eingang
in0hinzu (1 Bit) - Füge den Eingang
in1hinzu (1 Bit) - Füge den Eingang
in2hinzu (1 Bit) - Füge den Eingang
in3hinzu (1 Bit) - Füge den Eingang
selhinzu (2 Bits) - Füge den Ausgang
outhinzu (1 Bit, Typreg) - Füge einen
always @(*)-Block hinzu - Füge darin eine
if-else-Anweisung hinzu, dieselüberprüft:- Wenn
sel == 2'b00, setzeout = in0 - Andernfalls, wenn
sel == 2'b01, setzeout = in1 - Andernfalls, wenn
sel == 2'b10, setzeout = in2 - Andernfalls setze
out = in3
- Wenn
- Schließe mit
endmoduleab
Probier es selbst
// Schritt 1: Modul namens mux4to1 erstellen
// Schritt 2: Eingang in0 hinzufügen
// Schritt 3: Eingang in1 hinzufügen
// Schritt 4: Eingang in2 hinzufügen
// Schritt 5: Eingang in3 hinzufügen
// Schritt 6: Eingang sel (2 Bits) hinzufügen
// Schritt 7: Ausgang out (reg-Typ) hinzufügen
// Schritt 8: always @(*)-Block hinzufügen
// Schritt 9: if-else-Anweisung hinzufügen
// if sel == 2'b00, out = in0
// else if sel == 2'b01, out = in1
// else if sel == 2'b10, out = in2
// sonst, out = in3
// Schritt 10: EndmoduleAlle 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