---------------------------------------------------------------------------------- -- Antonio E COSTA Jerome CAZIN -- -- SEII3 - Decembre 96 -- -- -- -- PACKAGE UTIL : Ce package comporte les types et fonctions utilises -- -- dans les modules de test -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; package UTIL is SUBTYPE REEL_UNIFORME IS REAL RANGE 0.0 TO 1.0; -- type de la sortie generateur -- nombre aleatoire SUBTYPE word IS STD_LOGIC_VECTOR(15 DOWNTO 0); type IOCELL is array (15 downto 0) of std_logic_vector(63 downto 0); FUNCTION random( nombre_uniforme : IN REEL_UNIFORME ) RETURN REEL_UNIFORME; FUNCTION nat2bit(NOMBRE : in NATURAL) RETURN WORD; end UTIL; package body UTIL is FUNCTION random( nombre_uniforme : IN REEL_UNIFORME ) RETURN REEL_UNIFORME IS -- Fonciton de generation de nombres aleatoires CONSTANT a: INTEGER := (7 ** 5); CONSTANT m: REAL := (2.0 ** 31) - 1.0; VARIABLE xi : INTEGER; VARIABLE ri,rm,successeur_ui,u : REAL; BEGIN u := REAL( nombre_uniforme ); rm := m; ri := ( rm + 1.0 ) * u; xi := INTEGER(ri); xi := ( a * xi ) mod INTEGER(m); ri := REAL(xi); successeur_ui := ri / ( rm + 1.0 ); RETURN REEL_UNIFORME(successeur_ui); END random; FUNCTION nat2bit(nombre : in NATURAL) RETURN WORD IS -- fonction de conversion de nombe entiers naturels en binaire VARIABLE i : NATURAL ; variable BITNB : WORD; variable reste : NATURAL ; BEGIN reste:=nombre; for i in 15 downto 0 loop if reste >= (2**i) then reste:=reste-(2**i); BITNB(i):='1'; else BITNB(i):='0'; end if; end loop; RETURN BITNB; end nat2bit; end UTIL;