AHDL Syntax
MODELING LANGUAGE MISCELLANEOUS
Various topics of interest are explained with the use of the Pascal programming language. They also apply to other programming languages.Borland Delphi
The modeling language Pascal can be compiled to a DLL file using the Borland Delphi 3.0 program.
Local variables.
In the modeling language you can define your own variables, however they are defined local. This means that whenever a function in the modeling language is entered the local variables don't have a defined value. Leaving the function in the modeling language, the local defined variables loose their value.Good! | Wrong! |
VAR |
VAR
|
bus[3] := bus[3]+1;
It also enables you to sample data in the bus variables, by reading a sampled value in for example bus[1]. Using bus number 99 as a trigger signal for sampling, you can shift the data on your bus. If you use bus[1] till bus[n] for sampling, your code would look like :
if bus[99]>1 then
for i:=n downto 2 do
bus[i]:=bus[i-1];
bus[1]:=NewSample;
Runtime errors
When you define Pascal code and are linking it to CASPOC, a runtime error during simulation can occur.For example you define a bus variable, which doesn’t exists or you divide by zero.
CASPOC can't handle these errors. Borland Delphi causes the errors, which will occur.
The most common errors produced are:
-range error bus[i] i<=0 or i>=300
-divide error 1/0
-overflow 1e20*1e20*1e20
-not initialized variables
Remember that according to the calculation sequence first the system blocks and Pascal code are analyzed before the circuit is initialized.
Differential equations
To define differential equations you can use the arrays x[i] and dxdt[i]. The differential equations have to be implemented as a set of first order differential equations. For example the state space equationscan be implemented as
dxdt[1]:=a*x[1]+b*x[2]+e*input[1];
dxdt[2]:=c*x[1]+b*x[2]+f*input[1];
bus[1]:=g*x[1]+h*x[2];
Initialization of the state variables x[i] can be performed if p[1] equals 0.
CASE p[1] OF
0: BEGIN
x0[1]:=3.2;
x0[2]:=6.9;
END;
1: BEGIN
........
The same integration method used for the block diagram method is applied for the integration method in the Modeling Language.Note that the equation should always start with
dxdt[.]:=......
on the left side of the equation. You can't use the array dxdt[i] on the right side of the equation.
Initial conditions for the bus variables.
You can initialize the bus variables during the initialization of the simulation. Each time the simulation is started, p[1] is set to 0 and the block diagram model and the modeling language are initialized. After initialization p[1] is set to the procedure number defined at the ToML and FromML blocks for the Standard Modeling Language, or to 1 for LibML blocks.
VAR i : INTEGER;
CASE p[1] OF
0: BEGIN
bus[1]:=3.7;
bus[23]:=sin(PI/3);
FOR i:=1 TO 30 DO
bus[20+i]:=i*4;
END;
1: BEGIN
........