Altifigence Academy
KOStart learning

Lab 02 / 25 MIN

Count, reset and wrap around

Explore synchronous reset and wraparound with a two-bit counter.

What you will learn

Start at 3 and reset on the first rising edge. The sequence is then 0, 1, 2, 3, 0. A synchronous reset changes the value only at a clock edge.

SystemVerilog source

rtl/top.svDownload source
module top (
    input logic clk,
    input logic rst,
    output logic [1:0] count
);
    // Active-high synchronous reset: sampled only at the rising clock edge.
    always_ff @(posedge clk)
        if (rst) count <= 2'b00;
        else count <= count + 2'b01;
endmodule

Run the example

In New analysis, choose Two-state single-clock v1. Set Clock port to clk and the period to 1000ps. Use the values below, run Preflight, then Run RTL simulation and compare the result.

Initial register values (LSB first)
[true,true]
Reset port
rst · Active high · 1 cycle
Maximum cycles / time
5 / 5000ps
Input stimulusDownload input JSON
[
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  }
]

Compare the result

5 cycles · count=00. At 500, 1500, 2500, 3500 and 4500ps, look for 00 → 01 → 10 → 11 → 00.

Check your understanding

Why does 0 follow 3 instead of 4?

Show explanation

Two bits hold values from 0 to 3. Incrementing 3 leaves the low two bits, 00.

These labs use two-state, single-clock RTL. Do not add #delay, initial or X/Z testbenches. A completion check records your learning, not an engine run.

Next lab →