前回のものを活用して、単なるカウンタではなくストップウォッチ回路を作ってみました。
実用的なの、大事。
ソース
また例によって zip に固めました。プロジェクト名が前と同じなので要注意です
構成・変更点
カウンタの仕様は(ほぼ)変更せず、最大で15分計測できるストップウォッチにしました。
一方で、スイッチのチャタリング防止回路を入れたせいで(その遅延が大きいせいで)、スタート/ストップ時の遅延が大きいです。なんやねんそれ。
また、7セグLED 表示上は 59.59 秒しか表示できませんが、PYNQ ボード上の緑色チップ LED の LD[3:0] で2進数表記の分が表示できます。賢い。
また、ボタンによる操作は以下のように設定しました。
- BTN3 でスタート/ストップ
- BTN2 でカウントリセット
ブロック図・ピン配置
毎度書くのが大変なんですけど、整理のために書きます。また、今回は各モジュールに置いてリセットやクロックは省略しました。
stopwatch
モジュールとして、カウンタ回路を内包しましたね。
また、ピン配置は前回のものに加えてこちらです。
素子名 | ピン番号 | 端子名 |
---|---|---|
BTN3 | L19 | START_STOP |
BTN2 | L20 | COUNT_RESET |
LD3 | LD[3] | M14 |
LD2 | LD[2] | N16 |
LD1 | LD[1] | P14 |
LD0 | LD[0] | R14 |
改善点
いや~、ブロック図を書いたりしていい思考整理になりましたよ~。
always
文がごっちゃになってきたので、少し整理する- 各エッジ検出に於いて、関係のないものまでひとくくりにしているため
- チャタリング防止回路の遅延をなくす
- シフトレジスタで構成しているが、多分ビット幅が大きすぎる
- でも立ち上がりエッジ、立ち下がりエッジの両方を検出できるってすごくない?(自画自賛)
stopwatch
モジュール外に出ている(top
モジュール内の)min
という名前のレジスタをstopwatch
内に組み込む- だってこれストップウォッチ機能の一部じゃないか
構想
まずは以上に述べた仕様を整理した上で、ラーメンタイマーでも作ってみたいですね~
例えば3分経ったらブザーを鳴らすとかできれば楽しそうです~
...とすると近いうちにブザー鳴動回路を作るのか!?乞うご期待。