AtomではじめるVerilogプログラミング

この記事は Atom Advent Calendar 2016 の24日目の記事みたいです。

はじめに

こんばんは。元気ですか?僕は仕事やら論文やらの進捗がわるくて体調が悪化しています。そんなこんなで家族とはなれてスタバでThinkPadと向き合うクリスマスイブ。。。がんばっていきましょう。

えー皆様普段Verilogを読み書きするのにどんなエディタをお使いでしょうか。Vivado。そうですよね。そうなんです。でも前回の記事で解説したように、IceStormを使ってHDL合成する場合、どんなエディタを使えば良いでしょうか。

もちろんEmacsやVimを使うこともできますが、ここは1つ流行のAtomエディタを使ってみましょう。この記事では当該エディタをインストールする環境としてDebian GNU/Linuxを仮定していますが、WindowsでもMac OS Xでも同様に使えるはずだと思います。

環境整備

なにはともあれFPGAボードが必要です。この記事ではiCEstickを使います。Mouserから買えますが、2600円と安いので送料がかかってしまいます。なんかの発注ついでに買いましょう。

ice_1

次はソフトウェア環境を整備しましょう。まずAtomエディタをインストールしましょう。

$ wget -O atom.deb https://atom.io/download/deb
$ sudo dpkg -i atom.deb

その後いくつかAtom内から使われるDebianパッケージをインストールします。

$ sudo apt-get install gtkwave iverilog

iverilogはVerilogのシミュレータで、gtkwaveはシミュレーション後の波形を見るためのツールです。前者はVerilogの構文チェックにも使われます。

さらにAtomを起動して”Ctrl-,”を入力して設定タブを出していくつかパッケージをインストールしましょう。まずはVerilog関連のパッケージであるlanguage-verilogとlinter-verilogをインストールします。

verilog-atom

次にPlatformIOという統合開発環境を使うために、platformio-ide-terminalとplatformio-ideパッケージをインストールしましょう。

platformio-atom

上記のパッケージのインストールに完了すると以下のようにAtomの再起動が要求されます。

platformio-reboot

“Reload now”を選んで、Atomを再起動させましょう。すると以下のようにPlatformIOのWelcomeタブが表示されます。これで環境整備は完了です。

platformio

とりあえずプロジェクトを作ってみる

新しいプロジェクトを作ってみましょう。Welcomeタブから”New Project”ボタンを押下してみます。

platformio-new

プロジェクトの設定ウィンドウが出るので、以下のようにiCEstickボードを選択します。

setting-lattice

次に適当なディレクトリをプロジェクトディレクトリとして”led”というディレクトリを作って選択します。

setting-other

led

これでプロジェクトの設定ができました。”Process”ボタンを押下しましょう。

process

ここでなんやかんやツールチェーンを読み込むのでしばらく待ちましょう。その後以下のようなエラーが表示されてしまうでしょう。

error

これはまだプロジェクトディレクトリに何も設定されていないためです。びっくりせずにとりあえず×ボタンでエラーメッセージウィンドウを消しましょう。

ledプロジェクトのsrcディレクトリにファイルを追加しましょう。1つ目は”led.pcf”ファイルで、以下のようにポートの番号を列挙します。

set_io D1 99
set_io clk 21

次にVerilogでLチカを書きましょう。ledプロジェクトのsrcディレクトリに”led.v”ファイルを追加して、以下のようにコードを書いていみます。

module led #(parameter N = 29)(input clk, output D1);
  reg [N-1:0] cont;
  reg rstn = 0;

  always @(posedge clk)
    rstn <= 1;

  always @(posedge clk)
    if (!rstn)
      cont <= 0;
    else
      cont <= cont + 1;

  assign D1 = cont[N-6];
endmodule

iCEstickをPCのUSBポートに挿した上で、プロジェクトをアップロードしてみましょう。左ペインの右矢印ボタンを押下します。

upload

するとiCEstickボードのD1 LEDがチカチカしたら成功です!

より本格的なプロジェクト

もっとちゃんとしたプロジェクトの例を見てましょう。まずはサンプルプロジェクトをgit cloneしましょう。

$ git clone https://github.com/platformio/platform-lattice_ice40.git

その後、当該プロジェクトのplatform-lattice_ice40/examples/counter/ディクトリをplatformioのプロジェクトとしてオープンします。

platformio_open

open_counter

すると以下のようなcounterプロジェクトが登録されているはずです。

proj_counter

それではやはりiCEstickをPCのUSBポートに挿した上で、プロジェクトをアップロードしてみましょう。

upload_counter

すると以下のようにiCEstickのLEDにカウントアップされるはずです。

mov_counter

さらにターミナルを開いて、platformio run –target sim と入力してみましょう。
terminal

するとなんとシュミレーション結果の波形が表示されるではないですか。ちゃんとLEDがカウントアップされているタイミングが見えますね。

gtkwave

シミュレーションを実行するにはテストベンチファイル(counter/src/counter_tb.v)とgtkwaveの設定ファイル(counter/src/counter_tb.gtkw)を作る必要がありますが、そこさえ作りこんでしまえば後は快適にGUIから操作できそうです。

さいごに

IceStormやiverilog、gtkwaveコマンドを使えば、これのような開発環境はこれまでも使用することはできました。しかしAtomとPlatformIOをIDEとして使うことで、統合開発環境として使うことができ、ぐっと使いやすいと感じるのではないでしょうか。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中