プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

Chisel入門2~開発環境の準備~

 やーやーやー。

 ハードウェアをScalaで書ける組み込み言語、Chisel3の入門インストール講座です。

 というわけで、面倒でもまずは開発環境を準備するところから始めよう。



 ごらんの番組は以下の内容でお送りいたします。


 
 

Chisel開発に必要な物

 以下の物が揃っていれば、すぐに開発を開始出来ます。

 JDKとか、Javaとか、IntelliJ IDEAとか見たこともない謎の横文字が並んでしまって大変申し訳ない。我慢してインストールに付き合ってください。

 Verilogを開発するOSはLinuxである可能性も高いから、WindowsとLinux(Ubuntu)で解説します。OSが分からない人は、ExcelがあるのがWindowsで、Excelが無いか、なんかパチモンっぽいのが動くのがLinuxです。


JDKのインストール

 JDKというのは、Chiselを動かすのに必要なソフトです。

 
 

Windows上で開発する人


 2019年からOracleのJDKは有償化されます。それに伴い、現在JDKは移行先の混迷期にあります。一応OpenJDKベースで書き直しましたが、信用はしないで下さい。

 無償のJDKとしては、OpenJDK以外にも、Adopt OpenJDKやAmazonのCorrettoがあります。

 

 OpenJDKをJDK Builds from Oracleからダウンロードし、任意の場所に展開して下さい。今回は、JDK11というバージョンのWindows版をC:\bin\jdk-11.0.1に展開しました。

 

 画像は2018年11月現在のキャプチャであり、今現在とは必ず違うので、臨機応変に対応して下さい。

f:id:nodamushi:20181126013942p:plain:w320

 JDK11のリンクを押すと、次の様な画面になります。

f:id:nodamushi:20181126013919p:plain:w320

 Windows用をダウンロード(32bitはありません)し、適当な場所に展開します

f:id:nodamushi:20181126013430p:plain:w320

 

 

Linux上で開発する人

 Linuxの人用です。Windowsの人は飛ばしてください。
 今回はUbuntu仮想環境を使いました。端末で以下を入力してください。CentOSやRed Hat Enterprise Linuxの場合はyumかな。

sudo apt-get install default-jdk

 あー、Windowsと違って楽でいいんじゃー。キャプチャ画像とかいらないよね?

 もし、管理者権限がない場合でも、JDKのダウンロードページからダウンロードし、適当なところに展開してパスを通せば使うことが出来ます。意味が分からない人は管理者に「JDKと、IntelliJ IDEAを入れてください」と連絡するのが早いです。

 

 

IntelliJ IDEAをインストールする

 IntelliJ IDEAはChisel開発もできるエディター(メモ帳)です。正確には統合開発環境と言います。

 Windowsの人も、Linuxの人もIntelliJ IDEAのダウンロードページからCommunity版(無料)をダウンロードしてください。Ultimate版は有料です。

f:id:nodamushi:20180204215731p:plain:w450


Windowsの人

 インストールをする際に、必ずしも画像と同じにならない場合があります。そういうときは焦らずに、画面に何が書いてあるのかを読んで、理解をしてから、手順を判断してください。
 
 インストーラを起動すると、次の様な画面になりますので、「Next」を押してください

f:id:nodamushi:20180204220819p:plain:w250

 
 インストールディレクトリを指定します。デフォルトのままで良いので、「Next」を押してください
f:id:nodamushi:20180204220824p:plain:w250

 
 これもそのままで、「Install」を押してください
f:id:nodamushi:20180204220829p:plain:w250

 
 暫く待機します。
f:id:nodamushi:20180204220837p:plain:w250

 
 お疲れ様です。インストール完了です。後述の「IntelliJ IDEAの初期設定(Windows、Linux共通)」へ進んでください。
f:id:nodamushi:20180204220845p:plain:w250

 
 

Linux(Ubuntu)の人

 ダウンロードしたファイルを適当なディレクトリに展開します。
 展開したら、展開したフォルダ/binにPATHを通します。
 パスを通したら端末を起動して以下をタイプ。

idea

 あー、楽なんじゃー。

 
 

 
 

IntelliJ IDEAの初期設定(Windows、Linux共通)

 IntelliJ IDEAでChiselが開発できるように初期設定を行います。

 初回起動時は以下の様な質問が聞かれます。(画像はLinux版)設定のインポートはすることないので、「Do not import settings」のままOKを押します。

f:id:nodamushi:20180204222051p:plain:w250

 
 ライセンスに同意する画面に映るので、全ての条項を読んで、Acceptを押してください。(一番下まで読まないとAcceptは押せません)
f:id:nodamushi:20180204222054p:plain:w250


 
 見た目をどうするかを聞かれるので、好きな様に選択してください。私は黒にしました。
f:id:nodamushi:20180204222100p:plain:w250



 ※Linuxのみ デスクトップエントリーを作るかどうか聞かれるので好きにしてください。
f:id:nodamushi:20180204222450p:plain:w250


 
 何を有効にするか聞かれます。そのままでも良いですし、画像の様に、Chisel開発に必要ない「Bild Tool」「Swing」「Android」「Plugin Development」はDisableにしても良いです。
f:id:nodamushi:20180204222640p:plain:w250


 
 重要 ScalaをInstallしてください。

※プロキシを設定してないと出ません。後からPluginでScalaを入れることも可能です。
f:id:nodamushi:20180204222813p:plain:w250

 

 以上で初期設定はお終いです。起動画面が立ち上がります。
f:id:nodamushi:20180204223004p:plain:w250

 
 
 プロキシが必要ない、もしくは、プロキシ設定しなくてもScalaがインストールできた人は、次のプロキシ環境下:●●の節は飛ばして下さい。

 プロキシ設定が必要な人は、次の説も読んでください。 

プロキシ環境下:プロキシの設定

 会社など、プロキシを通さないといけない環境の人は、プロキシ設定をしてください。プロキシ設定はConfigure→Settingsから開けます。

f:id:nodamushi:20180204233043p:plain:w250

 
1. IntelliJ IDEAのプロキシ設定。ご自分の環境に合わせて選択してください。
f:id:nodamushi:20180204233137p:plain

 
2. Scalaプラグインがをインストール済み:sbtのプロキシ設定。VM parametersにご自身の環境に合わせて以下を入力してください。まだScalaを入れていない場合は、入れてから設定します。(入れ方は後述するので、慌てないでください)
※URLとPortは自分の環境に変えてください

-Dhttp.proxyHost=URL
-Dhttp.poxyPort=Port
-Dhttps.proxyHost=URL
-Dhttps.proxyPort=Port

ユーザー名、パスワードが必要な場合は、-Dhttp.proxyUserと-Dhttp.proxyPassword、-Dhttps.proxyUser、-Dhttps.proxyPasswordも追加。
f:id:nodamushi:20180204233313p:plain

 
 

プロキシ環境下:プロキシが認証局証明書を上書きする場合

 プロキシがHTTPSなどの証明書を勝手に妙な証明書に変えてる場合なんかは、かなり面倒です。糞ニートを名乗ってるのに、まるで体験した様な書き方ですね。(遠い目
 こういう環境かどうかはFirefoxを入れてみて、Googleが開けるか確認してみてください。開けなければ妙な証明書に書き換えています。
 こういう場合は、JDKと、IntelliJの中にあるJREにkeytoolを使って認証局証明書を登録するという作業をする必要があります。
 が、上↑の文章意味分からないですよね。大丈夫です、情強を名乗ってる人でもほとんど分かりません

 分かる部署に押しつけましょう。


 
 

プロキシ環境下:Scalaプラグインを入れる

 プロキシ設定をしてなかったせいで、最初にScalaを入れられなかった場合は、Scalaプラグインを入れてください。プロキシ設定の時と同じく、Configure→Settingsで設定画面を開きます。
f:id:nodamushi:20180204233043p:plain:w250

 
 Pluginの項目を開いたらBrowse repositories...をクリックしてください。
f:id:nodamushi:20180204235047p:plain:w400



 Scalaというプラグインを探し、Installをしてください。検索ボックスにScalaと打ち込むと探しやすくなります。
f:id:nodamushi:20180204235158p:plain:w400
 

 入れたら、sbtのプロキシを設定します。VM parametersにご自身の環境に合わせて以下を入力してください。(再掲)
※URLとPortは自分の環境に変えてください
ユーザー名、パスワードが必要な場合は、-Dhttp.proxyUserと-Dhttp.proxyPassword、-Dhttps.proxyUser、-Dhttps.proxyPasswordも追加。

-Dhttp.proxyHost=URL
-Dhttp.poxyPort=Port
-Dhttps.proxyHost=URL
-Dhttps.proxyPort=Port

f:id:nodamushi:20180204233313p:plain
 

IntelliJ IDEAでChiselを動かしてみる

 IDEAが起動すると、以下の様な画面になります。とりあえず、「Create New Project」をクリックしてください。
f:id:nodamushi:20180204223146p:plain:w250

 
 Scala→sbtと選択し、「Next」ボタンを押してください
f:id:nodamushi:20180204223319p:plain:w400


 
 Nameにプロジェクト名を適当に入れてください。保存場所が気に入らなければLocationを適当に変更してください。Windowsの人はもう一つすることがあるので、まだFinishを押さないでください。Linuxの人はFinishを押してください。
 f:id:nodamushi:20180204223408p:plain:w400


 
 ※Windowsの人のみ
 Windowsの場合、JDKが自動的に入力されません。なので、自分で最初にインストールしたJDKを教える必要があります。
f:id:nodamushi:20180204223542p:plain:w400


 
 ※Windowsの人のみ
 JDKの横にあるNewボタンを押すと、ポップアップが開くので、インストールしたJDKを選択してください。その後、Finishを押すと、プロジェクトが作成されます。

f:id:nodamushi:20181126020408p:plain:w400

 
 
 
 しばらくすると以下の様な画面になります。初回はかなり時間かかりますから、コーヒーでも飲んでてください。
f:id:nodamushi:20180204223800p:plain:w250


 
 下でクルクル回ってた奴が、こんな感じになればOKです。
f:id:nodamushi:20180204223944p:plain:w400


 
 左上にあるProjectの中から、build.sbtを探してダブルクリックします。
f:id:nodamushi:20180204224056p:plain

 
 
 build.sbtに以下の内容を追加してください。この設定を書くことで、このプロジェクトでChisel3が使える様になります。なお、この記事はChisel3.0の時代の記事なので、3.1とか3.2とか、4.0とかが出ていたら、libraryDependenciesを必要に合わせて変更してください。GitHub - freechipsproject/chisel3: Chisel 3で確認できます。

scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-language:reflectiveCalls")
val chiselGroupId = "edu.berkeley.cs"
libraryDependencies ++= Seq(
  chiselGroupId %% "chisel3" % "3.0.+",
  chiselGroupId %% "chisel-iotesters" % "1.1.+"
)
resolvers ++= Seq(
  Resolver.sonatypeRepo("snapshots"),
  Resolver.sonatypeRepo("releases")
)

f:id:nodamushi:20180204224620p:plain:w400


 
 ファイルを保存すると、Linuxだったら上の方に、Windowsだったら下の方(?あやふや)に「Use auto-import」がうんうん、とかいう質問が出てくると思う(ごめん、キャプチャ忘れてた)ので、「Use auto-import」を有効化してください
 出てこない、よく分からん、私の様に見逃したという人は、メニューバーのFile→Settingsをクリックして設定画面を開き、sbtの項目を開いて、「Use auto-import」にチェックを入れてください。
f:id:nodamushi:20180204225049p:plain

 

 
 先ほどクルクル回ってた奴の横にある、リロードみたいなボタンを押します。 再び処理にかなり時間がかかるので、お茶でも飲んで待っててください。
f:id:nodamushi:20180204224821p:plain

 
 
 処理が完了すると、External Library(外部ライブラリ)の項目がずらっと増えます。これで、プロジェクト内でChisel3が使える様になりました。
f:id:nodamushi:20180204224950p:plain:w250

 

 プロジェクトのsrc/main/scalaフォルダを右クリックし、ポップアップメニューの中からNew→Scala Classを選択します。
 f:id:nodamushi:20180204225610p:plain:w400

 
 
 Helloと入力し、OKをクリックします。
f:id:nodamushi:20180204225829p:plain

 
 
 Hello.scalaが作成されてエディタが開くので、以下の内容を打ち込んでください。前回脳汁飛ばしながら紹介したコードです

import chisel3._
import chisel3.core.UserModule

class MyPort extends Bundle{
  val A =  Input(Bool())
  val B =  Input(Bool())
  val C = Output(Bool())
  val D =  Input(Bool())
}
class Hello extends UserModule{
  val S = IO(new MyPort)
  val M = IO(Flipped(new MyPort))
  S<>M
  M.D := S.A | S.D
}
object Hello extends App{
  chisel3.Driver.execute(args,()=>new Hello)
}

f:id:nodamushi:20180204230226p:plain:w400

 
 
 次に、sbt shellを開きます。sbt shellという文字が画面内に見つからない場合は、画面左下の四角いボタンを押して、sbt shellを選択してください。
f:id:nodamushi:20180204230547p:plain

 

 
 sbt shellが暫く立ち上がるのに時間がかかります。動きが止まって [IJ]sbt:プロジェクト名> という文字が出たら立ち上がり完了です。
 立ち上がりを確認したら、Chiselを動かしてみましょう!
 「run Hello」と打ち込んで、Enterを押してください。
f:id:nodamushi:20180204230818p:plain

 

 
 問題が起こらなければ、以下の図の様に [success ] の文字が出てきます。
f:id:nodamushi:20180204231025p:plain

 

 
 では、実際に生成されたVerilogファイルを見てみましょう。
 プロジェクトを右クリックして出てくるポップアップメニューから、Windowsなら「Show in Explorer」を、Linuxなら「Show in Files」を選択してください。
f:id:nodamushi:20180204231322p:plain:w250

 
 
 すると、プロジェクト内にHello.vというファイルが生成されているはずです。できてますよね!?おめでとうございます!
f:id:nodamushi:20180204231424p:plain:w250

 
 実際に中身を開いてみるとこのようなVerilogファイルになっていました。

`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif

module Hello( // @[:@3.2]
  input   S_A, // @[:@4.4]
  input   S_B, // @[:@4.4]
  output  S_C, // @[:@4.4]
  input   S_D, // @[:@4.4]
  output  M_A, // @[:@5.4]
  output  M_B, // @[:@5.4]
  input   M_C, // @[:@5.4]
  output  M_D // @[:@5.4]
);
  wire  _T_13; // @[Hello.scala 14:14:@11.4]
  assign _T_13 = S_A | S_D; // @[Hello.scala 14:14:@11.4]
  assign S_C = M_C;
  assign M_A = S_A;
  assign M_B = S_B;
  assign M_D = _T_13;
endmodule

 

おわりに

 いかがでしたでしょうか。
 JDKとか言う謎の物と、IntelliJをインストールさえすれば、開発開始出来るので意外と簡単だったのではないでしょうか?

 まぁ、この記事書いた私はすっげー疲れましたが。

 Chisel開発の最初のインストールの段階で躓く、ということが、この記事で解消出来たなら幸いです。
 






旧情報(Oracle JDKのインストール)

 Oracle JDKが有償化される前に記事にしていた内容です。(OpenJDKを使って上手くいった場合は読む必要ありません)

 インストールをする際に、必ずしも画像と同じにならない場合があります。そういうときは焦らずに、画面に何が書いてあるのかを読んで、理解をしてから、手順を判断してください。

 JDKのダウンロードページから、Windows用のインストーラをダウロードをしてください。

 

 ダウンロードする前に、Accept License Agreement を選択してください。日本語だと「使用許諾契約を受け入れる」と言う意味です。
f:id:nodamushi:20180204210412p:plain:w250

 

 ダウンロードが完了したら、ダウンロードしたファイルをダブルクリックして実行してください。ダブルクリックをして、次の様な警告が出た場合は、「はい」を押してください。この図はWindows10なので、OSがWindows7やWindows8の場合はこの通りになりません。

f:id:nodamushi:20180204212027p:plain:w250

 
 少し時間がかかりますが、暫くするとセットアップ画面がでますので、「次へ」を押してください

f:id:nodamushi:20180204212524p:plain:w250

 

 「次へ」を押してください

f:id:nodamushi:20180204212533p:plain:w250
 

 暫くすると、次の様な画面になります。「ブラウザでJavaコンテンツを有効にする」のチェックを外してください。(会社のシステム等でブラウザでJavaが必要な場合を除く) その後、「次へ」を押してください。
f:id:nodamushi:20180204212544p:plain:w250

 

 暫く待機します。

f:id:nodamushi:20180204212648p:plain:w250


 おめでとうございます。無事、インストール完了です。「閉じる」を押してください。

f:id:nodamushi:20180204212808p:plain:w250