「MAX 10 NEEK」でストップウォッチを開発し、内蔵メモリから起動する:MAX 10 FPGAで学ぶFPGA開発入門(11)(4/10 ページ)
アルテラのFPGA「MAX 10」を搭載した開発ボード「MAX 10 NEEK」にはLEDやフラッシュメモリなどの各周辺機器が備えられている。今回はLEDを使ったストップウォッチを開発し、内蔵メモリから起動する。
NIOS IIで動作するストップウォッチをプログラム
さて次はNIOS II上で動作するプログラムの方だ。まずは第9回の手順と同じよう、" Nios II Application and BSP from Template "からHello Worldのテンプレートでアプリケーションを生成する(Photo07)。
このままでは文字通り、単なる「Hello World」なので、これをList 3のように書き換えた。
List 3: #include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" long HEXtable[10] = {0x40, // 0:1000000 0x79, // 1:1111001 0x24, // 2:0100100 0x30, // 3:0110000 0x19, // 4:0011001 0x12, // 5:0010010 0x02, // 6:0000010 0x78, // 7:1111000 0x00, // 8:0000000 0x10 // 9:0010000 }; void LEDR_out(int num) { if((num < 0)||(num > 9)) return; IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, 1 << num); } void HEX_out(int digit, int num) { if((num < 0)||(num > 9)) return; if((digit < 0)||(digit > 2)) return; if(digit) IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE, HEXtable[num]); else IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE, HEXtable[num]); } int main() { long cnt=0, lpCnt; while(1) { LEDR_out(cnt); HEX_out(0, cnt); HEX_out(1, cnt); cnt++; if(cnt == 10) cnt=0; for(lpCnt=0; lpCnt<300000; lpCnt++); } return 0; }
一応簡単に説明すると、LEDR_outは一列に並んだLEDの指定桁(0〜9)のみを光らせる関数、HEX_outは7セグメントLEDを指定した値(0〜9)に点滅させる関数である。
面白いのは、LEDRの方は指定した桁にあたるbitを立てると、それに対応するLEDが点滅する(例えば0x3FFを指定すれば全部点灯する)のに対し、7セグメントLEDは対応するbitを落とすと、そのセグメントが点灯する方式になっていることだ。
ここに指定するbit fieldとセグメントの関係は
となっており、そこで最初にHEXtable[]でそれぞれの数字に対応したbit patternを保持しておき、これをまとめて出力する形になっている。HEX_out(0,xxx)で1桁目を、HEX_out(1,xxx)で2桁目をそれぞれ表示する形だ。
一方、これを呼び出すmain()は、見ての通りでcntという変数で0〜9を繰り返しながら表示させるだけの、純粋にテストプログラムである。実行するとMovie01の様に、7セグメントと10個のLEDが連動しながらきちんと表示されているはずだ。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「MAX 10 NEEK」に搭載されたDDR3メモリを使う
MAX10搭載開発ボード「MAX 10 NEEK」には各周辺機器が備えられており、その中にはDDR3メモリも含まれる。ソフトコアCPU「Nios II」からの利用も含めて手順を紹介する。 - 「MAX 10 NEEK」へソフトコアCPUを組み込む
周辺機器の充実したMAX10搭載開発ボード「MAX 10 NEEK」に、ソフトコアCPU「NIOS II」を組み込み、ソフトコアCPUからボード搭載LEDの制御までを紹介する。 - 周辺機器の充実した「MAX 10 NEEK」で本格的な開発を目指す
FPGA開発において周辺機器(回路)は見落とせない要素の1つ。タッチパネルや各種出入力などを備えた「MAX 10 NEEK」を導入して、本格的な開発を目指す。 - FPGAのソフトコアCPUをベンチマークで測定する
FPGA「MAX10」に「NIOS II」と呼ばれるソフトIPコアを導入することで、ソフトコアCPUを構築できる。ではその処理能力はどれほどか。ベンチマークソフトで測定してみよう。 - FPGA上でソフトコアCPUを動かす手引き
これまでFPGAの開発基礎としてLチカなどを紹介してきたが、今回はちょっと目先を変えてFPGA上でのCPUコア動作に取り組む。今回も連載で使う「MAX 10 FPGA 評価キット」の読者プレゼントをご用意。