vhdl-ams:new_data_types:sequential_statements

Sequential Statements

procedural [is]
  procedural_declarative_part;
begin
  procedural_statement_part;
end procedural;
  • at the architecture
  • DAEs get worked off sequential
  • declarative_part: i. e. constants, variables, attributes, …

D/A-converter

architecture SIMPLE of DAC is
begin
   procedural
      variable conv: real = 0.0;
   begin
      for i in digital_vek'right to digital_vek'left loop
         if digital_vek(i) = '1' then
            conv := real(2**i) + conv;
         end if;
      end loop;
      analog := conv;
   end procedural;
end architecture SIMPLE;

Notes

Procedural statement are at the architecture body. The syntax is:

 procedural [is]
      {procedural_declarative_part};
 begin
      {sequential_statements};
 end procedural;

The procedural_declarative_part consists of constants, variables, (sub-) types, attributes… The simultaneous statements are executed sequential. Except of wait and signal assignments, all sequential statements are allowed.

Break List

    q == C * v;
    i == q'Dot;
break for q use v => init when init/= real'low;
 
    i == C * v'Dot:
break v => init when init/= real'low;
  • discontinuity of a DAE ⇒ reset of the quantity is essential
  • break_element: quantity has the same type as the expression
  • selector_clause: quantity must be of the form Q'Dot or Q'Integ
  • without conditions: quantities get initialized for simulation start time
break a => 0.0;
 
break x => 1.5, y => 0.0, z => 20;

Notes

One of the most important new data types is break. It announces a discontinuity in the solution of a DAE. To go on after a discontinuity, the quantities get re - initialized for the next continuous interval. The break follows after an event on a signal or when some condition becomes true. The syntax is:

 break [break_list] [when condition];
 break_list ::= break_element(s)
 break_element ::= [selector_clause] {quantity_name} => {expression}
 selector_clause ::= for {quantity_name} use

Exist a condition for the break, the break is sensitive on it. Exists no condition, the quantities of the break get initialized for the simulation start. The selector clause quantity is the quantity the discontinuity may be. It must be of the type Q'Dot or Q'Integ. Exists no selector clause, it counts for the quantities of the break_element(s), too. The type of the expression must be of the same type like the initializing quantity.


Chapters of VHDL-AMS > New Data Types