PACKAGE array_pack IS TYPE bit_matrix IS ARRAY (integer RANGE <>, integer RANGE <>) OF bit; END array_pack ;
-----------------------------------------------------------
USE work.array_pack.ALL;
ENTITY array_compare IS PORT (a, b : IN bit_matrix(8 DOWNTO 0, 8 DOWNTO 0); equal : OUT boolean) ; END array_compare ;
-----------------------------------------------------------
ARCHITECTURE behavioral OF array_compare IS BEGIN cmp : PROCESS (a,b) VARIABLE equ : boolean ; BEGIN
equ := true ;
first_dim_loop : FOR k IN a'RANGE(1) LOOP second_dim_loop : FOR l IN a'RANGE(2) LOOP IF a(k,l) /= b(k,l) THEN equ := false ; -- sofortiger Ausstieg bei ungleichen Elementen EXIT first_dim_loop ; END IF ; END LOOP ; END LOOP ;
equal <= equ ;
END PROCESS ; END behavioral ;
|
Mit diesem Modell werden zwei bit-Matrizen auf Gleichheit geprüft. Der Vergleich kann abgebrochen werden, sobald eine Ungleichheit in einem Matrixelement auftritt. In diesem Fall wird deshalb die doppelte Schleife durch ein EXIT vorzeitig verlassen.
Wird wie hier das Schleifen-Label angegeben, so kann nicht nur aus der aktuellen (second_dim_loop), sondern auch aus übergeordneten Schleifen ausgestiegen werden.
Die EXIT-Anweisung kann auch eine Bedingung (Schlüsselwort WHEN) enthalten.
|