Tang Nano 9KでLチカ
最近(※いつ?)流行ってるらしいTang Nano 9Kを触ってみました。
秋月で3000円で買えます。
https://akizukidenshi.com/catalog/g/g117448/
目標
ツールの初期セットアップと使い方を覚えてボード上のLEDをLチカさせる
概要
Tang Nano 9Kはsipeed(SeeedStudio)社が販売しているFPGAボードです。
実際に搭載しているFPGAはGOWIN社のGW1NR-LV9というチップで、
LittleBeeシリーズのFPGAとなります。
関連ソフトのセットアップ
まずは関連ソフトのセットアップです。
まず、下記でユーザー登録を済ませます。
https://www.gowinsemi.com/ja/
次に、下記で「Gowin V1.9.10.03 Education (Windows x86)」をダウンロードします。
※執筆時、x86と書かれていますがなぜかx64版がリンクされています
https://www.gowinsemi.com/ja/support/download_eda/
Educationではないほうはライセンス申請が必要で面倒なので、とりあえずEducationを使うことにします。
ほかにもいろいろダウンロードできるものがありますが、最低限必須なのはこの一つだけで良いようです。
インストールは特に迷うような選択肢もなくデフォルト設定で進めていくだけで完了です。
インストール後はいったんOSを再起動したほうが良いようです。
動かす
基本的には公式の記載をなぞりつつ、補足を記載します。
https://wiki.sipeed.com/hardware/en/tang/Tang-Nano-9K/examples/led.html
プロジェクトの作成
まずはプロジェクトを作成します。メニューを下記の通りたどります。
Create Project:File-->NEW-->FPGA Design Project-->OK
次に、プロジェクト名とプロジェクトのパスを設定します(日本語は使わないほうがよさそうです)
デバイスを選択します。
Tang Nano 9Kは以下の通り選択し、Nextを押します。
ソースコードの作成
プロジェクトを作成すると、ソースコードなどが編集できるようになります。
新しいファイルを作成するには、Fileメニューの左下のアイコン(新規作成?)をクリックするか、Ctrl + N を使用します。
ポップアップ ウィンドウで Verilog ファイルを選択します。
つぎに、ファイル名を決めます。とりあえずtop.vとしました。
左ペインの作成したファイル名をダブルクリックし、右ペインで編集します。
使用するサンプルコードは下記のとおりです(公式のソースはもともとデフォルトで書き込まれていた覚えがあり、書き込みが成功したのかわからないため、下記コードは多少修正しています)。
top.v
module top(
input sys_clk, // clk input
input sys_rst_n, // reset input
output reg [5:0] led // 6 LEDS pin
);
reg [23:0] counter;
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
counter <= 24'd0;
else if (counter < 24'd1349_9999) // 0.5s delay
counter <= counter + 1'b1;
else
counter <= 24'd0;
end
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led <= 6'b100000;
else if (counter == 24'd1349_9999) // 0.5s delay
led[5:0] <= {led[4:0],led[5]};
else
led <= led;
end
endmodule
コードが完成したら、Use DONE as regular IOエラーを回避するために、上部のメニューにある [Project] -> [Configuration] -> [Place & Route] -> [Dual-Purpose Pin]の[Use DONE as regular IO]にチェックマークを付ける必要があるようです。
※これがどういう意味なのかは未調査です。なんとなく、DONEピンを通常IOとして使用するという意味だとは思いますが。
論理合成、制約、配置配線
論理合成(Synthesize)
ソースの記述が終わったら、論理合成工程になります。
論理合成とは、ソースをコンパイルして実際にチップ内に構成する回路「図」を作成する作業と思っていただいてあまり間違いはありません。
とはいっても自分で書くわけではなく、自動で作成してくれます。
「Process」タブに移動し、「Synthesize」をダブルクリックしてコードを合成します。
制約(Constrain)
制約とは、合成工程で作成した回路図(のようなもの)を、実際の物理的なチップに書き込みにあたり、物理的な設定を行う箇所となります。
具体的には、ソース上のどの信号がチップのどの端子に接続されるかの設定をします(ピン制約)。
※Intel(Altera)、AMD(Xilinx)はクロック制約もこのような箇所で行いますが、GOWINはここでは行わないらしいです。
「Process」タブで「 FloorPlanner」 をダブルクリックして、ピン制約を設定します。
この際、制約ファイルが未作成のため、作成するか聞かれますのでOKを押してください。
ソースと実際のピンを結びつけるためには、そもそもTangNanoボードの回路図がどうなっているかを知る必要があります。詳しくは省略しますが、LEDは10,11,13,14,15,16ピンにつながっており、クロックは52ピン、リセットは4ピンにつながっているようです。
※詳しくは公式の回路図などを参照してください
FloorPlannerが開いたら、下のタブから「I/O Constraints」を選んで、下図のようにしたペインを設定した後、上の保存アイコンを使用して保存し、ウィンドウを×で閉じます。
配置配線(Place & Route)
配置配線(Place & Route)とは、上記で作成した回路図(のようなもの)を、チップ上にどのように配置するかを決めるものです。実態配線図を作るイメージが近いです。
こちらも自動で作成されます。
Place & Routeをダブルクリックして実行します。
論理合成時と同様に、「Place & Route」に緑のチェックマークがつけば成功です。
チップにダウンロード
ここまでの工程で作成したデータを、実際のチップにダウンロードします。
まず、ボードをPCに接続します。
その後、左ペインの「Programmer」をダブルクリックします。
Programmerが起動し、下記の画面が出るので「Save」します。
その後、ダウンロードボタンを押すことでダウンロードされてLEDが動き出します。
※この際、Operationが「SRAM Program」となっていることを念のため確認してください。なっていない場合はダブルクリックで設定ウィンドウが表示されます。
動いた!
最後に
特に難解な箇所もなく、簡単な動かし方はわかりましたので、次回もう少し面白いものを作ってみたいと思います。
実際どのくらいの規模のものが入るのかや、詳細なツールの使い方はまだわかりませんが、なんといっても値段が安いので、FPGAの入門用にはもってこいかなと思います。
投稿者の人気記事
-
lyricalmagical
さんが
2024/12/23
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する