!valueof(型変数) ミーハーなのでBluespecでソート回路を作るべく遊ぼうとしているところ. とりあえず,[サンプルのソート回路|http://www.cybernet.co.jp/bluespec/documents/Sort_Sample.pdf]があたえられていたので, [Bluespec SystemVerilogチュートリアル:カウンタの設計|http://www.cybernet.co.jp/bluespec/documents/Tutorial_counter_JP.pdf]の復習とばかりに, サイズをテストベンチ側で決定できるように変更してみる. ...というのに時間がかかってしまった. interface BubSort_ifc#(type size_t); ... endinterface module mkBubSort(BubSort_ifc#(size_t)); ... endmodule として,moduleを定義することで,module内では型変数size_tを使用することができる. つまり, Vector#(size_t, Reg#(int)) x <- replicateM(mkReg(0)); のような型変数size_tを使った型が作れるのだけれど, このsize_tの値を式で使用することはできない. たとえば,xのすべての要素に対して何か処理しようとしたくても, for(Integer i = 0; i < size_t; i = i + 1) ということはできない. で,こういうときは,valueofを使用して, for(Integer i = 0; i < valueof(size_t); i = i + 1) とすることで,size_tを定義するときに用いられたものの値がとりだせて幸せになれる.