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

» 2015年12月11日 07時00分 公開
[大原 雄介MONOist]

プログラム解説

 さてプログラムだが、1msごとに点灯させるLEDを切り替える事にした(最初は10msで組んでみたら遅すぎてちらつきが酷かったので1msに減らした)。

 まずdiv_cntr1で5万回(=1ms)のカウンタを作り、この中で1000回のdiv_cntr2のカウンタを回す形で、毎秒1000回のループを回している。その1000回のループで、最初の1回だけは表示すべき数字(dec_cntr)の更新と、その数字にあわせた7セグメントLEDの点滅パターンの更新(seg_cntr)を行っており、残りの999回はダイナミック点灯の更新を行っている。

 ダイナミック点灯といっても難しい処理をしているわけではなく、7セグメントLEDは小数点を含めて8つのセグメントを持つので、これにあわせて8回の小ループ(pos_cntr)を内部で回し、そのたびに表示するLEDの場所(disp_cntr)を更新する形だ。表示しない場所はHi(1)にしている。

 実際にこれを起動すると、きちんと表示されるのが分かる(Movie01)。良く見ると微妙にLEDの表示がチラついているが、これはダイナミック点灯の周期がちょっと長すぎるためで、もう少し周期を短くすれば解決する。

MAX10 FPGAによるLEDのダイナミック点灯(1)

Copyright © ITmedia, Inc. All Rights Reserved.