Типы могут иметь подтипы (subtype). Так в библиотеке STD определены следующие подтипы: — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Типы могут иметь подтипы (subtype). Так в библиотеке STD определены следующие подтипы:

2022-11-27 38
Типы могут иметь подтипы (subtype). Так в библиотеке STD определены следующие подтипы: 0.00 из 5.00 0 оценок
Заказать работу

· subtype natural is integer range 0 to integer'high;-- подтип натуральных чисел

· subtype pozitive is integer range 1 to integer'high;-- подтип положительных чисел

Здесь integer'high - наибольшее значение типа integer. В данном случае integer'high = 2147483647 и наоборот integer'low = -2147483647. Но это больше касается атрибутов, о которых мы поговорим позже.

Конечно, не обойтись без массивов и векторов:

· type string is array (positive range <>) of character;

· type bit_vector is array (natural range <>) of bit;

· signal adddr: bit_vector (7 downto 0); -- определили 8- ми битовый вектор

· constant txt: string:= "VHDL"; -- определили строковую константу

Все библиотечные типы std переопределять нет необходимости, они по умолчанию подключаются к проекту. Чтобы уж окончательно разобраться с библиотекой STD, давайте просмотрим ее до конца:

· units -- единицы времени
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;

· subtype delay_length is time range 0 fs to time'high;

· impure function now return delay_length;

· type file_open_kind is (read_mode, write_mode, append_mode); -- вид доступа к открываемому файлу

· type file_open_status is (open_ok, status_error, name_error, mode_error); -- результат открытия файла

· attribute foreign: string; -- атрибуты рассмотрим позже

· attribute syn_enum_encoding: string;

· attribute syn_enum_encoding of character: type is "sequential";

Ну кажется все. Теперь давайте попробуем все это систематизировать:

ПОДРОБНО О STD_LOGIC

... а вот кому набор стандартных ложек.

Давайте посмотрим, хватает ли нам типов для описания логических схем или их моделирования. Ну возьмем хотябы состояние высокого импеданса. Ни один из вышеперечисленных типов такой возможности не дает. Поэтому были введены типы std_ulogic и std_ulogic_vector:
type std_ulogic is (
'U', -- Неинициализированный. Этот сигнал не был задан еще.
'X', -- Сильный неизвестный сигнал.
'0', -- Сильный 0
'1', -- Сильная 1
'Z', -- Высокий импеданс
'W', -- Слабый неизвестный сигнал
'L', -- Слабый 0
'H', -- Слабая 1
'-' -- Не имеет значения какой сигнал
);

type std_ulogic_vector is array (natural range <>) of std_ulogic;

Такие объявления типов находятся в библиотеке std_logic_1164. В большинстве книгах по VHDL на этом все и заканчивается, мы же рассмотрим эти типы поподробнее.

Итак, начнем с конца. Тип std_ulogic_vector есть просто вектор ранее объявленного типа std_ulogic. Это аналогично типу bit_vector. И мы можем спокойно написать следующие выражения:

· signal a: std_ulogic_vector(0 to 7);

· signal b: std_ulogic_vector(7 downto 0);

А теперь перейдем к типу std_ulogic. Как видим это перечислимый тип, состоящий из 9 символов. Первый символ 'U' обозначает неинициализированные данные. Ну представьте себе ОЗУ, после включения питания. Реально конечно там будут либо нолики, либо единички, поэтому данный символ не годится для проектирования синтезируемой логики, но активно используется для моделирования.

Символы 'X', '1' и '0' обозначают сильные сигналы. Что означает сильные сигналы? Давайте посмотрим на рисунки 2 и 3. Рисунок 2 не требует комментариев, а вот рисунок 3 поясним. Конечно, реально в схеме будет или '1' или '0', просто мы точно не знаем значение. И конечно для синтеза логических схем символ 'X' не подходит, но, как и 'U' часто используется при моделировании.

На рисунке 4 показаны пояснения к символу 'Z'. В принципе это простой высокий импеданс. Этот символ подходит как для моделирования, так и для синтеза, но следует отметить, что в ПЛИС такой сигнал можно реализовать только на выходных каскадах микросхемы.

Теперь давайте посмотрим на слабые сигналы (рисунки 5, 6, 7). Думаю понятно, почему они слабые, просто их можно "поддавить". При моделировании используются в основном как нагрузка на открытом коллекторе (или его имитации).

Вот пример на VHDL открытого коллектора с нагрузкой (на рисунке 8 приведена схемная реализация данного кода):

· out <= '0' when in = '1' else 'H';

Причем некоторые ПЛИС содержат такие резисторы в своих выходных каскадах, а некоторые синтезаторы даже подключат их, встретив такой VHDL-код. В крайнем случае, это можно сделать вручную через настройки выходов, правда, сопротивление таких резисторов порядка 50 кОм.

И наконец, загадочный символ '-', который используется только при моделировании и означает, что Вам плевать какое значение имеет сигнал. Автор никогда его не использовал, но может, есть такие ситуации, когда его использование целесообразно. Пример такого использования показан на рисунке 9.

А теперь давайте разберемся, причем здесь std_ulogic, когда мы хотели подробно говорить об std_logic. А все очень просто - буква 'u' в std_ulogic означает unresolved, что означает неразрешенный. Следовательно, std_logic является разрешенным подтипом, что, кстати, следует из его объявления в библиотеке std_logic_1164:

· subtype std_logic is resolved std_ulogic;

И далее объявляется вектор:

· type std_logic_vector is array (natural range <>) of std_logic;

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

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') -- | - |

);

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

Кроме того, в библиотеке std_logic_1164 переопределены операторы and, or, nand, nor, xor, xnor и not для типов std_ulogic и std_logic. И в той же библиотеке определены несколько полезных функций.

А теперь о главном. В отличие от библиотеки STD, библиотеку std_logic_1164 нужно подключать с помощью следующих VHDL инструкций:

· library ieee;

· use ieee.std_logic_1164.all;

· .......

· -- Дальше можно делать объявления std_logic

· signal a, b: std_logic;

· signal c: std_logic_vector(7 downto 0);

· shared variable d: std_logic_vector(7 downto 0):="01010101";

О МАССИВАХ В ЯЗЫКЕ VHDL

... Районы, кварталы, жилые массивы...

В разделах "ТИПЫ ДАННЫХ" и "ПОДРОБНО О STD_LOGIC" мы уже встречались с массивами. Как известно, массив — именованный набор однотипных переменных, доступ к которым осуществляется по индексу. Массивы могут быть одномерными и многомерными, что определяется количеством индексов. При использовании массивов в VHDL, разработчику следует учитывать, что синтезаторы обычно не поддерживают многомерные массивы, за исключением массивов векторов. Массив не может состоять из файлов.


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.022 с.