トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2010-3-9

valueof(型変数)

ミーハーなのでBluespecでソート回路を作るべく遊ぼうとしているところ.
とりあえず,サンプルのソート回路があたえられていたので,
Bluespec SystemVerilogチュートリアル:カウンタの設計の復習とばかりに,
サイズをテストベンチ側で決定できるように変更してみる.
...というのに時間がかかってしまった.

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を定義するときに用いられたものの値がとりだせて幸せになれる.