Разработка цифрового узла, создание его структурных и поведенческих моделей в пакетах DesignLab 8, OrCAD 9.1, ActiveHDL 6.2, страница 10

8.5. УГО узла с VHDL-моделью, временные диаграммы его работы.

Рис. 45. УГО узла, использующего VHDL-модель.

            Отметим, что название элемента не соответствует требованию ГОСТ. Это сделано, чтобы одновременно смоделировать работу узла со схемой замещения и узла с VHDL-моделью.

            Временные диаграммы работы проектируемого узла приведены выше, на рис.35 - 43.

9. Проектирование узла К555КП17 в пакете Active-HDL 6.2.

9.1. УГО элемента К555КП17 в пакете Active-HDL 6.2.

Рис. 46. УГО проектируемого элемента в пакете Active HDL.

            На условном графическом изображении отсутствует символ выхода с тремя состояниями, т.к. не удалось красиво расположить этот символ на УГО, вследствие невозможности уменьшения масштаба шага рисования символа и привязки к сетке. Также пришлось изменить названия информационных входов и выходов в угоду требованиям программы.

9.2. Схема замещения К555КП17.

Рис. 47. Схема замещения элемента К555КП17 в пакете ActiveHDL.

9.3. Схема верификации проектируемого элемента.

Рис. 48. Схема верификации узла в пакете ActiveHDL.

            Как и в двух предыдущих САПР, на схеме верификации присутствуют как элемент со схемой замещения, так и узел с VHDL-моделью.

9.4. Поведенческая модель на языке VHDL.

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity K555KP17_V is

      generic ( TPLHD : time := 11 ns ;  

            TPHLD : time := 13 ns ;

            TPLHS : time := 20 ns ;   

            TPHLS : time := 21 ns ;

            TPZH : time := 11 ns ;

            TPZL : time := 15 ns ;

            TPHZ : time := 27 ns ;

            TPLZ : time := 12 ns );

      port(

            E00 : in STD_LOGIC;

            E01 : in STD_LOGIC;

            A1 : in STD_LOGIC;

            A2 : in STD_LOGIC;

            D00 : in STD_LOGIC;

            D01 : in STD_LOGIC;

            D02 : in STD_LOGIC;

            D03 : in STD_LOGIC;

            D10 : in STD_LOGIC;

            D11 : in STD_LOGIC;

            D12 : in STD_LOGIC;

            D13 : in STD_LOGIC;

            Y0 : out STD_LOGIC;

            Y1 : out STD_LOGIC

            );

end K555KP17_V;    

architecture K555KP17_V of K555KP17_V is

      signal out_0: std_logic;                                        

      signal out_1: std_logic;   

begin                

      process(E00,E01,D00,D01,D02,D03,D10,D11,D12,D13,A1,A2)

            variable multipl_0: std_logic;    

            variable multipl_1: std_logic;

      begin 

            multipl_0 := not((not(A2)and not(A1) and D00)or(not(A2)and A1 and D01)or(A2 and not(A1) and D02)or(A2 and A1 and D03));

            if out_0'DELAYED = '0' then 

                  if (E00='1') then     out_0<= 'Z' after TPLZ;   

                  elsif (A1'event or A2'event) then  out_0 <=(multipl_0) after TPLHS;           

                  elsif (D00'event or D01'event or D02'event or D03'event) then out_0 <=(multipl_0) after TPLHD;

                  end if;    

            else

                  if (E00='1') then     out_0<= 'Z' after TPHZ;     

                  elsif (E00'event AND E00='0') then

                        if (multipl_0 = '0') then out_0<= '0' after TPZL;

                        elsif (multipl_0 = '1') then out_0<= '1' after TPZH;

                        end if;

                  elsif (D00'event or D01'event or D02'event or D03'event) then out_0 <=multipl_0 after TPHLD;

                  elsif (A1'event or A2'event) then out_0 <=multipl_0 after TPHLS;

                  end if;

            end if;

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

            multipl_1 := not((not(A2)and not(A1) and D10)or(not(A2)and A1 and D11)or(A2 and not(A1) and D12)or(A2 and A1 and D13));

            if out_1'DELAYED = '0' then 

                  if (E01='1') then     out_1<= 'Z' after TPLZ;    

                  elsif (A1'event or A2'event) then  out_1 <=(multipl_1) after TPLHS;                 

                  elsif (D10'event or D11'event or D12'event or D13'event) then out_1 <=(multipl_1) after TPLHD;

                  end if;     

            else

                  if (E01='1') then     out_1<= 'Z' after TPHZ;     

                  elsif (E01'event AND E01='0') then

                        if (multipl_1 = '0') then out_1<= '0' after TPZL;

                        elsif (multipl_1 = '1') then out_1<= '1' after TPZH;

                        end if;

                  elsif (A1'event or A2'event) then out_1 <=multipl_1 after TPHLS;

                  elsif (D10'event or D11'event or D12'event or D13'event) then out_1 <=multipl_1 after TPHLD;

                  end if;

            end if;

      end process;                                        

      Y0 <= out_0;     

      Y1 <= out_1; 

end K555KP17_V;

Рис. 49. Поведенческая VHDL-модель узла в пакете ActiveHDL.