Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба4.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
36.26 Кб
Скачать

6) Как с использованием атрибутов сигналов задать условие фронта для типа bit, для типа std_logic? Чем обуславливается разница этих условий?

Пример

Тип результата

Пояснения

S’QUIET(Т)

Boolean

TRUE, если сигнал S пассивен на интервале Т.

S’TRANSACTION

Bit

Инвертируется S каждый раз, когда S активен (изменяется)

S’STABLE(T)

Boolean

TRUE, если не было событий за интервал Т.

S’DELAYED(T)

Signal

Предыдущее значение S в момент NOW-T

S’ACTIVE

Boolean

TRUE, если сигнал активен

S’LAST_ACTIVE

Time

Время, когда сигнал последний раз был активен

S’EVENT

Boolean

TRUE, если происходит cобытие в S

S’LAST_VALUE

Signal

Значение сигнала перед последним событием в нем

S’LAST_EVENT

Time

Время последнего события в S

Для задания условий фронта можно использовать следующие атрибуты сигналов:

Для типа Bit:

’TRANSACTION

A<=CLK’ TRANSACTION

Для типа std_logic:

’ACTIVE

If CLK’ ACTIVE then

A<=b;

’EVENT

If CLK=1 and CLK’ ACTIVE then

A<=b;

’LAST_value

If clk’last_value /= clk then

A<=b;

’STABLE(T)

If not CLK’STABLE then

A<=b;

7) Поясните на примерах работу функции вычисления resolved для типа std_logic.

8) По каким принципам строится таблица вычисления для монтажного и для типа std_logic?

В языке VHDL функция разрешения используется для определения значения сигнала, имеющего несколько источников.

TYPE std_ulogic IS ( 'U', -- Uninitialized                      'X', -- Forcing Unknown                      '0', -- Forcing 0                      '1', -- Forcing 1                      'Z', -- High Impedance                      'W', -- Weak Unknown                      'L', -- Weak 0                      'H', -- Weak 1                      '-'  -- Don't care                     ); TYPE std_ulogic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic; FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic; SUBTYPE std_logic IS resolved std_ulogic; TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic; 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', 'X' ), -- | 0 |      ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |      ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |      ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |      ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |      ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |      ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' )  -- | - |   ); FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic IS   VARIABLE result : std_ulogic := 'Z'; -- weakest state default BEGIN -- the test for a single driver is essential otherwise the -- loop would return 'X' for a single driver of '-' and that -- would conflict with the value of a single driver unresolved -- signal.   IF (s'LENGTH = 1) THEN RETURN s(s'LOW);     ELSE       FOR i IN s'RANGE LOOP         result := resolution_table(result, s(i));       END LOOP;   END IF;   RETURN result; END resolved;

Подтип std_logic образуется из типа std_ulogic c помощью разрешающей функции resolved, которая также объявлена и определена в библиотеке std_logic_1164. Для разрешения данных типа std_logic, функция resolved использует разрешающую таблицу, VHDL-код которой приведен ниже.

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', 'X' ), -- | 0 |

( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |

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

( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |

( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |

( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |

( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |

);

Данная таблица определяет, какой сигнал получится в итоге "столкновения" двух сигналов типа std_logic. Например, приходят сигналы '0' и 'H', смотрим, что в месте пересечения соответствующих строки и столбца получается '0'. И это не удивительно, если вспомнить, что сигнал '0' - сильный, а 'H' - слабый.