Программирование на зыке VHDL: Конспект лекций, страница 8

-  используя различные порты Ports

-  устанавливая значения параметров Parameters

LPM стали промышленным стандартом в отношении имен портов и параметров. Однако, исходные коды LPM разных поставщиков различны. Функции LPM корпорации Altera оптимизированы для использования совместно с кристаллами Altera.

4.7.1. Применение LPM

Все макрофункции 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;

4.7.1.1. Использование модуля MegaWizard пакета MAX Plus+ II

4.7.1.2. Пример: LPM Instantiation • lpm_mux

4.7.1.3. Пример: LPM instantiation - lpm_mult

4.7.2. Преимущества LPM

Являются промышленным стандартом

Представляют собой укрупненные конструктивные элементы, нет необходимости заниматься «мелочами»

Снижают время разработки проекта

Упрощают изменение функций проекта путем изменения других значений для Ports and/or Parameters

Поддерживаются средствами синтеза схем.


5. Использование функций и процедур. Атрибуты сигналов.

5.1. Объявление и вызов функции


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;



5.2. Объявление и вызов процедуры


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;


5.3. Указание атрибутов сигналов


5.4. Пакет функций пользователя

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;