Verification Using SystemC Part IV

Print

Example : scv_user_defined class

  1 #include 
  2 
  3 class packet_t {
  4   public : 
  5     sc_uint<8>  addr;
  6     sc_uint<12> data;
  7 };
  8 
  9 SCV_EXTENSIONS(packet_t) {
 10   public:
 11     scv_extensions< sc_uint<8> > addr;
 12     scv_extensions< sc_uint<12> > data;
 13     SCV_EXTENSIONS_CTOR(packet_t) {
 14       SCV_FIELD(addr);
 15       SCV_FIELD(data);
 16     }
 17 };
 18 
 19 int sc_main (int argc, char* argv[]) {
 20   packet_t  pkt; 
 21   pkt.addr = rand();
 22   pkt.data = rand();
 23   int bitwidth = scv_get_extensions(pkt.addr).get_bitwidth();
 24   cout << "Width of addr is "<< bitwidth << endl;
 25   bitwidth = scv_get_extensions(pkt.data).get_bitwidth();
 26   cout << "Width of data is "<< bitwidth << endl;
 27   scv_get_extensions(pkt).print();
 28   return 0;
 29 }

Simulation Output : scv_user_defined class

Width of addr is 8

 Width of data is 12
 {
   addr:103
   data:966
 }
Example : scv_user_defined Enums  1 #include 
  2 
  3 //enum for one hot coding
  4 enum onehot_t {
  5   STATE_0 = 0, STATE_1 = 1, STATE_2 = 2, STATE_3 = 4,
  6   STATE_4 = 8, STATE_5 = 16, STATE_6 = 32 };
  7 
  8 struct data_t {
  9   sc_uint<8> field;
 10   unsigned   payload[5];
 11   onehot_t   state;
 12 };
 13 
 14 template
 15 class scv_extensions : public scv_enum_base {
 16   public:
 17     SCV_ENUM_CTOR(onehot_t) {
 18       SCV_ENUM(STATE_0);
 19       SCV_ENUM(STATE_1);
 20       SCV_ENUM(STATE_2);
 21       SCV_ENUM(STATE_3);
 22       SCV_ENUM(STATE_4);
 23       SCV_ENUM(STATE_5);
 24       SCV_ENUM(STATE_6);
 25     }
 26 };
 27 
 28 template
 29 class scv_extensions : public scv_extensions_base {
 30 public:
 31   scv_extensions<sc_uint<8> > field;
 32   scv_extensions<unsigned   [5]> payload;
 33   scv_extensions state;
 34   SCV_EXTENSIONS_CTOR(data_t) {
 35     //must be in order
 36     SCV_FIELD(field);
 37     SCV_FIELD(payload);
 38     SCV_FIELD(state);
 39   }
 40 };
 41 
 42 int sc_main (int argc, char* argv[]) {
 43   data_t  data; 
 44   data.field = rand();
 45   for (int i=0; i<5; i++) {
 46     data.payload[i] = rand();
 47   }
 48   data.state = STATE_0;
 49   scv_get_extensions(data).print();
 50   return 0;
 51 }

Simulation Output : scv_user_defined Enums

{
   field:103
   payload {
     [0]:846930886
     [1]:1681692777
     [2]:1714636915
     [3]:1957747793
     [4]:424238335
   }
   state:STATE_0
 }

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

 
Last Updated ( Tuesday, 29 March 2022 00:43 )