- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!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を定義するときに用いられたものの値がとりだせて幸せになれる.