単純なLチカならばFPGAでもそう難しくない。ただ、ダイナミック点灯やそれに伴うソースの最適化については“ならでは”のポイントが散見される。今回も連載で利用している「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。
アルテラ「MAX 10 FPGA」を利用してFPGA開発の基礎を学ぶこの連載、前回(FPGAのLED制御プログラムを深く理解する)はArduino I/Oを利用し、7セグメントLED1桁でのカウントアップを実装してみたが、今回はこれをもう少し展開してみたい。まずはダイナミック点灯への変更を行う。
前回の配線図(Photo00)はアノードコモンをオンボードのPMIC 3.3V出力につなぐ形で、後はそれ以外のピンを制御する形で実装してみた。この方式の場合、LEDは常時点灯する形になる。1桁だけを表示するならこれでもいいのだが、桁数を増やそうとすると途端にピン数が足りなくなる。
利用した7セグメントLED「HDSP-K211」の場合、点灯時は平均37mWほど消費するので、全桁+小数点を表示させると約300mWほど消費する形になる。この状態で桁を増やすと、4桁なら最大で1.2Wほど消費することになり、PMICの最大定格(連続出力最大800mW)を超えてしまう(実際はその前にピンが足りなくなるが)。これは賢明とは言いにくい。
ということでダイナミック点灯である。これは要するに同時に発光するLEDは1本に留めるが、発光させるLEDを高速に切り替える事で、あたかも同時にLEDが発光しているように見せかけるという手法。多桁の表示などではごく一般的に用いられている手法である。
List 1はこれを強引に実装してみたものだ。ちなみに配線も少し変更している(Photo00_1)。ダイナミック点灯の場合、一度に表示されているLEDは1つだけなので、無理にPMICから電源を取らなくても、MAX 10のI/O pinの出力(最大25mA)でもそれなりに明るく光る。このため、7セグメントLEDの13番pinを、J5.3(ArduinoのI/O 5番に相当)に切り替えている。
Copyright © ITmedia, Inc. All Rights Reserved.