VHDLを整形(format)したい

VHDLを記述していると、とくにXilinxのISEではコードの整形が結構めんどうです。EclipseだとShift+Command+Fとすると、自動的に指定したルールにもとづいてフォーマットしてくれて、authorによらず統一的な見た目にできますが、残念ながらEclipseのVHDLプラグインはいいものがありません。 そこへくると、Emacsはさすが機能豊富で、整形機能付きの「VHDLモード」を持っています。 MacにインストールされているEmacsでは、.vhdや.vhdlという拡張子のファイルを開くと自動的にVHDLモードになり、 syntax coloringをしてくれます。このモード内で、

Ctrl+C をしたあと、 Ctrl+B

すると、コードが整形されます。以下がその例。

Emacs VHDLモードのオフィシャルページはEmacs VHDL Modeにあります。 作者やメンテナのReto ZimmermannさんとRod Whitbyさんに感謝! Thank you Reto and Rod for very nice contribution, the Emacs VHDL mode!

[tmkm-amazon]4774156515[/tmkm-amazon]

コマンドラインからバッチ処理(スクリプティング等で利用する)

以下のようにすると、emacsの画面そのものは起動せずに、ファイルを開いて整形した後、保存して自動終了してくれます。
emacs -batch -l ~/.emacs (整形したいファイル名) -f vhdl-beautify-buffer

例:
emacs -batch -l ~/.emacs SpaceWireCodec.vhdl -f vhdl-beautify-buffer

HongoScriptsから利用する

HongoScriptsに入っている、hsVHDLBeautifyというコマンドを使うと、下記の「改行コード問題」や「process~begin一行に入っている問題」を自動的に解決したうえで整形を実行できます。まだHongoScriptsをインストールしていない人は、Homebrewをインストールしてから、
brew tap yuasatakayuki/hxisgd
brew install hongoscripts
としてインストールしてください。すぐにhsVHDLBeautifyが使えるようになります。 コマンドラインから
hsVHDLBeautify (VHDLファイル)
として実行してください。

不具合(?)と注意するべき点

  1. ぼくの環境では、process文と同じ行にbeginが入っているとうまく整形されなかったので、 Ruby等でprocessとbeginを分けてからemacsに処理させました。
    うまく行かない例:
    process (clk,reset) begin
    ...
    end process;
    
    大丈夫な例:
    process (clk,reset)
    begin
    ...
    end process;
    
  2. Windowsから持ってきたファイルは改行コードがCR+LFになっていて、それだけならいいのですが、 途中でMacで編集しWindowsでも再編集したファイルだと、CR+LFとLFが混ざっているせいで、 beautifyがうまく働かないことがあるようです。 事前にCotEditorやnkfコマンド等で改行コードをLFオンリーに変換してから実行してみましょう。
    改行コードをUNIX/MacのLFだけにする例:
    nkf --unix file.vhdl > file_LF.vhdl
    
    nkfはHomebrewを用いて
    brew install nkf
    
    とすると手軽にインストールできます。