定义(可化简变量):在一个程序区(一条CW分支)内,如果前面有变量V的赋值,赋值表达式为E,后面如果有对这个变量的引用,称该变量为可化简变量。
  对应在流程图中,如果从合并的wait语句到这个变量被引用的节点(赋值语句)或弧(条件)之间如果有对这个变量的赋值,则这个变量是可化简的。
  下面的例子充分说明了可化简变量的概念。其中V为变量,S,I,O为信号。很显然,在2,3,5,6行中的表达式中V都可以分别用1,5行赋值中的源表达式加以替换。
(1) V:= 7 + I;
(2) if (V>17) then
(3)  S <= V;
(4) end if;
(5) V:= V-1;
(6)  O <= V;
(1) V:= 7 + I;
(2) if ((7 + I) > 17) then
(3)  S <= 7 + I;
(4) end if;
(5) V:= 6 + I;
(6)  O <= 6 + I;
  定义(不可化简变量):在一个程序区(一条CW分支)内,对一个变量的引用的引用之前没有对变量的赋值,称该变量为不可化简变量。
对应在流程图中,如果从合并的wait语句到这个变量被引用的节点(赋值语句)或弧(条件)之间如果没有对这个变量的赋值,则这个变量是不可化简的。
  下面的例子说明不是每次出现的变量都是可以替换的。其中V为变量,S,I为信号。变量V出现在第3行和第5行的表达式中。但是只有第3行中V可以被替换,而第5行中的V是不能被替换的。因为当执行至第5行时,V在本模拟周期还没有被赋值。因此,V在该表达式中是不可化简的。
(1) if ( I > 0) then
(2)   V:= 2 * I;
(3)   S <= S + V;
(4) else
(5)  S <= S - V;
(6) endif;
(1) if ( I > 0) then
(2)  V:= 2 * I;
(3)  S <= S + (2 * I);
(4) else
(5)  S <= S - V;
(6) endif;

  消除这种相关性的办法是将可化简变量可用前面那个赋值表达式来替换。如果我们现在就这样做,就会碰到这样的一个问题:因为从合并wait语句可能会有多条路径到达一点,这样就会形成有的变量既是可化简变量,又是不可化简变量。见下面的例子:
   (1) if ( I > 0) then
   (2)    V:= 2 * I;
   (3) else
   (4) S <= S + V;
  其中V是变量,S,I为信号。变量V只出现在一个表达式中(第4行)。如果IF语句的条件满足,则首先执行第二行的赋值语句,此时V是可化简的。如果IF条件不满足,则在执行第4行时,V在本模拟周期内尚未赋值,因而是不可化简的。
为解决这一问题,我们引入了执行树的概念。