2012年3月2日金曜日

ERBを使おう


eRubyとは、乱暴に言えばPHPのRuby版みたいなもの。道なりにRubyをインストールしていれば、eRubyの一実装であるerbというコマンドが既にインストールされている場合が多い(Debian系は別パッケージだったかも)。
さて、PHPに例えておいてなんだが、erbは決してHTML専用ジェネレータではなく、汎用テンプレートエンジンなのだ。単調な記述を繰り返さねばならないとき、ささっと使うと非常に便利。
例えばVerilogの6ビットのアドレスデコーダを記述すると、こんな感じ。
% 64.times do |a|
assign w_dec_addr[<%=a%>] = (w_addr[5:0] == 6'd<%=a%>);
% end
これをerbに食わせるとこうなる。
assign w_dec_addr[0] = (w_addr[5:0] == 6'd0);
assign w_dec_addr[1] = (w_addr[5:0] == 6'd1);
(中略)
assign w_dec_addr[62] = (w_addr[5:0] == 6'd62);
assign w_dec_addr[63] = (w_addr[5:0] == 6'd63);
FPGAならgenerate forとか使って気軽に冒険できるけど、どこでも確実に合成できるようにしようと思うと、ベタ書きになっちゃうのよね。

erbは引数にファイル名を与えなければフィルタとして動作するので、Vimのvisual modeと非常に相性が良い。編集中のファイルにeRubyのコードを混ぜ込み、vで範囲指定した状態で
:'<,'>!erb
と実行すれば、選択した行のみerbに通すことが出来る。失敗してもuでアンドゥできるので、ガンガン試してみよう。

0 件のコメント:

コメントを投稿