Tang Nano 20KでLチカをやってみる

とりあえず始めてみる

 FPGAってなにができるの?そもそも何から始めればいいの??と矢継ぎ早に生まれる疑問はそのままに、とりあえずLEDを点滅させるところから始めてみる。
Tang Nano20kは元々書き込まれた命令に従ってか、MacBookと接続するとシーケンシャルウィンカーのようにLEDを光らせている。

[tang nano 9k その1] 公式チュートリアルにLチカさせてもらった
https://qiita.com/haihuiliyuyuan/items/b6c89b5295411b5ed70d

Tang nano 9Kを使いたい(1)
https://zenn.dev/nihinihikun/articles/87066301959b48

Tang Nano 20K Blink led
https://wiki.sipeed.com/hardware/en/tang/tang-nano-20k/example/led.html

習うより慣れろの精神で、とりあえず参考ページの内容をそのままコピペしてみる。(haihuiliyuyuanさん、ありがとうございます!!)

module led(
    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)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end
always @(posedge sys_clk or negedge sys_rst_n) begin // Toggle LED
    if (!sys_rst_n)
        led <= 6'b111110;
    else if (counter == 24'd1349_9999)       // 0.5s delay
        led[5:0] <= {led[4:0], led[5]};                         // ToggleLED
    else
        led <= led;
end

endmodule

Gowinの実行結果ウィンドウ(コンソール画面)には赤文字表記がずらずら現れる…。何これ??

ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_5_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_4_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_3_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_2_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_1_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_0_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 3 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'sys_rst_n_ibuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 7 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'sys_clk_ibuf' : IO_TYPE = LVCMOS18 in the same bank
Physical Constraint parsed completed with errors

元々基板上に乗ってるLEDの電圧は3.3Vのところ、自分で定義した電圧が1.8Vだったために生じたらしい。
要はデフォルトのままだったので修正が必要。

LEDのIO TypeをLVCMOS18からLVCMOS33へ変更してみる。今度はLED絡みのエラー表示が消えてくれた。
今度はうまくいきそう。
残すはsys_rst_nとsys_clkのみである。これらも同じように3.3Vへ変更してみる。
今度は今までと違うエラーメッセージが表示された。ピン間違えをしているみたいである。

ERROR  (PR2028) : The constrained location is useless in current package
ERROR  (PR2017) : 'sys_rst_n' cannot be placed according to constraint, for the location is a dedicated pin (SSPI)
Screenshot

なるほど。参照していたページではTang Nano 9Kをテーマとする記事だったので、そのまま踏襲したせいでエラーが生じていたみたい。
回路図中の割り当てピンを確認するとクロックの入力(sys_clk)は4番であった。
また基板上のタクトスイッチを使ってみようと思い、リセットの入力(sys_rst_n)は87番とした。
改めてPlace&Routeをダブルクリックすると、今度は赤いエラーが消えてくれた。

ボードに書き込んでみる

Double click Program Device to run the Programmer program、とあるので沿って進めてみる。

Screenshot

とりあえずPC側とTangNanoは繋がっているみたいだ。何も触らず、Saveボタンを押して先に進めてみる。
なお、Operationの項目については公式Wikiで下記のように書いてある。
よくわからないだけに、変に保存されて再起不能になるのだけは避けたいので、デフォルトのSRAM Program(電源切ったら書き込んだデータ消える)を選んでおく。

5.2. Burn to SRAM#
Normally this mode is used to verify biststream.

Because of its fast burning characteristics so the use of more, but of course the power will lose data, so if you want to power on the running program you can’t choose this mode.

Click the function box below Operation to open the device configuration interface, then select the SRAM Mode option in Access Mode to set to download to SRAM, and finally click the three dots box below to select our generated .fs bitstream file . Generally speaking, bitstream firmware file is in the impl -> pnr directory.
https://wiki.sipeed.com/hardware/en/tang/tang-nano-20k/example/led.html

書き込み実行すると、LEDの一つが点灯するようになった。
S2を長押ししてみると1つだけしか点灯していなかったLEDが続々と点灯するようになった。スイッチから指を離すと初期位置から点灯し始める。

おお…多分参考にしたプログラムは走ってぽいぞ?

コメントを残す

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

CAPTCHA