さて、これでプログラム的には動いたのだが、タイミング的にはどうだろう(普通はまず設計段階でタイミングを見るわけだが、あえて逆にまず実際の動作の状況を見ることにする)。
下のPhoto03はLEDの4・9番ピン(小数点)の信号をオシロスコープで見てみたところ。トリガーは信号の立下りである(アノードコモンなので、Levelが0になるとLEDが電流に流れるため)。右下にあるように、Periodは4.000msとなっている。8つのセグメントを4.000msごとに更新するということは、1つのセグメントあたり0.500msごとに更新しているということで、これはプログラム通りの結果になっていることが分かる。
この工作程度だと「これでOK、万々歳」ということになるのだが、複雑なロジックを組んでいると、そもそも「全部作ってから動かしてみる」のではなく、部分的に作りこんで動作を確認してから次の部分に、という作り方をするのが一般的である。また、今回は最終的に外部に出てきている信号で成否を判断したが、内部ロジックの検証などでは外部の信号が使えない場合も珍しくない。
こうした場合に利用できるのがシミュレーションである。幸いにもQuartus IIには無償版ながらシミュレーションツールが利用可能である。起動するとこんな画面になるので(Photo04、05)、作業中のプロジェクトを選ぶと、実際にデザインの中身が見える(Photo06)。今回はClock信号とArduino_IO4〜13を表示させてみる(Photo07)。ただこの状態だと/top/ClockがHi-Z状態で進まないので、ここにClock信号を入力する(Photo08、09)。
ついでにメニューから「Simulate」→「Runtime Option」を選んで、1回に実行される時間を100psから100msまで増やしておく。これが終わったら、メニューの「Simulate」 → 「Run」 → 「Run 100」を選ぶと、Waveがこんな風になるはずだ(Photo10)。
このままだとちょっと見にくいので、上の縮小ボタンなどを使って、先頭から2msほどを表示させたのがこちら(Photo11)。カーソルの位置からも分かる通り、キチンと0.5msごとに出力信号が変化していることが分かる。今回は省くが内部レジスタやWireの値などを同様に表示することも可能であり、シミュレーション上も正しく動作することが検証された形だ。
次回はちょっと別のことをご紹介したい。
募集要項 | |
---|---|
応募期間 | 2015年12月11日(金) 〜 2016年1月15日(金) |
応募条件 | アイティメディアIDの登録ユーザー |
当選発表 | 当選された方には配送先の住所をお聞きするために登録メールアドレスにEメールをお送りします。配送先住所をご記入の上ご返信いただいた方にプレゼントをお送りします。 |
当選無効 | Eメールのご返信は7日以内とさせていただきます。8日目以降にご返信いただいても、当選は無効とさせていただきます。 |
応募上の諸注意 | ・キャンペーン期間中にアイティメディアIDの登録を削除された方は対象に含まれません ・当選者の権利は譲渡・換金・変更することはできません ・厳正な抽選の上、当選者の方へ賞品を発送、もしくはご連絡を差し上げます。なお、賞品のお届け先は日本国内に限らせていただきます。抽選と発送は2016年1月下旬〜2016年2月下旬の予定です ・お預かりした個人情報は、アイティメディアIDの利用規約とアイティメディア株式会社の 「プライバシーポリシー」に基づいて厳重にお取り扱いいたします ・住所・電話番号などが不明確な場合や、転居による住所変更や電話番号変更など、何らかの理由により賞品がお届けできない場合は当選を無効とさせていただきます ・ご応募はお一人さま1回限りとさせていただきます。2回以上ご応募された方は、抽選対象外とさせていただきますのでご了承下さい。 |
※アイティメディアIDにご登録済みの方でも、追加の情報登録をお願いする場合があります。ご了承ください。
Copyright © ITmedia, Inc. All Rights Reserved.