![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Объявления псевдоимен конечных автоматов (Machine Alias Declaration)Содержание книги
Поиск на нашем сайте
Используя процедуру объявления псевдоимени конечного автомата в разделе описания переменных, можно описать псевдоимя для данного, описанного или импортированного из другого файла конечного автомата. После указанной процедуры можно пользоваться псевдоименем конечного автомата наравне с его исходным. Например:
FUNCTION ss_def (clock, reset, count) RETURNS (MACHINE ss_out); VARIABLE ss: MACHINE; BEGIN ss = ss_def (sys_clk, reset,!hold); IF ss == s0 THEN ELSIF ss == s1 THEN END;
Процедура объявления псевдоимени конечного автомата имеет следующие характеристики:
¨ Псевдоним представляет собой символическое имя. За псевдонимом следует символ двоеточия и далее ключевое слово MACHINE. В примере, показанном выше, символическое имя ss является псевдонимом конечного автомата. ¨ Предусмотрена возможность импортирования и экспортирования конечных автоматов между текстовыми файлами проектов, а также другими файлами проектов путем определения входных и выходных портов с использованием ключевых слов MACHINE INPUT или MACHINE OUTPUT в разделе Subdesign. ¨ При импортировании и экспортировании конечных автоматов прототип функции, представляющий файл описания конечного автомата должен определять какие входы и выходы являются конечными автоматами. В примере, показанном выше, ss_out является именем конечного автомата. ¨ Декларация псевдонима конечного автомата заканчивается символом (;).
ÞПорты типов MACHINE INPUT и MACHINE OUTPUT не могут использоваться в файлах проектов верхнего уровня. 3.12. Раздел тела проекта (Logic) Раздел Logic определяет логическое функционирование текстового файла проекта (TDF) и является собственно его телом. Раздел Logic заключается в ключевые слова BEGIN и END. За ключевым словом END следует символ (;), заканчивающий раздел. Если используется оператор Defaults, то он должен предшествовать всем другим операторам в этом разделе. AHDL является параллельным языком. Компилятор анализирует поведенческую модель, описанную в разделе Logic, параллельно. Выражения, осуществляющие множественные присваивания объекту, имеющему тип NODE или переменной, объединяются в соответствии с функцией монтажное ИЛИ. В разделе Logic могут быть многократно использованы следующие операторы и разделы: ¨ Булевские выражения. ¨ Управляющие булевские выражения.
¨ Оператор Case. ¨ Оператор Defaults. ¨ Оператор If Then. ¨ Оператор If Generate ¨ Оператор If Generate ¨ Оператор таблицы истинности ÞРаздел Logic может также содержать оператор Assert. Задание исходных значений (Defaults Statment) Оператор Defaults позволяет определять значения по умолчанию, применяемые в таблицах истинности, а также в операторах If Then и Case. Поскольку активно- высокие сигналы автоматически имеют значения по умолчанию GND, то оператор Default необходим лишь в случае использования активно-низких сигналов.
ÞНе следует путать значения по умолчанию, присваиваемые переменным со значениями по умолчанию, присваиваемыми портам в разделе Subdesign. Следующий пример демонстрирует использование оператора Defaults:
BEGIN DEFAULTS a = VCC; END DEFAULTS;
IF y & z THEN a = GND; % a активный низкий % END IF; END;
Оператор Defaults имеет следующие характеристики: ¨ Значения по умолчанию заключаются в ключевые слова DEFAULTS и END DEFAULTS. Оператор заканчивается символом (;). ¨ Тело оператора Defaults состоит из одного или более логических выражений, присваиваемых константам или переменным. В примере, показанном выше, значение по умолчанию VCC присваивается переменной a. ¨ Каждое выражение заканчивается символом (;). ¨ Оператор Default активизируется в том случае, когда какая-либо переменная, включенная в список оператора Default в каком-либо из операторов, оказывается неопределенной. В примере, показанном выше, переменная a оказывается неопределенной, если y и z имеют значения логического нуля; таким образом активизируется выражение (a = VCC) в операторе Default. При использовании оператора Default необходимо соблюдать следующие правила:
¨ В разделе Logic допускается использовать не более одного оператора Default и кроме того при его использовании он должен располагаться сразу за ключевым словом BEGIN. ¨ Если в операторе Default в отношении одной и той же переменной производятся многократные присваивания, то все присваивания за исключением последней игнорируются. ¨ Оператор Default не может использоваться для присваивания значения X (безразлично) переменным. ¨ Многократные присваивания значений узлу, имеющему тип NODE, объединяются в соответствии с функцией логическое ИЛИ, за исключением того случая, когда значением по умолчанию для этой переменной является VCC. Следующий пример текстового файла проекта (TDF) иллюстрирует значения по умолчанию для двух переменных: a с значением по умолчанию GND и bn с значением по умолчанию VCC:
BEGIN DEFAULTS a = GND; bn = VCC; END DEFAULTS;
IF c1 THEN a = a1; bn = b1n; END IF;
IF c2 THEN a = a2; bn = b2n; END IF; END;
Этот пример эквивалентен следующему выражению: a = c1 & a1 # c2 & a2; bn = (!c1 # b1n) & (!c2 # b2n);
¨ Переменные, имеющие активно низкий уровень и участвующие в многократных присваиваниях, должны иметь значение по умолчанию VCC. В следующем примере reg[].clrn имеет значение по умолчанию VCC:
SUBDESIGN 5bcount ( d[5..1]: INPUT; clk: INPUT; clr: INPUT; sys_reset: INPUT; enable: INPUT; load: INPUT; q[5..1]: OUTPUT; ) VARIABLE reg[5..1]: DFF; BEGIN DEFAULTS reg[].clrn = VCC; END DEFAULTS;
reg[].clk = clk; q[] = reg[];
IF sys_reset # clr THEN reg[].clrn = GND; END IF;
!reg[].prn = (load & d[]) &!clr; !reg[].clrn = load &!d[]; reg[] = reg[] + (0, enable); END; 3.12.2. Булевские выражения (Boolean Equations) Булевские выражения используются в разделе Logic текстового файла проекта на языке AHDL для представления соединений узлов, входных и выходных потоков сигналов через входные и выходные выводы, примитивы, макро- и мегафункции и конечные автоматы. Следующий пример демонстрирует сложное булевское выражение:
a[] = ((c[] & -B"001101") + e[6..1]) # (p, q, r, s, t, v);
Левая часть выражения может быть символическим именем, именем порта или именем группы. Для инвертирования выражения в левой части выражения можно пользоваться операцией NOT (!). Правая часть равенства представлена булевским выражением, вычисляемым в порядке, описанном в разделе “Приоритеты булевских операторов и операций отношения”. Символ эквивалентности (=) используется в булевских выражениях для индикации того, что результат булевского выражения, представленного в правой части, является источником сигнала для символического объекта или группы в левой части. Символ (=) отличается от символа (==), используемого как компаратор. В примере, показанном выше, булевское выражение в правой части равенства вычисляется в соответствии со следующими правилами:
1. Двоичное число B”001101” меняет знак и принимает вид B”110011”. Унарная операция (-) имеет наивысший приоритет. 2. B”110011” объединяется по И с группой c[]. Эта операция имеет второй уровень приоритета, потому что она заключена в круглые скобки. 3. Результат групповой операции, проведенной на втором шаге, прибавляется к группе e[6..1]. 4. Результат, полученный на третьем шаге, объединяется по ИЛИ с группой (p, q, r, s, t, v). Это выражение имеет наименьший уровень приоритета.
Результат операции присваивается группе a[ ].
Для корректного выполнения операций, показанных выше, необходимо, чтобы количество бит в группе в левой части выражения было равно или делилось нацело на число бит в группе в правой части выражения. Биты в левой части выражения отображаются на соответствующие биты в правой части выражения по порядку.
В отношении булевских выражений используются следующие правила:
¨ Множественные присваивания, осуществляемые в отношении переменной объединяются в соответствии с монтажным ИЛИ (#), исключая тот случай, когда значением по умолчанию для этой переменной является VCC. ¨ Узлы в левой части булевского выражения однозначно соответствуют узлам в правой части. ¨ Если значение одиночного узла, VCC или GND присваиваются группе, то значение узла или константы копируется до размерности группы. Например, (a, b) = e эквивалентно a = e и b = e.
¨ Если и левая и правая части выражения представляют собой группы одинакового размера, то каждый член группы, расположенной в правой части, соответствует тому члену группы в левой части, который расположен на той же позиции.Например, (a, b) = (c, d) эквивалентно a = c и b = d.
ÞПри сложении двух групп в правой части булевского выражения с использованием операции (+) можно добавить символ “0” слева каждой группы для знакового расширения. Этот метод может быть использован для получения дополнительного бита сигнала переноса в группе, расположенной в левой части выражения. В следующем примере группы count[7..0] и delta[7..0] представлены в знакорасширенном формате для получения значения бита переноса, обозначенного символическим именем cout в левой части выражения:
(cout, answer[7..0]) = (0, count[7..0]) + (0, delta[7..0])
¨ Если в левой и правой частях булевского выражения расположены группы разных размерностей, то количество бит в группе слева должно быть равно или делиться нацело на количество бит в правой части выражения. Биты в левой части выражения отображаются на биты в правой части выражения по порядку. Следующая запись является корректной: a[4..1] = b[2..1] В данном выражении биты отображаются в следующем порядке: a4 = b2 a3 = b1 a2 = b2 a1 = b1 ¨ Группа узлов или чисел не может быть присвоена одиночному узлу. ¨ Если число в правой части выражения присваивается группе, расположенной в левой части выражения, то число усекается или расширяется путем распространения знака до соответствия размеру группы в левой части. Если при этом происходит усечение значащих битов, то компилятор выдает сообщение об ошибке. Каждый член в правой части выражения присваивается соответствующему члену в левой части выражения по порядку. Например, (a, b) = 1 эквивалентно a = 0; b =1; ¨ Запятые могут использоваться для резервирования места под неупомянутые элементы группы в булевских выражениях Следующий пример демонстрирует использование запятых для резервирования места под отсутствующие элементы группы (a, b, c, d): (a,, c,) = B"1011"; В данном примере элементам a и c присваивается значение “1”. ¨ Каждое выражение заканчивается символом (;).
|
|||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 137; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.200.56 (0.012 с.) |