HOME

terasic DE0基板 - DE0_NIOS_SDCARDデモの再構築

NiosⅡ/eをEPCS4に書いておいて
DE0_NIOS_SDCARDデモを再構築できるようになりました。プログラムは
CFI Flashに書き込むかまたはSDRAMに転送して実行できます。
これをベースにNiosソフトを改造してください。とりあえずやり方のまとめです。

開発環境
QuartusⅡ10.0sp1
Nios II 10.0 IDE (niosはインストールしてからsp1にupdateしておいてください)
(今回はNiosⅡ10.0 Software Build Tools for Eclipseは使用しません。
というかEclipseではうまくいきませんでした。うまくいった方、教えてください)


Ⅰ.QuartusⅡによるNiosⅡ/eの作成


まず、NiosⅡ/eのpofファイルをEPCS4へ書き込んでおいてください。
やりかたは、こちらの「Ⅰ.QuartusⅡによるNiosⅡ/eの作成」を見てください。

 

Ⅱ.Nios II 10.0 IDEによるprojectファイルのインポートそしてリビルド


①サンプルプロジェクトはNiosⅡ/eを作成したときに新しくコピーされていると
思いますが、NiosⅡ/e作成後のできるだけまっさらな状態を用意することを
お勧めします。完成後にプロジェクトをコピーしておき改造元のオリジナルと
して利用できます。

②Legacy NiosⅡ Toolsに入っているNiosⅡ10.0 IDEを起動。
File - Import - Altera NiosⅡ Existing Nios Ⅱ IDE project into workspaceをクリックして
Next。 

Project contentsに以下を選びます。
DE0_NIOS_SDCARD¥software¥DE0_SDCARD

同様に、File - ImportでDE0_SDCARD_syslibも選びます。

途中、release / debugディレクトリを削除してくるか聞いてきますが、
とりあえずわからないのでNoにしておきます。

③下図のようにプロジェクトが追加されています。


④このままだとniosⅡ9.0用のファイルが残っているので
一度、Project - clean を実行します。
clean前に画面がでますが、clean all projectを選ばれているのを確認してOKすると
不要ファイル(obj等)が削除され、自動でリビルド(☑Start a build...)が開始されます。
なにもエラーがなければ、以下のような行が最後に表示されます。

Build completed in 4.266 seconds


万が一、インクルードが外れてエラーとなった場合は、上図のDE0_SDCARDで右クリックしproperties
にてプロパティー画面を開き、Includeを追加しなおします。
以下のDE0_SDCARDにあるterasic_XXXXの3フォルダーを追加します。無い場合だけ追加します。


 

DebugからReleaseにしたときも、なぜかインクルードが外れていたので、ここでも3つを追加してください。
なんだか2度手間の気がしますね。Addボタンは1フォルダ毎に押す必要があります。


Ⅲ.DE0へプログラム転送とRUN


NiosⅡ/eはSDRAMからプログラムをスタートする設定にしたのでSDRAMに転送されます


①DE0をRUNスイッチにしてUSBでPCに接続しておきます。

②NiosⅡ10.0 IDEのRun - Runを選択します。
左側のNiosⅡHardwareのDE0_SDCARD Nios Ⅱ HW confを選びます。

③Run画面のTarget Connectionタブを開くと以下のように接続状態が確認できます。

④Runボタンをクリックすると、プログラムがDE0へダウンロードされて実行されます。
Run画面が閉じてConsoleタブに以下のようにDE0からの表示がされます。

========== DE0 SDCARD Demo [05/19/2009]

Failed to mount the SDCARD!

Please insert the SDCARD into DE0 board and press BUTTON2.

⑤main.cを改造して好きなNiosソフトを作ってください。


Ⅳ.DE0のCFI Flashへプログラム書き込みと実行


①DE0をRUNスイッチにしてUSBでPCに接続しておきます。

②NiosⅡ10.0 IDEのTools - Flash Programmerを選択します。
Mainタブの☑Program software project into flash memoryだけチェックして
Program Flashボタンをクリックします。
Program Flash Now画面はOKをクリック。

③ConsoleタブでEraseとProgramming表示がされ、書き込み終了です。
 
④NiosⅡ IDEを閉じてDE0を再起動しておいて、nios2eds\bin\nios2-terminal.exeを実行します。

以上のような画面がでればCFI Flashへの書き込み成功です。CFI Flashに書いても
ブートコピアによってSDRAMにプログラムがコピーされて実行されます。

注意
nios-terminalはcygwinのパスがquartusⅡにあるものになっていないと動きません。
たとえば、g:\altera\10.0sp1\quartus\bin\cygwin\binにパスを通しておく必要があります。

 

Ⅴ.DE0_SDCARDデモのFAT

// File Access
FAT_FILE_HANDLE Fat_FileOpen();
unsigned int Fat_FileSize();
bool Fat_FileRead();
bool Fat_FileSeek();
void Fat_FileClose();
bool Fat_FileIsOpened();

DE0_NIOS_SDCARDのFAT関連のヘッダファイルを見ましたが、
FatのReadはあってもWriteがないのが不完全なところかも。

どなたかWriteも作ってください。よろしくお願いします。

 

Ⅵ.その他

①main()のアドレスを実行時にnios-terminalへ表示させるには

main.cに赤の2行を追加すればよいです。これを表示させたところrunでもdebugでも
CFI Flashからの実行でもSDRAMを示していました。

 int main()
{
    const alt_u32 LED_BLUE_PATTERN = 0x2AA;
    const alt_u32 LED_GREEN_PATTERN = 0x3FF;
    const alt_u32 LED_RED_PATTERN = 0x000;
    FAT_HANDLE hFat;
    int (*pmain)() = main;

    printf("main function address=%08x\n",(unsigned int)pmain);

    printf("========== DE0 SDCARD Demo [05/19/2009]\n");

 

 

②7segに16進を表示させるには

付属の7segサンプルはどうも表示がおかしいので、データを入れ替えました。
以下のソースをmain.cにコピーして使ってください。

void sevenseg_set_hex(alt_u16 hex)
{
    static alt_u8 segments[16] = {  0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98, /* 0-9 */
                                             0x88, 0x83, 0xA7, 0xA1, 0x86, 0x8E };                                /* a-f */

    alt_u32 data = segments[hex & 15] | (segments[(hex >> 4) & 15] << 8)
          | (segments[(hex >> 8) & 15] << 16) | (segments[(hex >> 12) & 15] << 24);

    IOWR_ALTERA_AVALON_PIO_DATA(SEG7_BASE, data);
 }

 

 

 

inserted by FC2 system