三日坊主ブログ

意外と続いてます。。。

AUTOINSERTLISP

仕事でVerilogを書くとき、verilog-modeを使わせてもらっている。AUTO_TEMPLATEやAUTOINSTを使って、インスタンス呼び出しをいい感じにしてた。

 

シミュレータの問題で、2次元配列をいい感じにダンプできなかった。仕方が無いので、1次元配列(というかバス)にassignすることで無理矢理ダンプしてた。

こんな感じ。

reg [7:0] ARRAY [10:0];

wire [7:0] BUS_0 = BUS[0];

wire [7:0] BUS_1 = BUS[1];

....

面倒くさ過ぎてなんとかならんもんかと思って、最近暇だったので調べてみたらなんとかなった。AUTOINSERTLISPなる関数で、lispで生成した文字列を挿入できた。

こんな感じ。

   reg [7:0] BUS [10:0];

/*AUTOINSERTLISP(insert (mapconcat '(lambda (i) (concat "    wire [7:0] BUS_" (number-to-string i) " = BUS[" (number-to-string i) "];")) (number-sequence 0 10) "\n") "\n")*/

// Beginning of automatic insert lisp

    wire [7:0] BUS_0 = BUS[0];

    wire [7:0] BUS_1 = BUS[1];

    wire [7:0] BUS_2 = BUS[2];

    wire [7:0] BUS_3 = BUS[3];

    wire [7:0] BUS_4 = BUS[4];

    wire [7:0] BUS_5 = BUS[5];

    wire [7:0] BUS_6 = BUS[6];

    wire [7:0] BUS_7 = BUS[7];

    wire [7:0] BUS_8 = BUS[8];

    wire [7:0] BUS_9 = BUS[9];

    wire [7:0] BUS_10 = BUS[10];

// End of automatics

 EmacsLispがよくわかってないんで、ここまで来るのにひと苦労。

でもうまく応用すれば、検証で使えそう。これまではRubyとかで条件ぶりしてたけど、Verilogで書いたベンチと別ファイルになるんで管理がめんどかった。lispで書けるんで、ベンチの中に直接埋め込めるようになるから、一つのファイルにまとめられる。

いいかも。