よろしいならばダイナミック点灯だ――FPGAでLEDをダイナミックにLチカさせるMAX 10 FPGAで学ぶFPGA開発入門(5)(6/6 ページ)

» 2015年12月11日 07時00分 公開
[大原 雄介MONOist]
前のページへ 1|2|3|4|5|6       

オシロでタイミング測定

 さて、これでプログラム的には動いたのだが、タイミング的にはどうだろう(普通はまず設計段階でタイミングを見るわけだが、あえて逆にまず実際の動作の状況を見ることにする)。

 下のPhoto03はLEDの4・9番ピン(小数点)の信号をオシロスコープで見てみたところ。トリガーは信号の立下りである(アノードコモンなので、Levelが0になるとLEDが電流に流れるため)。右下にあるように、Periodは4.000msとなっている。8つのセグメントを4.000msごとに更新するということは、1つのセグメントあたり0.500msごとに更新しているということで、これはプログラム通りの結果になっていることが分かる。

オシロスコープでの測定 Photo03:ちなみにオシロスコープ本体の方で細かく情報を表示させると、信号がOffになっている期間は平均0.496msということで、きっちり0.5msにはならない模様。とはいえ、ぎりぎりまで発光していることが分かる

 この工作程度だと「これでOK、万々歳」ということになるのだが、複雑なロジックを組んでいると、そもそも「全部作ってから動かしてみる」のではなく、部分的に作りこんで動作を確認してから次の部分に、という作り方をするのが一般的である。また、今回は最終的に外部に出てきている信号で成否を判断したが、内部ロジックの検証などでは外部の信号が使えない場合も珍しくない。

 こうした場合に利用できるのがシミュレーションである。幸いにもQuartus IIには無償版ながらシミュレーションツールが利用可能である。起動するとこんな画面になるので(Photo04、05)、作業中のプロジェクトを選ぶと、実際にデザインの中身が見える(Photo06)。今回はClock信号とArduino_IO4〜13を表示させてみる(Photo07)。ただこの状態だと/top/ClockがHi-Z状態で進まないので、ここにClock信号を入力する(Photo08、09)。

photo Photo04 利用しているVersion 15.0の場合、Tools → Run Simulation Tool → RTL Simulationで起動できる。
photo Photo05 一番左が用意されているさまざまモデリングツール。今作業している内容は上から2つ目の"rtl_work"に含まれている。

rtl_workの下の"top"(これはプロジェクトによって名前が違う)をダブルクリックする Photo06 rtl_workの下の"top"(これはプロジェクトによって名前が違う。今回筆者は起動するmodule名を"top"のままにしたからこの名前になる)をダブルクリックする
Objectsから表示させたい信号を選んで右クリック→"Add Wave" Photo07 Objectsから表示させたい信号を選んで右クリック→"Add Wave"である

Clock信号を右クリック→"Clock..."を選択 Photo08 Clock信号を右クリック→"Clock..."を選択
この状態だと周期100cycle(=100ps=10GHz)での動作になるので、Periodを20000(=50MHz)に指定する Photo09 この状態だと周期100cycle(=100ps=10GHz)での動作になるので、Periodを20000(=50MHz)に指定する

 ついでにメニューから「Simulate」→「Runtime Option」を選んで、1回に実行される時間を100psから100msまで増やしておく。これが終わったら、メニューの「Simulate」 → 「Run」 → 「Run 100」を選ぶと、Waveがこんな風になるはずだ(Photo10)。

真ん中の"Default Run"が標準だと100psなのでここを書き換える Photo10 真ん中の"Default Run"が標準だと100psなのでここを書き換える

 このままだとちょっと見にくいので、上の縮小ボタンなどを使って、先頭から2msほどを表示させたのがこちら(Photo11)。カーソルの位置からも分かる通り、キチンと0.5msごとに出力信号が変化していることが分かる。今回は省くが内部レジスタやWireの値などを同様に表示することも可能であり、シミュレーション上も正しく動作することが検証された形だ。

photo Photo12 最初の0.5msに信号が表示されないのは、disp_cntlに値を初めて設定するのが最初の0.5ms目だからで、それまではHi-Z扱いになる。本当はちゃんと初期化していればいいのだが

 次回はちょっと別のことをご紹介したい。

「MAX 10 FPGA 評価キット」プレゼント

募集要項
応募期間 2015年12月11日(金) 〜 2016年1月15日(金)
応募条件 アイティメディアIDの登録ユーザー
当選発表 当選された方には配送先の住所をお聞きするために登録メールアドレスにEメールをお送りします。配送先住所をご記入の上ご返信いただいた方にプレゼントをお送りします。
当選無効 Eメールのご返信は7日以内とさせていただきます。8日目以降にご返信いただいても、当選は無効とさせていただきます。
応募上の諸注意 ・キャンペーン期間中にアイティメディアIDの登録を削除された方は対象に含まれません
・当選者の権利は譲渡・換金・変更することはできません
・厳正な抽選の上、当選者の方へ賞品を発送、もしくはご連絡を差し上げます。なお、賞品のお届け先は日本国内に限らせていただきます。抽選と発送は2016年1月下旬〜2016年2月下旬の予定です
・お預かりした個人情報は、アイティメディアIDの利用規約とアイティメディア株式会社の 「プライバシーポリシー」に基づいて厳重にお取り扱いいたします
・住所・電話番号などが不明確な場合や、転居による住所変更や電話番号変更など、何らかの理由により賞品がお届けできない場合は当選を無効とさせていただきます
・ご応募はお一人さま1回限りとさせていただきます。2回以上ご応募された方は、抽選対象外とさせていただきますのでご了承下さい。

※アイティメディアIDにご登録済みの方でも、追加の情報登録をお願いする場合があります。ご了承ください。

⇒次の記事を読む

前のページへ 1|2|3|4|5|6       

Copyright © ITmedia, Inc. All Rights Reserved.