こんにちは、相変わらずメインエディタはSublime Text 3な @tethys_seesaa です。
##はじめに
###問題発生
二ヶ月以上前からUVMを放置しているんですが、いろいろ進めていて、いま 問題が発生して停滞しています。
原因は特定できたのですが、解決策がわからず…。
周りに知っている人いないし、いやー、UVMって 本当に難しいですね。
###UVMを書き始めてみて
コードを書き始めてみて、反復的な表現が多いことに気づきました。
これはスニペットを用意した方がいいと感じ、これまで書いてきたコードを参考に、いくつかのUVMパーツのスニペットを今回書いてみました。
むろん、エディタはSublime Text 3です。
今回は、Ubuntu 14.04 LTSでやってみました。
##参考
##必要なもの
- Sublime Text 3
- SystemVerilogプラグイン
##UVMバージョン
ここでは1.1dです。
最近1.2が出たようですが、アプリレイヤーと違ってこの界隈は動きがのろいから、IntelやARMのようなお金持ちが1.2を使い始めるまで対応する必要は無いでしょう。
##コード
スニペットなんで、コーダーの好みによりけりだから参考程度に。
ここではuvm_sequencer
を例にとってみます。
<snippet>
<name>UVM sequencer</name>
<content><![CDATA[class ${1:${TM_FILENAME/(.+)\..+|.*/$1/:name}} extends #(${2:uvm_sequence_item}, ${3:REQ}) uvm_sequencer ;
//-------------------------------------------------------------------------------
// Factory register
//-------------------------------------------------------------------------------
`uvm_component_utils(${1})
//`uvm_component_utils_begin(${1})
/**** `uvm_field_* macro invocations here ****/
//`uvm_component_utils_end
//-------------------------------------------------------------------------------
// Functions and Tasks
//-------------------------------------------------------------------------------
// Constructor
function new(string name = "${1}", uvm_component parent=null);
super.new(name, parent);
endfunction
endclass]]></content>
<tabTrigger>uvm_sequencer</tabTrigger>
<scope>source.systemverilog</scope>
</snippet>
これを~/.config/sublime-text-3/Packages/User
に保存します。
初めに、「u」を打ち込むと、それをアタマに持つスニペット一覧が出てくるので、ここでは「uvm_sequcener」をカーソルキーで選択し、tabキーで確定させます。
すると、こんな感じでuvm_sequencer
の雛型ができます。ここで、「my_uvm」という単語が 複数選択されている ことがわかります。
なので、「my_uvm」を一気に複数同時に変えることができます。
変えた直後、tabキーを押すと、次の変更すべき単語にフォーカスします。この例ではuvm_sequence_item
になります。
こんな感じで単語を入れてtabキーを押すと最後はこのようになります。
##終わりに
不慣れなもんで、UVMは手で書いていくとコードがどんどん汚くなることがわかり、ここでは一歩引いて、スニペット群を作ることにしました。
スニペットをチームで共有して、書式を統一してもいいかもしれません。コードの生産性も上がりそうです。
画面を見るとお気づきかもしれませんが、他のUVMパーツも作ってあります。
最初は全部載せようかと思いましたが、Qiitaにコードの折りたたみ機能が無いため、1個だけにしました。 リクエストがあれば残りも載せますので、ご連絡下さい。