Sipeed Tang primer を試す


TANG PRIMER という、FPGAの入門ボードみたいなの?を試します。
スイッチサイエンスから購入したのですが、商品名が Tang premier となっています。
公式のガイド
Tang Primer Documentation :: Documentation for Tang Primer
Getting started を見ると、
- Requirements
- Installing Tang Dynasty IDE
- Installing USB Driver
- Getting to Blinky
となている。
ハードウェア構成



下の方にPINに関する詳細PDFがあります。
https://github.com/kprasadvnsi/tang-doc/releases/download/1.0.0/sipeed-tang-primer-pins.pdf
データシート
https://media.digikey.com/pdf/Data%20Sheets/Seeed%20Technology/102110202_Web.pdf
先に目を通しておきます。
IDE のダウンロードとインストール
ダウンロードの際に、キャプチャが有るのですが、なかなか難易度が高かったです・・・。
https://dl.sipeed.com/TANG/Primer/IDE

Installing USB Driver
そもそもわかっていないのですが、どうやら microUSB でつなぐようです。
USBで Windows10 パソコンと繋いで、デバイスマネージャーを確認しました。

右クリック から、ドライバーの更新、手動更新で、IDEインストール先のドライバーを指定します。
私の環境では C:\Anlogic\TD4.4.433\driver\win8_10_64 でした。
再起動して、再確認。

警告が出ています・・・
このデバイスに必要なドライバーのデジタル署名を検証できません。ハードウェアまたはソフトウェアに最近加えられた変更により、正しく署名されていないファイルや破損したファイルがインストールされた可能性があります。また、出所の不明な悪意のあるソフトウェアであることも考えられます。 (コード 52)
テストモードを試す
PS C:\WINDOWS\system32> bcdedit /set TESTSIGNING ON 要素データを設定中にエラーが発生しました。 この値はセキュア ブート ポリシーによって保護されているため、変更または削除できません。
仕方ないので、セキュアブートを無効しました。
認識の確認
IDE を立ち上げて、Download デバイスが出てくることを確認。

Getting to Blinky
サンプルコードを実行します。
git を Download して、Project > Open Project から Tang_FPGA_Examples-master\0.LED\prj\led.al を選択。
一旦 Run する。
led.bit が生成されるので、いよいよ読み込ませる。
Download から、 Add して、 Run
すると、RGB Led が、光りだします。

チュートリアルには、既知の不具合により Speed は 400kbps じゃないと動かない、、、と書かれていますが、1Mbps でも、動きました。
コードを見る
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
led.v
module led
(
input wire CLK_IN,
input wire RST_N,
output wire [2:0]RGB_LED
);
parameter time1 = 25'd24_000_000;//¾§ÕñΪ24Mhz
reg [2:0]rledout;
reg [24:0] count;
reg [1:0]shift_cnt;
initial
begin
count=25'b0;
rledout=3'b1;
shift_cnt=2'b0;
end
always @(posedge CLK_IN)begin
if(RST_N==0)begin
count <= 25'b0;
rledout <= 3'b1;
shift_cnt <=2'b0;
end
if(count == time1)
begin
count<= 25'd0;
if(shift_cnt==2'b10)begin
rledout <= 3'b1;
shift_cnt <=2'b0;
end
else begin
rledout <= {rledout[1:0],1'b0};
shift_cnt <= shift_cnt + 1'b1;
end
end
else
count <= count + 1'b1;
end
assign RGB_LED = rledout;
endmodule
そもそも、オンボードのフルカラーLEDの制御はどうするのか? という話ですが、上記のPDFを見ると 書いてあります。
R3 red
J14 green
P13 blue
