Sequenzielle Logik mit Verilog always Blöcken implementieren
Vorheriger Artikel zeigte kombinatorische Logik mit always. Hier: Sequenzielle Logik mit Speicherelementen (Flipflops).
JK Flipflop
Speichert Werte, 2 Data Inputs j, k, Reset rstn, Clock clk. Wahrheitstabelle:
| rstn | j | k | q | Kommentar |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | Reset asserted → Output 0 |
| 1 | 0 | 0 | Hold | j=k=0 → Output unverändert |
| 1 | 0 | 1 | 1 | k=1 → Output 1 |
| 1 | 1 | 0 | 0 | k=0 → Output 0 |
| 1 | 1 | 1 | Toggle | j=k=1 → Output toggelt |
Verhaltensmodell:
module jk_ff (input j, k, rstn, clk, output reg q);
always @ (posedge clk or negedge rstn) begin
if (!rstn) q <= 0;
else q <= (j & ~q) | (~k & q);
end
endmodule
Testbench
Clock mit always #10 clk = ~clk. Stimulus: Reset deassert nach 10ns, dann 10 Iterationen zufällige j,k Werte zu zufälligen Zeiten.
Waveform zeigt: An posedge Clock ändert q basierend auf j,k per Wahrheitstabelle.
Modulo-10 Zähler
MOD-N Zähler zählt 0 bis N-1, dann Roll-over. Benötigt log2N Flops. Verilog Parameter für skalierbaren MOD-N Zähler.
module mod10_counter (input clk, rstn, output reg [3:0] out);
always @ (posedge clk) begin
if (!rstn) out <= 0;
else begin
if (out == 10) out <= 0; // Bug: out==10 nie erreicht bei 4-bit (max 15), aber Logik: bei 10→0
else out <= out + 1;
end
end
endmodule
Korrektur: Bedingung sollte out == 9 sein (zählt 0-9), dann out <= 0. Bei out == 10 zählt er 0-10 (11 Werte).
Testbench
Clock 10ns Period, Reset 10ns, Lauf 450ns. Zähler zählt 0-9, Roll-over, wiederholt.
4-Bit Left Shift Register
Input d in LSB, alle Bits shift left by 1. Beispiel: d=0, Init 0011 → nächstes Clock 0110.
module lshift_4b_reg (input d, clk, rstn, output reg [3:0] out);
always @ (posedge clk) begin
if (!rstn) out <= 0;
else out <= {out[2:0], d}; // Concatenation: oberste 3 Bits + neues LSB
end
endmodule
Testbench
20 Iterationen, zufällige d Werte an posedge Clock. Waveform zeigt Links-Shift + neues LSB.
Verilog
- VHDL & Verilog meistern: Saubere kombinatorische & sequentielle Logik schreiben
- Schaltung mit Schalter: Praktischer Leitfaden zu grundlegenden elektrischen Schaltungen
- Integrierte Schaltungen: Grundlagen digitaler Logikgatter
- Programmierbare Logiksteuerungen (PLCs): Moderne digitale Steuerung für Industriesysteme
- Boolesche Algebra verstehen: Von Logikfundamenten zu digitalen Schaltungen
- Logikvereinfachung mit Karnaugh-Diagrammen meistern
- Digitale Logik mit Rückkopplung: Von deterministischen Gattern zu Multivibratoren
- Verilog Mod-N Counter Design: Parameterisiertes Modul & Testbench
- Verilog Gray Counter Modul – 4-Bit Gray-Code Generator
- Perfekte Oberflächen mit Okamotos Präzisionsschleifmaschinen erreichen