Разработка цифрового узла, создание его структурных и поведенческих моделей (на языках SPICE, DSL, VHDL, в пакетах DesignLab 8, OrCAD 9.1, Active-HDL 6.2), страница 10

8.2.            Иерархический символ, поддерживаемый поведенческой VHDL-моделью.

Рис. 18. УГО проектируемого символа, поддерживаемого VHDL-моделью в пакете OrCad 9.1

Ниже приведена VHDL-модель, закреплённая за этим символом:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.orcad_prims.all;

ENTITY K555IV3_VHDL IS                               --описание интерфейса модели

PORT(                                                                   --перечисление входных и выходных портов узла

I1 : IN  std_logic;                                                

I2 : IN  std_logic;

I3 : IN  std_logic;                                             

I4 : IN  std_logic;

I5 : IN  std_logic;

I6 : IN  std_logic;

I7 : IN  std_logic;

I8 : IN  std_logic;

I9 : IN  std_logic;

Y0 : OUT  std_logic;

Y1 : OUT  std_logic;

Y2 : OUT  std_logic;

Y3 : OUT  std_logic;

);

END K555IV3_VHDL;

ARCHITECTURE BEHAVIOR OF K555IV3_VHDL IS         --начало описания архитектуры элемента

    BEGIN 

    process (I1,I2,I3,I4,I5,I6,I7,I8,I9)                     --определение процесса, реагирующего на изменение

                                                                 --какого-либо из входных сигналов

       variable Y_INT_NEW: std_logic_vector (3 downto 0);           --вспомогательные переменные, исполь-

       variable Y_INT_PREV: std_logic_vector (3 downto 0);          --зуются для получения нового и запоми-

                                                                                                          --нания старого значения на выходе.

                                                                                         --Это нужно для определения того, как

                                                                             --переключался выход – с 0 на 1 или с 1 на 0

        begin 

--если зашли в процесс – значит произошло переключение какого-либо из входов, а, значит,

--и переключение каких-то выходов (т.к. входы имеют разный приоритет и каждому

--входу соответствует своя уникальная комбинация на выходе).

                     Y_INT_PREV:=Y_INT_NEW;        --запоминание предыдущих значений на выходе

        if (I1='1' and I2='1' and I3='1' and I4='1' and I5='1' and I6='1' and I7='1' and I8='1' and I9='1') then

                     Y_INT_NEW:="1111";                   --если ни один из входов не активен – на выходах

        end if;                                                           --напряжение высокого уровня

--каждому входному сигналу соответствует определённая комбинация на выходах

-- 0 – активный уровень, I9 – вход с наибольшим приоритетом.

       if I9='0' Then                                                 --если активен вход I9 – «выставить» на выход "0110"

                     Y_INT_NEW:="0110";                   --и т.

        elsif I8='0' Then

                     Y_INT_NEW:="0111";                  

       elsif I7='0' Then                                            

                     Y_INT_NEW:="1000";                  

        elsif I6='0' Then                                                         

                     Y_INT_NEW:="1001";                  

        elsif I5='0' Then

                     Y_INT_NEW:="1010";

        elsif I4='0' Then

                     Y_INT_NEW:="1011";

        elsif I3='0' Then

                     Y_INT_NEW:="1100";

        elsif (I2='0' ) Then

                     Y_INT_NEW:="1101";

        elsif I1='0' Then

                     Y_INT_NEW:="1110";                  

        end if;

  ------------------------------------------------------------------------------          

--выход Y0

--если выход Y0 переключился с 0 на 1 вследствие снятия активного уровня с какого-либо из