------------------------------------------------------------------------------ -- GCD factorization Benchmark ------------------------------------------------------------------------------ entity GCD is port (CLK : in bit; Reset : in bit; X, Y : in integer range 0 to 65535; gcd_output : out integer range 0 to 65535); end GCD; ------------------------------------------------------------------------------ architecture rtl of GCD is begin BIGLOOP: process variable xvar,yvar : integer range 0 to 65535; begin RESET_LOOP : loop wait until CLK = '1'; xvar := X; yvar := Y; if ((xvar = 0) or (yvar = 0) or (Reset = '1')) then gcd_output <= 0; xvar := 0; yvar := 0; else COMP: loop wait until CLK = '1'; exit RESET_LOOP when (Reset = '1'); if (xvar < yvar) then yvar := yvar - xvar; else if (xvar > yvar) then xvar := xvar - yvar; end if; end if; exit COMP when (xvar = yvar); end loop COMP; gcd_output <= xvar; end if; end loop RESET_LOOP; end process; end rtl;