entity call_pro is
port ( data: in STD_LOGIC_VECTOR(7 downto 0); left_bit: out INTEGER range 0 to 256); end call_pro;
Architecture call_rtl of call_pro is -- signal le_bite: integer range 0 to 256; procedure l_bit (signal DIN: in STD_LOGIC_VECTOR(7 downto 0); Signal le_bite: out INTEGER range 0 to 256) is variable temp: integer range 0 to 256; Begin temp:= 0; For i in 0 to 7 loop if (DIN(i) = '1') then temp:= i; end if; if (DIN(i) /= '1') then next; end if; end loop; le_bite <= temp; end l_bit;
signal DIN: STD_LOGIC_VECTOR(7 downto 0); signal bite1: integer range 0 to 256; Begin DIN <= data; l_bit(DIN, bite1); -- параллельный вызов процедуры left_bit <= bite1; end call_rtl;
Временная диаграмма работы проекта:
Вариант 2: (Последовательный вызов подпрограммы процедуры)
library IEEE; use IEEE.STD_LOGIC_1164. all;
Entity call_pro is port ( data: in STD_LOGIC_VECTOR(0 to 7); left_bit: out INTEGER); end call_pro;
Architecture rtl of call_pro is
Procedure l_bit (signal data: in STD_LOGIC_VECTOR(0 to 7); signal le_bite: out INTEGER) is variable temp: integer; Begin temp:= 0; For i in 0 to 7 loop if (data(i) = '1') then temp:= i; end if; if (data(i) /= '1') then exit; end if; end loop; le_bite <= temp; end l_bit;
signal DIN: STD_LOGIC_VECTOR(0 to 7); signal bite1: integer;
Begin p0: process (DIN) Begin l_bit(DIN, bite1); --последовательный вызов процедуры left_bit <= bite1; end process; end rtl;
Временная диаграмма работы проекта:
- - - - - - - ---- ---- - - - - - -- ------------ - ----
Приложение: Оператор wait в теле определения подпрограммы процедуры
Раздел выполняемых операторов определения подпрограммы процедуры может содержать оператор wait. Особенности использования оператора описаны в книге Суворовой, стр. 155.
|