1// Sample provide by Dave Eggum <deggum@synopsys.com> on 05 Sep 2002. 2#define DEFAULT_INT 0 3#define DEFAULT_BIT 1'bz 4 5typedef class ExampleClass; 6 7program main { 8 ExampleClass oModel1, oModel2, oModel3; 9 integer i; 10 string s; 11 12 oModel1 = new("first"); 13 oModel2 = new("second", 2); 14 oModel3 = new("third", 3); 15 16 oModel1.setInt(5); 17 i = oModel1.getInt(); 18 19 oModel2.m_bit; // BUG: this jump should fail... but doesn't 20 21 oModel2.setData(8'o272); 22 oModel2.setData(8'hbA); 23 oModel2.setData(8'b1011_1010); 24 25 s = oModel3.getName(); 26 27 fork { 28 oModel3.wait(); 29 } { 30 oModel3.trigger(); 31 } 32 join all 33 34 wait_child(); 35 36 oModel3.setTrigger(void); 37} 38 39class ExampleClass { 40 local integer m_int = DEFAULT_INT; 41 local bit m_bit = DEFAULT_BIT; 42 local bit [7:0] m_data = 8'hzz; 43 local string m_sName; 44 local event m_eTrigger; 45 46 public task new(string sInstName, integer index = DEFAULT_INT) { 47 m_sName = sInstName; 48 m_int = index; 49 } 50 51 public task setInt(integer i) { 52 m_int = i; 53 } 54 55 public function integer getInt() { 56 getInt = m_int; 57 } 58 59 public task setBit(bit b) { 60 m_bit = b; 61 } 62 63 public function bit getBit() { 64 getBit = m_bit; 65 } 66 67 public task setData(bit[7:0] data) { 68 m_data = data; 69 } 70 71 public function bit[7:0] getData() { 72 getData = m_data; 73 } 74 75 public task setName(string name) { 76 m_sName = name; 77 } 78 79 public function string getName() { 80 getName = m_sName; 81 } 82 83 public task wait() { 84 sync(ALL,m_eTrigger); 85 } 86 87 public task trigger() { 88 trigger(m_eTrigger); 89 } 90 91 public task setTrigger(event e); // prototype 92 public function event getTrigger(); // prototype 93} 94 95task ExampleClass::setTrigger(event e) { 96 m_eTrigger = e; 97} 98 99function event ExampleClass::getTrigger() { 100 getTrigger = m_eTrigger; 101} 102#undef DEFAULT_INT 103#undef DEFAULT_BIT 104// vim: sw=4:ts=4:expandtab 105