- используя различные порты Ports
- устанавливая значения параметров Parameters
LPM стали промышленным стандартом в отношении имен портов и параметров. Однако, исходные коды LPM разных поставщиков различны. Функции LPM корпорации Altera оптимизированы для использования совместно с кристаллами Altera.
Все макрофункции Altera LPM объявлены в пакете lpm_components.all в библиотеке LIBRARY Ipm;
Программный компонент MegaWizard Plug-in Manager в программных средах MAX+plus II и Quartus позволяет создать программный код VHDL, реализующий LPM или Megafunction
В коде VHDL следует указать:
LIBRARY Ipm;
USE lpm.lpm_components.all;
Являются промышленным стандартом
Представляют собой укрупненные конструктивные элементы, нет необходимости заниматься «мелочами»
Снижают время разработки проекта
Упрощают изменение функций проекта путем изменения других значений для Ports and/or Parameters
Поддерживаются средствами синтеза схем.
function byte_to_int(alpha:byte)return integer is
variable result:integer :=0;
begin
for n in 0 to 7 loop
result :=result*2 +bit'pos(alpha(n));
end loop;
return result;
end byte_to_int;
process
variable data:byte;
begin
byte_to_int(data);
end process;
procedure parity (a:in bitjvector (0 to 7);resultl,result2:out bit)is
variable temp:bit;
begin
temp :='0';
for i in 0 to 7 loop
temp :=temp xor a(i);
end loop;
resultl :=temp;
result2 :=not (temp);
end;
architecture behavior of receiver is
process
variable top,bottom,odd,dummy;bit;
variable y:bit_vector (15 downto 0);
begin
parity (y(15 downto 8),top,dummy);
parity (y(7 downto 0),bottom,dummy);
odd :=top xor bottom;
end process;
end behavior;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
package MyPackage is
function byte_to_int(alpha:STD_LOGIC_VECTOR (7 downto 0))return integer;
function bit_vec2int(A : STD_LOGIC_VECTOR) return integer;
function AddVectors (A:STD_LOGIC_VECTOR; B:STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
end MyPackage;
package body MyPackage is
function byte_to_int(alpha:STD_LOGIC_VECTOR (7 downto 0))return integer is
variable result:integer :=0;
begin
for n in 7 downto 0 loop
result :=result*2;
if (alpha(n)='1') then
result:=result+1;
end if;
end loop;
return result;
end byte_to_int;
function bit_vec2int(A : STD_LOGIC_VECTOR) return integer is
variable RESULT: integer:=0;
variable TMP: integer:=1;
begin
if A'length = 0 then
return RESULT;
end if;
for i in A'reverse_range loop
if a(i)='1'
then RESULT:=RESULT+TMP;
end if;
TMP:=TMP*2;
end loop;
return RESULT;
end;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.