こんにちはこんばんは、t-ngtnです。

今回はTang Nano 9Kという小さくて安価なFPGAで遊んでみたいと思います。筆者はFPGAはわりと触ったことがあるのですが、普段はXilinx(現AMD)のボードを使っているので他のベンダーのボードは初めてです。わくわく。


準備

まずボードの購入ですね。Amazonで買いました。なんとなくディスプレイが付いているものにしました。Amazonリンク


次に、FPGAボードにカスタムHWをプログラムするツールの環境構築をしていきます。Tang Nano 9KはGowinのチップが乗っているのでGowinのツールが必要です。この辺の設定は以下のブログを参考にさせていただきました。

ツールをダウンロードして、ライセンスをもらいました。


これで使えそうです!!


また、今回はSystem Verilogを直接書くのではなく、VerylというHDLを使ってみます。これはdalanceさんが作っているめちゃすごいHDLです。最終的にSystemVerilogにトランスパイルされます。LSPが実装されていたり、諸々の開発環境が整備されています。

公式ドキュメントにしたがってインストールしました。

The Veryl Hardware Description Languageのインストール手順


Lチカをしよう!

Verylでコードを書く

Verylにてプロジェクトを作成し、以下のコードを用意します。

module Blink (
    clk: input  clock   ,
    rst: input  reset   ,
    led: output logic<1>,
) {
    var counter: logic<26>;

    always_ff (clk) {
        if_reset {
            led     = 0;
            counter = 0;
        } else {
            counter = counter + 1;
            if (counter == 0) {
                led = ~led;
            }
        }
    }
}

veryl buildをすると以下のSystemVerilogのコードが生成されます。

module blink_Blink (
    input  logic         clk,
    input  logic         rst,
    output logic [1-1:0] led
);
    logic [26-1:0] counter;

    always_ff @ (posedge clk, negedge rst) begin
        if (!rst) begin
            led     <= 0;
            counter <= 0;
        end else begin
            counter <= counter + 1;
            if ((counter == 0)) begin
                led <= ~led;
            end
        end
    end
endmodule
//# sourceMappingURL=blink.sv.map

いい感じですね!


Gowinでプロジェクトを作ってうんぬんかんぬん

今回は先ほど紹介したTang Nano 9k で開発を始めるためのメモを参考にしています。

公式のLEDを光らせるチュートリアルもあとから発見しましたが、遅かった…。

記事の通り、プロジェクトを作成していきます。

チップを選んで、

ファイルを置いていきます。

Physical Constraints Fileは以下のようにしました。

IO_LOC "clk" 52;
IO_PORT "clk" IO_TYPE=LVCMOS33;

IO_LOC "rst" 4;
IO_PORT "rst" IO_TYPE=LVCMOS33 PULL_MODE=UP;

IO_LOC "led[0]" 10;
IO_PORT "led[0]" IO_TYPE=LVCMOS18 DRIVE=8;

また、Timing Constraints Fileは以下のようにしました。(あってるのか、、?あんまりわからず)

create_clock -name clk -period 37.037 -waveform {0 18.518} [get_ports {clk}]

あとはRun Place & Routeをしてエラー等がなければOKです。(なかったのでOKです!!(?))


プログラムしてLチカ!

これで準備が整いました。あとは実際にやるだけですね。

Tang Nano 9KをPCにUSBで接続します。

ToolsからProgrammerを開いて、GW1NR-9Cが接続されていることを確認したらProgram/Configureでプログラム!

おお~、LEDがチカチカしています。成功です!

おわりに

無事Lチカできました。満足です。

嘘です。

せっかくディスプレイがついているものを買ったので、これを使ってなんかをしたいですよね。今度やってみてまた書きます。

駄文失礼しました。それでは