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