4ビットカウンタ:0から15までの効率的なバイナリカウント
4ビットカウンタの概要
4ビットカウンタは4'b0000から4'h1111(0〜15)までインクリメントし、オーバーフロー時に4'b0000にロールオーバーします。クロックが供給され、リセットが非アサート(High)の間、カウントを継続します。
ロールオーバーの仕組み
最大値4'b1111(15)の次にカウントアップすると、5ビット目5'b10000(16)になりますが、4ビットレジスタではMSBが捨てられ4'b0000(0)になります。
0000 → 0001 → 0010 → ... → 1110 → 1111 → 0000 → 0001 → ...
設計
クロック立ち上がりエッジで動作し、アクティブローリセット(rstn=0でリセット)を備えます。
module counter (
input clk, // クロック入力
input rstn, // アクティブローリセット
output reg [3:0] out // 4ビットカウンタ出力
);
always @(posedge clk) begin
if (!rstn)
out <= 4'b0000; // リセット時は0クリア
else
out <= out + 1; // インクリメント
end
endmodule
コード解説
always @(posedge clk):クロック立ち上がりエッジでのみブロック実行if (!rstn):リセットがLow(0)なら出力を0にelse out <= out + 1:リセット非アサート時はインクリメント- 非ブロッキング代入(
<=)で順序回路として正しく合成
回路図
テストベンチ
リセットのアサート/非アサートを複数回繰り返し、カウンタのリセット動作とロールオーバーを確認します。
module tb_counter;
reg clk;
reg rstn;
wire [3:0] out;
counter c0 (
.clk(clk),
.rstn(rstn),
.out(out)
);
// クロック生成:10ns周期(100MHz)
always #5 clk = ~clk;
initial begin
// 1. 初期化
clk <= 0; rstn <= 0;
// 2. 刺激:リセットを複数回アサート/非アサート
#20 rstn <= 1; // カウント開始
#80 rstn <= 0; // リセットアサート(カウント停止・クリア)
#50 rstn <= 1; // 再度カウント開始
// 3. 終了
#20 $finish;
end
endmodule
シミュレーション結果
ncsim> run [0ns] clk=0 rstn=0 out=0xx [5ns] clk=1 rstn=0 out=0x0 [10ns] clk=0 rstn=0 out=0x0 [15ns] clk=1 rstn=0 out=0x0 [20ns] clk=0 rstn=1 out=0x0 // リセット解除、次エッジからカウント開始 [25ns] clk=1 rstn=1 out=0x1 [30ns] clk=0 rstn=1 out=0x1 [35ns] clk=1 rstn=1 out=0x2 ... [80ns] clk=0 rstn=1 out=0x7 [85ns] clk=1 rstn=1 out=0x8 [90ns] clk=0 rstn=0 out=0x8 // リセットアサート [95ns] clk=1 rstn=0 out=0x0 // 即座にクリア ... [150ns] clk=0 rstn=1 out=0x0 // 再度リセット解除 [155ns] clk=1 rstn=1 out=0x1 // 次エッジからカウント再開 Simulation complete via $finish(1) at time 170 NS + 0
波形観測
リセット(rstn=0)時に出力が即座に0になり、リセット解除後の最初のクロック立ち上がりエッジからカウントアップが再開する様子が確認できます。
ハードウェア回路図(合成後)
拡張のヒント
- パラメータ化:
parameter WIDTH = 4としてビット幅を可変に - イネーブル追加:
input enを追加し、if (en) out <= out + 1でカウント制御 - ロード機能:
input load, [3:0] dataで任意値からカウント開始 - ダウンカウンタ:
out <= out - 1でデクリメント
Verilog
- PIDリセットワインドアップ防止:信頼性の高いプロセス制御のための戦略
- 555タイマーと4027フリップフロップによる3ビットバイナリカウンタ
- 同期2進カウンタ:設計、アップ/ダウン動作、エンコーダ応用
- カウンタモダラス:現代システム向け最適化アルゴリズム
- リングカウンタとジョンソンカウンタ:設計、動作、実用応用
- デジタルランプ(カウンタ)ADC:動作、利点、限界
- 夏の成功に向けIT戦略をリチャージ、リセット、再構成する
- IT/OT融合:持続可能なデジタル変革のためのカルチャーリセット
- Verilog Mod-Nカウンタ:パラメータ化モジュールとテストベンチ
- Verilogグレイカウンタ:4ビットグレイコード生成モジュール
- Python collections.Counter:効率的なカウント、更新、演算操作