凡人の日々の経過を記録
カレンダー
カテゴリー
リンク
最新記事
(03/21)
(03/11)
(03/05)
(03/02)
(02/06)
ブログ内検索
コガネモチ
構造体もランダムを生成することができる.
次のような構造体がすでにあるとする。 struct data_t { sc_uint<12> addr; unsigned char payload[5]; }; addrとpayload[5]の6つの変数の値をランダムとするには、次を別途用意する。 template<> class scv_extensions<data_t> : public scv_extensions_base<data_t> { public: sc_extensions<sc_uint12> > addr; sc_extensions<unsigned char [5]> payload; SCV_EXTENSIONS_CTOR( data_t ) { SCV_FIELD( addr ); SCV_FIELD( paylaod ); } }; 使い方はつぎのようになる。 scv_smart<data_t> data_p( "data_p" ); data_p->addr.keep_out(0, 100); for (int i=0; i<5; ++i) data_p->payload[i].keep_only( 0, 100 ); for (int i=0; i<10; ++i) { data->next(); printf( "addr = %d, ", (int)data_p->addr ); printf( "payload = " ); printf( "%d, ", (int)data_p->payload[0] ); printf( "%d, ", (int)data_p->payload[1] ); printf( "%d, ", (int)data_p->payload[2] ); printf( "%d, ", (int)data_p->payload[3] ); printf( "%d\n", (int)data_p->payload[4] ); } 実行結果 ------------------------------------ addr = 31, payload = 84, 33, 24, 48, 65 addr = 85, payload = 41, 16, 72, 21, 81 addr = 99, payload = 80, 9, 53, 68, 20 addr = 64, payload = 68, 47, 13, 53, 53 addr = 38, payload = 58, 68, 83, 4, 11 addr = 33, payload = 98, 71, 90, 41, 80 addr = 58, payload = 24, 19, 58, 62, 99 addr = 96, payload = 21, 18, 27, 69, 47 addr = 25, payload = 70, 49, 23, 24, 41 addr = 11, payload = 71, 42, 55, 9, 19 ------------------------------------ PR ランダム生成してみた。
まずは、基本から。 scv_smart_ptr<int> data_p( "data" ); data_p->keep_only( 0, 10 ); // 0~10までをランダム生成とする設定 for (int i=0; i<10; i++) { data_p->next(); // 次の値に printf( "data = %d\n", data_p->read() ); // 値を取得 } 実行結果はつぎのとおり。 ----------- data = 1 data = 10 data = 6 data = 8 data = 10 data = 2 data = 9 data = 3 data = 0 data = 7 ----------- とりあえず、実行してみた。
#include "scv.h" int sc_main( int argc, char* argv[] ) { int data = 1234; int bitwidth = scv_get_extensions(data).get_bitwidth(); scv_get_extensions( data ).print(); printf( "bitwidth=%d\n", bitwidth ); return 0; } 実行結果はつぎのとおり。 ------------------- 1234 bitwidth=32 ------------------- とりあえず、実行できた!!! どうやら、インクルードはscv.hのみで間に合うようで、systemc.hは省略できるようだ。 ここでは試しにscv_get_extensionsというのを使ってみたが、あまり使う用途はなさそう。 sc_uint<15> a; int bitwidth = scv_get_extensions(a).get_bitwidth(); これはbitwidth=15になった。 さっそく実行してみた。
SystemCとSCVのインストール先は、それぞれ /usr/local/systemc-2.1 /usr/local/scv とした。 SCVのインストールで/usr/local/scv/include/scv/*.h ファイルのパーミッションが700になってしまって普通のユーザが読み込めない状態になってしまっていた. これだとコンパイルできないので、パーミッションを644に変更した。 こういうところ、ちょっと手抜きか。。 まずはメイクファイルを作成した. 基本はSystemCのメイクファイルで、そこにSCVのインクルードの指定(-I)とライブラリの指定(-L -l)を追加した. -I/usr/local/scv/include -I/usr/local/systemc-2.1/include -L/usr/local/scv/lib-linux -lscv -L/usr/local/systemc-2.1/lib-linux -lsystemc あとSCVは.so(ダイナミックリンクライブラリ)をつかっているのでLD_LIBRARY_PATHの指定が必要となる. とりあえず、.bash_profileあたりに次を書いて済ませることにした。 LD_LIBRARY_PATH=/usr/local/scv/lib-linux/:$(LD_LIBRARY_PATH) export LD_LIBRARY_PATH 注意として、メイクファイルでライブラリを指定するときに、-lscvのあとに-lsystemcを書かないとだめみたい。 逆にすると"unreferenced ..."というエラーメッセージがたくさん出てしまった。
Powered by 忍者ブログ
Design by © まめの
Copyright © [ ずくのない凡人の日記 ] All Rights Reserved. http://bambooflow.blog.shinobi.jp/ |