2014年9月27日土曜日

Software Design 2014年10月号に寄稿させていただきました。

すでに発売日から10日近く経過しており機を逸してる感もありますが、技術評論社の Software Design 誌に寄稿させていただきました。

第二特集の「サーバの目利きになる方法」で約20ページほど解説させていただきました。その他にも読み応えのある記事がいっぱい並んでいますので、まだお求めになられていない方は書店で手にとってみていただけますと幸いです。もちろん今から Amazon.co.jp でも OK です。また、10月18日には続編が掲載されます。

もともとのきっかけは今年4月に開催された qpstudy 2014.04 〜俺の屍を超えて行け、でも踏まないで〜 ででした。 IT インフラエンジニアとして、今日のIAサーバと向き合うときのポイントを解説してほしいという依頼を同運営からいただき、説明させてもらいました。突貫工事で作ったスライドでしたが、かけた時間に対して、スライドのビュー数も思った以上に伸びました。



いまはすごいアプリをがんがん作る開発者がいっぱいいるのですが、知り合いと吞んでいて最近話題になるのが、最近のイケイケな動向(ミドルウェアやフレームワークなど)に強いエンジニアでもコンピュータのことはあまり知らないエンジニアが増えているという話をよく聞きます。それは、 qpstudy 2014.4 でプレゼンをしたときのその場のフィードバックや関連するタイムラインなどにも感じました。

2010年頃、自分がシステム構築ビジネスのプリセールスSEとして活動していたとき、システム構築ビジネスでサーバの構成や見積もり、導入といった話をうまくまとめたバイブル的な書籍がないか?と思い探してみたことがあります。今ではあれば LINE 株式会社の佐野さまが当初イメージしたものにいちばん近い書籍を出されており、今回の執筆にあたってはページ数制約のなかでもう一歩技術側に踏み込んだ内容にバランスできればいいなと思って取り組みました。




インフラエンジニアの教科書
佐野 裕
固定リンク: http://www.amazon.co.jp/dp/4863541333

残念ながら、私がバイブルを探した”その時”には、自分が欲しいと思った本は見当たりませんでした。今回は機会をいただいて、そのときに自分が読みたかった書籍の10%ぐらいの内容をまとめられたかな?と思います。

というわけで、私も別にそれほどハードウェアや機器選定で何かすごい経験があるわけでもないですし、諸事情により調査に時間をかけたり集中して原稿に取り組むことができなかったので、自分自身として内容に満足していないのですが、かけた時間相応でまとめられたかなと思っています。正直特集名が「サーバの目利きになる方法」になっているゲラを見た、目利きになんてなれていない私は、動揺を隠せませんでしたし、今でもドキドキします。

各エリアの専門家からしたらオママゴトのような内容になっていますし、私の Twitter タイムラインにいる方や Software Design 誌を長く読まれている方がったら当たり前のことも多いと思いますが、そうではない、若手のエンジニアの方やアプリケーションサイドのエンジニアの方に、サーバや構成パーツについて参考になったり興味がわいたり、ということがあれば嬉しいです。

今回の記事やスライドに着手するきっかけを下さった qpstudy の皆さん、また今回、2号に渡り約40ページものページを託してくださった Software Design 編集部の皆さんには大変感謝しています。

特に SD 編集部の皆さんには、、、、二ヶ月にわたり締め切りを守れずに申し訳ありませんでした。私が技術評論社ではじめての原稿をやらせていただいた機会は、他の方の原稿が落ちたときの代打でした。これまで数回にわたって代打を務めさせていただき得た信頼を、ここ1年でいくらか失ったのではないか、と反省しています。次号の入稿が終わったらモツ鍋を食べにいきましょう。きっと乾杯の前にお詫びすると思います。 (T_T)

2014年9月4日木曜日

Nexys 4 と ISE Design Suite で何か作ってみる(後編)

前編では、新しいプロジェクトを作って、プログラム可能なファイルを生成するところまでを見てみました。続いて実際に FPGA にプログラムしてみます。

■ Micro USB コネクタによる JTAG 接続

Nexys 4 を Micro USB ケーブルで開発機に接続します。このためには、あらかじめ Nexys 4 上のジャンパを設定しておきます。設定方法は Nexys 4 のリファレンスマニュアルに書いてありますが、参考までに引用しておきます。


JTAG を利用するには JP1 の真ん中の2本のピンをショートさせておきます。ジャンパの設定を終えたら Micro USB ケーブルで開発機に接続し、 Nexys 4 の電源スイッチをオンにします。

今回は VMware を使っているため、仮想マシンに USB ターゲットを接続します。



また、初回接続時は USB Serial のドライバがロードされるまでにしばらく時間がかかりました。 うまく接続できていれば、デバイスマネージャで COM ポートが確認できるはずです。


■ いざプログラム

Project Navigator に戻ります。先ほど実行した Generate Programming File の下にある、 Configure Target Device のツリーをひらき、 Generate Target PROM/ACE File をダブルクリックします。


下記の警告が表示されますが無視します。



ISE iMPACT というプログラムが立ち上がってくるので、ここで iMPACT Flows から Boundary Scan を選択し、左側ペイン内を右クリックしてショートカットメニューから Add Xilinx Device をクリックします。

 
FPGAのプログラムに使用したい .bit ファイル、つまり先ほど生成したロジックを含むファイルを選びます。ここでは test.bit ファイルがありますのでこれを選択します。



iMPACT の右側ペインに表示された Xilinx のチップアイコンを右クリックして、ショートカットメニューから Program を選択します。



上記操作で、 FPGA へのプログラムが開始され、プログラムが完了すると Program Succeeded という表示がなされます。

■ 動作テスト

FPGA へのプログラムが完了すると、 DONE LED(FPGA右上)が点灯し、組んだロジックが動作しはじめます。 SW0 と SW1 を操作すると、対応する LED が点灯/消灯するのが確認できます。



なお、今回は FPGA に通電後、 JTAG ケーブルを通じて直接プログラムしました。ボードの電源を落とすとプログラム内容は消えてしまいますので、改めてアップロードする必要があります(もしくはコンフィグレーション ROM に bit ファイルの内容を書き込んで、電源オン時に自動ロードされるようにします)。





Nexys 4 と ISE Design Suite で何か作ってみる(前編)

FPGA いじりをはじめるにあたって色々調べたのですが、とりあえず簡単なロジックを FPGA にプログラムするまでの手順、とくに今回買った Nexys 4 向けの具体的なものが見当たらなかったので、ここにメモがてら残しておくことにします。

今回は作業環境とライセンスの都合上 ISE Design Suite を使い、真っ白なプロジェクトから実際に Nexys 4 向けの bin ファイルを生成し、プログラムしてみます。

これ見れば誰でも FPGA いじり始められますね!みんなあそぼうず。



■ 新しいプロジェクトを作成する

まず ISE Project Navigator を起動し、 New Project... をクリックします。


次にプロジェクト名を指定します。今回は myproj1 としました。またプロジェクトの配置先フォルダを指定しました。プロジェクトの配置先フォルダに myproj1 というサブフォルダが作成され、その中にプロジェクト一式が保存されるようです。


次の画面ではターゲットの FPGA のモデルを指定します。 Nexys 4 の場合はリファレンスマニュアル(PDF)およびサイトの表記から XC7A100T-1G324C というチップだとわかりますので、これにあわせて選択します。なおスピードは -1 が遅い、 -3 が速いモデルで、 324C というのは 324 ピンの BGA パッケージであることを示しています。



■ 制約ファイルを追加する

プロジェクトが作成できたら、次に、プロジェクトに制約ファイルを追加します。 myproj1 を右クリックして Add Copy of Source... を選択します。右側に + マークが付いたアイコンがありますので、これを押してもよさそう。



Nexys 4 のサイトから入手した UCF ファイルを指定します。




■ 新しい VHDL ファイルを作成する

次に、プロジェクトに新しい VHDL ソースファイルを追加します。 New Source... をクリックします。

ファイルの種類として VHDLを選択しました。また VHDL ファイル名はとりあえず test.vhdl としてみます。



Define Module というダイアログが表示されますが、とりあえずここはそのまま。



ウイザードを終了すると、下記のようなからっぽのテンプレができています。



■ ロジックを書いてみる

早速何かかいてみます。 SW0 がオンだったら LED0 を点灯させ、 SW1 は逆にオフのときに LED1 を点灯させます。



■ 制約ファイルを編集する

ここで SW とか LED というポート(各2ビット)を使っていますが、このポートが FPGA のどのピンに対応しているかを示すため制約ファイルを編集します。 Nexys4_Master.ucf ファイルで以下の行を有効化します。

NET "sw<0>"            LOC = "U9"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L21P_T3_DQS_34,                    Sch name = SW0
NET "sw<1>"            LOC = "U8"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_25_34,                            Sch name = SW1


## LEDs
NET "led<0>"            LOC = "T8"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L24N_T3_34,                        Sch name = LED0
NET "led<1>"            LOC = "V9"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L21N_T3_DQS_34,                    Sch name = LED1



■ 論理合成、 bit ファイルの生成

ここまでできたら下記スクリーンショット中の ▶ ボタンをクリックしてプロジェクトを Implement してみます。画面下部にログが表示されます。

 
Implement が終わったら、次は Generate を行います。 test - Behavioral (test.vhdl) を選択した状態で、下の Process: から Generate Programming Fileを選択します。



最終的に Process "Generate Programming File" completed successfully と表示され、先の Generate Programming File の左側に緑色のチェック印が出れば OK なようです。これでとりあえず FPGA にアップロードできそうなファイルができました。

■ 後半編へ

後編では、今回生成した bit ファイルをアップロードしてみます。

Nexys 4 サイトから入手できるファイル

今回買ってみた FPGA トレーニングキット Nexys 4 の使い方は、販売元の Digilent 社のサイトにいろんな情報や、デザインに使うためのファイルがあります。


■ サイトを覗いてみる



ページ上部は製品の仕様などが書かれていますが、このページのいちばん下を見ると、実際にいじくるために参考となる、必要となるファイルが置かれています。


■ サイトから入手できるファイル(特に大事なもの)


Nexys 4 reference manual
製品マニュアルです。先のブログ記事に購入したパッケージの写真をのせましたが、製品にはマニュアルが含まれていないので、このファイルをダウンロードして参照することになります。 FPGA への電源供給方法やプログラミング方法のほか、各種 I/O がどのような仕様になっているか等も解説されているので、このファイルを一通り見ると、このボードでどういう I/O ができるかは一通り判るようになっています。

Nexys 4 schematics
トレーニングボードの配線図。

Nexys4 Master UCF File for ISE designs
Nexys4 Master XDC File for Vivado designs
これらのファイルは制約ファイルと呼ばれるものだそうです。 Nexys 4 は ALTRIX-7 を載せたトレーニングボードですが、 FPGA から出ているピンからは各種 I/O に接続されています。制約ファイルには、この FPGA ピンと基板上の I/O の対応が記述されています。


■ 制約ファイルを見てみる
 
各ピンからどの I/O に接続されているかは先のリファレンスマニュアルや配線図をみるとわかるのですが、デザイン環境で作ったロジックを実際の I/O ピンに割り当てるための定義サンプルがこのファイルに含まれています。UCF ファイルは今回利用する ISE DS
 用、XDC ファイルは新しいデザイン環境である Vivado DS 用のファイルです。 UCF ファイルの中を覗いてみると

## Clock signal
#NET "clk"   LOC = "E3"    | IOSTANDARD = "LVCMOS33";                    #Bank = 35, Pin name = IO_L12P_T1_MRCC_35,                    Sch name = CLK100MHZ
#NET "clk" TNM_NET = sys_clk_pin;
#TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 100 MHz HIGH 50%;

## Switches
#NET "sw<0>"            LOC = "U9"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L21P_T3_DQS_34,                    Sch name = SW0
#NET "sw<1>"            LOC = "U8"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_25_34,                            Sch name = SW1
#NET "sw<2>"            LOC = "R7"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L23P_T3_34,                        Sch name = SW2
#NET "sw<3>"            LOC = "R6"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L19P_T3_34,                        Sch name = SW3
#NET "sw<4>"            LOC = "R5"    | IOSTANDARD = "LVCMOS33";        #Bank = 34, Pin name = IO_L19N_T3_VREF_34,                    Sch name = SW4


こんな感じの定義が並んでいて、上記の部分では水晶が E3 というピンに、スイッチは U9, U8, R7, R6, R5... というピンに繋がっていることがわかります。ここで先の Reference Manual を見てみましょう。こちらでもやはり、 E3 が 100MHz の水晶発振子に接続されていることが確認できます。



この制約ファイルは全てコメントアウト状態になっていますが、たとえば CLK の部分をコメントアウトするとVHDL などから CLK というピンが見えるようになり、 sw<0> 〜 sw<3> のコメントアウトを解除してあげた制約ファイルをプロジェクトファイルに追加すると、 から sw(0)〜sw(3)  という形で各ポートにアクセスできるようになります。

仮想マシン上で Vivado Design Suite が使えない

先日 FPGAトレーニングキットを買ったわけですが、さっそくひとつ目の罠にはまりました。仮想マシン上で Vivado Design Suite が使えないんです。。。これから Xilinx FPGA に手を出す方はお気をつけください。

Xilinx の開発環境はいま下記のふたつがあります。
  • Vivado Design Suite
  • ISE Design Suite

このうち ISE Design Suite は過去のバージョンのもので、2013年に機能追加を終えてメンテナンスフェーズに入っています。現在は Vivado Design Suite がメインストリームということのようです。

それで、新しい Vivado Design Suite をインストールしてみたのですが、動かしてみたら、まさかのライセンスがアクティベートできない罠にはまりました。

Vivado 2013.3 can't find license

Vivado DS, ISE DS ともに無償でダウンロード可能で、論理合成などの機能を無償で利用するためには Xilinx のサイトで登録の上 WebPack ライセンスを取得します。 ISE DS の無償ライセンスはフローティングライセンスが取得できるのですが、 Vivado DS の無償ライセンスはノードロックになっていて、しかもどうやら VMware の MACアドレスを検出して弾いているっぽいですね。。。。

私は MacBook Air 上で VMware Fusion を動かして Windows や Linux を動かしているので、上記の制限にひっかっかります。この制限は次期バージョンの 2014.03 で取り除かれる予定、とあります。

ちょっと触ってみた感じ新しい Vivado のほうがインターフェイスが良いし、複数のツールがひとつの開発環境に統合されているようで具合よいのですが、今回買った Nexys 4 は ISE DS でも対応できます。

先のディスカッションを見ると Xilinx の窓口に問い合わせをすると Vivado DS のフローティングライセンスを出して対応してくれたりするようですが、今回はとりあえず ISE DS にダウングレードして、通常フローで取得できるフローティングライセンスを使うことにしました。

2014年9月3日水曜日

FPGAトレーニングキットを購入

突然ですが FPGA トレーニングキットを買ってみました。

大学生時代は「ミドルウェアより下のレイヤには絶対手を出さないぞ」と思っていたのに、気付けば OS やら VMM のレイヤに取り憑かれ、就職して暫くまでは「ソフトウェアより下のレイヤには絶対に手を出さないぞ」と思っていたのに、気付けばドライバやらマイコンをいじりはじめ、と興味の対象が順番に低レイヤにおち続けている hasegaw です。今回はどうして FPGA 買っちゃったのかについてでもポロっと書いておこうかなと。

■ きっかけはまさかの Minecraft


ある日偶然ネット上でみかけたのが Minecraft 上でぷよぷよを実装しちゃったという動画でした。 Minecraft って全部正方形で構成されてる雑ゲーだと思ってたんですが、ここで Minecraft に対する認識を改め、 20 ドルほど出して Win/Mac の製品版ライセンスやら iOS 版のアプリやらを買い始めます。

解説動画もあったので見てみると、レッドストーン回路なるものがゲーム上に存在して、そこで論理回路が自在に組める仕組みになっているそうで(さすがに先の動画は素の Minecraft では厳しいようですが)。もちろん複雑なものを作るのは大変みたいですが、下手な”高レベルなブロック”を組み込むよりも、ゲーム上で論理回路を組めるようしておこうって発想はおもしろいですね。

■ 回路シミュレータで遊びはじめる


Minecraft で遊んでいたりもしたのですが、 iPad で使える数百円の回路シミュレータで遊んでいるうちにもっと大きな回路が書きたくなってきたりして、最初はブレッドボード上にでも組もうかと思ったのですが、回路が複雑になってくると配線引き回すのも大変なので結局 FPGA に移ることにしました。

■ FPGA トレーニングキットを購入

ハードウェアもロジックもまったくの素人ですが、今回買ってみたのは Digilent 社の Nexys 4 です。 ALTERA ベースだと DE0 などのボードが1万円前後で手にはいる?ようですが個人的には Xilinx ベースが良かったので、適当なボードを探していたら Digilent 社の Nexys 2/3 が入門向けとして良さそうでした。 Nexys 3 だと Spartan-6 が載っているということですが、これだと一世代古いチップになります。今は Nexys 4 という、 ARTIX-7 搭載モデルが出ていたのでコレにすることにしました。





まだド素人がボードを買っただけの状態ですけど、 Nexys 4 は前世代と比べると 7 セグやスイッチの数が倍増しています。また、購入前にいろいろ調べていると、 Nexys 3 だと 1080p のビデオ信号を出そうとすると性能が足りないっぽいので、どうせなら新しいモデルを買っておくことにしました。 Nexys 4 は Nexys 3 と比べて 4000〜5000 円ほどUPですが、 I/O が増えて FPGA クロックも高くなっていれば十分にその価値はあるんじゃないかと思います。

ついでに Nexys 4 だと別売の JTAG ケーブルを買ったり工作したりせずとも、 JTAG として使える Micro USB ポートがあります。つまりは手許の PC におもむろに USB 接続すると JTAG 接続状態になるわけです。 4000~5000 円の追加投資でここまで性能アップ&お手軽になるのなら全然アリですね。



Nexys 4 ピンポイントの情報源があまりなくて不安ですが、 Digilent のサイトからダウンロードできるマニュアルは丁寧(?)に書かれているので、ピンポイントな解説や書籍がなくてもいじれそうで安心しています。一点ひっかかるとしたら ARTIX-7 になると BGA パッケージしかないので、今後何か基板を製作しようと思ってもたぶん自分でパーツ実装できないという問題はありそうです。 FPGA パッケージひとつで1万円ぐらいするみたいだし。まあ、何か基板を製作するような事になったら、そのときは Spartan ベースでやるなりすればいいでしょう。



国内でも取り扱いがある代理店はいくつかあるようですが、結局 Digi-Key から買いました(本体価格 約31000円+諸経費にて合計38000円弱)。日本時間で金曜日の日中に注文したら、その夜にはミネソタから発送され、月曜日の日中にはヤマトが自宅まで配送してきてくれました。アメリカから通販したのって今回が初めてですが、72時間ぐらいで届いちゃうってすごいですね。

いままで経験がない分野なのでワクワクしてますが、果たしてどこまで遊べるか。。。。何かできたらまた書きたいと思います。