Tang Primer 開発環境をセッティング

FPGA開発をしたくなったので、以前買ってあった Tang Primer用の環境をセットアップします。

公式サイトはこちらのようです。

セッティングにあたっては以下のサイトを参考にさせていただきました。

http://galaxystar.image.coocan.jp/tangprimer.htm

IDEをインストールと起動

https://tang.sipeed.com/en/getting-started/requirements/ にリンクがあるので、そこから下の方にあるURLからIDEをダウンロードします。

今回は、TD1909_linux.rarをダウンロードしてみました。(もっと新しい日付のものはRHEL用っぽいので)

https://tang.sipeed.com/en/getting-started/installing-td-ide/linux/ のページの記述を参考にインストールしますが、いろいろ違います。

~/ダウンロード$ sudo unrar x TD1909_linux.rar -d /opt/
~/ダウンロード$ sudo ln -s /opt/TD_RELEASE_September2019_r4.6.2/bin/td /usr/bin/td
~/ダウンロード$ sudo chmod a+x /opt/TD_RELEASE_September2019_r4.6.2/bin/td
~/ダウンロード$ td -gui

実際に起動するにはFPGAのデバイス情報を /usr/arch で参照できないといけないようです。

$ sudo ln -s /opt/TD_RELEASE_September2019_r4.6.2/arch /usr/arch 

また、ライセンスファイルが必要なようで、 https://dl.sipeed.com/shareURL/TANG/Premier/IDE から最新のライセンスファイル(Anlogic_*.lic)をダウンロードしてきて、 /usr/license の下に Anlogic.lic のファイル名で配置します。

$ cd /usr
$ mkdir license
$ sudo mkdir license
$ cd license/
$ sudo cp ~/ダウンロード/Anlogic_20220130.lic Anlogic.lic

これでIDEが起動できました。

実際には、https://dl.sipeed.com/shareURL/TANG/Premier/IDE により新しいバージョンがあるようなので、そちらを試したほうがいいかもしれません。

USBドライバをインストール

https://tang.sipeed.com/en/getting-started/installing-usb-driver/linux/ のページに沿ってドライバをインストールします。

Tang Nano PrimerをPCに接続して、lsusbで VID:PID = 0547:1002 を認識しているか確認します。

$ lsusb
Bus 001 Device 003: ID 0547:1002 Anchor Chips, Inc. Python2 WDM Encoder

USB3.0のHUB経由では認識せず、PCのポート直結、もしくはUSB2.0のHUB経由でなければ認識されませんでした。(PCのUSB3.0のポート直結なら認識するのかは試していません)

記述の通りにudevルールを作成します。

$ ls -la /etc/udev/rules.d/91-anlogic-jtag.rules 
-rw-r--r-- 1 root root 108  6月 20 08:31 /etc/udev/rules.d/91-anlogic-jtag.rules
$ cat /etc/udev/rules.d/91-anlogic-jtag.rules 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0547", ATTRS{idProduct}=="1002", \
  GROUP="plugdev", \
  MODE="0660"

$ sudo service udev restart

次に、正しく認識しているかを確認しますが、自分の環境では一度再起動しないとだめでした。(ログアウト→ログインでも大丈夫かは試していません)

$ td -gui

として、IDEを起動します。起動したら、赤で囲った Download ボタンをクリックすると、Downloadウインドウが開くことを確認します。

ドキュメントでは、「未知のバグによりJTAGは400kbpsかそれ以下でないと動作しない」とのことです。

サンプルの合成

https://tang.sipeed.com/en/getting-started/getting-to-blinky/ に沿ってサンプル blinky を動かしてみます。

gitをインストールした上で、githubからサンプルをダウンロードしてきて、IDEを起動します。

~$ mkdir TangPrimer
~$ cd TangPrimer/
~/TangPrimer$ sudo apt install git
~/TangPrimer$ git clone --recursive https://github.com/Lichee-Pi/Tang_FPGA_Examples
~/TangPrimer$ td -gui

Project -> Open Project で ~/TangPrimer/Tang_FPGA_Examples/0.LED/prj の下の led.al を開きます。Process -> Run またはメニューボタンの中の Run をクリックすると、論理合成とフィッティングが行われて led.bit が生成されます。

サンプルのテストと改造

Tool -> Download またはメニューボタンの中の Download をクリックして、Downloadウインドウを開きます。「Add」アイコンをクリックして、生成した led.bit を選択します。Mode SelectionがJTAGになっていると、直接FPGAに書き込みに行くので、電源再投入で消えるとのことです。(http://galaxystar.image.coocan.jp/tangprimer.htm の記載による)

Speedを3Mbpsにして、Runボタンをクリックすると書き込みが行われます。書き込みが終わると動作を開始しますが、ユーザー回路へのリセットがかからないので、「USER」ボタンを押してユーザー回路へのリセットをかけてやる必要があります。以下のように書き換えて動作させようとしたものの思ったとおりに動作せず、少々悩みました。

①led.v

/* デバイスは EG4::EG4S20BG256 */ 

module led
	(
		input wire CLK_IN,
		input wire RST_N,
		output wire [2:0]RGB_LED
	);

	parameter time1 = 25'd12000000;//クロック周波数 24Mhz

	reg [2:0]rledout;
	reg [24:0] count;
	
	initial
	begin
		count=25'b0;
		rledout=3'b110;
	end

	always @(posedge CLK_IN)begin
		if(RST_N==0)begin
			count <= 25'b0;
			rledout <= 3'b110;
		end
	
		if(count == time1)
 		begin 
 			count<= 25'd0;
			rledout <= {rledout[1:0],rledout[2]};
 		end
 		else
 			count <= count + 1'b1;
	end
	
	assign RGB_LED = rledout;
endmodule

②制約ファイル io.adc

set_pin_assignment {CLK_IN} { LOCATION = K14; }		##24MHZ
set_pin_assignment {RST_N} { LOCATION = K16; }		##USER_KEY

## RGB LEDs, 3 pins
set_pin_assignment {RGB_LED[0]} { LOCATION = R3;  }	##LED_R, R3
set_pin_assignment {RGB_LED[1]} { LOCATION = J14;  }	##LED_G, J14
set_pin_assignment {RGB_LED[2]} { LOCATION = P13;  }	##LED_B, P13

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)