Проектирование цифровых устройств с помощью языка описания аппаратуры VHDL. Бобрешов А.М - 44 стр.

UptoLike

Составители: 

44
type stdlogic_table is array(std_ulogic, std_ulogic) of std_ulogic;
constant resolution_table : stdlogic_table := (
-- U X 0 1 Z W L H -
( ‘U’, ‘U’, ‘U’, ‘U’, ‘U’, ‘U’, ‘U’, ‘U’, ‘U’), -- |U|
( ‘U’, ‘X’, ‘X’, ‘X’, ‘X’, ‘X’, ‘X’, ‘X’, ‘X’), -- |X|
( ‘U’, ‘X’, ‘0’, ‘X’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’), -- |0|
( ‘U’, ‘X’, ‘X’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’), -- |1|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘Z’), -- |Z|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘W’, ‘W’, ‘W’, ‘W’, ‘W’), -- |W|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘L’, ‘W’, ‘L’, ‘W’, ‘L’), -- |L|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘H’, ‘W’, ‘W’, ‘H’, ‘H’), -- |H|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’) -- |-|
function RESOLVED ( S : std_ulogic_vector) return std_ulogic is
variable RESULT : std_ulogic :='-'; -- значение по умолчанию - самый
слабый сигнал
begin
if (S
length = 1) then return S(S'low);
else -- ПРОСМОТР ВСЕХ ДРАЙВЕРОВ
for I in S
range loop
RESULT := RESOLUTION_TABLE(RESULT, S(I));
end loop
return RESULT;
end if;
end RESOLVED;
subtype STD_LOGIC is RESOLVED std_ulogic;
Функция разрешения RESOLVED устанавливает значение сигнала в
соответствии с "наиболее сильным" значением сигнала среди драйверов.
Например, активный нуль и активная единица определены как самые
сильные и подавляют любые другие сигналы, кроме друг друга. Если
присутствуют два драйвера равной силы, но имеющие различные
значения, результат считается неопределенным.
Использование подтипа std_logic позволяет облегчить решение
многих проблем, возникающих при моделировании шинных соединений.
Этот подтип и порождаемый на его основе тип std_logic_vector стали
фактическим стандартом. Данные этого типа нередко используют и в
случаях, когда сигналы имеют единственный драйвер и даже если при
моделировании достаточно воспроизводить меньшее число состояний.
                                          44


type stdlogic_table is array(std_ulogic, std_ulogic) of std_ulogic;
constant resolution_table : stdlogic_table := (
--     U     X      0      1     Z     W     L     H     -

(     ‘U’,   ‘U’,   ‘U’,   ‘U’,   ‘U’,   ‘U’,   ‘U’,   ‘U’,   ‘U’),   -- |U|
(     ‘U’,   ‘X’,   ‘X’,   ‘X’,   ‘X’,   ‘X’,   ‘X’,   ‘X’,   ‘X’),   -- |X|
(     ‘U’,   ‘X’,   ‘0’,   ‘X’,   ‘0’,   ‘0’,   ‘0’,   ‘0’,   ‘0’),   -- |0|
(     ‘U’,   ‘X’,   ‘X’,   ‘1’,   ‘1’,   ‘1’,   ‘1’,   ‘1’,   ‘1’),   -- |1|
(     ‘U’,   ‘X’,   ‘0’,   ‘1’,   ‘Z’,   ‘W’,   ‘L’,   ‘H’,   ‘Z’),   -- |Z|
(     ‘U’,   ‘X’,   ‘0’,   ‘1’,   ‘W’,   ‘W’,   ‘W’,   ‘W’,   ‘W’),   -- |W|
(     ‘U’,   ‘X’,   ‘0’,   ‘1’,   ‘L’,   ‘W’,   ‘L’,   ‘W’,   ‘L’),   -- |L|
(     ‘U’,   ‘X’,   ‘0’,   ‘1’,   ‘H’,   ‘W’,   ‘W’,   ‘H’,   ‘H’),   -- |H|
(     ‘U’,   ‘X’,   ‘0’,   ‘1’,   ‘Z’,   ‘W’,   ‘L’,   ‘H’,   ‘-’)    -- |-|

function RESOLVED ( S : std_ulogic_vector) return std_ulogic is
variable RESULT : std_ulogic :='-'; -- значение по умолчанию - самый
слабый сигнал
begin
  if (S’length = 1) then return S(S'low);
  else                       -- ПРОСМОТР ВСЕХ ДРАЙВЕРОВ
                 ’
       for I in S range loop
               RESULT := RESOLUTION_TABLE(RESULT, S(I));
       end loop
       return RESULT;
end if;
end RESOLVED;
subtype STD_LOGIC is RESOLVED std_ulogic;

     Функция разрешения RESOLVED устанавливает значение сигнала в
соответствии с "наиболее сильным" значением сигнала среди драйверов.
Например, активный нуль и активная единица определены как самые
сильные и подавляют любые другие сигналы, кроме друг друга. Если
присутствуют два драйвера равной силы, но имеющие различные
значения, результат считается неопределенным.
     Использование подтипа std_logic позволяет облегчить решение
многих проблем, возникающих при моделировании шинных соединений.
Этот подтип и порождаемый на его основе тип std_logic_vector стали
фактическим стандартом. Данные этого типа нередко используют и в
случаях, когда сигналы имеют единственный драйвер и даже если при
моделировании достаточно воспроизводить меньшее число состояний.