SNSへはこちら

PYNQ-Z1ボードでFPGA体験(4) - ストップウォッチ回路の進捗1

前回のものを活用して、単なるカウンタではなくストップウォッチ回路を作ってみました。
実用的なの、大事。

ソース

また例によって 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分経ったらブザーを鳴らすとかできれば楽しそうです~

...とすると近いうちにブザー鳴動回路を作るのか!?乞うご期待。