И т.д. и т.п. Ничего интересного? Тогда ответьте на вопрос и проверьте себя - можно ли VHDL-выражение 1 заменить выражением 2 и наоборот: — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

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

И т.д. и т.п. Ничего интересного? Тогда ответьте на вопрос и проверьте себя - можно ли VHDL-выражение 1 заменить выражением 2 и наоборот:

2022-11-27 31
И т.д. и т.п. Ничего интересного? Тогда ответьте на вопрос и проверьте себя - можно ли VHDL-выражение 1 заменить выражением 2 и наоборот: 0.00 из 5.00 0 оценок
Заказать работу

1. y <= x;

2. if x = '0' then y <= '0'; else y <= '1'; end if;

Ответ: Честно говоря, для правильного ответа необходимо знать, какой тип данных у объектов х и у. Дело в том, что если мы имеем дело с типом BIT, то выражения вполне идентичны. А теперь посмотрим, что будет, если объекты х и у имеют тип std_logic? Если Вы уже догадались в чем дело, то Вы вполне владеете основами VHDL (или выше того) и можете пропустить дальнейшие рассуждения.

Итак, в VHDL есть несколько типов данных, два из них мы упомянули выше: bit и std_logic. Их множества значений таково:

· bit: {'0', '1'};

· std_logic: { 'U','X','0','1','Z','W','L','H','- ', }

Как видите, объекты типа std_logic могут принимать девять различных значений, а объекты типа bit только два. Теперь рассмотрим такой код:

· signal x, y: std_logic;

· if x = 'U' then y <= 'U';

· elsif x = 'X' then y <= 'X';

· elsif x = '0' then y <= '0';

· elsif x = '1' then y <= '1';

· elsif x = 'Z' then y <= 'Z';

· elsif x = 'W' then y <= 'W';

· elsif x = 'L' then y <= 'L';

· elsif x = 'H' then y <= 'H';

· elsif x = '- ' then y <= '- ';

· end if;

Вышеприведенный VHDL код теперь идентичен выражению 1 для типа std_logic. Надеюсь теперь понятен смысл задачки, решенной нами. Ну вообще-то они не совсем идентичны, если мы будем синтезировать эти выражения. Тут все будет зависеть от способов оптимизации и прочего, но об этом позже. А сейчас перейдем к более подробному рассмотрению языка VHDL.

КЛАССЫ И ОБЪЕКТЫ

... а вы товарищ из буржуев будете? Или пролетарий?

В отличие от приплюснутого Си в VHDL не предусмотрена возможность создавать новые классы, они уже встроены и их всего три:

Constant - константа.

2. variable - переменная;

3. signal - сигнал;

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

Прежде чем использовать какой либо объект, его нужно объявить членом какого-нибудь класса. Например, объявляются три объекта х, у и gnd:

· constant gnd: bit:='0';

· variable y: bit;

· signal z: bit;

Далее мы можем записать следующий VHDL код:

· y:= gnd;

· z <= y;

Как видите, оператор присваивания для сигналов отличается от аналогичных для объектов других классов. Этот код дан для примера т.к. мы спокойно можем написать z <= gnd; или еще проще - z <= '0'; Без первых двух классов можно обойтись в любом синтезируемом проекте, а без класса signal - вряд ли.

Давайте разберемся. Первое - после объявления константы должно быть её определение (constant const: bit:='1';) Константы могут объявляться в интерфейсах, архитектурах, процессах, процедурах и функциях. Если символов ":=" нет в декларации константы, то константа называется задержанной. Такие константы могут быть в разделе деклараций пакета. Соответствующая полная декларация должна быть в теле пакета. Второе - сигналы объявляются в области объявлений архитектурного тела и видны во всем этом теле или в области объявлений интерфейса, тогда они видны во всех архитектурах, использующих данный интерфейс. Порты по умолчанию являются сигналами. Третье - переменные объявляются в области деклараций процесса, функции или процедуры и видны только там. Правда есть возможность сделать переменную глобальной, - это объявить ее в архитектуре или в интерфейсе следующим VHDL-кодом:

· shared variable y: bit;

Да и еще, переменным можно задавать начальное значение при объявлении:

· variable y: bit:='1';

КОММЕНТАРИИ

... прокомментируйте вашу позицию, а то непонятно...

Комментарии отделяются от основного VHDL-кода двойным штрихом и действуют до конца строки:

· -------------------------------

· -- Пример комментариев --

· -------------------------------

· --

· -- Управление индикаторами сигналов LINK

· nLEDL1 <= GND when nLINKA ='0' else TRI; -- канал А

· nLEDL2 <= GND when nLINKB ='0' else TRI; -- канал В

· --

Вообще старайтесь в комментариях отображать логику работы VHDL кода или назначение тех или иных объектов, а не переводить итак понятный VHDL-код на русский язык.

· -------------------------------

· -- Пример бесполезных

· -- комментариев

· -------------------------------

· --

· x <= '0'; -- Приравниваем сигнал х нулю.

· --

Вот в принципе и все, что можно сказать о комментариях.

ТИПЫ ДАННЫХ

... гуляют тут разные типы, прохода от них нет.

Про типы обычно долго и нудно ведут пояснения и рассуждения. Мы этого делать не будем, просто покажем их объявления в библиотеке std с нашими комментариями:

· type boolean is (false,true); -- логический тип

· type bit is ('0', '1'); -- битовый тип

· type character is (-- символьный тип

nul, soh, stx, etx, eot, enq, ack, bel,
bs, ht, lf, vt, ff, cr, so, si,
dle, dc1, dc2, dc3, dc4, nak, syn, etb,
can, em, sub, esc, fsp, gsp, rsp, usp,

' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',

'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\', ']', '^', '_',

'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', del,

c128, c129, c130, c131, c132, c133, c134, c135,
c136, c137, c138, c139, c140, c141, c142, c143,
c144, c145, c146, c147, c148, c149, c150, c151,
c152, c153, c154, c155, c156, c157, c158, c159,

-- the character code for 160 is there (NBSP),
-- but prints as no char

' ', ' Ў ', ' ў ', ' Ј ', '¤', ' Ґ ', '¦', '§',
' Ё ', '©', ' Є ', '«', '', '­', '®', ' Ї ',
'°', '±', ' І ', ' і ', ' ґ ', 'µ', '¶', '·',
' ё ', '№', ' є ', '»', ' ј ', ' Ѕ ', ' ѕ ', ' ї ',

' А ', ' Б ', ' В ', ' Г ', ' Д ', ' Е ', ' Ж ', ' З ',
' И ', ' Й ', ' К ', ' Л ', ' М ', ' Н ', ' О ', ' П ',
' Р ', ' С ', ' Т ', ' У ', ' Ф ', ' Х ', ' Ц ', ' Ч ',
' Ш ', ' Щ ', ' Ъ ', ' Ы ', ' Ь ', ' Э ', ' Ю ', ' Я ',

' а ', ' б ', ' в ', ' г ', ' д ', ' е ', ' ж ', ' з ',
' и ', ' й ', ' к ', ' л ', ' м ', ' н ', ' о ', ' п ',
' р ', ' с ', ' т ', ' у ', ' ф ', ' х ', ' ц ', ' ч ',
' ш ', ' щ ', ' ъ ', ' ы ', ' ь ', ' э ', ' ю ', ' я ');

· type severity_level is (note, warning, error, failure); -- перечислимый тип

· type integer is range -2147483647 to 2147483647; -- целый тип

· type real is range -1.0E308 to 1.0E308; -- вещественный тип

· type time is range -2147483648 to 2147483647; -- целый тип

По аналогии пользователь может создавать свои типы данных, например, определим перечислимый тип - день недели:

· type day_t is (mon, tue, wen, thu, fri, sat, sun);

· signal day: day_t;

· day <= mon;

Сразу нужно отметить, что приведенный выше перечислимый тип вполне синтезируемый, но на кристалле он будет уже работать в виде ноликов и единичек. Синтезатор просто переведет данное множество значений в цифровое. Какое будет множество? А все зависит от настроек, например такое: {"000", "001",...,"110"}, а может такое: {"0000001", "0000010",...,"1000000"}


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

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

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

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

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



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

0.013 с.