連載
よろしいならばダイナミック点灯だ――FPGAでLEDをダイナミックにLチカさせる:MAX 10 FPGAで学ぶFPGA開発入門(5)(3/6 ページ)
単純なLチカならばFPGAでもそう難しくない。ただ、ダイナミック点灯やそれに伴うソースの最適化については“ならでは”のポイントが散見される。今回も連載で利用している「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。
プログラム解説
さてプログラムだが、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.