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