O
omara007
Guest
Hi guys ..
I zaprojektował VHDL funkcji zwraca obcinana-vector od rzeczywistej zakres podpisane wektora.Innymi słowy, obcięcie się na najmniejszych wektor, który może zawierać że wartość podpisanych bez powielania do podpisania bitowych.Oto funkcja:
Kod:
-------------------------------------------------- --------------------------
- TRUNCATE_EFFECTIVE
-------------------------------------------------- --------------------------
Funkcja TRUNCATE_EFFECTIVE (INPUT_VECTOR: SIGNED; TRUNCATION_SIZE: pozytywy) return SIGNED jest
stałej NAS: SIGNED (1 downto 0): = (others =>'0 ');
zmiennej WYNIK: SIGNED (TRUNCATION_SIZE-1 downto 0);
Zmienna ZERO_INDEX: integer;
Zmienna ONE_INDEX: integer;
zacząć
if (INPUT_VECTOR'length <1) a następnie
powrót NAS;
elsif INPUT_VECTOR'length = TRUNCATION_SIZE następnie
powrót INPUT_VECTOR;
elsif INPUT_VECTOR'length <TRUNCATION_SIZE następnie
WYNIK: = rozmiar (INPUT_VECTOR, TRUNCATION_SIZE);
WYNIK powrotu;
elsif INPUT_VECTOR'length> TRUNCATION_SIZE następnie
jeśli INPUT_VECTOR (INPUT_VECTOR'left) ='0 ', a następnie - ( ve) wejściowego wektora
ONE_INDEX: = ONE_FIRST_OCCURANCE (INPUT_VECTOR);
jeśli ONE_INDEX = -1 następnie
WYNIK: = (others =>'0 ');
elsif ONE_INDEX <= TRUNCATION_SIZE-1 następnie
WYNIK: = INPUT_VECTOR (TRUNCATION_SIZE-1 downto 0);
w przeciwnym razie
WYNIK: = INPUT_VECTOR (ONE_INDEX 1 downto ONE_INDEX-TRUNCATION_SIZE 2);
end if;
elsif INPUT_VECTOR (INPUT_VECTOR'left) ='1 ', a następnie - (-ve) wejściowego wektora
ZERO_INDEX: = ZERO_FIRST_OCCURANCE (INPUT_VECTOR);
jeśli ZERO_INDEX = -1 następnie
WYNIK: = (others =>'1 ');
elsif ZERO_INDEX <= TRUNCATION_SIZE-1 następnie
WYNIK: = INPUT_VECTOR (TRUNCATION_SIZE-1 downto 0);
w przeciwnym razie
WYNIK: = INPUT_VECTOR (ZERO_INDEX 1 downto ZERO_INDEX-TRUNCATION_SIZE 2);
end if;
end if;
WYNIK powrotu;
end if;
koniec TRUNCATE_EFFECTIVE;
-------------------------------------------------- --------------------------
I zaprojektował VHDL funkcji zwraca obcinana-vector od rzeczywistej zakres podpisane wektora.Innymi słowy, obcięcie się na najmniejszych wektor, który może zawierać że wartość podpisanych bez powielania do podpisania bitowych.Oto funkcja:
Kod:
-------------------------------------------------- --------------------------
- TRUNCATE_EFFECTIVE
-------------------------------------------------- --------------------------
Funkcja TRUNCATE_EFFECTIVE (INPUT_VECTOR: SIGNED; TRUNCATION_SIZE: pozytywy) return SIGNED jest
stałej NAS: SIGNED (1 downto 0): = (others =>'0 ');
zmiennej WYNIK: SIGNED (TRUNCATION_SIZE-1 downto 0);
Zmienna ZERO_INDEX: integer;
Zmienna ONE_INDEX: integer;
zacząć
if (INPUT_VECTOR'length <1) a następnie
powrót NAS;
elsif INPUT_VECTOR'length = TRUNCATION_SIZE następnie
powrót INPUT_VECTOR;
elsif INPUT_VECTOR'length <TRUNCATION_SIZE następnie
WYNIK: = rozmiar (INPUT_VECTOR, TRUNCATION_SIZE);
WYNIK powrotu;
elsif INPUT_VECTOR'length> TRUNCATION_SIZE następnie
jeśli INPUT_VECTOR (INPUT_VECTOR'left) ='0 ', a następnie - ( ve) wejściowego wektora
ONE_INDEX: = ONE_FIRST_OCCURANCE (INPUT_VECTOR);
jeśli ONE_INDEX = -1 następnie
WYNIK: = (others =>'0 ');
elsif ONE_INDEX <= TRUNCATION_SIZE-1 następnie
WYNIK: = INPUT_VECTOR (TRUNCATION_SIZE-1 downto 0);
w przeciwnym razie
WYNIK: = INPUT_VECTOR (ONE_INDEX 1 downto ONE_INDEX-TRUNCATION_SIZE 2);
end if;
elsif INPUT_VECTOR (INPUT_VECTOR'left) ='1 ', a następnie - (-ve) wejściowego wektora
ZERO_INDEX: = ZERO_FIRST_OCCURANCE (INPUT_VECTOR);
jeśli ZERO_INDEX = -1 następnie
WYNIK: = (others =>'1 ');
elsif ZERO_INDEX <= TRUNCATION_SIZE-1 następnie
WYNIK: = INPUT_VECTOR (TRUNCATION_SIZE-1 downto 0);
w przeciwnym razie
WYNIK: = INPUT_VECTOR (ZERO_INDEX 1 downto ZERO_INDEX-TRUNCATION_SIZE 2);
end if;
end if;
WYNIK powrotu;
end if;
koniec TRUNCATE_EFFECTIVE;
-------------------------------------------------- --------------------------