第2回 Nios IIで遊ぼう Quartus Platform Designer編

FPGA

関連記事 FPGAの記事一覧

スポンサーリンク

前回のおさらい

Niosで遊ぼうの第2回です。

第1回の記事では、目標機能について記載しましたが、おさらいしておきます。

上の図は、目標機能のブロック図です。

DE0-Nanoボードには、2つのプッシュスイッチと8つのLEDが付いているので、
“Push SW0″を押している間は、偶数番号のLEDが点灯し、
“Push SW1″を押している間は、奇数番号のLEDが点灯する、
という目標にしました。

NiosはPush SWの状態をポーリングで監視して、スイッチの状態に応じてLEDを制御します。

Push SWは、押されたらHighレベルがNiosに入力されるように、FPGA内にインバータを1段入れたいと思います。

Terasic DE0-NANO開発ボード 【P0082】

新品価格
¥14,520から
(2020/5/19 00:12時点)

QuartusのPlatform Designerを使ったハードウェア設計

Platform Designer

いよいよハードウェアの設計です。

ハードウェアの設計では、必要な機能をIPカタログから選び、設定し、各機能を接続していくようなイメージです。

これらの作業はQuartusの”Platform Designer”を使って行っていきます。

Platform Designerは、QuartusのメニューからTools -> Platform Designerを選択することで起動します。

Platform Designerが起動すると、以下の画面が表示されます。

最初から”clk_0″という機能が表示されていますね。

これから、この”clk_0″のように機能を追加していきます。

Nios IIの追加

早速、Nios IIを追加してみます。

“IP Catalog”の下にある検索欄に”nios”と入力してみます。

“Nios II Processor”が表示されると思うので、選択し、”Add”ボタンをクリックします。

すると、以下の画面になると思います。

ここでは、Nios IIの種類を選択しますが、”Nios II/e”を選択し、”Finish”ボタンをクリックします。”Nios II/f”は有償のようです。

“Finish”を押すと画面が切り替わり、”clk_0″の下にNiosが追加されたと思います。

とりあえず、Niosの追加はこれで終了です。

On-Chip Memoryの追加

次はメモリー(RAM)を追加します。

RAMはFPGAに内蔵されているようで、FPGAの外付けでRAMが必要ということはありませんでした。でも、これはFPGAの型式にもよるのかな???

追加方法は、Niosと同様に、検索欄に”onchip”と入力すると、”On-Chip Memory(RAM or ROM) Intel FPGA IP”と表示されると思うので、それを選択して”Add”をクリックします。

この時点でエラーメッセージが出てるかもしれませんが、とりあえず無視しておいて大丈夫です。

“Add”を押すと以下の画面に切り替わります。

下の画面通りに設定しましたが、難しいのが”Total memory size”の値でした。

メモリーサイズが何バイト必要かは、作成するアプリケーションによると思います。

大容量にしておけば安心ですが、FPGAのリソースもあるので、ここの値は調整が必要でしょう。

今回は、49152 byteにしておきました。

これでon chip_memoryも追加されました。

汎用入出力ポートの追加

次は、Push SWの状態を読み取るための汎用入力ポートの追加です。

検索欄にpioと入力すると、”PIO(Parallel I/O) Intel FPGA IP”と表示されるので、選択して”Add”ボタンをクリックします。

DE0-Nanoボードにプッシュスイッチは2つあるので、汎用入力ポートは2つ追加します。

以下の画像のように、”Width(1-32 bits)”に”2″を設定します。

入力ポートなので、”Direction”は”Input”を選択します。

設定が終わったら”Finish”をクリックします。

これで汎用入力ポートが追加されました。

次は、LEDを接続する汎用出力ポートの追加ですが、やり方は入力ポートと同様です。

違いは、ポートの数です。

LEDは8つあるので、”Width(1-32 bits)”は”8″を設定します。

“Direction”は”Output”です。

これで2つの汎用入力ポートと、8つの汎用出力ポートが追加できました。

JTAG UARTの追加

次はJTAG UARTの追加です。

これはどんな機能なのか私は良く理解できていないのですが、USB Blasterを使ってパソコンとNiosを通信させるのに必要な機能だと思います。

検索欄に”jtag uart”と入力すると、”JTAG UART Intel FPGA IP”と表示されるので、選択して”Add”ボタンをクリックします。

以下の画像が表示されますが、デフォルトのまま”Finish”をクリックします。

これで、ようやく機能の追加は終了です。

各機能の名称変更

次は追加した各機能の名称を変更していきます。

ここはスキップしても良いと思いますが、わかりやすい名称にしたい場合は実施した方が良いと思います。

一例として、Niosの名称変更のやり方を記載します。

追加したNiosの名称は、”nios2_gen2_0″になっています。

これを右クリックし、”Rename”を選択し、わかりやすい名前に設定してください。

私は以下のように”Rename”しました。

nios2_gen2_0 -> nios2_cpu
onchip_memory2_0 -> onchip_memory
pio_0 -> sw_input
pio_1 -> led_output
jtag_uart_0 -> jtag_uart

各機能の接続

次は追加した各機能を接続していきます。

接続は、ネットで見つけたサイトやIntel(Altera)の資料を参考に以下のように接続しました。

JTAG UARTは割込みも使用するようですが、自動で接続されていました。

ベクターテーブルの設定

設定はまだまだ続きます。次はベクターテーブルです。

まず”nios2_cpu”をダブルクリックします。

以下の画像のように、”Parameters”というウインドウが表示されます。

この中で”Vectors”のタブを選択します。

“Reset vector memory”と”Exception vector memory”の項目に、追加した”onchip memory”を選択します。

外部ピンの追加

これはNiosの外部に接続するピンの設定です。

先ほど追加した汎用入出力ポートはNiosの外部に出すので、それを設定します。

下の画像の赤枠内のように、sw_input -> external connectionの”Export”の欄をダブルクリックします。

同じことを、led_output -> external connectionにも行います。

すると、表示が”sw_input_external_connection”と”led_output_external_connection”に変わります。

ベースアドレスの設定

まだまだ設定は続きます。

メニューのSystem -> Assign Base Addressesを選択します。

すると、Messagesウインドウに表示されていたエラーが消えました。

それと、Reset vectorとException vectorのアドレスも変わりました。

設定の保存

ここまできたら設定を保存しておきましょう。
もちろんもっと前に保存しておいてもOKです。

設定は”.qsys”という拡張子のファイルに保存されます。

私は”nios2cpu.qsys”として保存しました。

“保存”ボタンを押すと以下のようなウインドウが表示されます。

“Close”をクリックして保存完了です。

HDLの生成

次はここまで生成してきたNiosとペリフェラルをHDLで生成します。

HDL生成は、”Generate HDL”をクリックします。

以下のようなウインドウが表示されます。

私はVHDLで開発したいので、”Create HDL design files for synthesis”と”Create simulation model”でVHDLを選択しました。

選択が終わったら”Generate”ボタンをクリックします。

以下のウインドウが表示されたら、”Close”をクリックします。

そしたら、プロジェクトフォルダ内のnios2cpuフォルダに、”nios2cpu_inst.vhd”ファイルができていることを確認します。

“nios2cpu_inst.vhd”ファイル内は、以下のような内容になっています。

component nios2cpu is
port (
   clk_clk : in std_logic := 'X'; -- clk
   sw_input_external_connection_export : in std_logic_vector(1 downto 0) := (others => 'X'); -- export
   led_output_external_connection_export : out std_logic_vector(7 downto 0) -- export
);
end component nios2cpu;

u0 : component nios2cpu
port map (
   clk_clk => CONNECTED_TO_clk_clk, --clk.clk
   sw_input_external_connection_export => CONNECTED_TO_sw_input_external_connection_export,   --sw_input_external_connection.export
   led_output_external_connection_export => CONNECTED_TO_led_output_external_connection_export  -- led_output_external_connection.export
);

これで長かったPlatform Designerでの作業は終了です。

でも、まだ作業は続きます。。。

NiosのVHDLファイルを自身の設計に組み込む

“nios2cpu_inst.vhd”でNiosがコンポーネント化されたようなので、これを自身のVHDLファイルに組み込んでいきます。

作業はQuartusに戻り、”VHDL File”を新規に生成します。

この記事の最初に示した目標機能にあわせて、以下のようなVHDLを記述し、”nios2_hdl.vhd”という名称で保存しました。

赤枠が、先ほどの”nios2cpu_inst.vhd”ファイルからのコピーです。
ただ、下段の赤枠の紫の部分は自身の設計に合わせて割付ける必要があります。

VHDLの記述が終わったら、File -> Create/Update -> Create Symbol Files for Current Fileで、回路図用のシンボルを作成しておきました。

以下の画像のようなシンボルができました。

回路図上に配置し、入出力ピンを接続します。

次は、Niosのファイルをプロジェクトに追加します。

Project -> Add/Remove Files in Projectを選択します。

以下のウインドウが開くので、赤枠の個所をクリックします。

プロジェクトフォルダ -> nios2cpu -> synthesisフォルダにある”nios2cpu.qip”ファイルを選択します。

すると、以下のように”nios2cpu.qip”がプロジェクトに追加されました。

あとはピン割付けです。

DE0-Nanoのデータシートを参照しながら、ピン割付けを実施しました。

最後にコンパイルしてエラーが出なければ終了です。

お疲れさまでした。これでNiosの設定は終了ですが、終わったのはハードウェアの設定だけです。

ソフトウェアがないので、今の状態でFPGAに書き込んでもまだ動きません。

ソフトウェアの開発は、次回の記事で!

第1回 Nios IIで遊ぼう 目標機能編
第3回 Nios IIで遊ぼう Nios II Software Build Tools for Eclipse編
第4回 Nios IIで遊ぼう Nios II Command Shell編
第5回 Nios IIで遊ぼう パソコンからNiosへのコマンド送信編

関連記事 FPGAの記事一覧

Terasic DE0-NANO開発ボード 【P0082】

新品価格
¥14,520から
(2020/5/19 00:12時点)

タイトルとURLをコピーしました