ВУЗ:
Составители:
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 стали фактическим стандартом. Данные этого типа нередко используют и в случаях, когда сигналы имеют единственный драйвер и даже если при моделировании достаточно воспроизводить меньшее число состояний.
Страницы
- « первая
- ‹ предыдущая
- …
- 42
- 43
- 44
- 45
- 46
- …
- следующая ›
- последняя »