Разработка четырёхразрядного синхронного двоичного реверсивного счётчика с параллельной загрузкой, страница 4

                         D : in STD_LOGIC_VECTOR(3 downto 0);        --шина информационных данных

                         Q : out STD_LOGIC_VECTOR(3 downto 0);      --шина выходных данных

                         CO : out STD_LOGIC;                    --выход переноса                 

                         RCO : out STD_LOGIC                  --выход наращиваниЯ счета

                 );

end \IE13_FUNC\;

architecture \IE13_FUNC\ of \IE13_FUNC\ is                    --Архитектура счетчика

signal TEMP_QV : std_logic_vector(3 downto 0);              --ВременнаЯ переменнаЯ длЯ хранениЯ

                                                                                               --выходных данных

begin

            process(CLK, LOAD, CTEN, D_U, D, TEMP_QV)

            begin

            if (LOAD='0') then TEMP_QV <= D after 17ns;     --Режим загрузки. (Задержка после

--переключениЯ сигнала LOAD равна 17ns)

            elsif (CLK='1' and CLK'EVENT) then                --По переднему фронту тактирующего сигнала

                        if(CTEN='0' and D_U='0') then                   --Режим прЯмого счета при D_U='0'                                                TEMP_QV<=TEMP_QV+"0001" after 11ns;                      --с задержкой 11ns 

                        elsif (CTEN='0' and D_U='1') then              --Режим обратного счета при D_U='1'

                                    TEMP_QV<=TEMP_QV-"0001" after 11ns;                       --с задержкой 11ns

                        end if;

            end if;                                    

            if ((D_U='0' and TEMP_QV = "1111") OR (D_U='1' and TEMP_QV = "0000") ) then                                                                                                        --УсловиЯ переключениЯ сигнала переноса      

            CO <= '1' after 25ns;                                     --задержка при переключении равна 25ns

            else CO <= '0' after 25ns;       

            end if;

            if (CTEN='0' and CO='1' and CLK ='0' ) then    --УсловиЯ переключениЯ сигнала на выходе

                                                                                   --наращиваниЯ счета             

                         RCO <= '0' after 9ns;                        --задержка при переключении равна 9ns

                         else RCO <= '1' after 9ns;     

            end if;

            end process;

Q<=TEMP_QV;                      --Выходному сигналу присваиваетсЯ значение временной переменной

check1: process                                                         -- Контроль временных соотношений

begin

            wait until (LOAD'event and LOAD='1');     -- Ограничение на времЯ предустановки данных:                      

                        assert D'stable(20ns)                          -- В течение 20 ns не должно происходить

                                                                                   -- переключений на входах D

                        Report "WARNING 1 (Setup Time D[3..0] from LOAD < 20ns)" -- предупреждение при

            Severity warning;                                          --несоблюдении условиЯ

end process check1;

check2: process

begin

            wait until (D'event and LOAD='1');              -- Ограничение на времЯ удержаниЯ данных:                      

                        assert LOAD'stable(20ns)                  -- В течение 20 ns не должно происходить

                                                                                   -- переключений на входе LOAD

                        Report "WARNING 2 (Hold Time D[3..0] from LOAD < 20ns)" -- предупреждение при

            Severity warning;                                          --несоблюдении условиЯ

end process check2;

end \IE13_FUNC\;

Как можно заметить, величины задержек, используемые в VHDL-модели, соответствуют значениям, измеренным в пункте 9.3.