1`include "discipline.h"
2
3module myanalogfunction (p,q);
4electrical p,q;
5real a,b;
6
7  analog   function real myfunction;
8    input x;
9    real  x;
10    begin
11      if(x<0.2)
12        myfunction =  abs(x);
13      else if(x<0.6)
14        myfunction =  cos(2*x);
15      else
16        myfunction =  sin(2*x);
17    end
18  endfunction
19
20  analog   function real norm;
21    input x, y, index;
22    real  x, y;
23    integer  index;
24
25    begin
26      case(index)
27        0: norm =  max(abs(x),abs(y));
28        1: norm =  abs(x)+abs(y);
29        2: norm =  sqrt(pow(x,2)+pow(y,2));
30        default: $strobe("Warning: norm does not exist");
31      endcase
32    end
33  endfunction
34
35`define VEXLIM  200.0
36  analog   function real expLin;
37    input x;
38    real  x;
39    real  expl;
40
41    begin
42      if (x < `VEXLIM)
43          expLin = exp(x);
44      else begin
45          expl = exp(`VEXLIM);
46          expLin = expl  * (1.0 + (x - `VEXLIM));
47      end
48    end
49  endfunction
50
51  analog   function real linLog;
52    input x;
53    real  x;
54    real  vlim;
55
56    begin
57      vlim=10.0;
58      if (x < vlim)
59          linLog = x;
60      else
61          linLog = vlim + ln(1.0 + (x - vlim));
62    end
63  endfunction
64
65
66analog
67  begin
68    case (a)
69      1,2: begin a=1; b=0; end
70      3,4: begin a=2; b=0; end
71      5,6: begin a=3; b=0; end
72      default : begin a=1234; b=5678; end
73    endcase
74  end
75endmodule
76
77