こんにちはこんばんは、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チカできました。満足です。
…
嘘です。
せっかくディスプレイがついているものを買ったので、これを使ってなんかをしたいですよね。今度やってみてまた書きます。
駄文失礼しました。それでは