Sim's blog

電子工作はじめてみました

DE0でNios IIのROM化

2010-11-07 05:48:39 | FPGA
すんさんの記事「terasic DE0基板 - NiosII/eのROMブート」に刺激されて、ROM化をやってみました。すんさんは、terasicのサンプルのプロジェクトを再利用することで実現されています。ここではゼロからプロジェクトを作ってやってみました(以前書いた記事「NIOSを使ってみました(1)」、「NIOSを使ってみました(2)」)。

思いっきり手抜きで申し訳ないのですが、分かる人にだけ分かるというか、重要そうな画面だけをピックアップしています。詳しくは「Flash Controllerを使ってみよう」を参照してください。
画像はクリックすると拡大します。

(1) SOPC Builderの設定では、EPCS Flash Controllerを追加してやります。


(2) SOPC BuilderのNios IIの設定では、Reset VectorをEPCS Flash Controllerにします。


(3) Quartus IIのデバイスの設定では、Dual-Purpose Pinsの設定でDCLK、DATA[0]、DATA[1]/ASDO、FLASH_nCE/nCSOの4つをUse as regular I/Oに変更します。この4つのピンは通常はProgram用ですが、普通のI/Oとして使えるように設定しています。

注意点としては、Quartus IIの10.0はバグのため、Dual-Purpose Pinsの設定ができません。10.0 sp1にアップグレードする必要があります。また、10.0 sp1にもバグがあって、okを押して上のダイアログを閉じて、もう一度開くと値が元に戻ってしまいます。実際は反映されています。
直接.qsfファイルに以下を追加してやる方法もあります。
set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"

(4) Quartus IIのPin Plannerの設定です。Flash Controller用のピン配置はasdo(PIN_D1)、dclk (PIN_K2)、data0 (PIN_K1)、ncse(PIN_E2)です。DE0に載っているEP3C16F484のピン配置は、Alteraの「アルテラ デバイス用 ピンアウト・ファイル」というページからダウンロードできるEP3C16.pdfに載っています。


(5) verilogのソースコード(main.v)です。
`default_nettype none
module main(
output [9:0] led,
output dclk, nsce, asdo,
input data0,
input reset_n, extclk
);

nios nios_inst(
// reset
.reset_n (reset_n),

// clock
.extclk (extclk),

// altpll
.clk (),
.locked_from_the_altpll (),
.phasedone_from_the_altpll (),

// LED (GPIO)
.out_port_from_the_led (led),

// Flash Controller
.data0_to_the_epcs_flash_controller (data0),
.dclk_from_the_epcs_flash_controller (dclk),
.sce_from_the_epcs_flash_controller (nsce),
.sdo_from_the_epcs_flash_controller (asdo)
);

endmodule

(6) Nios II eds用のCのソースファイル(Lチカ)です。
#include "system.h"

#define led (*(unsigned *)LED_BASE)

int main()
{ 
    volatile unsigned t;

    while (1){
        for(t = 0; t < 50000; t++) ;
        led++;
    }
}

(7) Nios II Flash ProgrammerでDE0に載っているEPCS4にプログラムを書き込んでやります。

あらかじめ、Quartus IIのProgrammerから.sofファイルを書き込んでおく必要があります(Flash ProgrammerはNiosと通信してFlashに書き込むため)。
Flash ProgrammerはNios II EDSのProject Explorerの中のプロジェクト名を右クリックしたメニューから起動します。
追加するファイルは.elfと.sofに2つです。


以上で、EPCS4にはFPGAに書き込む回路とNios IIが実行するプログラムの2つが書き込まれて、電源オンで実行できるようになります。
Quartus IIのバグに悩まされましたが何とか動かすことができました。
今のところ解決していないのはNios II edsでワークスペースの場所を移動できないことです。インストールしたデフォルトの場所にしかプロジェクトを作成できていません。


最新の画像もっと見る

コメントを投稿